diff --git a/.directory b/.directory
deleted file mode 100644
index 2b38e4c30..000000000
--- a/.directory
+++ /dev/null
@@ -1,6 +0,0 @@
-[Dolphin]
-Timestamp=2016,11,16,13,25,9
-Version=3
-
-[Settings]
-HiddenFilesShown=true
diff --git a/.githooks/pre-commit b/.githooks/pre-commit
index 8d4820092..20ef94a42 100755
--- a/.githooks/pre-commit
+++ b/.githooks/pre-commit
@@ -16,6 +16,13 @@
# Check the number and total size of files about to be commited
#===================================================================================================================================
+# Executables, command -v is safe with sh
+BN_EXE=$(command -v basename)
+DU_EXE=$(command -v du)
+GIT_EXE=$(command -v git)
+LS_EXE=$(command -v ls)
+TR_EXE=$(command -v tr)
+
# Check if override is requested
if [ "$GIT_OVERRIDE_LIMITS" = "1" ]; then
echo 'Detected "GIT_OVERRIDE_LIMITS=1", overriding pre-commit check ...'
@@ -30,20 +37,29 @@ SIZETOTALLIMIT=1000000
SIZETOTALWARN=100000
# Number of existing files plus 100
-NUMBERLIMIT=$(git ls-tree --full-tree -r --name-only HEAD | wc -l)
+NUMBERLIMIT=$($GIT_EXE ls-tree --full-tree -r --name-only HEAD | wc -l)
NUMBERLIMIT=$(($NUMBERLIMIT + 100))
NUMBERWARN=100
# Local variables
ERROR=0
-FILEWARN=0
FILEERR=0
+FILEWARN=0
FILESUM=0
+FILESUMERR=0
+FILESUMWARN=0
+EXEERR=0
+TABERR=0
+
+EXELINE=''
+TABLINE=''
+SIZEWARNLINE=''
+SIZEDENYLINE=''
# Check if file is opened in a terminal
if test -t 1; then
# Check if terminal supports color
- NbrOfColors=$(which tput > /dev/null && tput colors)
+ NbrOfColors=$(command -v tput > /dev/null && tput colors)
if test -n "$NbrOfColors" && test "$NbrOfColors" -ge 8; then
NC="$(tput sgr0)"
RED="$(tput setaf 1)"
@@ -53,13 +69,14 @@ if test -t 1; then
fi
# Get a list of all staged files
-CHANGED=$(git diff --staged --name-only)
+CHANGED=$($GIT_EXE diff --staged --name-only)
# Check if any changes are present
if [ -n "$CHANGED" ]; then
# Sort found files by size (-S) in reverse ordering (-r)
- SORTED=$(ls -Shsr "$CHANGED" 2> /dev/null)
- NUMBER=$(git diff --staged --numstat | wc -l)
+ CHANGED=$(echo "$CHANGED" | $TR_EXE '\n' ' ')
+ SORTED=$($LS_EXE --sort=size -r $CHANGED 2> /dev/null)
+ NUMBER=$($GIT_EXE diff --staged --numstat | wc -l)
# Check the number of files
if [ "$NUMBER" -ge "$NUMBERLIMIT" ]; then
@@ -71,11 +88,13 @@ if [ -n "$CHANGED" ]; then
# Loop over all changes
for file in $SORTED; do
+
# Check if path is a file that exists
+ # -f True if FILE exists and is a regular file.
if [ -f "$file" ]; then
# -b, --bytes equivalent to '--apparent-size --block-size=1'
- LINE=$(du -h "$file")
- FILESIZE=$(du -b "$file" | cut -d ' ' -f1) # this is a tab, not a white space
+ LINE=$($LS_EXE -alhs "$file")
+ FILESIZE=$($DU_EXE -b "$file" | cut -d ' ' -f1) # this is a tab, not a white space
# Sum up the total file sizes
FILESUM=$(($FILESUM + $FILESIZE))
@@ -83,39 +102,88 @@ if [ -n "$CHANGED" ]; then
# Check the file size limit
if [ "$FILESIZE" -gt "$SIZESINGLELIMIT" ]; then
# Error header
- if [ "$FILEERR" -eq 0 ]; then
- printf "${RED}The following file(s) exceed the file size limit ($SIZESINGLELIMIT bytes)${NC}\n"
- ERROR=1
- FILEERR=1
- fi
- printf "$LINE\n"
+ ERROR=1
+ FILEERR=1
+ SIZEDENYLINE="$LINE\n$SIZEDENYLINE"
# Check the file size warning
elif [ "$FILESIZE" -gt "$SIZESINGLEWARN" ]; then
- # Error header
- if [ "$FILEWARN" -eq 0 ]; then
- printf "${YELLOW}The following large file(s) are about to be committed (>$SIZESINGLEWARN bytes)${NC}\n"
- FILEWARN=1
- fi
- printf "$LINE\n"
+ # Warning header
+ FILEWARN=1
+ SIZEWARNLINE="$LINE\n$SIZEWARNLINE"
fi
fi
# Check total file size
if [ "$FILESUM" -gt "$SIZETOTALLIMIT" ]; then
# Error header
- printf "${RED}The total file size exceeds the size limit ($SIZETOTALLIMIT bytes)${NC}\n"
ERROR=1
+ FILESUMERR=1
# Check the file size warning
elif [ "$FILESUM" -gt "$SIZETOTALWARN" ]; then
# Error header
- printf "${YELLOW}Total file size to be committed ($FILESUM bytes)${NC}\n"
+ FILESUMWARN=1
+ fi
+
+ # Check if file is executable
+ if [ -x "$file" ]; then
+ if [ "$file" != ".githooks/pre-commit" ] && [ "$file" != "docs/documentation/buildPDF.sh" ] && [ "$file" != "docs/documentation/buildHTML.sh" ] ; then
+ # Error header
+ ERROR=1
+ EXEERR=1
+ LINE=$($LS_EXE -alhs "$file")
+ EXELINE="$LINE\n$EXELINE"
+ fi
+ fi
+
+ # Check for tab characters in specific file endings
+ name=$($BN_EXE -- "$file")
+ ext="${name##*.}"
+ name="${name%.*}"
+ if [ "$ext" = "txt" ] || [ "$ext" = "f90" ] || [ "$ext" = "ini" ]; then
+ # -P, --perl-regexp PATTERNS are Perl regular expressions
+ NbrOfLinesWithTabs=$(grep -P '\t' $file | wc -l)
+ if [ "${NbrOfLinesWithTabs}" -gt 0 ]; then
+ LINE=$($LS_EXE -alhs "$file")
+ ERROR=1
+ TABERR=1
+ TABLINE="$LINE\n$TABLINE"
+ fi
fi
+
done
+ if [ $FILEERR -ne 0 ]; then
+ printf "${RED}The following file(s) exceed the file size limit ($SIZESINGLELIMIT bytes)${NC}\n"
+ printf "$FILEDENYLINE"
+ fi
+
+ if [ $FILEWARN -ne 0 ]; then
+ printf "${YELLOW}The following large file(s) are about to be committed (>$SIZESINGLEWARN bytes)${NC}\n"
+ printf "$FILEWARNLINE"
+ fi
+
+ if [ $FILESUMERR -ne 0 ]; then
+ printf "${RED}The total file size exceeds the size limit ($SIZETOTALLIMIT bytes)${NC}\n"
+ fi
+
+ if [ $FILESUMWARN -ne 0 ]; then
+ printf "${YELLOW}Total file size to be committed ($FILESUM bytes)${NC}\n"
+ fi
+
+ if [ "$EXEERR" -ne 0 ]; then
+ printf "${RED}The following file(s) are executable, which is not allowed. Remove the execute permission via 'chmod -x filename' and try again.${NC}\n"
+ printf "$EXELINE"
+ fi
+
+ if [ "$TABERR" -ne 0 ]; then
+ printf "${RED}The following file(s) contain tabs, which is not allowed. Remove the tab stops and try again.${NC}\n"
+ printf "$TABLINE"
+ fi
+
# Abort if hook encountered any error
if [ "$ERROR" -ne 0 ]; then
echo '------------------------------------------------------------------------------------------------------------------------------------'
- echo 'Commit rejected! You can override this check by passing "GIT_OVERRIDE_LIMITS=1" to git.'
+ echo 'Commit rejected! You can override this check by passing "GIT_OVERRIDE_LIMITS=1" to git, e.g., run "GIT_OVERRIDE_LIMITS=1 git commit".'
exit 1
fi
diff --git a/.github/workflows/cmake-ninja.yml b/.github/workflows/cmake-ninja.yml
index 6c62c052b..e728992ad 100644
--- a/.github/workflows/cmake-ninja.yml
+++ b/.github/workflows/cmake-ninja.yml
@@ -225,6 +225,8 @@ jobs:
DESTDIR=AppDir ninja install
mkdir -p AppDir/usr/share/icons
cp ../docs/logo.png AppDir/usr/share/icons/${PROG}.png
+ mkdir -p AppDir/usr/share/icons/hicolor/64x64/apps/
+ ln -sf ../../../${PROG}.png AppDir/usr/share/icons/hicolor/64x64/apps/
cp ../.github/workflows/piclas.desktop template.desktop
mv template.desktop ${PROG}.desktop
sed -i -e "s/Name=.*/Name=${PROG}/" ${PROG}.desktop
@@ -252,6 +254,8 @@ jobs:
DESTDIR=AppDir ninja install
mkdir -p AppDir/usr/share/icons
cp ../docs/logo.png AppDir/usr/share/icons/${PROG}.png
+ mkdir -p AppDir/usr/share/icons/hicolor/64x64/apps/
+ ln -sf ../../../${PROG}.png AppDir/usr/share/icons/hicolor/64x64/apps/
cp ../.github/workflows/piclas.desktop template.desktop
mv template.desktop ${PROG}.desktop
sed -i -e "s/Name=.*/Name=${PROG}/" ${PROG}.desktop
@@ -278,6 +282,8 @@ jobs:
DESTDIR=AppDir ninja install
mkdir -p AppDir/usr/share/icons
cp ../docs/logo.png AppDir/usr/share/icons/${PROG}.png
+ mkdir -p AppDir/usr/share/icons/hicolor/64x64/apps/
+ ln -sf ../../../${PROG}.png AppDir/usr/share/icons/hicolor/64x64/apps/
cp ../.github/workflows/piclas.desktop template.desktop
mv template.desktop ${PROG}.desktop
sed -i -e "s/Name=.*/Name=${PROG}/" ${PROG}.desktop
@@ -312,7 +318,7 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
- name: piclas-binaries-v3.0.0
+ name: piclas-binaries-v3.1.0
path: artifacts
- name: Upload release asset
diff --git a/.gitignore b/.gitignore
index 647adb275..5930d3be9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,7 @@ doxygen/
# unit test
unitTests/bin/
+
+# gitlab-ci-local temp files and folders
+.gitlab-ci-local/
+reggie/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 677f8802c..654dbc524 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,6 @@
# Load modules on new boltzplatz reggie
before_script:
- ulimit -s unlimited
- - module list
- python3 -V || true
- python2 -V || true
- if [ -n "${DO_CORE_SPLIT}" ]; then
@@ -14,7 +13,8 @@ before_script:
echo " PICLAS_SPLIT_TYPE=PICLAS_COMM_TYPE_NODE. Splitting shared memory domains on sub-node-level with 2 cores per node!";
export PICLAS_SPLIT_TYPE=PICLAS_COMM_TYPE_NODE;
else
- echo "Splitting shared memory domains on node-level! Set variable DO_CORE_SPLIT=T to force core-level OR DO_NODE_SPLIT=T to force sub-node-level shared memory splitting for all regression tests.";
+ echo "Splitting shared memory domains on node-level (default)!";
+ echo "Set variable [DO_CORE_SPLIT=T] to force core-level OR [DO_NODE_SPLIT=T] to force sub-node-level shared memory splitting for all regression tests.";
fi
fi
- if [ -n "${DO_NINJA}" ]; then
@@ -27,6 +27,39 @@ before_script:
export GENERATOR=make;
export NCORES=;
fi
+ - if [ "${CI_JOB_NAME}" == "reggie_download" ]; then
+ if [ ! -d "reggie" ]; then mkdir reggie ; fi ;
+ day=$(date +%d);
+ echo $day > reggie/.day;
+ ls -la reggie;
+ cat reggie/.day;
+ fi
+ - if [ ! -f "reggie/.day" ]; then
+ echo "reggie/.day does not exist! Setting even day number.";
+ day=0 ;
+ else
+ day=$(cat reggie/.day);
+ fi
+ - if [ "$(($day % 2))" == "0" ]; then
+ echo "Even day number ($day). Loading OpenMPI";
+ module purge;
+ module load cmake/3.26.4 gcc/13.2.0 openmpi/4.1.5/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/openmpi/4.1.5 hopr/master/gcc/13.2.0/openmpi/4.1.5/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/openmpi/4.1.5;
+ else
+ echo "Odd day number ($day). Loading MPICH";
+ module purge;
+ module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2;
+ fi
+ - if [ -n "${DO_MPICH}" ]; then
+ echo "DO_MPICH activated. Loading MPICH.";
+ module purge;
+ module load cmake/3.26.4 gcc/13.2.0 mpich/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich/4.1.2 hopr/master/gcc/13.2.0/mpich/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich/4.1.2;
+ fi
+ - if [ -n "${DO_MPICH_DEBUG}" ]; then
+ echo "DO_MPICH_DEBUG activated. Loading MPICH with --with-device=ch3:sock which allows over-subscription without performance loss but cannot be used for shared memory arrays safely!";
+ module purge;
+ module load cmake/3.26.4 gcc/13.2.0 mpich-debug/4.1.2/gcc/13.2.0 hdf5/1.14.0/gcc/13.2.0/mpich-debug/4.1.2 hopr/master/gcc/13.2.0/mpich-debug/4.1.2/hdf5/1.14.0 petsc/3.19.3/gcc/13.2.0/mpich-debug/4.1.2;
+ fi
+ - module list
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Stages
# ----------------------------------------------------------------------------------------------------------------------------------------------------
@@ -57,6 +90,7 @@ stages:
name: "${CI_PIPELINE_ID}-${CI_COMMIT_REF_NAME}-${CI_JOB_NAME}"
expire_in: 1 day
when: on_failure
+
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Default parameters for the testing stage only (reusing the previous template)
.default_param: &default_param
@@ -67,6 +101,7 @@ stages:
key: "reggie"
paths: [reggie]
policy: pull
+
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Defaults for the standard maxwell tests (utilizing "extends" to merge the other "artifacts" options with the specific path)
.defaults: &defaults
@@ -95,6 +130,7 @@ stages:
<<: *defaults
rules:
- if: '$DO_WEEKLY'
+
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Defaults for other maxwell tests with PICLAS_DEBUG_MEMORY=ON
.defaults_maxwell: &defaults_maxwell
@@ -118,14 +154,18 @@ stages:
needs: [build_poisson]
artifacts:
paths:
- - build_poisson_release
- - build_poisson_debug
+ - build_poisson_release_RK3
+ - build_poisson_release_Leapfrog
+ - build_poisson_debug_RK3
+ - build_poisson_debug_Leapfrog
cache:
- *reggie_cache
- key: "${CI_COMMIT_REF_SLUG}-POI"
paths:
- - build_poisson_release
- - build_poisson_debug
+ - build_poisson_release_RK3
+ - build_poisson_release_Leapfrog
+ - build_poisson_debug_RK3
+ - build_poisson_debug_Leapfrog
policy: pull
.defaults_poisson_checkin: &defaults_poisson_checkin
@@ -146,14 +186,18 @@ stages:
needs: [build_poisson_petsc]
artifacts:
paths:
- - build_poisson_petsc_release
- - build_poisson_petsc_debug
+ - build_poisson_petsc_release_RK3
+ - build_poisson_petsc_release_Leapfrog
+ - build_poisson_petsc_debug_RK3
+ - build_poisson_petsc_debug_Leapfrog
cache:
- *reggie_cache
- key: "${CI_COMMIT_REF_SLUG}-POI-PETSC"
paths:
- - build_poisson_petsc_release
- - build_poisson_petsc_debug
+ - build_poisson_petsc_release_RK3
+ - build_poisson_petsc_release_Leapfrog
+ - build_poisson_petsc_debug_RK3
+ - build_poisson_petsc_debug_Leapfrog
policy: pull
.defaults_poisson_petsc_checkin: &defaults_poisson_petsc_checkin
@@ -168,7 +212,7 @@ stages:
- if: '$DO_NIGHTLY'
# ----------------------------------------------------------------------------------------------------------------------------------------------------
-# Defaults for DSMC tests
+# Defaults for DSMC tests (pull only)
.defaults_DSMC: &defaults_DSMC
extends: .default_param
needs: [build_DSMC]
@@ -177,6 +221,7 @@ stages:
- build_DSMC_release
- build_DSMC_debug
- build_DSMC_N1
+ - build_radiation
cache:
- *reggie_cache
- key: "${CI_COMMIT_REF_SLUG}-DSMC"
@@ -184,6 +229,7 @@ stages:
- build_DSMC_release
- build_DSMC_debug
- build_DSMC_N1
+ - build_radiation
policy: pull
.defaults_DSMC_checkin: &defaults_DSMC_checkin
@@ -202,6 +248,27 @@ stages:
rules:
- if: '$DO_WEEKLY'
+# Defaults for DSMC tests (pull-push: required if data from one job is to be accessed by another job afterwards)
+.defaults_DSMC_pull_push: &defaults_DSMC_pull_push
+ extends: .default_param
+ needs: [build_DSMC]
+ artifacts:
+ paths:
+ - build_DSMC_release
+ - build_radiation
+ cache:
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}-DSMC"
+ paths:
+ - build_DSMC_release
+ - build_radiation
+ policy: pull-push
+
+.defaults_DSMC_weekly_pull_push: &defaults_DSMC_weekly_pull_push
+ <<: *defaults_DSMC_pull_push
+ rules:
+ - if: '$DO_WEEKLY'
+
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Stage "build": Build on check-in
# ----------------------------------------------------------------------------------------------------------------------------------------------------
@@ -216,7 +283,13 @@ reggie_download:
policy: push
stage: build
script:
- - git clone git@piclas.boltzplatz.eu:reggie2.0/reggie2.0.git reggie
+ - if [ ! -d "reggie/.git" ]; then
+ if [ -f "reggie/.day" ]; then mv reggie/.day .; fi ;
+ if [ -d "reggie" ]; then rm -rf reggie ; fi ;
+ git clone git@piclas.boltzplatz.eu:reggie2.0/reggie2.0.git reggie ;
+ if [ -f ".day" ]; then mv .day reggie/. ; fi ;
+ fi
+ - if [ -f "reggie/.git/refs/heads/master" ]; then cat reggie/.git/refs/heads/master ; fi
build:
extends: .default_build_param
@@ -224,9 +297,10 @@ build:
artifacts:
paths: [build]
cache:
- key: "${CI_COMMIT_REF_SLUG}"
- paths: [build]
- policy: push
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}"
+ paths: [build]
+ policy: push
stage: build
script:
- mkdir -p build ; cd build
@@ -239,9 +313,10 @@ build_maxwell:
artifacts:
paths: [build_maxwell]
cache:
- key: "${CI_COMMIT_REF_SLUG}-MAX"
- paths: [build_maxwell]
- policy: push
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}-MAX"
+ paths: [build_maxwell]
+ policy: push
stage: build
script:
- mkdir -p build_maxwell ; cd build_maxwell
@@ -252,42 +327,66 @@ build_poisson:
needs: [reggie_download]
artifacts:
paths:
- - build_poisson_release
- - build_poisson_debug
+ - build_poisson_release_RK3
+ - build_poisson_release_Leapfrog
+ - build_poisson_debug_RK3
+ - build_poisson_debug_Leapfrog
cache:
- key: "${CI_COMMIT_REF_SLUG}-POI"
- paths:
- - build_poisson_release
- - build_poisson_debug
- policy: push
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}-POI"
+ paths:
+ - build_poisson_release_RK3
+ - build_poisson_release_Leapfrog
+ - build_poisson_debug_RK3
+ - build_poisson_debug_Leapfrog
+ policy: push
stage: build
script:
- - mkdir -p build_poisson_release ; cd build_poisson_release
+ - mkdir -p build_poisson_release_RK3 ; cd build_poisson_release_RK3
- cmake .. -DCMAKE_BUILD_TYPE=Release -DPICLAS_EQNSYSNAME=poisson -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=RK3 -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
- cd ..
- - mkdir -p build_poisson_debug ; cd build_poisson_debug
+ - mkdir -p build_poisson_debug_RK3 ; cd build_poisson_debug_RK3
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DPICLAS_EQNSYSNAME=poisson -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=RK3 -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
+ - mkdir -p build_poisson_release_Leapfrog ; cd build_poisson_release_Leapfrog
+ - cmake .. -DCMAKE_BUILD_TYPE=Release -DPICLAS_EQNSYSNAME=poisson -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=Leapfrog -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
+ - mkdir -p build_poisson_debug_Leapfrog ; cd build_poisson_debug_Leapfrog
+ - cmake .. -DCMAKE_BUILD_TYPE=Debug -DPICLAS_EQNSYSNAME=poisson -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=Leapfrog -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
build_poisson_petsc:
extends: .default_build_param
needs: [reggie_download]
artifacts:
paths:
- - build_poisson_petsc_release
- - build_poisson_petsc_debug
+ - build_poisson_petsc_release_RK3
+ - build_poisson_petsc_release_Leapfrog
+ - build_poisson_petsc_debug_RK3
+ - build_poisson_petsc_debug_Leapfrog
cache:
- key: "${CI_COMMIT_REF_SLUG}-POI-PETSC"
- paths:
- - build_poisson_petsc_release
- - build_poisson_petsc_debug
- policy: push
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}-POI-PETSC"
+ paths:
+ - build_poisson_petsc_release_RK3
+ - build_poisson_petsc_release_Leapfrog
+ - build_poisson_petsc_debug_RK3
+ - build_poisson_petsc_debug_Leapfrog
+ policy: push
stage: build
script:
- - mkdir -p build_poisson_petsc_release ; cd build_poisson_petsc_release
+ - mkdir -p build_poisson_petsc_release_RK3 ; cd build_poisson_petsc_release_RK3
- cmake .. -DCMAKE_BUILD_TYPE=Release -DPICLAS_EQNSYSNAME=poisson -DPICLAS_PETSC=ON -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=RK3 -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
- cd ..
- - mkdir -p build_poisson_petsc_debug ; cd build_poisson_petsc_debug
+ - mkdir -p build_poisson_petsc_debug_RK3 ; cd build_poisson_petsc_debug_RK3
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DPICLAS_EQNSYSNAME=poisson -DPICLAS_PETSC=ON -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=RK3 -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
+ - mkdir -p build_poisson_petsc_release_Leapfrog ; cd build_poisson_petsc_release_Leapfrog
+ - cmake .. -DCMAKE_BUILD_TYPE=Release -DPICLAS_EQNSYSNAME=poisson -DPICLAS_PETSC=ON -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=Leapfrog -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
+ - mkdir -p build_poisson_petsc_debug_Leapfrog ; cd build_poisson_petsc_debug_Leapfrog
+ - cmake .. -DCMAKE_BUILD_TYPE=Debug -DPICLAS_EQNSYSNAME=poisson -DPICLAS_PETSC=ON -DPICLAS_CODE_ANALYZE=ON -DPICLAS_TIMEDISCMETHOD=Leapfrog -DLIBS_BUILD_HDF5=OFF ; $GENERATOR -j $NCORES all
+ - cd ..
build_DSMC:
extends: .default_build_param
@@ -297,13 +396,16 @@ build_DSMC:
- build_DSMC_release
- build_DSMC_debug
- build_DSMC_N1
+ - build_radiation
cache:
- key: "${CI_COMMIT_REF_SLUG}-DSMC"
- paths:
- - build_DSMC_release
- - build_DSMC_debug
- - build_DSMC_N1
- policy: push
+ - *reggie_cache
+ - key: "${CI_COMMIT_REF_SLUG}-DSMC"
+ paths:
+ - build_DSMC_release
+ - build_DSMC_debug
+ - build_DSMC_N1
+ - build_radiation
+ policy: push
stage: build
script:
- mkdir -p build_DSMC_release ; cd build_DSMC_release
@@ -314,11 +416,18 @@ build_DSMC:
- cd ..
- mkdir -p build_DSMC_N1 ; cd build_DSMC_N1
- cmake .. -DCMAKE_BUILD_TYPE=Release -DPICLAS_TIMEDISCMETHOD=DSMC -DLIBS_BUILD_HDF5=OFF -DPICLAS_POLYNOMIAL_DEGREE=1 ; $GENERATOR -j $NCORES all
+ - if [ -n "${DO_WEEKLY}" ]; then
+ cd .. ;
+ mkdir -p build_radiation ; cd build_radiation ;
+ cmake .. -DLIBS_BUILD_HDF5=OFF -DPICLAS_BUILD_POSTI=ON -DPOSTI_BUILD_SUPERB=ON -DPICLAS_READIN_CONSTANTS=ON -DPICLAS_TIMEDISCMETHOD=Radiation -DPICLAS_INTKIND8=ON ; $GENERATOR -j $NCORES all ;
+ fi
build_hopr:
extends: .default_build_param
artifacts:
paths: [hopr]
+ cache:
+ - *reggie_cache
stage: build
script:
- git clone https://github.com/hopr-framework/hopr.git hopr;
@@ -345,15 +454,17 @@ build_hopr_in_piclas:
- mkdir -p build_hopr_lib ; cd build_hopr_lib
- python ../reggie/reggie.py ../regressioncheck/WEK_HOPR
rules:
+ #- if: '$DO_CORE_SPLIT'
+ #when: never
+ #- if: '$DO_NODE_SPLIT'
+ #when: never
- if: '$DO_WEEKLY'
- - if: '$DO_CORE_SPLIT'
- when: never
- - if: '$DO_NODE_SPLIT'
- when: never
build_no_git:
tags: [withmodules-concurrent]
stage: build
+ cache:
+ <<: *reggie_cache
script:
- echo " Installing branch $CI_COMMIT_REF_NAME without git"
- git clone --depth=1 --branch=$CI_COMMIT_REF_NAME git@piclas.boltzplatz.eu:piclas/piclas.git piclas-no-git
@@ -367,6 +478,8 @@ build_no_git:
build_no_git_libs:
tags: [withmodules-concurrent]
stage: build
+ cache:
+ <<: *reggie_cache
script:
- echo " Installing branch $CI_COMMIT_REF_NAME without git but with external libs"
- git clone --depth=1 --branch=$CI_COMMIT_REF_NAME git@piclas.boltzplatz.eu:piclas/piclas.git piclas-no-git-but-libs
@@ -400,25 +513,25 @@ poisson_release:
<<: *defaults_poisson_checkin
stage: reggie_checkin
script:
- - cd build_poisson_release ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
+ - cd build_poisson_release_RK3 ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
poisson_debug:
<<: *defaults_poisson_checkin
stage: reggie_checkin
script:
- - cd build_poisson_debug ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
+ - cd build_poisson_debug_RK3 ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
poisson_petsc_release:
<<: *defaults_poisson_petsc_checkin
stage: reggie_checkin
script:
- - cd build_poisson_petsc_release ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
+ - cd build_poisson_petsc_release_RK3 ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
poisson_petsc_debug:
<<: *defaults_poisson_petsc_checkin
stage: reggie_checkin
script:
- - cd build_poisson_petsc_debug ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
+ - cd build_poisson_petsc_debug_RK3 ; python ../reggie/reggie.py ../regressioncheck/CHE_poisson -e ./bin/piclas
# ----------------------------------------------------------------------------------------------------------------------------------------------------
@@ -463,10 +576,10 @@ CHE_FPFlow:
# Stage "reggie_DSMC_nightly": Build and run chemistry examples on nightly (check reaction rates in RESERVOIR simulation)
# ----------------------------------------------------------------------------------------------------------------------------------------------------
NIG_Reservoir:
- <<: *defaults_nightly
+ <<: *defaults_DSMC_nightly
stage: reggie_DSMC_nightly
script:
- - cd build/ ; python ../reggie/reggie.py ../regressioncheck/NIG_Reservoir
+ - cd build_DSMC_release/ ; python ../reggie/reggie.py ../regressioncheck/NIG_Reservoir -e bin/piclas
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Stage "reggie_DSMC_nightly": Build and run tracking examples on nightly
@@ -664,36 +777,114 @@ NIG_PIC_Deposition:
script:
- cd build ; python ../reggie/reggie.py ../regressioncheck/NIG_PIC_Deposition/
-# Add surf model (SEE) 13% probabilty test case here
-#feature_SurfaceModel:
-# <<: *defaults_nightly
-# stage: reggie_nightly
-# script:
-# - cd build ; python ../reggie/reggie.py ../regressioncheck/NIG_SurfaceModel/
+# 2023-10-28: Deactivate RK3 for photoionization for now in order to save time when running the reggies. This features is currently only used in combination with Leapfrog anyway.
+# 2024-01-17: Moved to weekly (reactivated 4 + move to weekly, move release_Leapfrog and debug_Leapfrog from nightly to weekly to reduce time further)
+
+# --- weekly
-NIG_Photoionization_release:
+WEK_Photoionization_release_RK3:
<<: *defaults_poisson_nightly
- stage: reggie_nightly
+ stage: reggie_weekly
script:
- - cd build_poisson_release; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ - cd build_poisson_release_RK3; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
-NIG_Photoionization_debug:
+WEK_Photoionization_debug_RK3:
<<: *defaults_poisson_nightly
- stage: reggie_nightly
+ stage: reggie_weekly
script:
- - cd build_poisson_debug; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ - cd build_poisson_debug_RK3; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
-NIG_Photoionization_petsc_release:
+WEK_Photoionization_petsc_release_RK3:
+ <<: *defaults_poisson_petsc_nightly
+ stage: reggie_weekly
+ script:
+ - cd build_poisson_petsc_release_RK3; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
+
+WEK_Photoionization_petsc_debug_RK3:
+ <<: *defaults_poisson_petsc_nightly
+ stage: reggie_weekly
+ script:
+ - cd build_poisson_petsc_debug_RK3; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
+
+WEK_Photoionization_release_Leapfrog:
+ <<: *defaults_poisson_nightly
+ stage: reggie_weekly
+ script:
+ - cd build_poisson_release_Leapfrog; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
+
+WEK_Photoionization_debug_Leapfrog:
+ <<: *defaults_poisson_nightly
+ stage: reggie_weekly
+ script:
+ - cd build_poisson_debug_Leapfrog; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_WEKHTLY'
+
+# --- nightly
+
+NIG_Photoionization_petsc_release_Leapfrog:
<<: *defaults_poisson_petsc_nightly
stage: reggie_nightly
script:
- - cd build_poisson_petsc_release; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ - cd build_poisson_petsc_release_Leapfrog; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_NIGHTLY'
-NIG_Photoionization_petsc_debug:
+NIG_Photoionization_petsc_debug_Leapfrog:
<<: *defaults_poisson_petsc_nightly
stage: reggie_nightly
script:
- - cd build_poisson_petsc_debug; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ - cd build_poisson_petsc_debug_Leapfrog; python ../reggie/reggie.py ../regressioncheck/NIG_Photoionization -e ./bin/piclas
+ rules:
+ - if: '$DO_CORE_SPLIT'
+ when: never
+ - if: '$DO_NODE_SPLIT'
+ when: never
+ - if: '$DO_NIGHTLY'
+
+NIG_Radiation:
+ <<: *defaults_nightly
+ stage: reggie_nightly
+ script:
+ - cd build ; python ../reggie/reggie.py ../regressioncheck/NIG_Radiation
# ----------------------------------------------------------------------------------------------------------------------------------------------------
# Stage "reggie_nightly_build_all": Build and run
@@ -737,15 +928,35 @@ WEK_PIC_poisson:
WEK_DSMC:
<<: *defaults_DSMC_weekly
+ needs: [build_DSMC]
stage: reggie_weekly
script:
- cd build_DSMC_release ; python ../reggie/reggie.py ../regressioncheck/WEK_DSMC -e bin/piclas
+WEK_DSMC_Radiation:
+ <<: *defaults_DSMC_weekly_pull_push
+ needs: [build_DSMC]
+ stage: reggie_weekly
+ script:
+ # Use -s, --save Do not remove output directories buildsXXXX in output_dir after successful run.
+ - cd build_DSMC_release ; python ../reggie/reggie.py ../regressioncheck/WEK_DSMC_Radiation -e bin/piclas -s
+
+WEK_Radiation:
+ <<: *defaults_DSMC_weekly_pull_push
+ needs: [WEK_DSMC_Radiation]
+ stage: reggie_weekly
+ script:
+ - cd build_radiation
+ - cp $(find ../build_DSMC_release/output_dir -name "70degCone2D_Set1_ConeHot_DSMCState_000.00020000000000000.h5" | head -n 1) ../regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/.
+ - cp $(find ../build_DSMC_release/output_dir -name "mesh_70degCone2D_Set1_noWake_mesh.h5" | head -n 1) ../regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/.
+ - rm -rf ../build_DSMC_release/output_dir
+ - python ../reggie/reggie.py -e ./bin/piclas ../regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot
+
WEK_Reservoir:
- <<: *defaults_weekly
+ <<: *defaults_DSMC_weekly
stage: reggie_weekly
script:
- - cd build ; python ../reggie/reggie.py ../regressioncheck/WEK_Reservoir
+ - cd build_DSMC_release ; python ../reggie/reggie.py ../regressioncheck/WEK_Reservoir -e bin/piclas
WEK_FPFlow:
<<: *defaults_weekly
diff --git a/.gitlab/merge_request_templates/Bug.md b/.gitlab/merge_request_templates/Bug.md
index 76e5174b0..804cdb2d1 100644
--- a/.gitlab/merge_request_templates/Bug.md
+++ b/.gitlab/merge_request_templates/Bug.md
@@ -7,3 +7,8 @@ Closes #number
* [ ] Style Guide
* [ ] Maximum of 10 compile warnings via *./tools/test_max_warnings.sh*
* [ ] No large files via *./tools/test_max_file_size.sh*. What is the largest file?
+* [ ] Test the three shared memory modes
+ * [ ] `PICLAS_SHARED_MEMORY = MPI_COMM_TYPE_SHARED` (default) for splitting shared memory domains on the physical node
+ * [ ] `PICLAS_SHARED_MEMORY = OMPI_COMM_TYPE_CORE` for splitting at process level, .i.e, each process yields a logical node
+ * [ ] `PICLAS_SHARED_MEMORY = PICLAS_COMM_TYPE_NODE` for splitting at 2 processes per logical node
+* [ ] Replace `MPI_COMM_WORLD` with `MPI_COMM_PICLAS`
diff --git a/.gitlab/merge_request_templates/Feature.md b/.gitlab/merge_request_templates/Feature.md
index 052bec19c..bd674f1a0 100644
--- a/.gitlab/merge_request_templates/Feature.md
+++ b/.gitlab/merge_request_templates/Feature.md
@@ -1,6 +1,6 @@
-## Related Issue
+## To-Do's
-Closes #number
+* [ ] ToDo
## Merge Request Checklist
@@ -15,6 +15,12 @@ Closes #number
* [ ] Reggie
* [ ] Add small test setup
* [ ] Add entry in REGGIE.md table
- * [ ] Check automatic restart functionality of reggie example via Load Balance (checks correct allocation and deallocation for the test case)
+ * [ ] Check correct allocation and deallocation for the test case
+ * [ ] Either check automatic restart functionality of reggie example via Load Balance
+ * [ ] And compile PICLas with Sanitzer and MPI=OFF as well as MPI=ON and run with one processor to find possible memory leaks
+ * [ ] Test the three shared memory modes
+ * [ ] `PICLAS_SHARED_MEMORY = MPI_COMM_TYPE_SHARED` (default) for splitting shared memory domains on the physical node
+ * [ ] `PICLAS_SHARED_MEMORY = OMPI_COMM_TYPE_CORE` for splitting at process level, .i.e, each process yields a logical node
+ * [ ] `PICLAS_SHARED_MEMORY = PICLAS_COMM_TYPE_NODE` for splitting at 2 processes per logical node
* [ ] New feature description in appropriate documentation (user/developer guide)
-* [ ] Check that no large files were added to the repository
+* [ ] Replace `MPI_COMM_WORLD` with `MPI_COMM_PICLAS`
diff --git a/.gitlab/merge_request_templates/Release.md b/.gitlab/merge_request_templates/Release.md
index c19e91d5e..f0fb282aa 100644
--- a/.gitlab/merge_request_templates/Release.md
+++ b/.gitlab/merge_request_templates/Release.md
@@ -1,6 +1,8 @@
# Merge Request To-Do
-* [ ] Update of version numbers in ./src/globals/globals_vars.f90
+* [ ] Update of version numbers in
+ * [ ] `./src/globals/globals_vars.f90` (`MajorVersion`, `MinorVersion` and `PatchVersion`)
+ * [ ] `.github/workflows/cmake-ninja.yml` (`piclas-binaries-vX.X.X`)
* [ ] Release notes
## Regression Testing
@@ -11,13 +13,13 @@
# Release Notes
-## Release 1.X.X
+## Release 3.X.X
-### Documentation
+### Breaking/Parameter changes
*
-### Reggie
+### Documentation/Tools/Regression testing
*
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 05f637108..795a8f866 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,6 +121,8 @@ IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
MESSAGE(STATUS "Current git commit ${GIT_COMMIT} will be written to ${commit}")
EXECUTE_PROCESS(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/setCommitHash.sh ${commit})
ENDIF()
+# Make sure that the script is executed even though cmake is not explicitly executed after the commit is changed in git
+ADD_CUSTOM_TARGET(UpdateGitCommitHash COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/setCommitHash.sh ${commit})
# =========================================================================
# Check IPO support:
diff --git a/CMakeListsLib.txt b/CMakeListsLib.txt
index 104d3be02..41f876014 100644
--- a/CMakeListsLib.txt
+++ b/CMakeListsLib.txt
@@ -60,22 +60,27 @@ IF(LIBS_USE_MPI)
ENDIF()
MARK_AS_ADVANCED(FORCE MPI_LIBRARY MPI_EXTRA_LIBRARY)
+ REMOVE_DEFINITIONS(-DLIBS_MPICH_FIX_SHM_INTERFACE)
# Detect MPI implementation and version since it changes some MPI definitions
- IF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*CRAY MPICH.*" AND MPI_C_VERSION_MAJOR MATCHES "3")
+ IF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*CRAY MPICH.*" AND MPI_C_VERSION_MAJOR VERSION_EQUAL "3")
SET(LIBS_MPI_NAME "Cray MPICH")
STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)" MPI_C_LIBRARY_VERSION ${MPI_C_LIBRARY_VERSION_STRING})
- ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*MPICH.*" AND MPI_C_VERSION_MAJOR MATCHES "3")
+ ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*MPICH.*" AND MPI_C_VERSION_MAJOR VERSION_GREATER_EQUAL "3")
SET(LIBS_MPI_NAME "MPICH")
STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)" MPI_C_LIBRARY_VERSION ${MPI_C_LIBRARY_VERSION_STRING})
- ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*Open MPI.*" AND MPI_C_VERSION_MAJOR MATCHES "3")
+ # Missing interface added in 4.2, see https://github.com/pmodels/mpich/pull/6727
+ IF(${MPI_C_LIBRARY_VERSION} VERSION_LESS_EQUAL "4.1")
+ ADD_DEFINITIONS(-DLIBS_MPICH_FIX_SHM_INTERFACE=1)
+ ENDIF()
+ ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*Open MPI.*" AND MPI_C_VERSION_MAJOR VERSION_EQUAL "3")
SET(LIBS_MPI_NAME "OpenMPI")
STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" MPI_C_LIBRARY_VERSION ${MPI_C_LIBRARY_VERSION_STRING})
- ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*HPE MPT.*" AND MPI_C_VERSION_MAJOR MATCHES "3")
+ ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*HPE MPT.*" AND MPI_C_VERSION_MAJOR VERSION_EQUAL "3")
SET(LIBS_MPI_NAME "HPE MPT")
STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)" MPI_C_LIBRARY_VERSION ${MPI_C_LIBRARY_VERSION_STRING})
ADD_DEFINITIONS(-DLIBS_MPT=1)
- ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*Intel.*" AND MPI_C_VERSION_MAJOR MATCHES "3")
+ ELSEIF(MPI_C_LIBRARY_VERSION_STRING MATCHES ".*Intel.*" AND MPI_C_VERSION_MAJOR VERSION_EQUAL "3")
SET(LIBS_MPI_NAME "Intel MPI")
STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)" MPI_C_LIBRARY_VERSION ${MPI_C_LIBRARY_VERSION_STRING})
ELSE()
@@ -268,7 +273,7 @@ ENDIF()
# HDF5 1.14 references build directory
# > https://github.com/HDFGroup/hdf5/issues/2422
-IF(${HDF5_VERSION} VERSION_EQUAL "1.14")
+IF(HDF5_VERSION VERSION_EQUAL "1.14")
LIST(FILTER HDF5_INCLUDE_DIR EXCLUDE REGEX "src/H5FDsubfiling")
ENDIF()
@@ -463,7 +468,7 @@ IF(LIBS_BUILD_HOPR)
SET (HOPR_DOWNLOAD ${HOPRDOWNLOAD} CACHE STRING "HOPR Download-link")
MESSAGE (STATUS "HOPR download link: ${HOPRDOWNLOAD}")
MARK_AS_ADVANCED(FORCE HOPR_DOWNLOAD)
-
+
IF (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/bin/hopr")
SET(HOPR_FOUND FALSE)
MESSAGE(STATUS "HOPR executable not found in: ${CMAKE_CURRENT_BINARY_DIR}. HOPR will be built and/or installed.")
@@ -623,7 +628,11 @@ IF(PICLAS_PETSC)
INCLUDE_DIRECTORIES(${PETSC_INC})
LIST(APPEND linkedlibs ${PETSC_LIB})
+
+ # Do not allow PETSc + INT8 as this is not implemented yet
+ IF(PICLAS_INTKIND8)
+ MESSAGE(FATAL_ERROR "PETSc + INT8 is not implemented yet!.")
+ ENDIF()
ELSE()
ADD_DEFINITIONS(-DUSE_PETSC=0)
ENDIF(PICLAS_PETSC)
-
diff --git a/CMakeListsMachine.txt b/CMakeListsMachine.txt
index 1fd41e266..4bac8bc4f 100644
--- a/CMakeListsMachine.txt
+++ b/CMakeListsMachine.txt
@@ -290,7 +290,7 @@ IF (USE_PGO)
SET(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fprofile-use")
SET(CMAKE_Fortran_FLAGS_PROFILE "${CMAKE_Fortran_FLAGS_PROFILE} -fprofile-generate")
ELSE()
- MESSAGE( SEND_ERROR "Profile-guided optimization (PGO) currently only supported for GNU compiler. Either set USE_GPO=OFF or use the GNU compiler." )
+ MESSAGE( SEND_ERROR "Profile-guided optimization (PGO) currently only supported for GNU compiler. Either set USE_PGO=OFF or use the GNU compiler." )
ENDIF()
ENDIF()
diff --git a/REGGIE.md b/REGGIE.md
index 589591f98..cb6963600 100644
--- a/REGGIE.md
+++ b/REGGIE.md
@@ -39,33 +39,36 @@ Regression testing for PIC, solving the complete Maxwell equations with RK4: [Li
Small test cases to check features with DSMC timedisc: [Link to build](regressioncheck/CHE_DSMC/builds.ini).
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :--------------------------------------: | :--------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------: | :--------------------------------: | :---------------------------------------------------------------------------------: |
-| | 1D_Two_Hot_Plates | | 1D problem: heating of cold gas between 2 hot walls | nProcs=1 | Temperature | [Link](regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/readme.md) |
-| | 2D_VTS_Insert_CellLocal | | 2D/Axisymmetric, linear time step scaling: Initial particle insertion by cell_local | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/readme.md) |
-| | 2D_VTS_SurfFlux_Tria | | 2D/Axisymmetric, linear time step scaling: Particle emission through surface flux | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/readme.md) |
-| | BackgroundGas_RegionsDefinition | | Reservoir simulation setting different background gas regions | nProcs=1,6 | DSMCState: NumDens, Temp, Velo | [Link](regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/readme.md) |
-| | BackgroundGas_VHS_MCC | | Reservoir simulation of an ionization using a background gas with DSMC and MCC-based collision probabilities, hard compiled N=1 | nProcs=1 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/BackgroundGas_VHS_MCC/readme.md) |
-| | BC_DiffuseWall_EnergyAccommodation | | Reservoir relaxing towards wall temperature, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_EnergyAccommodation/readme.md) |
-| | BC_DiffuseWall_TempGrad | | Reservoir with a boundary temperature gradient along the x-axis, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/readme.md) |
-| | BC_InnerReflective_8elems | | Inner reflective BC (dielectric surfaces) low error tolerance, runs piclas2vtk after piclas execution and converts PartData to .vtk, hard compiled N=1 | nProcs=1,2,4,8 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_8elems/readme.md) |
-| | BC_InnerReflective_36elems | | Inner reflective BC (dielectric surfaces) high error tolerance, hard compiled N=1 | nProcs=1,2,4,8,12 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_36elems/readme.md) |
-| | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | |
-| | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) |
-| | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) |
-| | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | |
-| | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) |
-| | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) |
-| | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) |
-| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path | nProcs=1 | PartAnalyze, DSMCState | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) |
-| | MCC_SpeciesTimeStep | | Species-specific time step with MCC | nProcs=4 | PartAnalyze: Number density | [Link](regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md) |
-| | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) |
-| | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) |
-| | SurfFlux_Tria_Adaptive_ConstMassflow | | TriaSurfaceFlux with AdaptiveType=3,4, hard compiled N=1 | nProcs=1 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/readme.md) |
-| | SurfFlux_Tria_CurrentMassflow | | Surface flux with an emission current or mass flow at fixed velocity | nProcs=4 | # of particles per time step | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CurrentMassflow/readme.md) |
-| | vMPF_BGG_ChannelFlow_Merge | | Variable weighting factor: Flow through channel, merging particle in large cells after mortar interface | nProcs=1,4 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/readme.md) |
-| | vMPF_BGG_MultiSpec_Merge_TraceSpec | | Variable weighting factor: Multi-species background gas with trace species split and merging | nProcs=1 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/readme.md) |
-| | Symmetry_Initial_Particle_Emission(2) | | Initial Particle Insertion with Symmerty-Order.NE.3, Axisymmetric and RadialWeighting | nProcs=1,4 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :---------------------------------------: | :--------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------: | :----------------------------------------: | :----------------------------------------------------------------------------------: |
+| | 1D_Two_Hot_Plates | | 1D problem: heating of cold gas between 2 hot walls | nProcs=1 | Temperature | [Link](regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/readme.md) |
+| | 2D_VTS_Insert_CellLocal | | 2D/Axisymmetric, linear time step scaling: Initial particle insertion by cell_local | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/readme.md) |
+| | 2D_VTS_SurfFlux_Tria | | 2D/Axisymmetric, linear time step scaling: Particle emission through surface flux | nProcs=2 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/readme.md) |
+| | BackgroundGas_RegionsDefinition | | Reservoir simulation setting different background gas regions | nProcs=1,6 | DSMCState: NumDens, Temp, Velo | [Link](regressioncheck/CHE_DSMC/BackgroundGas_RegionsDefinition/readme.md) |
+| | BackgroundGas_VHS_MCC | | Reservoir simulation of an ionization using a background gas with DSMC and MCC-based collision probabilities, hard compiled N=1 | nProcs=1 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/BackgroundGas_VHS_MCC/readme.md) |
+| | BC_DiffuseWall_EnergyAccommodation | | Reservoir relaxing towards wall temperature, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_EnergyAccommodation/readme.md) |
+| | BC_DiffuseWall_TempGrad | | Reservoir with a boundary temperature gradient along the x-axis, hard compiled N=1 | nProcs=1,4 | Temperature | [Link](regressioncheck/CHE_DSMC/BC_DiffuseWall_TempGrad/readme.md) |
+| | BC_InnerReflective_8elems | | Inner reflective BC (dielectric surfaces) low error tolerance, runs piclas2vtk after piclas execution and converts PartData to .vtk, hard compiled N=1 | nProcs=1,2,4,8 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_8elems/readme.md) |
+| | BC_InnerReflective_36elems | | Inner reflective BC (dielectric surfaces) high error tolerance, hard compiled N=1 | nProcs=1,2,4,8,12 | h5diff: DSMCSurfState | [Link](regressioncheck/CHE_DSMC/BC_InnerReflective_36elems/readme.md) |
+| | BC_PorousBC | | PorousBC as a pump with 2 species, hard compiled N=1 | nProcs=3 | Total # of removed part through BC | |
+| | BC_PorousBC_2DAxi | | PorousBC as a pump with 2 species (axisymmetric, with/without radial weighting), hard compiled N=1 | nProcs=1,2 | Total number density | [Link](regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/readme.md) |
+| | BC_RotationalPeriodic | | Rotationally periodic BC with "worst-case" mesh based on tetrahedrons | nProcs=1,5 | Particle number | [Link](regressioncheck/CHE_DSMC/BC_RotationalPeriodic/readme.md) |
+| | cube | | Collismode=2,3, hard compiled N=1 | nProcs=2 | | |
+| | Rotational_Reference_Frame_Regions | | Rotational reference frame with several regions, switching between stationary and rotating frame | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Regions/readme.md) |
+| | Rotational_Reference_Frame_RotBC | | Rotational reference frame in combination with the rotationally periodic BC | nProcs=1,2,3,4 | Particle trajectory | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_RotBC/readme.md) |
+| | Rotational_Reference_Frame_Temperature | | Rotational reference frame: Many particles, multiple revolutions | nProcs=1,2,4 | Temperature | [Link](regressioncheck/CHE_DSMC/Rotational_Reference_Frame_Temperature/readme.md) |
+| | SurfaceOutput | | Test of CalcSurfaceImpact and CalcBoundaryParticleOutput through defined electron flux | nProcs=1,4 | PartAnalyze, SurfaceAnalyze, DSMCSurfState | [Link](regressioncheck/CHE_DSMC/SurfaceOutput/readme.md) |
+| | DSMC_QualityFactors | | Quality factors: mean/max collision probability, MCS over MFP, mean free path | nProcs=1 | PartAnalyze, DSMCState | [Link](regressioncheck/CHE_DSMC/DSMC_QualityFactors/readme.md) |
+| | MCC_SpeciesTimeStep | | Species-specific time step with MCC | nProcs=4 | PartAnalyze: Number density | [Link](regressioncheck/CHE_DSMC/MCC_SpeciesTimeStep/readme.md) |
+| | SurfFlux_RefMapping_Tracing_TriaTracking | | Surface flux emission (collisionless) with ARM (with all three trackings) and TriaSurfaceFlux (only TriaTracking) | nProcs=1 | PartAnalyze: nPart, TransTemp | [Link](regressioncheck/CHE_DSMC/SurfFlux_RefMapping_Tracing_TriaTracking/readme.md) |
+| | SurfFlux_Tria_Adaptive_ConstPressure | | TriaSurfaceFlux with AdaptiveType=1/2 | nProcs=4 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstMassflow/readme.md) |
+| | SurfFlux_Tria_Adaptive_ConstMassflow | | TriaSurfaceFlux with AdaptiveType=3,4, hard compiled N=1 | nProcs=1 | Integrated mass flux | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_Adaptive_ConstPressure/readme.md) |
+| | SurfFlux_Tria_CurrentMassflow | | Surface flux with an emission current or mass flow at fixed velocity | nProcs=4 | # of particles per time step | [Link](regressioncheck/CHE_DSMC/SurfFlux_Tria_CurrentMassflow/readme.md) |
+| | vMPF_BGG_CellLocalInsertion | | Variable weighting factor: Cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md) |
+| | vMPF_BGG_CellLocalInsertion_LimitLocation | | Variable weighting factor: Limited cell local particle insertion at constant density and constant particle number per cell | nProcs=6 | PartAnalyze: nPart, DSMCState: NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md) |
+| | vMPF_BGG_ChannelFlow_Merge | | Variable weighting factor: Flow through channel, merging particle in large cells after mortar interface | nProcs=1,4 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_ChannelFlow_Merge/readme.md) |
+| | vMPF_BGG_MultiSpec_Merge_TraceSpec | | Variable weighting factor: Multi-species background gas with trace species split and merging | nProcs=1 | PartAnalyze: nPart, NumDens | [Link](regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/readme.md) |
+| | Symmetry_Initial_Particle_Emission(2) | | Initial Particle Insertion with Symmerty-Order.NE.3, Axisymmetric and RadialWeighting | nProcs=1,4 | PartAnalyze: NumDens, Temp | [Link](regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission) |
#### CHE_BGK/FPFlow
@@ -102,6 +105,7 @@ Overview of the test cases performed during the nightly regression testing.
| - | [NIG_poisson](#nig_poisson) | Poisson, Code Analyze=ON, PARTICLES=OFF | Poisson solver without particles | | | |
| - | [NIG_poisson_PETSC](#NIG_poisson_PETSC) | Poisson, PETSC, Code Analyze=ON, PARTICLES=OFF | Poisson solver without particles, with PETSC library | | | |
| - | [NIG_Photoionization](#nig_photoionization) | Poisson, Code Analyze=ON | Photoionization of H2 and secondary electron emission and initial load balance | | | |
+| - | [NIG_Radiation](#nig_radiation) | Radiation | Radiation timedisc, cell-local emission and radiative transfer (2D rot sym and 3D) | | | |
| 1 | NIG_PIC_maxwell_bgfield | maxwell,PIC,RK4 | External Background-field,h5 | nProcs=2 | DG_Solution | |
| 2 | NIG_PIC_poisson_powerdensity | Poisson, Crank-Nicolson | Implicit, CalcTimeAvg | DoRefMapping=T/F, nProcs=2 | Final TimeAvg, h5diff | |
| 3 | feature_emission_gyrotron | maxwell,RK4 | Part-Inflow,TimeDep | N=1,3,6,9,10, nProcs=1,2,10,25, gyro-circle | LineIntegration of nPartIn | |
@@ -126,8 +130,8 @@ Compilation of the code the CODE_ANALYZE option, which includes many different t
| 4 | periodic | | | nProcs= | | [Link](regressioncheck/NIG_code_analyze/periodic/readme.md) |
| 5 | Semicircle | | | nProcs= | | [Link](regressioncheck/NIG_code_analyze/Semicircle/readme.md) |
| 6 | vMPF_SplitAndMerge_Reservoir | DSMC only | Split and Mergin routines | nProcs=1 | Energy and momentum conservation, PartAnalyze: number density, energy and particle numbers | [Link](regressioncheck/NIG_code_analyze/vMPF_SplitAndMerge_Reservoir/readme.md) |
-| 7 | Rotational_Reference_Frame | DSMC only | acceleration by fictitious forces | nProcs=1 | L2 | [Link](regressioncheck/NIG_code_analyze/Rotational_Reference_Frame/readme.md) |
-| 8 | Rotational_Reference_Frame_Wall_Specular | DSMC only | acceleration by fictitious forces, specular reflection at wall | nProcs=1 | L2 | [Link](regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/readme.md) |
+| 7 | Rotational_Reference_Frame | DSMC only | acceleration by fictitious forces | nProcs=1 | L2 | [Link](regressioncheck/NIG_code_analyze/Rotational_Reference_Frame/readme.md) |
+| 8 | Rotational_Reference_Frame_Wall_Specular | DSMC only | acceleration by fictitious forces, specular reflection at wall | nProcs=1 | L2 | [Link](regressioncheck/NIG_code_analyze/Rotational_Reference_Frame_Wall_Specular/readme.md) |
@@ -152,9 +156,11 @@ Convergence tests (spatially by varying either the polynomial degree of the solu
Convergence tests (spatially by varying either the number of mesh cells) for Poisson's equations on conforming, non-conforming (hanging nodes/Mortars) Cartesian meshes with exact Dirichlet boundaries: [Link CMAKE-CONFIG](regressioncheck/NIG_convtest_poisson/builds.ini).
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :---------: | :--------------: | :--------------------------------------: | :-----------: | :-----------: | :---------------------------------------------------------: |
-| 23-x | h_N1_mortar | | h-convergence (N=1, non-conforming mesh) | nProcs=1 | | [Link](regressioncheck/NIG_convtest_poisson/h_N1/readme.md) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :----------------------------------------: | :--------------: | :--------------------------------------: | :-----------: | :-----------: | :-----------------------------------------------------------------------------------: |
+| | Dielectric_slab_FPC | | h-convergence (N=1) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/readme.md) |
+| | Dielectric_sphere_in_sphere_curved_mortar | | h-convergence (N=2) | nProcs=1,2,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/readme.md) |
+| 23-x | h_N1_mortar | | h-convergence (N=1, non-conforming mesh) | nProcs=1,3,7 | analytical solution | [Link](regressioncheck/NIG_convtest_poisson/h_N1/readme.md) |
#### NIG_convtest_t_Maxwell
@@ -195,16 +201,17 @@ Convergence tests (temporally by varying the time step) for integrating the path
Testing more complex DSMC routines: [Link CMAKE-CONFIG](regressioncheck/NIG_DSMC/builds.ini).
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :--------------------------: | :--------------: | :--------------------------------------------: | :----------------: | :---------------------------------------------------------------: | :---------------------------------------------------------------------: |
-| 1 | 2D_VTS_Distribution | Release | | nProcs=1,2,4 | h5diff ElemTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) |
-| 2 | Ambipolar_Diffusion | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) |
-| 3 | Macroscopic_Restart | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) |
-| 4 | RotPeriodicBC | Release | One rot-periodic BC angle | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/RotPeriodicBC/readme.md) |
-| 5 | RotPeriodicBCMulti | Release | Multiple rot-periodic BC angles and interplane | nProcs=1,2,7,15,25 | h5 bounds check PartData, PartAnalyze.csv, and min/max of rot BCs | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMulti/readme.md) |
-| 5 | RotPeriodicBCMultiInterPlane | Release | (same as RotPeriodicBCMulti) | nProcs=1,2,7,15,25 | position of interplanes | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/readme.md) |
-| 6 | VirtualCellMerge | Release | Merge cells for collision operator | nProcs=4 | DSMCState: Number density with absolute value | [Link](regressioncheck/NIG_DSMC/VirtualCellMerge/readme.md) |
-| 7 | VSS_VHS_SelfDiffusion | Release + Debug | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :--------------------------: | :--------------: | :-----------------------------------------------: | :----------------: | :---------------------------------------------------------------: | :---------------------------------------------------------------------: |
+| 1 | 2D_VTS_Distribution | Release | | nProcs=1,2,4 | h5diff ElemTimeStep | [Link](regressioncheck/NIG_DSMC/2D_VTS_Distribution/readme.md) |
+| 2 | Ambipolar_Diffusion | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Ambipolar_Diffusion/readme.md) |
+| 3 | Macroscopic_Restart | Release | | nProcs=6 | PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/Macroscopic_Restart/readme.md) |
+| | MCC_BGG_Elec_XSec_Sampling | Release | Cell-local sampling of electronic excitation rate | nProcs=2,5 | ExcitationData in DSMCState | [Link](regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md) |
+| 4 | RotPeriodicBC | Release | One rot-periodic BC angle | nProcs=1,2,7,15,25 | h5 bounds check PartData and PartAnalyze.csv | [Link](regressioncheck/NIG_DSMC/RotPeriodicBC/readme.md) |
+| 5 | RotPeriodicBCMulti | Release | Multiple rot-periodic BC angles and interplane | nProcs=1,2,7,15,25 | h5 bounds check PartData, PartAnalyze.csv, and min/max of rot BCs | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMulti/readme.md) |
+| 5 | RotPeriodicBCMultiInterPlane | Release | (same as RotPeriodicBCMulti) | nProcs=1,2,7,15,25 | position of interplanes | [Link](regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/readme.md) |
+| 6 | VirtualCellMerge | Release | Merge cells for collision operator | nProcs=4 | DSMCState: Number density with absolute value | [Link](regressioncheck/NIG_DSMC/VirtualCellMerge/readme.md) |
+| 7 | VSS_VHS_SelfDiffusion | Release + Debug | Testing the VHS/VSS collision model | nProcs=6 | Number Density | [Link](regressioncheck/NIG_DSMC/VSS_VHS_SelfDiffusion/readme.md) |
### NIG_Dielectric
@@ -301,19 +308,20 @@ Testing of different SuperB examples (via piclas or standalone superB binary), w
Testing PIC compiled with Leapfrog integration (poisson,Leapfrog), solving Poisson's equation: [Link to build](regressioncheck/NIG_PIC_poisson_Leapfrog/builds.ini).
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :--------------------------------------------: | :---------------: | :--------------------------------------------------------------------------------------: | :---------------: | :------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: |
-| 1 | 2D_innerBC_dielectric_surface_charge | PICLAS_PETSC = ON | Poisson-PIC,Dielectric surface charging,Cartesian geometry, CalcElectricTimeDerivative=T | nProcs=1,2,5,7,12 | DG_Source,DG_SourceExt,ElemData | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/2D_innerBC_dielectric_surface_charge/readme.md) |
-| 2 | parallel_plates | - | Poisson-PIC,CalcCoupledPower,Part-LorentzType=non-relativistic (0), linear potential BC | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates/readme.md) |
-| 3 | parallel_plates_AC | - | Poisson-PIC,CalcCoupledPower | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) |
-| 4 | parallel_plates_fixed_power_input | PICLAS_PETSC = ON | Poisson-PIC,CalcCoupledPower+fixed input power (via potential BC) | nProcs=1,2,4,5 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_fixed_power_input/readme.md) |
-| 5 | parallel_plates_SEE_Dunaevsky2003 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Dunaevsky) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding e- energy on quartz (SiO2) | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Dunaevsky2003/readme.md) |
-| 6 | parallel_plates_SEE-I | - | Poisson-PIC (no deposition), secondary electron emission (SEE-I model) | nProcs=1,2,5,10 | 13 % and 1 % of bombarding ions create secondary electrons | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE-I/readme.md) |
-| 7 | parallel_plates_SEE_Morozov2004 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Morozov) | nProcs=1,2,5,8,10 | 1 and 2 SEE from bombarding electrons on dielectric surfaces | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Morozov2004/parameter.ini) |
-| 8 | parallel_plates_SEE_Phelps1999 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Phelps) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding Ar+ energy on copper | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Phelps1999/parameter.ini) |
-| 9 | Dielectric_sphere_surface_charging | - | Poisson-PIC,Dielectric surface charging | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging/readme.md) |
-| 10 | Dielectric_sphere_surface_charging_mortar | - | Poisson-PIC,Dielectric surface charging,mortars | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_mortar/readme.md) |
-| 11 | Dielectric_sphere_surface_charging_PStateBound | - | Poisson-PIC,Dielectric surface charging,PartStateBoundary | nProcs=1,2 | PartStateBoundary,DSMCSurfState,DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_PStateBound/readme.md) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :--------------------------------------------: | :---------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :---------------: | :------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: |
+| 1 | 2D_innerBC_dielectric_surface_charge | PICLAS_PETSC = ON | Poisson-PIC,Dielectric surface charging,Cartesian geometry, CalcElectricTimeDerivative=T | nProcs=1,2,5,7,12 | DG_Source,DG_SourceExt,ElemData | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/2D_innerBC_dielectric_surface_charge/readme.md) |
+| 4 | MCC_EBeam_SpeciesSpecificTimestep | | 1D-PIC-MCC electron beam, emission current surface flux and species-specific time step for electrons, using ManualTimeStep for MCC | nProcs=4 | Number density (PartAnalyze.csv) | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/readme.md) |
+| 2 | parallel_plates | - | Poisson-PIC,CalcCoupledPower,Part-LorentzType=non-relativistic (0), linear potential BC | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates/readme.md) |
+| 3 | parallel_plates_AC | - | Poisson-PIC,CalcCoupledPower | nProcs=1 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_AC/readme.md) |
+| 4 | parallel_plates_fixed_power_input | PICLAS_PETSC = ON | Poisson-PIC,CalcCoupledPower+fixed input power (via potential BC) | nProcs=1,2,4,5 | PartAnalyzeLeapfrog_ref.csv | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_fixed_power_input/readme.md) |
+| 5 | parallel_plates_SEE_Dunaevsky2003 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Dunaevsky) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding e- energy on quartz (SiO2) | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Dunaevsky2003/readme.md) |
+| 6 | parallel_plates_SEE-I | - | Poisson-PIC (no deposition), secondary electron emission (SEE-I model) | nProcs=1,2,5,10 | 13 % and 1 % of bombarding ions create secondary electrons | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE-I/readme.md) |
+| 7 | parallel_plates_SEE_Morozov2004 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Morozov) | nProcs=1,2,5,8,10 | 1 and 2 SEE from bombarding electrons on dielectric surfaces | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Morozov2004/parameter.ini) |
+| 8 | parallel_plates_SEE_Phelps1999 | - | Poisson-PIC (no deposition), secondary electron emission (SEE-E model by Phelps) | nProcs=1,2,5,8,10 | different SEE yields depending on bombarding Ar+ energy on copper | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/parallel_plates_SEE_Phelps1999/parameter.ini) |
+| 9 | Dielectric_sphere_surface_charging | - | Poisson-PIC,Dielectric surface charging | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging/readme.md) |
+| 10 | Dielectric_sphere_surface_charging_mortar | - | Poisson-PIC,Dielectric surface charging,mortars | nProcs=1,2,3,7,12 | DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_mortar/readme.md) |
+| 11 | Dielectric_sphere_surface_charging_PStateBound | - | Poisson-PIC,Dielectric surface charging,PartStateBoundary | nProcs=1,2 | PartStateBoundary,DSMCSurfState,DG_Source,DG_SourceExt,ElemData,DielectricGlobal | [Link](regressioncheck/NIG_PIC_poisson_Leapfrog/Dielectric_sphere_surface_charging_PStateBound/readme.md) |
### NIG_PIC_poisson_Boris-Leapfrog
@@ -403,43 +411,65 @@ Pure Poisson solver without particles: [Link to build](regressioncheck/NIG_poiss
Test all features of photoionization within the HDG solver (without interpolation and deposition): [Link to build](regressioncheck/NIG_Photoionization/builds.ini).
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: |
-| 1 | volume_emission | | photoionization in the volume (circle and honeycomb) | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionization/volume_emission/readme.md) |
-| 2 | volume_emission_rectangle | | photoionization in the volume (rectangle) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md) |
-| 3 | surface_emission | | secondary electron emission from a surface (circle and honeycomb) | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionization/surface_emission/readme.md) |
-| 4 | surface_emission_rectangle | | secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs=1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md) |
-| 5 | volume_emission_polychromatic | | photoionization in the volume with polychromatic photon spectrum and energy-dependent cross-section data | nProcs=1,2,5,8 | the total number of real electrons in the system with a reference solution and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md) |
-| 6 | volume_emission_vMPF | | photoionization in the volume with vMPF | nProcs=1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: |
+| 1 | surface_emission/ | | Photoionization: Surface Emission via SEE | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionizationsurface_emission/readme.md) |
+| 2 | surface_emission_rectangle/ | | Secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle/readme.md) |
+| 3 | surface_emission_rectangle_ray_trace/ | | Photoionization: Surface Emission via SEE for ray tracing | nProcs= 1,2,5,8,11,25 | RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle_ray_trace/readme.md) |
+| 4 | surface_emission_rectangle_ray_trace_high-order/ | | Photoionization: Surface Emission via SEE for ray tracing with high-order refinement | nProcs= 1,2,5,8,11,25 | RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationsurface_emission_rectangle_ray_trace_high-order/readme.md) |
+| 5 | volume_emission/ | | Photoionization in the volume (circle and honeycomb) | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression | [Link](regressioncheck/NIG_Photoionizationvolume_emission/readme.md) |
+| 6 | volume_emission_polychromatic/ | | Photoionization in the volume with polychromatic photon spectrum and energy-dependent cross-section data | nProcs= 1,2,5,8 | the total number of real electrons in the system with a reference solution and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionizationvolume_emission_polychromatic/readme.md) |
+| 7 | volume_emission_rectangle/ | | Photoionization in the volume (rectangle) | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle/readme.md) |
+| 8 | volume_emission_rectangle_ray_trace_high-order/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order/readme.md) |
+| 9 | volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/ | | Photoionization in the volume (rectangle) for ray tracing with high-order refinement and bilinear tracking | nProcs= 1,2,5,8 | the total number of real electrons in the system with a numerical ref. solution | [Link](regressioncheck/NIG_Photoionizationvolume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md) |
+| 10 | volume_emission_vMPF/ | | Photoionization in the volume with vMPF | nProcs= 1,2,5,8 | the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs | [Link](regressioncheck/NIG_Photoionizationvolume_emission_vMPF/readme.md) |
+
+### NIG_Radiation
+
+Test all features of radiation timedisc (cell-local emission using the radiation solver and radiative transfer using the radiative transfer solver): [Link to build](regressioncheck/NIG_Radiation/builds.ini).
+
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :---------------------------: | :--------------: | :--------------------------------------------------------------------------------------------------------------------------: | :------------: | :--------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------: |
+| 1 | Rad_Emission_SingleCell_N/ | | Radiation: Cell-local emission of atomic nitrogen | nProcs= 1 | emission spectrum of N | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md) |
+| 2 | Rad_Emission_SingleCell_O/ | | Radiation: Cell-local emission of atomic oxygen | nProcs= 1 | emission spectrum of O | [Link](regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md) |
+| 3 | RadTrans_Cylinder_2D / | | Radiation: two-dimensional rotationally symmetric radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md) |
+| 4 | RadTrans_Cylinder_3D / | | Radiation: three-dimensional radiative transfer (semi-infinite cylinder with with a homogeneous medium emitting blackbody radiation) | nProcs= 1,2,3,6 | divergence of the heatflux | [Link](regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md) |
+
## Weekly
Overview of the test cases performed every week.
-| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
-| :-----: | :----------------------------------------: | :-------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :---------------------------: | :-------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: |
-| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) |
-| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) |
-| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) |
-| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) |
-| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) |
-| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) |
-| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) |
-| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) |
-| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) |
-| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation of conditions similar to Titan's atmosphere (18 species, 28 reactions) | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) |
-| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) |
-| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) |
-| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) |
-| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) |
-| ** | 1D_Sod_Shocktube | ** | 1D test case shock tube | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) |
-| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | Pressure gradient driven channel flow with adaptive surface flux boundary conditions | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md) |
-| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) |
-| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) |
-| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
-| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) |
-| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) |
-| 5 | Flow_N2-O2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone with a N2-O2 mixture | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2-O2_70degCone/readme.md) |
-| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
-| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) |
-| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
+| **No.** | **Case** | **CMAKE-CONFIG** | **Feature** | **Execution** | **Comparing** | **Readme** |
+| :-----: | :-----------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------- | :---------------------------: | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------: |
+| 1 | plasma_wave | [PIC-Maxwell](regressioncheck/WEK_PIC_maxwell/builds.ini) | Maxwell-PIC,SF1D, FastPeriodic | nProcs=6, IMEX for ImplicitO4 | W_el LineIntegration (FieldAnalyze.csv) | [Link](regressioncheck/WEK_PIC_maxwell/plasma_wave/readme.md) |
+| ** | 3D_periodic_shape_function | ** | Maxwell-PIC,shape function deposition over periodic sides 3D | nProcs= 1,2,6,10,20 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_shape_function/readme.md) |
+| ** | 3D_periodic_CVWM | ** | Maxwell-PIC,CVWM over periodic sides 3D with 1000 elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM/readme.md) |
+| ** | 3D_periodic_CVWM_split2hex | ** | Maxwell-PIC,CVWM over periodic sides 3D and split2hex grid with 768 hex elements | nProcs= 1,2,6,10,15,20,30 | L2 error and PartAnalyze.csv | [Link](regressioncheck/WEK_PIC_maxwell/3D_periodic_CVWM_split2hex/readme.md) |
+| 2 | HEMPT-90deg-symmetry | [PIC-HDG](regressioncheck/WEK_PIC_poisson/builds.ini) | create mesh (hopr) and external magnetic field (superB) and use both in simulation | nProcs=1,10,20 | | [Link](regressioncheck/WEK_PIC_poisson/HEMPT-90deg-symmetry/readme.md) |
+| 3 | CHEM_EQUI_diss_CH4 | [Reservoir](regressioncheck/WEK_Reservoir/builds.ini) | Relaxation into equilibrium with dissociation and recombination of CH4 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4/readme.md) |
+| ** | CHEM_EQUI_exch_CH3-H | ** | Relaxation into equilibrium with exchange/radical reaction of CH3+H <-> CH2+H2 | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_exch_CH3-H/readme.md) |
+| ** | CHEM_EQUI_ionization_H | ** | Relaxation into equilibrium with ionization and recombination of H | nProcs=1 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_ionization_H/readme.md) |
+| ** | CHEM_EQUI_diss_CH4_2DAxi_RadWeight | ** | Analogous to CHEM_EQUI_diss_CH4 with 2D axisymmetric mesh with radial weighting | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/readme.md) |
+| ** | CHEM_EQUI_Titan_Chemistry | ** | Reservoir simulation of conditions similar to Titan's atmosphere (18 species, 28 reactions) | nProcs=2 | PartAnalyze_ref.csv | [Link](regressioncheck/WEK_Reservoir/CHEM_EQUI_Titan_Chemistry/readme.md) |
+| ** | MCC_MultiSpec_XSec | ** | Multi-species reservoir: Collision rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec/readme.md) |
+| ** | MCC_MultiSpec_XSec_TCE_QK_Chem | ** | Multi-species reservoir: QK ionization and TCE dissociation | nProcs=2 | | [Link](regressioncheck/WEK_Reservoir/MCC_MultiSpec_XSec_Chem/readme.md) |
+| ** | BGG_MultiSpec_XSec_Elec | ** | Background gas reservoir with VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/BGG_MultiSpec_XSec_Elec/readme.md) |
+| ** | MCC_N2_XSec_Elec | ** | Regular reservoir with MCC/VHS: Electronic excitation rates for neutral-electrons through cross-section data | nProcs=1 | | [Link](regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md) |
+| ** | 1D_Sod_Shocktube | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 1D test case shock tube | nProcs=6 | DSMCState | [Link](regressioncheck/WEK_Reservoir/1D_Sod_Shocktube/readme.md) |
+| 4 | 2DAxi_ChannelFlow_ConstPressure_TruncAverage | ** | 2D axisymmetric: Pressure gradient driven pipe flow with adaptive surface flux, using a truncated running average | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md) |
+| 4 | ChannelFlow_AdaptiveBoundary_ConstMassflow | ** | Constant massflow driven channel flow with adaptive surface flux | nProcs=6 | PartAnalyze: Average pressure and mass flow rate at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/readme.md) |
+| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a fixed average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md) |
+| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation | ** | Pressure gradient driven channel flow with adaptive surface flux, using a relaxation factor for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md) |
+| 4 | ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage | ** | Pressure gradient driven channel flow with adaptive surface flux, using a truncated running average for the sampling | nProcs=6 | PartAnalyze: Average pressure at the adaptive surface flux BCs | [Link](regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md) |
+| ** | Flow_Argon_Cylinder_Curved | ** | Hypersonic Argon flow around a cylinder (pseudo 2D) with DSMC on a curved mesh | nProcs=2 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/readme.md) |
+| ** | Flow_Argon_Cylinder_LinearMesh | ** | Hypersonic Argon flow around a cylinder (2D) with DSMC on a linear mesh | nProcs=4 | | [Link](regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/readme.md) |
+| ** | Flow_N2_70degCone | ** | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact and adaptive wall temperature | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
+| ** | fully_periodic_3D | ** | Periodic boundary conditions in all three directions | nProcs=10,20,30 | Check whether particles end up outside of the domain | [Link](regressioncheck/WEK_DSMC/fully_periodic_3D/readme.md) |
+| ** | Surface_Sticking_Coefficient | ** | Channel flow with a sticking coefficient model | nProcs=5 | Surface sampling | [Link](regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/readme.md) |
+| 5 | Flow_N2_70degCone | [BGK](regressioncheck/WEK_BGKFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
+| ** | MultiSpec_Supersonic_Couette_Ar-He | ** | Supersonic Couette flow with an Ar-He mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_Ar-He/readme.md) |
+| ** | MultiSpec_Supersonic_Couette_CO2-N2 | ** | Supersonic Couette flow with a CO2-N2 mixture | nProcs=5 | Temperature | [Link](regressioncheck/WEK_DSMC/MultiSpec_Supersonic_Couette_CO2-N2/readme.md) |
+| 6 | Flow_N2_70degCone | [FP](regressioncheck/WEK_FPFlow/builds.ini) | 2D axisymmetric 70 degree cone | nProcs=6 | Surface Sampling, includes CalcSurfaceImpact | [Link](regressioncheck/WEK_DSMC/Flow_N2_70degCone/readme.md) |
+| 7 | Flow_N2-N_70degConeHot | [DSMC](regressioncheck/WEK_DSMC/builds.ini) | 2D axisymmetric 70 degree cone (hotter and with N to get some radiation in the next step) | nProcs=6 | Surface Sampling | [Link](regressioncheck/WEK_DSMC/Flow_N2-N_70degConeHot/readme.md) |
+| ** | Flow_N2-N_70degConeHot | [Radiation](regressioncheck/WEK_Radiation/builds.ini) | using previously simulated WEK_DSMC/Flow_N2_70degCone results to check radiation tool chain (write out DSMC results, readin those results, radiation solver, radiative transfer, piclas2vtk) | nProcs=6 | Surface heat flux | [Link](regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md) |
diff --git a/docs/documentation/buildHTML.sh b/docs/documentation/buildHTML.sh
index 05d0a4359..e5c94b2bb 100755
--- a/docs/documentation/buildHTML.sh
+++ b/docs/documentation/buildHTML.sh
@@ -1,2 +1,15 @@
-# Compile html files
-python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
+#!/bin/bash
+
+# Check prerequisites
+python3 -c "import sphinx"
+
+# $? Stores the exit value of the last command that was executed.
+if [[ $? -eq 0 ]]; then
+ # Compile html files
+ python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
+
+ # Output info where the html file is
+ echo -e "\nThe HTML files have been created. Run, e.g., 'firefox _build/html/index.html &' to view the documentation."
+else
+ echo -e "\nError: Could not build the documentation due to import errors in python! Fix them and run the script again."
+fi
diff --git a/docs/documentation/buildPDF.sh b/docs/documentation/buildPDF.sh
index 83fa5e77b..302088238 100755
--- a/docs/documentation/buildPDF.sh
+++ b/docs/documentation/buildPDF.sh
@@ -1,8 +1,21 @@
-# Compile latex files
-python3 -m sphinx -b latex -D language=en -d _build/doctrees . _build/latex
+#!/bin/bash
-# Switch to latex source files
-cd _build/latex
+# Check prerequisites
+python3 -c "import sphinx"
-# Compile pdf file(s)
-latexmk -r latexmkrc -pdf -f -dvi- -ps- -jobname=piclas -interaction=nonstopmode
+# $? Stores the exit value of the last command that was executed.
+if [[ $? -eq 0 ]]; then
+ # Compile latex files
+ python3 -m sphinx -b latex -D language=en -d _build/doctrees . _build/latex
+
+ # Switch to latex source files
+ cd _build/latex
+
+ # Compile pdf file(s)
+ latexmk -r latexmkrc -pdf -f -dvi- -ps- -jobname=piclas -interaction=nonstopmode
+
+ # Output info where the pdf file is
+ echo -e "\n The PDF has been created under ./_build/latex/piclas.pdf"
+else
+ echo -e "\nError: Could not build the documentation due to import errors in python! Fix them and run the script again."
+fi
diff --git a/docs/documentation/conf.py b/docs/documentation/conf.py
index 68f20396f..f42592400 100644
--- a/docs/documentation/conf.py
+++ b/docs/documentation/conf.py
@@ -40,9 +40,13 @@
'sphinx.ext.autosectionlabel',
'sphinxcontrib.bibtex',
'sphinx_rtd_theme',
+ 'sphinx_rtd_size',
'myst_parser'
]
+# Set width
+sphinx_rtd_size_width='98%'
+
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
diff --git a/docs/documentation/developerguide/bestpractices.md b/docs/documentation/developerguide/bestpractices.md
new file mode 100644
index 000000000..1cef40209
--- /dev/null
+++ b/docs/documentation/developerguide/bestpractices.md
@@ -0,0 +1,134 @@
+# Best Practices
+
+The following collection of best practice guidelines are intended to prevent bugs and improve the computational performance.
+
+## MPI
+
+The general rules can be summarized as follows:
+
+1. The first rule of MPI is: You do not send subsets of arrays, only complete continuous data ranges.
+2. The second rule of MPI is: You do not send subsets of arrays, only complete continuous data ranges.
+3. Third rule of MPI: Someone sends non-continuous data, the simulation is over.
+4. Fourth rule: Only two processors to a single send-receive message.
+5. Fifth rule: Only one processor access (read or write) to a shared memory region.
+
+Please also read the general implementation information and, e.g., mappings used for elements, sides and nodes in the chapter
+{ref}`developerguide/mpi:MPI Implementation`.
+
+## Shared Memory Windows
+
+The following principles should always be considered when using shared memory windows
+
+- Only the node root process initializes the shared memory array
+
+ ! Allocate the shared memory window
+ CALL Allocate_Shared((/nUniqueGlobalNodes/), NodeVolume_Shared_Win, NodeVolume_Shared)
+
+ ! Lock the window
+ CALL MPI_WIN_LOCK_ALL(0, NodeVolume_Shared_Win, IERROR)
+
+ ! Set pointer
+ NodeVolume => NodeVolume_Shared
+
+ ! Only CN root nullifies
+ IF (myComputeNodeRank.EQ.0) NodeVolume = 0.0
+
+ ! This sync/barrier is required as it cannot be guaranteed that the zeros have been
+ ! written to memory by the time the MPI_REDUCE is executed (see MPI specification).
+ ! Until the Sync is complete, the status is undefined, i.e., old or new value or utter
+ ! nonsense.
+ CALL BARRIER_AND_SYNC(NodeVolume_Shared_Win, MPI_COMM_SHARED)
+
+- When all processes on a node write exclusively to their separate region in the shared memory array, using designated elements IDs which are
+ assigned to a single process only
+
+ ! Get offset
+ ! J_N is only built for local DG elements. Therefore, array is only filled for elements on the same compute node
+ offsetElemCNProc = offsetElem - offsetComputeNodeElem
+
+ ! Allocate shared array
+ CALL Allocate_Shared((/nComputeNodeElems/),ElemVolume_Shared_Win,ElemVolume_Shared)
+ ...
+
+ ! Calculate element volumes
+ DO iElem = 1,nElems
+ CNElemID=iElem+offsetElemCNProc
+ !--- Calculate and save volume of element iElem
+ J_N(1,0:PP_N,0:PP_N,0:PP_N)=1./sJ(:,:,:,iElem)
+ DO k=0,PP_N; DO j=0,PP_N; DO i=0,PP_N
+ ElemVolume_Shared(CNElemID) = ElemVolume_Shared(CNElemID) + wGP(i)*wGP(j)*wGP(k)*J_N(1,i,j,k)
+ END DO; END DO; END DO
+ END DO
+
+- When all processes on a node write to all regions in the shared memory array, an additional local array is required, which has to be reduced to the shared array at the end
+
+ CALL Allocate_Shared((/nSpecies,4,nSurfSample,nSurfSample,nComputeNodeSurfTotalSides/),SampWallImpactEnergy_Shared_Win,SampWallImpactEnergy_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,SampWallImpactEnergy_Shared_Win,IERROR)
+ IF (myComputeNodeRank.EQ.0) SampWallImpactEnergy_Shared = 0.
+ CALL BARRIER_AND_SYNC(SampWallImpactEnergy_Shared_Win,MPI_COMM_SHARED)
+ ALLOCATE(SampWallImpactEnergy(1:nSpecies,1:4,1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides))
+ SampWallImpactEnergy = 0.
+ SampWallImpactEnergy(SpecID,1,SubP,SubQ,SurfSideID) = SampWallImpactEnergy(SpecID,1,SubP,SubQ,SurfSideID) + ETrans * MPF
+ CALL MPI_REDUCE(SampWallImpactEnergy,SampWallImpactEnergy_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR)
+ CALL BARRIER_AND_SYNC(SampWallImpactEnergy_Shared_Win,MPI_COMM_SHARED)
+
+- When possible, never read from the shared memory array in a round robin manner, as shown in this [commit [eaff78c]](https://github.com/piclas-framework/piclas/commit/eaff78c158884e0bab05c555bf72b4ff6198e42f).
+ Split the work and then use `MPI_REDUCE` or `MPI_ALLREDUCE`.
+ Instead of
+
+ CNVolume = SUM(ElemVolume_Shared(:))
+
+ where all processes traverse over the same memory addresses, which slows down the computation, use
+
+ offsetElemCNProc = offsetElem - offsetComputeNodeElem
+ CNVolume = SUM(ElemVolume_Shared(offsetElemCNProc+1:offsetElemCNProc+nElems))
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,CNVolume,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_SHARED,iError)
+
+ to split the operations and use MPI to distribute the information among the processes.
+
+- Atomic MPI operations on shared memory
+ - Example 1: [Store the min/max extent when building the CN FIBGM [6350cc2]](https://github.com/piclas-framework/piclas/commit/6350cc2575d15c7ceb804bc8d839ca5ef2b33dbb?diff=split#diff-aa2cf11ef2c11ce88cdefcf02fe06b643771c968021311ea356c428bbb20d041L1214)
+ - Example 2: [Use atomic MPI operations to read/write from contested shared memory [772c371]](https://github.com/piclas-framework/piclas/commit/772c3711bbb0c935659b2d08fccd18c80e6b72dc)
+ - The main idea is to access and change parts of a shared array with multiple processes to, e.g., sum up numbers from different
+ processes and guarantee that in the end the sum is correct without having a predefined order in which the numbers are added to the
+ entry in the shared array.
+
+ In the example in [772c371], get the memory window while bypassing local caches
+
+ CALL MPI_FETCH_AND_OP(ElemDone,ElemDone,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_NO_OP,ElemInfo_Shared_Win,iError)
+
+ Flush only performs the pending operations (getting the value)
+
+ CALL MPI_WIN_FLUSH(0,ElemInfo_Shared_Win,iError)
+
+ Using `MPI_REPLACE` makes sure that the correct value is written in the end by one of the processes in an undefined order.
+
+ MPI_FETCH_AND_OP(haloChange,dummyInt,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_REPLACE,ElemInfo_Shared_Win,iError)
+ CALL MPI_WIN_FLUSH(0,ElemInfo_Shared_Win,iError)
+
+## Hawk
+
+Before running a simulation, check out the HLRS Wiki pages [Batch System PBSPro (Hawk)](https://kb.hlrs.de/platforms/index.php/Batch_System_PBSPro_(Hawk)).
+
+### Striping
+Always use user-defined striping in the simulation case folders that are on the work spaces as the default stiping setting (dynamic
+striping) has caused massive problems in the past. Add the following code to your submit script
+
+ # Set fixed striping to avoid problems with the progressive Lustre file layout
+ # - Region 1 [0, 1GiB): Stripe-Size=1 MiB, Stripe-Count=1
+ #lfs setstripe -c 1 -S 1M $PBS_O_WORKDIR
+ # - Region 2 [1GiB, 4GiB): Stripe-Size=1 MiB, Stripe-Count=4
+ #lfs setstripe -c 4 -S 1M $PBS_O_WORKDIR
+ # - Region 3 [4 GiB, EOF): Stripe-Size=4 MiB, Stripe-Count=8
+ lfs setstripe -c 8 -S 4M $PBS_O_WORKDIR
+
+Note that the correct line should be commented in and the other lines should be commented out, all depending on the size of your
+output files.
+Also consider the stripe settings for large mesh files just to be sure.
+
+### Species-zero bug
+It has repeatedly occurred that particles with species index zero have been produced on hawk.
+This might be due to the output to .h5, which could reflect the previous section regarding the striping settings, but could also lie
+deeper the Lustre file system itself.
+If this problem occurs, the corrupted particles must be removed from the .h5 file by hand if a restart from such a corrupted file is
+performed in order to prevent piclas from crashing.
diff --git a/docs/documentation/developerguide/code_extension.md b/docs/documentation/developerguide/code_extension.md
index 9424271d9..b2de53fa1 100644
--- a/docs/documentation/developerguide/code_extension.md
+++ b/docs/documentation/developerguide/code_extension.md
@@ -34,4 +34,43 @@ Finally, the `WriteSurfSampleToHDF5` routine writes the prepared `MacroSurfaceVa
IF (ANY(PartBound%SurfaceModel.EQ.1)) CALL AddVarName(Str2DVarNames,nVar2D_Total,nVarCount,'Sticking_Coefficient')
-The order of the variable names and their position in the `MacroSurfaceVal` array has to be the same. Thus, make sure to place the `AddVarName` call at the same position, where you placed the calculation and writing into the `MacroSurfaceVal` array, otherwise the names and values will be mixed up.
\ No newline at end of file
+The order of the variable names and their position in the `MacroSurfaceVal` array has to be the same. Thus, make sure to place the `AddVarName` call at the same position, where you placed the calculation and writing into the `MacroSurfaceVal` array, otherwise the names and values will be mixed up.
+
+## Arrays with size of PDM%maxParticleNumber
+
+If an array is to store particle information, it is usually allocated with
+
+ ALLOCATE(ParticleInformation(1:PDM%maxParticleNumber))
+
+But since PDM%maxParticleNumber is dynamic, this behavior must also be captured by this array. Therefore its size has to be changed in the routines `IncreaseMaxParticleNumber` and `ReduceMaxParticleNumber` in `src/particles/particle_tools.f90`.
+
+ IF(ALLOCATED(ParticleInformation)) CALL ChangeSizeArray(ParticleInformation,PDM%maxParticleNumber,NewSize, Default)
+
+Default is an optional parameter if the new array memory is to be initialized with a specific value. The same must be done for TYPES of size PDM%maxParticleNumber. Please check both routines to see how to do it.
+
+## Insert new particles
+
+To add new particles, first create a new particle ID using the GetNextFreePosition function contained in `src/particles/particle_tools.f90`
+
+ NewParticleID = GetNextFreePosition()
+
+This directly increments the variable PDM%CurrentNextFreePosition by 1 and if necessary adjusts PDM%ParticleVecLength by 1. If this is not desired, it is possible to pass an offset. Then the two variables will not be incremented, which must be done later by the developer. This can happen if the particle generation process is divided into several functions, where each function contains a loop over all new particles (e.g. `src/particles/emission/particle_emission.f90`).
+
+ DO iPart=1,nPart
+ NewParticleID = GetNextFreePosition(iPart)
+ END DO
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + nPart
+ PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0))
+
+For the new particle to become a valid particle, the inside flag must be set to true and various other arrays must be filled with meaningful data. See SUBROUTINE CreateParticle in `src/particles/particle_operations.f90`. A basic example of the most important variables is given below:
+
+ newParticleID = GetNextFreePosition()
+ PDM%ParticleInside(newParticleID) = .TRUE.
+ PDM%FracPush(newParticleID) = .FALSE.
+ PDM%IsNewPart(newParticleID) = .TRUE.
+ PEM%GlobalElemID(newParticleID) = GlobElemID
+ PEM%LastGlobalElemID(newParticleID) = GlobElemID
+ PartSpecies(newParticleID) = SpecID
+ LastPartPos(1:3,newParticleID) = Pos(1:3)
+ PartState(1:3,newParticleID) = Pos(1:3)
+ PartState(4:6,newParticleID) = Velocity(1:3)
\ No newline at end of file
diff --git a/docs/documentation/developerguide/index.md b/docs/documentation/developerguide/index.md
index 234ef9778..ffa8101b6 100644
--- a/docs/documentation/developerguide/index.md
+++ b/docs/documentation/developerguide/index.md
@@ -12,6 +12,7 @@ numbered:
git_workflow.md
building_guide.md
styleguide.md
+bestpractices.md
troubleshooting.md
code_extension.md
functions_and_subroutines.md
diff --git a/docs/documentation/developerguide/mpi.md b/docs/documentation/developerguide/mpi.md
index bd8143130..bbbda3e3d 100644
--- a/docs/documentation/developerguide/mpi.md
+++ b/docs/documentation/developerguide/mpi.md
@@ -1,13 +1,9 @@
# MPI Implementation
This chapter describes how PICLas subroutines and functions are parallelized.
-
+Please also read the general rules for using {ref}`developerguide/bestpractices:MPI`.
## General Remarks: Things to consider
-In case any new communicator (e.g. SurfCOMM%COMM) is built during init or anywhere else with
-`CALL MPI_COMM_SPLIT(NEWCOMMUNICATOR,iERROR)` or such, it is necessary to finalize it with `CALL MPI_COMM_FREE(NEWCOMMUNICATOR,iERROR)`.
-
-Else, load balancing will produce undefined errors that are almost impossible to find.
Debug MPI
@@ -121,3 +117,65 @@ Additionally to conventional sides, mappings for the sides that belong to a boun
PEM%GlobalElemID(iPart) ! Global element ID
PEM%CNElemID(iPart) ! Compute-node local element ID (GlobalElem2CNTotalElem(PEM%GlobalElemID(iPart)))
PEM%LocalElemID(iPart) ! Core local element ID (PEM%GlobalElemID(iPart) - offsetElem)
+
+## Custom communicators
+
+To limit the number of communicating processors, feature specific communicators can be built. In the following, an example is given
+for a communicator, which only contains processors with a local surface side (part of the `InitParticleBoundarySurfSides` routine). First, a global variable `SurfCOMM`, which is based on the `tMPIGROUP` type, is required:
+```
+TYPE tMPIGROUP
+ INTEGER :: UNICATOR=MPI_COMM_NULL !< MPI communicator for surface sides
+ INTEGER :: nProcs !< number of MPI processes
+ INTEGER :: MyRank !< MyRank, ordered from 0 to nProcs - 1
+END TYPE
+TYPE (tMPIGROUP) :: SurfCOMM
+```
+To create a subset of processors, a condition is required, which is defined by the `color` variable:
+```
+color = MERGE(1337, MPI_UNDEFINED, nSurfSidesProc.GT.0)
+```
+Here, every processor with the same `color` will be part of the same communicator. The condition `nSurfSidesProc.GT.0` in this case includes every processor with a surface side. Every other processor will be set to `MPI_UNDEFINED` and consequently be part of `MPI_COMM_NULL`. Now, the communicator itself can be created:
+```
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, SurfCOMM%UNICATOR, iError)
+```
+`MPI_COMM_PICLAS` denotes the global PICLas communicator containing every processor (but can also be a previously created subset) and the `MPI_INFO_NULL` entry denotes the rank assignment within the new communicator (default: numbering from 0 to nProcs - 1). Additional information can be stored within the created variable:
+```
+IF(SurfCOMM%UNICATOR.NE.MPI_COMM_NULL) THEN
+ ! Stores the rank within the given communicator as MyRank
+ CALL MPI_COMM_RANK(SurfCOMM%UNICATOR, SurfCOMM%MyRank, iError)
+ ! Stores the total number of processors of the given communicator as nProcs
+ CALL MPI_COMM_SIZE(SurfCOMM%UNICATOR, SurfCOMM%nProcs, iError)
+END IF
+```
+Through the IF clause, only processors that are part of the communicator can be addressed. And finally, it is important to free the communicator during the finalization routine:
+```
+IF(SurfCOMM%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(SurfCOMM%UNICATOR,iERROR)
+```
+This works for communicators, which have been initialized with MPI_COMM_NULL, either initially during the variable definition or during the split call.
+If not initialized initially, you have to make sure that the freeing call is only performed, if the respective split routine has been called to guarantee
+that either a communicator exists and/or every (other) processor has been set to MPI_COMM_NULL.
+
+### Available communicators
+
+| Handle | Description | Derived from |
+| ----------------------- | --------------------------------------------- | ----------------------- |
+| MPI_COMM_WORLD | Default global communicator | - |
+| MPI_COMM_PICLAS | Duplicate of MPI_COMM_WORLD | MPI_COMM_PICLAS |
+| MPI_COMM_NODE | Processors on a node | MPI_COMM_PICLAS |
+| MPI_COMM_LEADERS | Group of node leaders | MPI_COMM_PICLAS |
+| MPI_COMM_WORKERS | All remaining processors, who are not leaders | MPI_COMM_PICLAS |
+| MPI_COMM_SHARED | Processors on a node | MPI_COMM_PICLAS |
+| MPI_COMM_LEADERS_SHARED | Group of node leaders (myComputeNodeRank = 0) | MPI_COMM_PICLAS |
+| MPI_COMM_LEADERS_SURF | Node leaders with surface sides | MPI_COMM_LEADERS_SHARED |
+
+#### Feature-specific
+
+| Handle | Description | Derived from |
+| ----------------------------------- | ---------------------------------------------------------------------- | --------------- |
+| PartMPIInitGroup(nInitRegions)%COMM | Emission groups | MPI_COMM_PICLAS |
+| SurfCOMM%UNICATOR | Processors with a surface side (e.g. reflective), including halo sides | MPI_COMM_PICLAS |
+| CPPCOMM%UNICATOR | Coupled power potential | MPI_COMM_PICLAS |
+| EDC%COMM(iEDCBC)%UNICATOR | Electric displacement current (per BC) | MPI_COMM_PICLAS |
+| FPC%COMM(iUniqueFPCBC)%UNICATOR | Floating potential (per BC) | MPI_COMM_PICLAS |
+| EPC%COMM(iUniqueEPCBC)%UNICATOR | Electric potential (per BC) | MPI_COMM_PICLAS |
+| BiasVoltage%COMM%UNICATOR | Bias voltage | MPI_COMM_PICLAS |
diff --git a/docs/documentation/developerguide/troubleshooting.md b/docs/documentation/developerguide/troubleshooting.md
index 198ca6325..9f35299e5 100644
--- a/docs/documentation/developerguide/troubleshooting.md
+++ b/docs/documentation/developerguide/troubleshooting.md
@@ -23,8 +23,9 @@ at best using the multi-node feature `PICLAS_SHARED_MEMORY=OMPI_COMM_TYPE_CORE`
- `CALL WriteArrayToHDF5()` with collective=.FALSE. when it is not 100% certain that all processes enter this routine
**Explanation**
-- Setting collective=.TRUE. triggers the usage of `H5FD_MPIO_COLLECTIVE_F` and `collective=.FALSE.` uses `H5FD_MPIO_INDEPENDENT_F` in
- `H5PSET_DXPL_MPIO_F(PList_ID, H5FD_MPIO_INDEPENDENT_F, iError)`, which configures the "transfer mode" in the hdf5 output
+- Setting `collective=.TRUE.` triggers the usage of `H5FD_MPIO_COLLECTIVE_F` (`collective=.FALSE.` uses `H5FD_MPIO_INDEPENDENT_F`) in
+ `H5PSET_DXPL_MPIO_F(PList_ID, H5FD_MPIO_INDEPENDENT_F, iError)`, which configures the "transfer mode" in the hdf5 output.
+ Collective MPI output requires that all processes take part in the operation!
**git hashes**
- One of these bugs was specifically fixed in
@@ -76,3 +77,63 @@ at best using the multi-node feature `PICLAS_SHARED_MEMORY=OMPI_COMM_TYPE_CORE`
**git hashes**
- One of these bugs was specifically fixed in
[8d1129be95abc91bf56e94bf7f12987e4c214666](https://github.com/piclas-framework/piclas/commit/8d1129be95abc91bf56e94bf7f12987e4c214666)
+
+
+## Possible memory leak detection when using MPICH
+**Error Description**
+- The error output looks like this
+
+ ====================================================================================================================================
+ PICLAS FINISHED! [ 2.41 sec ] [ 0:00:00:02 ]
+ ====================================================================================================================================
+ Abort(810645775): Fatal error in internal_Finalize: Other MPI error, error stack:
+ internal_Finalize(50)...........: MPI_Finalize failed
+ MPII_Finalize(400)..............:
+ MPID_Finalize(652)..............:
+ MPIDI_OFI_mpi_finalize_hook(856):
+ destroy_vni_context(1094).......: OFI domain close failed (ofi_init.c:1094:destroy_vni_context:Device or resource busy)
+ [WARNING] yaksa: 4 leaked handle pool objects
+
+ and shows that piclas finishes successfully, but an MPI error is invoked afterwards.
+ Note that last line containing "[WARNING] yaksa: 4 leaked handle pool objects" might not be there and sometimes reflects the
+ number of processes minus one.
+
+**Necessary Conditions**
+- MPICH must be used instead of OpenMPI. The problem even occurs when only one single process is used.
+
+
+**Finding the Bug**
+- Activate `PICLAS_DEBUG_MEMORY=ON` and check all the pairs of, e.g.,
+
+ myrank= 0 Allocated ElemBaryNGeo_Shared_Win with WIN_SIZE = 240
+
+ with
+
+ myrank= 0 Unlocking ElemBaryNGeo_Shared_Win with MPI_WIN_UNLOCK_ALL()
+ myrank= 0 Freeing window ElemBaryNGeo_Shared_Win with MPI_WIN_FREE()
+
+ to find the missing `CALL UNLOCK_AND_FREE(ElemBaryNGeo_Shared_Win)` by running piclas and storing the output in, e.g., `std.out`
+ and then running the following command
+
+ STDOUT='std.out'; dashes='----------------------------------------'; for line in $(grep -o -P '(?<=Allocated).*(?=with)' ${STDOUT} | sort -u | xargs); do printf 'Checking [%s] %s' "$line" "${dashes:${#line}}"; NbrOfA=$(grep -iw "${line}" ${STDOUT} | grep -ic "Allocated"); printf ' allocated %sx' "$NbrOfA"; NbrOfDA=$(grep -iw "${line}" ${STDOUT} | grep -ic "Unlocking"); printf ' deallocated %sx' "$NbrOfDA"; if [[ $NbrOfDA -lt $NbrOfA ]]; then echo " ---> Could not find MPI_WIN_UNLOCK_ALL() and MPI_WIN_FREE() for this variable"; else echo "... okay"; fi; done
+
+ Replace `std.out` in the command if a different file name is used.
+ If a variable is not correctly freed, the output of the script should look like this
+
+ Checking [ElemSideNodeID_Shared_Win] --------------- allocated 2x deallocated 2x... okay
+ Checking [ElemMidPoint_Shared_Win] ----------------- allocated 2x deallocated 2x... okay
+ Checking [ElemNodeID_Shared_Win] ------------------- allocated 2x deallocated 1x ---> Could not find all required MPI_WIN_UNLOCK_ALL() and MPI_WIN_FREE() for this variable
+ Checking [ElemBaryNGeo_Shared_Win] ----------------- allocated 2x deallocated 2x... okay
+ Checking [ElemRadius2NGeo_Shared_Win] -------------- allocated 2x deallocated 2x... okay
+ Checking [ElemCurved_Shared_Win] ------------------- allocated 2x deallocated 2x... okay
+
+**Resolution**
+- Add the missing `CALL UNLOCK_AND_FREE(MYNAME_Win)`, where `MYNAME` is the name of the shared memory window.
+
+**Explanation**
+- `MPI_WIN_UNLOCK_ALL()` and `MPI_WIN_FREE()` must be applied to shared memory windows before `CALL MPI_FINALIZE(iError)` is called.
+
+**git hashes**
+- One of these bugs was specifically fixed in
+ [1a151c24bab7ea22809d3d7554ff5ddf18379cf1](https://github.com/piclas-framework/piclas/commit/1a151c24bab7ea22809d3d7554ff5ddf18379cf1)
+
diff --git a/docs/documentation/index.md b/docs/documentation/index.md
index 14239c761..4b4d68496 100644
--- a/docs/documentation/index.md
+++ b/docs/documentation/index.md
@@ -7,7 +7,11 @@
# Welcome to the PICLas Documentation!
-![alt](../logo.png)
+```{image} ../logo.png
+:alt: logo
+:width: 600px
+:align: center
+```
[**PICLas**](https://github.com/piclas-framework/piclas) is a three-dimensional simulation
framework for Particle-in-Cell, Direct Simulation Monte Carlo and other particle methods that can be coupled for
diff --git a/docs/documentation/references.bib b/docs/documentation/references.bib
index 1c72dd77e..f30fc212b 100644
--- a/docs/documentation/references.bib
+++ b/docs/documentation/references.bib
@@ -66,6 +66,15 @@ @article{Pfeiffer2018b
volume = {30},
year = {2018}
}
+@ARTICLE{Pfeiffer2021,
+author = {Pfeiffer, Marcel and Mirza, Asim and Nizenkov, Paul},
+year = "2021",
+journal = "Physics of Fluids",
+volume = "33",
+pages = "036106",
+doi = "10.1063/5.0037915",
+title = {{Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar–Gross–Krook method for monatomic gas species}},
+}
@article{Jun2019,
author = {Jun, Eunji and Pfeiffer, Marcel and Mieussens, Luc and Gorji, M. Hossein},
@@ -336,7 +345,7 @@ @article{Abe1994
}
@phdthesis{Farbar2010,
-author = {Farbar, Erin D.},
+author = {Farbar, Erin D.},
title = {Kinetic Simulation of Rarefied and Weakly Ionized Hypersonic Flow Fields.},
school = {University of Michigan, Horace H. Rackham School of Graduate Studies},
year = 2010,
@@ -850,4 +859,39 @@ @inproceedings{petsc-efficient
publisher = {Birkh{\"{a}}user Press},
pages = {163--202},
year = {1997}
-}
\ No newline at end of file
+}
+
+@article{Beyer2022JQSRT,
+ title = {Non-equilibrium radiation modeling in a gas kinetic simulation code},
+ journal = {Journal of Quantitative Spectroscopy and Radiative Transfer},
+ volume = {280},
+ pages = {108083},
+ year = {2022},
+ issn = {0022-4073},
+ doi = {https://doi.org/10.1016/j.jqsrt.2022.108083},
+ url = {https://www.sciencedirect.com/science/article/pii/S0022407322000206},
+ author = {Julian Beyer and Marcel Pfeiffer and Stefanos Fasoulas},
+ keywords = {Radiative transfer, Radiation modeling, DSMC, PICLas, FIRE II},
+ abstract = {Radiation modeling is implemented in the highly parallel gas kinetic, open-source plasma simulation suite PICLas. A photon Monte Carlo approach for three-dimensional radiative energy transfer is developed. Since these kind of solvers have the disadvantage of high computational costs and statistical fluctuations, these points are addressed by specific adaptations to the solver. An approach to simulate axisymmetric problems is presented as well as noise reducing methods. Results are compared to a semi-infinite black body radiating cylinder, where an analytical solution is known, and a good agreement for both, three-dimensional and axisymmetric simulations is demonstrated. It is also shown that the implemented noise reducing methods can reduce statistical fluctuations. To calculate radiative properties in terms of emission and absorption coefficients, a line-by-line method is implemented and compared with good agreement to results obtained with other well-established radiation codes. The FIRE II reentry is used as a test case for a simulation combined with DSMC. Unidirectional coupling with the developed radiation modules shows good results compared to measured values as well as in performance scaling.}
+}
+
+@article{Pfeiffer2024ICARUS,
+title = {Numerical simulation of an iron meteoroid entering into Earth’s atmosphere using DSMC and a radiation solver with comparison to ground testing data},
+journal = {Icarus},
+volume = {407},
+pages = {115768},
+year = {2024},
+issn = {0019-1035},
+doi = {https://doi.org/10.1016/j.icarus.2023.115768},
+url = {https://www.sciencedirect.com/science/article/pii/S0019103523003457},
+author = {Marcel Pfeiffer and Julian Beyer and Jérémie Vaubaillon and Pavol Matlovič and Juraj Tóth and Stefanos Fasoulas and Stefan Löhle},
+keywords = {Radiative transfer, Meteorites, Earth, Numerical simulations},
+abstract = {Observation missions of meteoroids entering the Earth’s atmosphere are conducted regularly. Meanwhile a method to replicate the flight in a ground test facilities has been established. However, numerical simulations with subsequent comparison of the spectroscopic data, on the other hand, are not yet widely used in this field. This is mainly due to the complex flow environment, which includes not only non-equilibrium radiation, but also the outgassing of species from the meteoroid that do not enter the shock since they have only the thermal velocity of the wall without macroscopic flow and therefore cannot heat up as much as the other species. This paper presents a numerical approach to replicate experimental measurements. The Direct Simulation Monte Carlo (DSMC) method is used and bi-directionally coupled with a radiation solver to simulate the atmospheric entry in 80km of an iron meteorite with a diameter of 38mm. The paper provides information and references on the numerical models used, the challenges encountered, and the simulation results. The study shows that the simulation models are well-suited to handle the non-equilibrium effects of meteorite entry and show good agreement with the experimental measurements.}
+}
+
+@inproceedings{Beyer2022RGD,
+ title={Simulation of Radiating Non-equilibrium Flows around a Capsule Entering Titan’s Atmosphere},
+ author={Julian Beyer and Paul Nizenkov and Stefanos Fasoulas and Marcel Pfeiffer},
+ booktitle={32nd International Symposium on Rarefied Gas Dynamics},
+ year={2022}
+}
diff --git a/docs/documentation/requirements.txt b/docs/documentation/requirements.txt
index ed7a1439f..c24fd7891 100644
--- a/docs/documentation/requirements.txt
+++ b/docs/documentation/requirements.txt
@@ -1,8 +1,9 @@
# File: docs/requirements.txt
# Defining the exact version will make sure things don't break
-sphinx==4.2.0
-sphinx_rtd_theme==0.5.2
-readthedocs-sphinx-search==0.1.0rc3
-myst_parser==0.15.1
-sphinxcontrib.bibtex==2.3.0
+sphinx==7.0.0
+sphinx_rtd_theme==2.0.0
+sphinx_rtd_size==0.2.0
+readthedocs-sphinx-search==0.3.2
+myst_parser==2.0.0
+sphinxcontrib.bibtex==2.5.0
diff --git a/docs/documentation/userguide/features-and-models/BGG.md b/docs/documentation/userguide/features-and-models/BGG.md
index 2e0d612ee..4106cca2a 100644
--- a/docs/documentation/userguide/features-and-models/BGG.md
+++ b/docs/documentation/userguide/features-and-models/BGG.md
@@ -118,6 +118,7 @@ performed. To enable the utilization of these levels, the following flag shall b
It should be noted that even if Species2 corresponds to an electron, the vibrational cross-section data will be read-in for any
molecule-electron pair. If both species are molecular, priority will be given to the species utilizing this flag.
+(sec:background-gas-electronic-xsec)=
## Cross-section based electronic relaxation probability
In the following, the utilization of cross-section data is extended to the electronic excitation for neutral-electron collisions. When data is available, it will be read-in by the Python script described above. Each level will be handled separately, allowing the atom/molecule to be excited in each level. The cross-section data will be used to determine whether and which excitation will occur. During the excitation procedure the energy of the atom/molecule will be set to respective level. To enable this model, the following flags are required
@@ -129,4 +130,4 @@ The species-specific flag `UseElecXSec` should be set to `TRUE` for the heavy-sp
CalcRelaxProb = T
-However, the electronic temperature is currently not added to the total temperature for the PartAnalyze.csv output.
+However, the electronic temperature is currently not added to the total temperature for the PartAnalyze.csv output. Additionally, the cell-local excitation rate [1/s] per electronic level of the respective species can be sampled and output as described in Section {ref}`sec:sampling-elec-excitation`.
diff --git a/docs/documentation/userguide/features-and-models/Bhatnagar-Gross-Krook.md b/docs/documentation/userguide/features-and-models/Bhatnagar-Gross-Krook.md
index 720795cfc..05833f388 100644
--- a/docs/documentation/userguide/features-and-models/Bhatnagar-Gross-Krook.md
+++ b/docs/documentation/userguide/features-and-models/Bhatnagar-Gross-Krook.md
@@ -2,7 +2,7 @@
# Bhatnagar-Gross-Krook Collision Operator
The implementation of the BGK-based collision operator is based on the publications by {cite}`Pfeiffer2018a` and {cite}`Pfeiffer2018b`.
-It allows the simulation of gas flows in the continuum and transitional regime, where the DSMC method is computationally too expensive.
+It allows the simulation of gas flows in the continuum and transitional regimes, where the DSMC method is computationally too expensive.
The collision integral is hereby approximated by a relaxation process:
$$ \left.\frac{\partial f}{\partial t}\right|_{\mathrm{coll}} \approx \nu(f^t-f), $$
@@ -11,74 +11,59 @@ where $f^t$ is the target distribution function and $\nu$ the relaxation frequen
The current implementation supports:
-- 3 different methods (i.e. different target distribution functions): Ellipsoidal Statistical, Shakov, and standard BGK
-- Single species, monatomic and polyatomic gases
-- Multi species, monatomic and diatomic gas mixtures
+- Three different BGK methods (i.e. different target distribution functions): Ellipsoidal Statistical, Shakov, and standard BGK
+- Single species: monatomic, diatomic, and polyatomic gases
+- Gas mixtures with an arbitrary number of monatomic, diatomic, and polyatomic species
- Thermal non-equilibrium with rotational and vibrational excitation (continuous or quantized treatment)
-- 2D/Axisymmetric simulations
+- 2D axisymmetric simulations
- Variable time step (adaption of the distribution according to the maximal relaxation factor and linear scaling)
Relevant publications of the developers:
- Implementation and comparison of the ESBGK, SBGK, and Unified models in PICLas for atomic species {cite}`Pfeiffer2018a`
-- Extension of the modelling to diatomic species including quantized vibrational energy treatment, validation of ESBGK with the Mach
-20 hypersonic flow measurements of the heat flux on a $70^\circ$ cone {cite}`Pfeiffer2018b`
-- Simulation of a nozzle expansion (including the pressure chamber) with ESBGK, SBGK and coupled ESBGK-DSMC, comparison to experimental
-measurements {cite}`Pfeiffer2019a`,{cite}`Pfeiffer2019b`
-- Extension to polyatomic molecules, simulation of the carbon dioxide hypersonic flow around a flat-faced cylinder, comparison of
-ESBGK, SBGK and DSMC regarding the shock structure and heat flux {cite}`Pfeiffer2019c`
-- Implemention of Brull's multi-species modelling using Wilke's mixture rules and collision integrals for the calculation of
-transport coefficients (under review)
+- Extension of the modeling to diatomic species including quantized vibrational energy treatment, validation of ESBGK with the Mach 20 hypersonic flow measurements of the heat flux on a $70^\circ$ cone {cite}`Pfeiffer2018b`
+- Simulation of a nozzle expansion (including the pressure chamber) with ESBGK, SBGK and coupled ESBGK-DSMC, comparison to experimental measurements {cite}`Pfeiffer2019a`,{cite}`Pfeiffer2019b`
+- Extension to polyatomic molecules, simulation of the carbon dioxide hypersonic flow around a flat-faced cylinder, comparison of ESBGK, SBGK and DSMC regarding the shock structure and heat flux {cite}`Pfeiffer2019c`
+- Implemention of Brull's multi-species modeling for monatomic gas mixtures using Wilke's mixture rules and collision integrals for the calculation of transport coefficients {cite}`Pfeiffer2021`
+- Extension of the implementation of Brull's ESBGK multi-species model to diatomic gas mixtures using Wilke's mixture rules (under review)
+- Extension of the ESBGK method to multi-species modeling of polyatomic molecules, based on the ESBGK models of Mathiaud, Mieussens, Pfeiffer, and Brull, and including internal energies with multiple vibrational degrees of freedom, using Wilke's mixture rules and collision integrals in comparison (under review)
To enable the simulation with the BGK module, the respective compiler setting has to be activated:
PICLAS_TIMEDISCMETHOD = BGK-Flow
-A parameter file and species initialization file is required, analogous to the DSMC setup. It is recommended to utilize a previous
-DSMC parameter file to ensure a complete simulation setup. To enable the simulation with the BGK methods, select the BGK method,
-ES (`= 1`), Shakov (`= 2`), and standard BGK (`= 3`):
+A parameter file and species initialization file is required, analogous to the DSMC setup. It is recommended to utilize a previous DSMC parameter file to ensure a complete simulation setup. To enable the simulation with the BGK methods, select the BGK method, ES (`= 1`), Shakov (`= 2`), and standard BGK (`= 3`):
Particles-BGK-CollModel = 1
-The **recommended method is ESBGK**. If the simulation contains a gas mixture, a choice for the determination of the transport
-coefficients is available. The first model uses Wilke's mixture rules (`= 1`) to calculate the gas mixture viscosity and thermal
-conductivity. The second model utilizes collision integrals (derived for the VHS model, `= 2`) to calculate these mixture properties.
-While both allow mixtures with three or more components, only the implementation of Wilke's mixing rules allows diatomic molecules.
+The **recommended method is ESBGK**. If the simulation contains a gas mixture, a choice for the determination of the transport coefficients is available. The first model uses Wilke's mixture rules (`= 1`) to calculate the gas mixture viscosity and thermal conductivity. The **recommended second model utilizes collision integrals** (derived for the VHS model, `= 2`) to calculate these mixture properties.
- Particles-BGK-MixtureModel = 1
+ Particles-BGK-MixtureModel = 2
-The vibrational excitation can be controlled with the following flags, including the choice between continuous and quantized
-vibrational energy. Quantized vibrational energy levels are currently only available for the single-species implementation.
+The vibrational excitation can be controlled with the following flags, including the choice between continuous and quantized vibrational energy.
Particles-BGK-DoVibRelaxation = T
Particles-BGK-UseQuantVibEn = T
-An octree cell refinement until the given number of particles is reached can be utilized, which corresponds to an equal refinement
-in all three directions (x,y,z):
+An octree cell refinement can be utilized until the given number of particles is reached, which corresponds to an equal refinement in all three directions (x,y,z):
Particles-BGK-DoCellAdaptation = T
Particles-BGK-MinPartsPerCell = 10
-It is recommended to utilize at least between 7 and 10 particles per (sub)cell. To enable the cell refinement above a certain number
-density, the following option can be utilized
+It is recommended to utilize at least between 7 and 10 particles per (sub)cell. To enable the cell refinement above a certain number density, the following option can be utilized:
Particles-BGK-SplittingDens = 1E23
-A coupled BGK-DSMC simulation can be enabled, where the BGK method will be utilized if the number density $[\text{m}^{-3}]$ is
-above a certain value:
+A coupled BGK-DSMC simulation can be enabled, where the BGK method will be utilized if the number density $[\text{m}^{-3}]$ is above a certain value:
Particles-CoupledBGKDSMC = T
Particles-BGK-DSMC-SwitchDens = 1E22
-The flag `Particles-DSMC-CalcQualityFactors` controls the output of quality factors such as mean/maximal relaxation factor (mean:
-average over a cell, max: maximal value within the octree), max rotational relaxation factor, which are defined as
+The flag `Particles-DSMC-CalcQualityFactors` controls the output of quality factors such as mean/maximum relaxation factor (mean: average over a cell, max: maximal value within the octree), max. rotational relaxation factor, which are defined as
$$ \frac{\Delta t}{\tau} < 1,$$
-where $\Delta t$ is the chosen time step and $1/\tau$ the relaxation frequency. The time step should be chosen as such that the
-relaxation factors are below unity. The `BGK_DSMC_Ratio` gives the percentage of the sampled time during which the BGK model was
-utilized. In a couple BGK-DSMC simulation this variable indicates the boundary between BGK and DSMC. However, a value below 1 can
-occur for pure BGK simulations due to low particle numbers, when an element is skipped.
+where $\Delta t$ is the chosen time step and $1/\tau$ the relaxation frequency. The time step should be chosen as such that the relaxation factors are below unity. The `BGK_DSMC_Ratio` gives the percentage of the sampled time during which the BGK model was utilized. In a coupled BGK-DSMC simulation this variable indicates the boundary between BGK and DSMC. However, a value below 1 can occur for pure BGK simulations due to low particle numbers, when an element is skipped.
An option is available to utilize a moving average for the variables used in the calculation of the relaxation frequency:
@@ -88,7 +73,6 @@ The purpose is to increase the sample size and reduce the noise for steady gas f
Particles-BGK-MovingAverageFac = 0.01
-between zero and one must be defined with which the old $M^n$ and newly sampled moments $M$ are weighted
-to define the moments for the next time step $M^{n+1}$:
+between zero and one must be defined with which the old $M^n$ and newly sampled moments $M$ are weighted to define the moments for the next time step $M^{n+1}$:
$$ M^{n+1}=f M+(1-f) M^n.$$
diff --git a/docs/documentation/userguide/features-and-models/PIC.md b/docs/documentation/userguide/features-and-models/PIC.md
index a3dd58f83..2b6549bf1 100644
--- a/docs/documentation/userguide/features-and-models/PIC.md
+++ b/docs/documentation/userguide/features-and-models/PIC.md
@@ -18,8 +18,16 @@ A linear deposition method that also considers neighbouring elements can be sele
PIC-Deposition-Type = cell_volweight_mean
-The method also considers the corner nodes of each element to which all neighbouring elements
+and is referred to as the CVWM method.
+This method also considers the corner nodes of each element to which all neighbouring elements
contribute, hence, resulting in a non-local deposition scheme.
+Note that the CVWM method allows switching of charge deposition on Dirichlet boundaries via
+
+ PIC-DoDirichletDeposition = F
+
+which simply nullifies the deposited charge on wall boundary nodes for Dirichlet sides to account for mirror charges.
+The default value for this parameter is true and it is currently only available for the CVWM method in combination with the HDG
+method.
### Shape Function
diff --git a/docs/documentation/userguide/features-and-models/features-particle-solver.md b/docs/documentation/userguide/features-and-models/features-particle-solver.md
index 3295521e7..6aa3ee352 100644
--- a/docs/documentation/userguide/features-and-models/features-particle-solver.md
+++ b/docs/documentation/userguide/features-and-models/features-particle-solver.md
@@ -92,7 +92,7 @@ are discussed in Section {ref}`sec:2D-axisymmetric`
### Species-specific time step
-This option is decoupled from the other two time step options as the time step is not applied on a per-particle basis but for each species. Currently, its main application is for PIC-MCC simulations (only Poisson field solver with Boris-Leapfrog time discretization method), where there are large differences in the time scales (e.g. electron movement requires a time step of several orders of magnitude smaller than for the ions). The species-specific time step is actvitated per species by setting a factor
+This option is decoupled from the other two time step options as the time step is not applied on a per-particle basis but for each species. Currently, its main application is for PIC-MCC simulations (only Poisson field solver with Euler, Leapfrog and Boris-Leapfrog time discretization methods), where there are large differences in the time scales (e.g. electron movement requires a time step of several orders of magnitude smaller than for the ions). The species-specific time step is actvitated per species by setting a factor
Part-Species1-TimeStepFactor = 0.01
@@ -224,11 +224,11 @@ only at the stagnation point, the time step defined during the initialization is
(sec:variable-particle-weighting)=
#### Variable Particle Weighting
-Variable particle weighting is currently supported with PIC and/or with a background gas (an additional trace species feature is described in Section {ref}`sec:background-gas`). The general functionality can be enabled with the following flag:
+Variable particle weighting is currently supported for PIC (with and without background gas) or a background gas (an additional trace species feature is described in Section {ref}`sec:background-gas`). The general functionality can be enabled with the following flag:
Part-vMPF = T
-The split and merge algorithm is called at the end of every time step. In order to manipulate the number of particles per species per cell, merge and split thresholds can be defined as is shown in the following.
+The split and merge algorithm is called at the end of every time step. In order to manipulate the number of particles per species per cell, merge and split thresholds can be defined as is shown in the following.
Part-Species2-vMPFMergeThreshold = 100
@@ -264,7 +264,7 @@ Currently, only merging based on the number of particles within the cell is impl
Furthermore, the spread or aggressiveness of the merge algorithm can be changed, i.e. how deep the merge extends into the mesh starting from each cell. 0 is the least aggressive merge, 3 the most aggressive merge.
Part-CellMergeSpread = 0
-
+
There is also the possibility to define a maximum number of cells that can be merged. In this way, a desired "resolution" of the virtual cells can be achieved.
Part-MaxNumbCellsMerge = 5
diff --git a/docs/documentation/userguide/features-and-models/index.md b/docs/documentation/userguide/features-and-models/index.md
index ad4d9505e..4ca77ef96 100644
--- a/docs/documentation/userguide/features-and-models/index.md
+++ b/docs/documentation/userguide/features-and-models/index.md
@@ -17,6 +17,7 @@ BGG.md
Fokker-Planck.md
Bhatnagar-Gross-Krook.md
features-particle-solver.md
+radiation.md
```
The goal of PICLas is to enable to approximation of the complete Boltzmann equation:
diff --git a/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md b/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md
index 182fa03e3..209908919 100644
--- a/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md
+++ b/docs/documentation/userguide/features-and-models/particle-initialization-and-emission.md
@@ -1,18 +1,21 @@
(sec:particle-initialization-and-emission)=
# Particle Initialization & Emission
+The RAM to store the particles is dynamically allocated. However, it is possible to restrict the number of particles per MPI process by setting
+
+ Part-MaxParticleNumber=1000000
+
+New memory is allocated in separate chunks because allocating memory for the particle data and copying it to the new memory area is expensive. The chunksize is relative to the particles used and can be set with
+
+ Part-MaxPartNumIncrease=0.1
+
+A higher value increases the amount of unnecessary RAM allocated to particles, while a lower value increases the number of memory adjustment operations. The optimal trade-off depends on the simulation and the machine, but it only affects the performance of the simulations, not the quality of the results.
+
The following section gives an overview of the available options regarding the definition of species and particle initialization
and emission. Simulation particles can be inserted initially within the computational domain and/or emitted at every time step.
First of all, the number of species is defined by
Part-nSpecies=1
- Part-MaxParticleNumber=1000000
-
-The maximum particle number is defined per core and should be chosen according to the number of simulation particles you expect,
-including a margin to account for imbalances due transient flow features and/or the occurrence of new particles due to chemical
-reactions. Example: A node of a HPC cluster has 2 CPUs, each has 12 cores. Thus, the node has 24 cores that share a total of
-128GB RAM. Allocating 1000000 particles per core means, you can simulate up to 24 Million particles on a single node in this
-example (assuming an even particle distribution). The limiting factor here is the amount of RAM available per node.
Regardless whether a standalone PIC, DSMC, or a coupled simulation is performed, the atomic mass [kg], the charge [C] and the
weighting factor $w$ [-], sometimes referred to as macro-particle factor (MPF), are required for each species.
@@ -63,20 +66,20 @@ The type of the region is defined by the following parameter
Different `SpaceIC` are available and an overview is given in the table below.
-| Distribution | Description | Reference |
-| --------------- | -------------------------------------------------------------------------------- | ------------------------------------------ |
-| cell_local | Particles are inserted in every cell at a constant number density | |
-| disc | Particles are inserted on a circular disc | Section {ref}`sec:particle-disk-init` |
-| cuboid | Particles are inserted in the given cuboid volume at a constant number density | Section {ref}`sec:particle-cuboid-init` |
-| cylinder | Particles are inserted in the given cylinder volume at a constant number density | Section {ref}`sec:particle-cylinder-init` |
-| sphere | Particles are inserted in the given sphere volume at a constant number density | Section {ref}`sec:particle-sphere-init` |
-| photon_cylinder | Ionization of a background gas through photon impact (cylinder distribution) | Section {ref}`sec:particle-photo-ionization` |
-| photon_SEE_disc | Secondary electron emission through photon impact (disk distribution) | Section {ref}`sec:particle-photo-ionization` |
-| photon_honeycomb | Ionization of a background gas through photon impact (honeycomb distribution) | Section {ref}`sec:particle-photo-ionization` |
-| photon_SEE_honeycomb | Secondary electron emission through photon impact (honeycomb distribution) | Section {ref}`sec:particle-photo-ionization` |
-| photon_rectangle | Ionization of a background gas through photon impact (rectangular distribution) | Section {ref}`sec:particle-photo-ionization` |
-| photon_SEE_rectangle | Secondary electron emission through photon impact (rectangular distribution) | Section {ref}`sec:particle-photo-ionization` |
-| EmissionDistribution | Initial only ($t=0$) field-based ($n, T, v$) particle distribution from .h5 | Section {ref}`sec:particle-emission-distri` |
+| Distribution | Description | Reference |
+| -------------------- | -------------------------------------------------------------------------------- | -------------------------------------------- |
+| cell_local | Particles are inserted in every cell at a constant number density | Section {ref}`sec:particle-cell-local` |
+| disc | Particles are inserted on a circular disc | Section {ref}`sec:particle-disk-init` |
+| cuboid | Particles are inserted in the given cuboid volume at a constant number density | Section {ref}`sec:particle-cuboid-init` |
+| cylinder | Particles are inserted in the given cylinder volume at a constant number density | Section {ref}`sec:particle-cylinder-init` |
+| sphere | Particles are inserted in the given sphere volume at a constant number density | Section {ref}`sec:particle-sphere-init` |
+| photon_cylinder | Ionization of a background gas through photon impact (cylinder distribution) | Section {ref}`sec:particle-photo-ionization` |
+| photon_SEE_disc | Secondary electron emission through photon impact (disk distribution) | Section {ref}`sec:particle-photo-ionization` |
+| photon_honeycomb | Ionization of a background gas through photon impact (honeycomb distribution) | Section {ref}`sec:particle-photo-ionization` |
+| photon_SEE_honeycomb | Secondary electron emission through photon impact (honeycomb distribution) | Section {ref}`sec:particle-photo-ionization` |
+| photon_rectangle | Ionization of a background gas through photon impact (rectangular distribution) | Section {ref}`sec:particle-photo-ionization` |
+| photon_SEE_rectangle | Secondary electron emission through photon impact (rectangular distribution) | Section {ref}`sec:particle-photo-ionization` |
+| EmissionDistribution | Initial only ($t=0$) field-based ($n, T, v$) particle distribution from .h5 | Section {ref}`sec:particle-emission-distri` |
Common parameters required for most of the insertion routines are given below. The drift velocity is defined by the direction
vector `VeloVecIC`, which is a unit vector, and a velocity magnitude [m/s]. The thermal velocity of particle is determined based
@@ -100,6 +103,21 @@ considered, the electronic temperature [K] has to be defined
The parameters given so far are sufficient to define an initialization region for a molecular species using the `cell_local` option.
Additional options required for other insertion regions are described in the following.
+(sec:particle-cell-local)=
+### Cell local
+
+Additional options are available to limit the local emission to certain limits in each dimension (x,y,z) as defined by:
+
+ Part-Species1-Init1-MinimalLocation = (/ -1.0, -1.0, -999. /)
+ Part-Species1-Init1-MaximalLocation = (/ 1.0, 1.0, 999. /)
+
+To limit the insertion only to a specific dimension, simply provide a sufficiently large number for the other dimensions. This approach
+can also be utilized for 2D and axisymmetric simulations.
+
+When using a variable particle weighting as described in Section {ref}`sec:variable-particle-weighting`, the variable `Part-Species1-vMPFSplitThreshold`
+will be utilized as the target number of particles per cell during the insertion and the weighting factor will be determined from the
+given number density and cell volume.
+
(sec:particle-disk-init)=
### Circular Disc
@@ -292,12 +310,12 @@ There are different methods implemented to neutralize a charged particle flow, e
propulsion systems. Currently all methods require a specific geometry to function properly. For more details, see the regression
tests under *regressioncheck/NIG_PIC_poisson_Boris-Leapfrog*. The following table lists the *SpaceIC* emission types
-| Distribution | Description |
-| --------------- | -------------------------------------------------------------------------------- |
-| 2D_landmark_neutralization | Charoy 2019 2D PIC benchmark, electrons are injected with 10 eV at the cathode if the anode current is negative |
-| 2D_Liu2010_neutralization | Liu 2010 2D PIC benchmark, electrons are injected at the cathode if the cathode current is negative |
+| Distribution | Description |
+| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| 2D_landmark_neutralization | Charoy 2019 2D PIC benchmark, electrons are injected with 10 eV at the cathode if the anode current is negative |
+| 2D_Liu2010_neutralization | Liu 2010 2D PIC benchmark, electrons are injected at the cathode if the cathode current is negative |
| 2D_Liu2010_neutralization_Szabo | Liu 2010 2D PIC benchmark, electrons are injected in the first cell layer at the cathode if the net charge in these elements is positive |
-| 3D_Liu2010_neutralization | Liu 2010 3D PIC benchmark, electrons are injected at the cathode if the cathode current is negative |
+| 3D_Liu2010_neutralization | Liu 2010 3D PIC benchmark, electrons are injected at the cathode if the cathode current is negative |
| 3D_Liu2010_neutralization_Szabo | Liu 2010 3D PIC benchmark, electrons are injected in the first cell layer at the cathode if the net charge in these elements is positive |
For the *XD_Liu2010_neutralization* emission, a constant emitted electron temperature is defined via
diff --git a/docs/documentation/userguide/features-and-models/radiation.md b/docs/documentation/userguide/features-and-models/radiation.md
new file mode 100644
index 000000000..2279d8b25
--- /dev/null
+++ b/docs/documentation/userguide/features-and-models/radiation.md
@@ -0,0 +1,255 @@
+(sec:Radiation)=
+# Radiation
+
+## Radiation Coupling
+
+To account for high temperature gas radiation, the DSMC method can be coupled with a radiation module {cite}`Beyer2022JQSRT,Beyer2022RGD,Pfeiffer2024ICARUS`. For a deeper physical knowledge of the implemented options see Ref. {cite}`Beyer2022JQSRT`.
+The radiation module calculates cell-local emission and absorption coefficients on the same computational mesh as the flow field solver using a line-by-line (LBL) method, and the radiative transfer solver simulates the radiative energy transfer through the computational domain using a photon Monte Carlo (pMC) solver. The LBL solver can also be used in a stand-alone version. The enitre radiation simulation can be run highly parallel using a MPI-shared memory concept (MPI 3.0). The LBL solver uses a domain decomposition and the pMC solver distributes the photon bundles across the different cores.
+The radiation module can be enabled by compiling PICLas with the following parameter
+
+ PICLAS_TIMEDISCMETHOD = Radiation
+
+In addition, the following parameter must be set for larger computational meshes
+
+ PICLAS_INKIND8 = ON
+
+For the radiation module, the following options are available and must be set accordingly
+
+ Radiation-RadType = 1 ! Full radiation module with radiative energy transfer
+ 2 ! Blackbody radiation in entire computational domain
+ 3 ! Emission and absorption coefficients only (stand-alone radiation solver)
+ 4 ! Shock tube mode
+
+To define the species which are used in the radiation simulation, the following parameters must be set in one single ini-file (as an example, atomic nitrogen is chosen)
+
+ Part-Species1-MassIC = 2.32600E-26 ! N Molecular Mass
+ Part-Species1-MacroParticleFactor = 2.5E10
+
+ Part-Species1-SpeciesName = N
+ Part-Species1-InteractionID = 1
+ Part-Species1-Tref = 273 ! in K
+ Part-Species1-dref = 3.0E-10 ! in m
+ Part-Species1-omega = 0.24
+
+ Part-Species1-RadiationIonizationEn = 117345 ! Ionization Energy, cm-1
+ Part-Species1-RadiationRadius_A = 0.7 ! Radius, A
+ Part-Species1-Starkex = 0.33 ! Stark Index
+ Part-Species1-NuclCharge = 1 ! Charge (1:neutral particles, 2:ions)
+ Radiation-Species1-SpectraFileName = Ni.dat
+
+The `Radiation-Species[$]-SpectraFileName` contains information about level energy and radiative transition lines. An example is given in the regression-tests and can e.g. be built using information available in the NIST database. For convenience, the calculation of each species can be disabled with
+
+ Part-Species[$]-DoRadiation = F
+
+In a first step of the tool chain, the local emission and absorption coefficients are determined on the same computational mesh used by the flow field solver. Therefore, the same mesh has to be read in. If the emission in a single cell is to be calculated (`Radiation-RadType = 1`), a mesh file containing one single cell must be provided.
+
+Different radiation mechanisms can be considered, depending on the energy state of the involved electron
+
+ Radiation-bb-atoms = T ! atomic line radiation (bound-bound)
+ Radiation-bb-molecules = T ! molecular band radiation (bound-bound)
+ Radiation-bf = T ! recombination radiation (bound-free)
+ Radiation-ff = T ! Bremsstrahlung (free-free)
+
+If the complete radiation module (1) is selected, the flow field information (DSMCState) previously calculated with PICLas is used as input by setting the following parameters
+
+ Radiation-MacroRadInput = T
+ Radiation-MacroInput-Filename = PROJECTNAME_DSMCState_000.001000000.h5
+
+Often, radiation solvers use the translational temperature of the electrons as $T_\mathrm{E}$ to determine upper state densities. However, PICLas also offers the possibility to use the actual electronic excitation temperature
+
+ Radiation-UseElectronicExcitation = T
+
+For a single cell (`Radiation-RadType = 1`), temperatures and densities can be given by
+
+ Part-Species[$]-RadiationTtrans = 10000.
+ Part-Species[$]-RadiationTelec = 10000.
+ Part-Species[$]-RadiationTvib = 10000.
+ Part-Species[$]-RadiationTrot = 10000.
+ Part-Species[$]-RadiationNumDens = 1E20.
+
+The units are Kelvin and m^-3. For electrons, they are red in by
+
+ Radiation-TElectrons = 10000.
+ Radiation-NumDensElectrons = 1E20.
+
+The wavelength range and the discretization for the simulation can be set with the following parameters. Radiative transitions outside of this range will not be considered in the simulation!
+
+ Radiation-MinWaveLen = 200. ! minimum wavelength in nanometers
+ Radiation-MaxWaveLen = 1000. ! maximum wavelength in nanometers
+ Radiation-WaveLenDiscr = 500000 ! Number of spectral discretization points
+
+To save computational memory, wavelengths can also be spectrally binned together.
+
+ Radiation-WaveLenReductionFactor = 10
+
+
+
+For `Radiation-RadType = 3`, the next step is to determine the radiative energy transfer through the computational domain (change in radiation intensity due to the emission and absorption of the surrounding gas). This is done with a photon Monte Carlo method, where photon bundles are traced through the computational domain by solving the radiative transfer equation. Due to the time scales involved, only the steady-state solution is used, furthermore, scattering effects within the gas are neglected. For shock tubes (`Radiation-RadType = 4`), a simplified version of the radiative energy transfer along a tanget slab is calculated. The required diameter of the shock tube can be set (in meters) with
+
+ Radiation-ShockTubeDiameter = 0.16
+
+For the radiative energy transfer of `Radiation-RadType = 3`, the number of photon bundles in each computational cell is set by
+
+ Radiation-NumPhotonsPerCell = 200
+
+Instead of placing the same number of photons in each computational cell and giving them different energies, it is also possible to give them the same energy and redistribute them across the computational domain according to the emitted energy.
+
+ Radiation-AdaptivePhotonNumEmission = T ! true:photons have the same energy, false:number of photons per cell is equal
+
+The initial properties of the photon bundles are set randomly. However, if a more uniform distribution within a cell is desired, different options are available. For the position, they are placed in the cell using a 2,3-Halton sequence. Additionally, their directions can be distributed along a spiral configuration
+
+ Radiation-PhotonPosModel = 2 ! 1:random 2:Halton
+ Radiation-DirectionModel = 2 ! 1:random 2:spiral
+
+The absorption along their paths can be calculated (1) analytically or (2) stochastically, however, it is strongly recommended to do it analytically
+
+ Radiation-AbsorptionModel = 1
+
+To determine the wavelength of each photon bundle, two different methods are implemented, (1) an acceptance-rejection method and (2) a bisection method
+
+ Radiation-PhotonWaveLengthModel = 1 ! 1:Acceptance-Rejection 2:Bisection
+
+The acceptance-rejection method is more computationally intensive than the bisection method. However, it should be more accurate, because it consideres individual wavelengths rather than integral values. Thus, the acceptance-rejection method can never select a wavelength that has no emission, while the bisection method has a very low probability of doing so.
+
+For surface properties for photons on a reflecting wall, different options are possible. They can either be specularly reflected
+
+ Part-Boundary3-Condition=reflective
+ Part-Boundary3-PhotonSpecularReflection = T
+
+or diffuse. If they are reflected diffusely, the energy accommodation coefficient can bet set ([0,1]) depending on the surface properties.
+
+ Part-Boundary3-Condition=reflective
+ Part-Boundary3-PhotonSpecularReflection = F
+ Part-Boundary3-PhotonEnACC = 0.5
+
+
+In addition, PICLas offers the possibility to sample spectra on a virtual sensor and to compare them with measured data. Two different options are available: (1) with a viewing angle and (2) along a line-of-sight (LOS)
+
+ Radiation-RadObservationPointMethod = 2 !1:observation angle, 2:LOS
+
+The location of the virtual sensor can be defined with
+
+ Radiation-ObservationMidPoint = (/-1.0,1E-5,0.0/)
+
+and the view direction with
+
+ Radiation-ObservationViewDirection = (/1.0,0.0,0.0/)
+
+Its diameter can be set with
+
+ Radiation-ObservationDiameter = 0.1
+
+and the viewing angle with
+
+ Radiation-ObservationAngularAperture = 0.404533
+
+Along a LOS, it is also possible to use as many photons per cell as wavelength discretizations. These photons then receive the actual energy of the corresponding wavelength in order to obtain a perfect sampling of the corresponding energies for spectral comparisons.
+
+ Radiation-ObservationCalcFullSpectra = T
+
+To simulate with a high resolution and to match the units of the radiance, the output can be expressed in different units, e.g. to have a spectral discretization of 1/A and to get the radiance in /nm, the following parameters must be set
+
+ Radiation-WaveLenReductionFactorOutput = 10
+
+To account for instrumental broadening, the radiance profile can be mathematically convolved with a trapezoid
+
+ Radiation-ObservationDoConvolution = T
+
+The trapezoid can be defined by a topwidth and a basewidth, both read-in in angstroms
+
+ Radiation-ObservationSlitFunction = (/1.7,3.42/)
+
+The simulations can also be run on a two-dimensional rotationally symmetric mesh. To do this, the following options must be set. Different tracking routines are used than with an axisymmetric particle solver, therefore, the RadialWeighting-PartScaleFactor can have different values
+
+ Particles-Symmetry2D = T
+ Particles-Symmetry2DAxisymmetric = T
+ Particles-RadialWeighting = T
+ Particles-RadialWeighting-PartScaleFactor = 10000
+ Particles-RadialWeighting-CloneMode = 2
+ Particles-RadialWeighting-CloneDelay = 6
+ Particles-RadialWeighting-CellLocalWeighting = F
+
+
+## Raytracing
+
+In addition to the radiation coupling, a ray tracing model is implemented. A boundary must be defined from which rays or photons are emitted in a preliminary step, which are tracked throughout the domain until they are absorbed at a boundary. The volumes and surface elements are sampled by passing photons and from this information the ionization within each volume element and secondary electron emission from each surface is calculated in the actual plasma simulation. The output of the sampling procedure can be viewed as irradiated volumes and surfaces and is written to the output files EUV_RadiationVolState.h5 and EUV_RadiationSurfState.h5, which can be converted to .vtk format with piclas2vtk.
+Raytracing is activated with
+
+ UseRayTracing = T
+
+It only requires only one single section in the parameter.ini file. The user must specify a single rectangular and planar particle-boundary (here with index 5)
+
+ RayTracing-PartBound = 5
+
+from which the number of rays
+
+ RayTracing-NumRays = 200000000
+
+shall be emitted in the direction
+
+ RayTracing-RayDirection = (/0.0, 0.0, -1.0/)
+
+Currently, all coordinates of this boundary must have the same z-coordinate and it must extend into the complete domain into the x- and y-direction. The parameter
+
+ RayTracing-PulseDuration = 1e-9
+
+defines the pulse duration $\tau$ that defines the temporal shape of the light intensity function $I\propto\exp(-(t/\tau)^2)$ in [s].
+
+ RayTracing-NbrOfPulses
+
+defines the number of pulses that are performed and
+
+ RayTracing-WaistRadius
+
+the waist radius $w_{b}$ that defines the spatial intensity via $I\propto\exp(-(r/w_b)^2)$ in [m].
+The wavelength in [m] is given by
+
+ RayTracing-WaveLength = 50e-9
+
+and the repetition rate of the pulses in [Hz] by
+
+ RayTracing-RepetitionRate = 2e3
+
+The time-averaged (over one pulse) power density of the pulse in [W/m2] is used in
+
+ RayTracing-PowerDensity = 1e3
+
+which is converted to an average pulse energy considering the irradiated area, hence, the same parameter can be used for the quarter and the full mesh setups.
+
+To account for the reflectivity of specific surfaces, the absorption rate $A_{\nu}=1-R$ ($R$ is the reflectivity) for photons must be supplied for each particle boundary. This is done by setting the parameter
+
+ Part-Boundary1-PhotonEnACC = 1.0
+
+to a value between zero and unity. Additionally, it is possibly to switch between perfect angular reflection and diffuse reflection for each boundary.
+
+ Part-Boundary$-PhotonSpecularReflection = T
+
+The parameter
+
+ RayTracing-ForceAbsorption=T
+
+activates sampling of photons on surfaces independent of what happens to them there. They might be reflected or absorbed. If this parameter is set to `false``, then only absorbed photons will be sampled on surfaces. By also sampling reflected photons, the statistic is improved, hence, it should always be activated.
+
+The angle under which photons are emitted from the particle-boundary is calculated from the normal vector of the boundary and the parameter
+
+ RayTracing-RayDirection
+
+Because the interaction of every ray with every volume and surface element in three dimensions would lead to an unfeasible amount of memory usage if stored on the hard drive, the calculated volume and surface intersections need to be agglomerated in such a way that the details of the irradiated geometry are preserved. One goal is to have a clean cut between shadowed and illuminated regions where this interface cuts through surface of volume elements and without the need for a cut-cell method that splits the actual mesh elements. This is achieved by introducing a super-sampling method in the volume as well as on the surface elements. For the volumetric sampling, the originally cell-constant value is distributed among the volume sub-cells depending on a element-specific number of sub cells $n_{cells} = (N_{cell} + 1)^3$ , where
+$N_{cell}$ is the polynomial degree in each element used for visualization of the super-sampled
+ray tracing solution. The polynomial degree $N_{cell}$ is chosen between unity and a user-defined
+value, which can be automatically selected depending on the different criteria
+
+ RayTracing-VolRefineMode = 0 ! 0: do nothing (default)
+ ! 1: refine below user-defined z-coordinate with NMax
+ ! 2: scale N according to the mesh element volume between NMin>=1 and NMax>=2
+ ! 3: refine below user-defined z-coordinate and scale N according to the mesh element volume between NMin>=1 and NMax>=2 (consider only elements below the user-defined z-coordinate for the scaling)
+
+The maximum polynomial degree within refined volume elements for photon tracking (p-adaption) can hereby be set using
+
+ RayTracing-NMax = 1
+
+In contrast to the volume super-sampling, only one global parameter is used to refine the all surfaces for sampling. Each surface can be split into $n^2$ sub-surfaces on which the sampling is performed via the parameter
+
+ RayTracing-nSurfSample = 2
+
+The surfaces (quadrilaterals) are therefore equidistantly divided at the midpoint of each edge to create approximately equal-sized sub-surfaces.
\ No newline at end of file
diff --git a/docs/documentation/userguide/tutorials/dsmc-cone-2D/dsmc-cone-2D.md b/docs/documentation/userguide/tutorials/dsmc-cone-2D/dsmc-cone-2D.md
index cc98a20f0..ce641fd99 100644
--- a/docs/documentation/userguide/tutorials/dsmc-cone-2D/dsmc-cone-2D.md
+++ b/docs/documentation/userguide/tutorials/dsmc-cone-2D/dsmc-cone-2D.md
@@ -16,7 +16,7 @@ Before the actual simulation is conducted, a mesh file in the HDF5 format has to
```{figure} mesh/dsmc-cone-mesh-bcs.jpg
---
name: fig:dsmc-cone-mesh
-width: 90%
+width: 600px
---
Mesh of the 70° Cone.
@@ -71,7 +71,7 @@ ranges from zero to a positive value. Additionally, the mesh shall be centered a
row. As the loaded file only consists of a surface, which is meshed with Gmsh and then extruded using Hopr, the surface needs to be translated:
Translate {0, 0, -1} {
- Surface{1};
+ Surface{1};
}
Physical groups are used to define the boundary conditions at all curves:
@@ -98,8 +98,8 @@ Different meshing algorithms for creating the 2D and 3D meshes can be chosen wit
Next, the 2D mesh is created and all cells are recombined to quads with the following commands:
- Mesh 2;
Mesh.RecombineAll = 1;
+ Mesh 2;
The following commands are required to save all elements even if they are not part of a physical group and to use the ASCII format, before saving the mesh as `70degCone_2D.msh`:
@@ -108,8 +108,12 @@ The following commands are required to save all elements even if they are not pa
Mesh.MshFileVersion = 4.1;
Save "70degCone_2D.msh";
-The mesh file in the file format `.h5` used by **piclas** has to be converted using HOPR by supplying an input file `hopr.ini` using the corresponding mode:
-
+The mesh can be created by simplying executing Gmsh from the terminal:
+
+ gmsh 70degCone_2DSurf.geo
+
+The resulting mesh shall consist of quad elements and not triangles. Finally, it has to be converted to the file format used by **piclas** using HOPR by supplying an input file `hopr.ini` using the corresponding mode:
+
Mode = 5
To extrude the 2D quadrangular mesh to a 3D hexahedral mesh with only one element in the third direction, the following commands next to be set in the `hopr.ini`:
@@ -126,7 +130,7 @@ Again, to create the `.h5` mesh file, you would simply run
hopr hopr_gmsh.ini
-This would create the mesh file `70degCone_2D_mesh.h5` in HDF5 format.
+This would create the mesh file `70degCone_2D_mesh.h5` in HDF5 format.
## Flow simulation with DSMC
@@ -176,7 +180,7 @@ In axially symmetrical cases, the simulation effort can be greatly reduced. For
Particles-Symmetry-Order = 2
Particles-Symmetry2DAxisymmetric = T
-First of all, certain requirements are placed on the grid. The $y$-axis acts as the symmetry axis, while the $x$-axis defines the radial direction. Therefore grid lies in the $xy$-plane and should have an extension of one cell in the $z$-direction, the extent in $z$-direction is irrelevant whilst it is centered on $z=0$. In addition, the boundary at $y = 0$ must be provided with the condition `symmetric_axis` and the boundaries parallel to the $xy$-plane with the condition `symmetric`.
+First of all, certain requirements are placed on the grid. The $y$-axis acts as the symmetry axis, while the $x$-axis defines the radial direction. Therefore grid lies in the $xy$-plane and should have an extension of one cell in the $z$-direction, the extent in $z$-direction is irrelevant whilst it is centered on $z=0$. In addition, the boundary at $y = 0$ must be provided with the condition `symmetric_axis` and the boundaries parallel to the $xy$-plane with the condition `symmetric`.
Part-Boundary4-SourceName = SYMAXIS
Part-Boundary4-Condition = symmetric_axis
@@ -277,9 +281,9 @@ re-balancing step via HDF5, which will create a state file and restart from this
After running a simulation, especially if done for the first time it is strongly recommended to ensure the quality of the results. For this purpose, the `Particles-DSMC-CalcQualityFactors = T` should be set, to enable the calculation of quality factors such as the maximum collision probability and the mean collision separation distance over the mean free path. All needed datasets can be found in the `*_DSMCState_*.h5` or the converted `*_visuDSMC_*.vtu`.
-First of all, it should be ensured that a sufficient number of simulation particles were available for the averaging, which forms the basis of the shown data. The value `*_SimPartNum` indicates the average number of simulated particles in the respective cell. For a sufficient sampling size, it should be guaranteed that at least 10 particles are in each cell, however, this number is very case-specific. The value `DSMC_MCSoverMFP` is an other indicator for the quality of the particle discretization of the simulation area. A value above 1 indicates that the mean collision separation distance is greater than the mean free path, which is a signal for too few simulation particles. For 3D simulations it is sufficient to adjust the `Part-Species[$]-MacroParticleFactor` accordingly in **parameter.ini**. In 2D axisymmetric simulations, the associated scaling factors such as `Particles-RadialWeighting-PartScaleFactor` can also be optimized (see Section {ref}`sec:2D-axisymmetric`).
+First of all, it should be ensured that a sufficient number of simulation particles were available for the averaging, which forms the basis of the shown data. The value `*_SimPartNum` indicates the average number of simulated particles in the respective cell. For a sufficient sampling size, it should be guaranteed that at least 10 particles are in each cell, however, this number is very case-specific. The value `DSMC_MCSoverMFP` is an other indicator for the quality of the particle discretization of the simulation area. A value above 1 indicates that the mean collision separation distance is greater than the mean free path, which is a signal for too few simulation particles. For 3D simulations it is sufficient to adjust the `Part-Species[$]-MacroParticleFactor` accordingly in **parameter.ini**. In 2D axisymmetric simulations, the associated scaling factors such as `Particles-RadialWeighting-PartScaleFactor` can also be optimized (see Section {ref}`sec:2D-axisymmetric`).
-Similarly, the values `DSMC_MeanCollProb` and` DSMC_MaxCollProb` should be below 1 in order to avoid nonphysical values. While the former indicates the averaged collision probability per timestep, the latter stores the maximum collision probability. If this limit is not met, more collisions should have ocurred within a time step than possible. A refinement of the time step `ManualTimeStep` in **parameter.ini** is therefore necessary. If a variable timestep is also used in the simulation, there are further options (see Section {ref}`sec:variable-time-step`).
+Similarly, the values `DSMC_MeanCollProb` and` DSMC_MaxCollProb` should be below 1 in order to avoid nonphysical values. While the former indicates the averaged collision probability per timestep, the latter stores the maximum collision probability. If this limit is not met, more collisions should have ocurred within a time step than possible. A refinement of the time step `ManualTimeStep` in **parameter.ini** is therefore necessary. If a variable timestep is also used in the simulation, there are further options (see Section {ref}`sec:variable-time-step`).
```{table} Target value to ensure physical results and a connected input parameter
---
@@ -300,12 +304,12 @@ To visualize the data which represents the properties in the domain (e.g. temper
./piclas2vtk dsmc_cone_DSMCState_000.00*
-to generate the corresponding VTK files, which can then be loaded into your visualization tool. The resulting translational temperature and velocity in the domain are shown in {numref}`fig:dsmc-cone-visu`. The visualized variables are `Total_TempTransMean`, which is mean translational temperature and the magnitude of the velocities `Total_VeloX`, `Total_VeloX`, `Total_VeloX` (which is automatically generated by ParaView). Since the data is stored on the original mesh (and not the internally refined octree mesh), the data initially looks as shown in the two upper halves. **ParaView** offers the possibility to interpolate this data using the `CellDatatoPointData` filter. The data visualized in this way can be seen in the lower half of the image.
+to generate the corresponding VTK files, which can then be loaded into your visualization tool. The resulting translational temperature and velocity in the domain are shown in {numref}`fig:dsmc-cone-visu`. The visualized variables are `Total_TempTransMean`, which is mean translational temperature and the magnitude of the velocities `Total_VeloX`, `Total_VeloX`, `Total_VeloX` (which is automatically generated by ParaView). Since the data is stored on the original mesh (and not the internally refined octree mesh), the data initially looks as shown in the two upper halves. **ParaView** offers the possibility to interpolate this data using the `CellDatatoPointData` filter. The data visualized in this way can be seen in the lower half of the image.
```{figure} results/dsmc-cone-visu.jpg
---
name: fig:dsmc-cone-visu
-width: 90%
+width: 600px
---
Translational temperature and velocity in front of the 70° Cone, top: original data; bottom: interpolated data.
@@ -323,7 +327,7 @@ to generate the corresponding VTK files, which can then be loaded into your visu
```{figure} results/dsmc-cone-heatflux.svg
---
name: fig:dsmc-cone-heatflux
-width: 50%
+width: 400px
---
Experimental heat flux data compared with simulation results from PIClas.
diff --git a/docs/documentation/userguide/tutorials/dsmc-cone-3D/dsmc-cone-3D.md b/docs/documentation/userguide/tutorials/dsmc-cone-3D/dsmc-cone-3D.md
index 084be3b0b..ba474bf63 100644
--- a/docs/documentation/userguide/tutorials/dsmc-cone-3D/dsmc-cone-3D.md
+++ b/docs/documentation/userguide/tutorials/dsmc-cone-3D/dsmc-cone-3D.md
@@ -60,7 +60,7 @@ The following commands are required to save all elements even if they are not pa
Save "70degCone_3D.msh";
The mesh file in the file format `.h5` used by **piclas** has to be converted using HOPR by supplying an input file `hopr.ini` using the corresponding mode:
-
+
Mode = 5
As another possibility, the `SplitToHex` option can be enabled in the `hopr.ini` file instead of using the `SubdivionAlgorithm` command in Gmsh. The expected result for the 3D mesh is shown in {numref}`fig:dsmc-cone-gmsh-mesh`.
@@ -68,7 +68,7 @@ As another possibility, the `SplitToHex` option can be enabled in the `hopr.ini`
```{figure} mesh/dsmc-cone-gmsh-mesh.jpg
---
name: fig:dsmc-cone-gmsh-mesh
-width: 90%
+width: 600px
---
3D mesh of the 70° cone.
@@ -109,7 +109,7 @@ An exemplary simulation result using the 3D mesh generated with Gmsh is shown in
```{figure} results/dsmc-cone-gmsh-visu.jpg
---
name: fig:dsmc-cone-gmsh-visu
-width: 90%
+width: 600px
---
Translational temperature around the 70° cone.
diff --git a/docs/documentation/userguide/tutorials/dsmc-reservoir/dsmc-reservoir.md b/docs/documentation/userguide/tutorials/dsmc-reservoir/dsmc-reservoir.md
index 11531cb19..cdf01ad0e 100644
--- a/docs/documentation/userguide/tutorials/dsmc-reservoir/dsmc-reservoir.md
+++ b/docs/documentation/userguide/tutorials/dsmc-reservoir/dsmc-reservoir.md
@@ -25,7 +25,7 @@ The size of the simulation domain is set to [$\pu{4.64e-6}\times\pu{4.64e-6}\tim
```{figure} mesh/dsmc-reservoir-mesh-corners.svg
---
name: fig:dsmc-reservoir-mesh-corners
-width: 50%
+width: 400px
---
Order of the corners to define the used mesh. The first node is placed at the origin.
```
@@ -33,7 +33,7 @@ Order of the corners to define the used mesh. The first node is placed at the or
Afterwards this element is scaled via
postScaleMesh = T
- meshScale = 4.64E-6
+ meshScale = 4.64E-6
The number of mesh elements for the block in each direction can be adjusted by changing the line
@@ -58,13 +58,13 @@ For more information about hopr, visit [https://github.com/hopr-framework/hopr](
Install **piclas** by compiling the source code as described in Chapter {ref}`userguide/installation:Installation` and make sure to set the correct compile flags (ie. chose the correct simulation method)
- PICLAS_TIMEDISCMETHOD = RESERVOIR
+ PICLAS_TIMEDISCMETHOD = DSMC
or simply run the following command from inside the *build* directory
- cmake ../ -DPICLAS_TIMEDISCMETHOD=RESERVOIR
+ cmake ../ -DPICLAS_TIMEDISCMETHOD=DSMC
-to configure the build process and run `make` afterwards to build the executable. For this setup, the reservoir method, which is based on the DSMC method, is needed to allow for reservoir specific settings. It is recommended to either utilize a separate build folder (e.g. build_DSMC/) or to delete the contents of the folder beforehand to avoid conflicts between different compiler options (e.g. the setting `PICLAS_EQNSYSNAME = poisson` from the plasma wave tutorial is in conflict with the DSMC method). An overview over the available solver and discretization options is given in Section {ref}`sec:solver-settings`. The physical parameters for this test case are summarized in {numref}`tab:dsmc_chem_off_phys`.
+to configure the build process and run `make` afterwards to build the executable. It is recommended to either utilize a separate build folder (e.g. build_DSMC/) or to delete the contents of the folder beforehand to avoid conflicts between different compiler options (e.g. the setting `PICLAS_EQNSYSNAME = poisson` from the plasma wave tutorial is in conflict with the DSMC method). An overview over the available solver and discretization options is given in Section {ref}`sec:solver-settings`. The physical parameters for this test case are summarized in {numref}`tab:dsmc_chem_off_phys`.
```{table} Physical properties at the simulation start
---
@@ -109,14 +109,14 @@ where, the path to the mesh file `MeshFile`, project name and particle tracking
where the final simulation time `tend` [s], the time step for the field and particle solver is set via `ManualTimeStep` [s]. The time between restart/checkpoint file output is defined via `Analyze_dt` (which is also the output time for specific analysis functions in the field solver context). The number of time step iterations `IterDisplayStep` defines the interval between information output regarding the current status of the simulation, which is written to std.out. The `Particles-HaloEpsVelo` [m/s] determines the size of the halo region for MPI communication and should not be smaller than the fastest particles in the simulation.
(sec:tutorial-dsmc-analysis-setup)=
-### Analysis setup
+### Analysis setup
For this case our focus is on the run-time analysis to investigate the transient behavior of the reservoir. The first parameter `Part-AnalyzeStep` allows to perform the output every N$^\text{th}$ iteration to reduce the size of the output file and to increase the computational speed. Different parameters for run-time analysis can be enabled, in this case the number of particles per species (`CalcNumSpec`) and the temperature output (`CalcTemp`). It is also recommended to enable `Particles-DSMC-CalcQualityFactors`, which provides outputs to evaluate the quality of the simulation results such as the mean and maximum collision probabilities. The parameter `TimeStampLength = 13` reduces the output filename length. It can be needed for postprocessing, as e.g. ParaView sometimes does not sort the files correctly if the timestamps are too long. The displayed time solution would then be faulty.
! =============================================================================== !
! Particle Analysis
! =============================================================================== !
-
+
Part-AnalyzeStep = 1
CalcNumSpec = T
CalcTemp = T
@@ -188,8 +188,7 @@ $$ N_{\text{CO}_2,\text{sim}} = \frac{n_{\text{CO}_2} V}{w_{\text{CO}_2}} $$
(sec:tutorial-dsmc-dsmc-setup)=
### DSMC setup
-Finally, DSMC has to be enabled (`UseDSMC = T`) and the particle movement is disabled via `Particles-DSMCReservoirSim = T` to reduce the computational effort. Keep in mind that the latter needs a compiled
-version of piclas using `PICLAS_TIMEDISCMETHOD = RESERVOIR`. Besides these settings `Particles-DSMC-CollisMode` is an important parameter. If set to 1, only elastic collisions
+Finally, DSMC has to be enabled (`UseDSMC = T`) and the particle movement is disabled via `Particles-DSMCReservoirSim = T` to reduce the computational effort. Besides these settings `Particles-DSMC-CollisMode` is an important parameter. If set to 1, only elastic collisions
are performed, if set to 2 relaxation processes are allowed and if set to 3 chemistry is enabled. Additionally, constant values for the rotational (`Particles-DSMC-RotRelaxProb`) and vibrational (`Particles-DSMC-VibRelaxProb`) relaxation probabilities are defined.
! =============================================================================== !
@@ -199,7 +198,7 @@ are performed, if set to 2 relaxation processes are allowed and if set to 3 chem
Particles-DSMCReservoirSim = T
Particles-DSMC-CollisMode = 2
Particles-DSMC-RotRelaxProb = 0.2
- Particles-DSMC-VibRelaxProb = 0.02
+ Particles-DSMC-VibRelaxProb = 0.02
Besides the data given in the **parameter.ini**, a proper DSMC simulation needs additional species information, which is defined in the **DSMC.ini**. The species numeration needs to be the same in both files.
@@ -274,7 +273,7 @@ In addition to `std.out`, which contains information about the simulation proces
```{figure} results/dsmc-reservoir-temperature-relaxation.svg
---
name: fig:dsmc-reservoir-temperature-relaxation
-width: 50%
+width: 400px
---
Temperature relaxation process towards thermal equilibrium.
@@ -342,7 +341,7 @@ Therefore, in this example with one reaction and each of the three species as po
In order to investigate the transient behavior, a longer simulation time was chosen. This results in comparatively long computing times, which is why the use of several computing cores is recommended. The number of cores may not exceed the number of cells. This results in a maximum of 4 cores for the described simulation. Another important note is that bash does not understand aliases which are not at the start of a line. Thus a copy of the **piclas** binary must be located in the current folder
cp $PICLAS_PATH/build/bin/piclas .
-
+
or the whole path to the binary must be used instead. Assuming a run with 4 cores is desired and the **piclas** binary is located at the current directory, the command
mpirun -np 4 piclas parameter.ini DSMC.ini | tee std.out
@@ -376,7 +375,7 @@ The `Projectname_visuPart_Timestamp.vtu` files contain simulation particle speci
```{figure} results/dsmc-reservoir-species.jpg
---
name: fig:dsmc-reservoir-species
-width: 100%
+width: 600px
---
Comparison of the present species (simulation particles) at start (left) and end (right) time of the simulation.
@@ -387,7 +386,7 @@ While the figure above is only capable of giving a general overview about the pr
```{figure} results/dsmc-reservoir-reaction.jpg
---
name: fig:dsmc-reservoir-reaction
-width: 100%
+width: 600px
---
Development of species composition (left) and translational temperature and dissociation rate (right) over time.
diff --git a/docs/documentation/userguide/tutorials/pic-poisson-plasma-wave/pic-poisson-plasma-wave.md b/docs/documentation/userguide/tutorials/pic-poisson-plasma-wave/pic-poisson-plasma-wave.md
index 23c8aeb74..3419df9f5 100644
--- a/docs/documentation/userguide/tutorials/pic-poisson-plasma-wave/pic-poisson-plasma-wave.md
+++ b/docs/documentation/userguide/tutorials/pic-poisson-plasma-wave/pic-poisson-plasma-wave.md
@@ -80,6 +80,7 @@ boundary for the same periodic vector.
```{figure} mesh/tut-pic-pw-mesh.jpg
---
name: fig:plasma-wave-mesh
+width: 700px
---
Mesh with $60\times1\times1$ elements and a size of [$2\pi\times0.2\times0.2$] m$^{3}$.
@@ -306,7 +307,7 @@ Each type of the initialization set might have a different set of parameters and
To calculate the number of simulation particles of, e.g. electrons, defined by `Part-Species1-Init1-ParticleNumber`, the given
-number density $n_{e}$ in {numref}`tab:pic_poisson_plasma_wave_phys`, the selected weighting factor $w_{e}$ and the volume of the
+number density $n_{e}$ in {numref}`tab:pic_poisson_plasma_wave_phys`, the selected weighting factor $w_{e}$ and the volume of the
complete domain ($V=2\pi\cdot0.2\cdot0.2\pu{m^{3}}$) are utilized.
$$ N_{e,sim} = \frac{n_{e} V}{w_{e}} $$
@@ -351,7 +352,7 @@ The command
executes the code and dumps all output into the file *std.out*.
To reduce the computation time, the simulation can be run using the Message Passing Interface (MPI) on multiple cores, in this case 4
-
+
mpirun -np 4 piclas parameter.ini | tee std.out
If the run has completed successfully, which should take only a brief moment, the contents of the working folder should look like
@@ -413,7 +414,7 @@ The parameters for **piclas2vtk** are stored in the **parameter.ini** file under
where `NVisu` is the polynomial visualization degree on which the field solution is interpolated.
Depending on the used polynomial degree `N` and subsequently the degree of visualization `NVisu`, which should always be higher than
`N`, the resulting electric potential $\Phi$ and its derivative the electric field strength **E** might show signs of oscillations.
-This is because the PIC simulation is always subject to noise that is influenced by the discretization (number of elements and
+This is because the PIC simulation is always subject to noise that is influenced by the discretization (number of elements and
polynomial degree as well as number of particles) and is visible in the solution as this is a snapshot of the current simulation.
Additionally, the flag `VisuParticles` activates the output of particle position, velocity and species to the *vtk*-files.
@@ -431,6 +432,7 @@ The electric potential field can be viewed, e.g., by opening `plasma_wave_Soluti
```{figure} results/tut-pic-pw-results.jpg
---
name: fig:plasma-wave-results
+width: 700px
---
Resulting electric potential and field.
diff --git a/docs/documentation/userguide/visu_output.md b/docs/documentation/userguide/visu_output.md
index 51153a514..09614c3e8 100644
--- a/docs/documentation/userguide/visu_output.md
+++ b/docs/documentation/userguide/visu_output.md
@@ -402,6 +402,15 @@ which calculates the species-dependent averaged impact energy (trans, rot, vib,
impact angle of $0^{\circ}$), number of real particle impacts over the sampling duration and number of real particle impacts
per area per second.
+(sec:sampling-elec-excitation)=
+### Electronic excitation
+
+To sample the cell-local excitation of electronic energy levels, an additional flag has to be set
+
+ Part-SampleElectronicExcitation = T
+
+This option adds an additional container to the DSMCState output, which after a successful conversion with `piclas2vtk` will produce an additional file `*_visuExcitationData_*.vtu`. Here the excitation rate is given per second [1/s] for each electronic level. This option is currently only supported with the cross-section based electronic excitation (see Section {ref}`sec:background-gas-electronic-xsec`).
+
## Integral Variables
This analysis measures integral values from the field- and/or particle-solver data over time and writes different .csv files.
Mainly field-related data is stored in `FieldAnalyze.csv`, whereas particle-related analysis is divided into mostly global data in
diff --git a/docs/documentation/userguide/workflow.md b/docs/documentation/userguide/workflow.md
index 9e4c29038..9012ebcae 100644
--- a/docs/documentation/userguide/workflow.md
+++ b/docs/documentation/userguide/workflow.md
@@ -84,7 +84,6 @@ Before setting up a simulation, the code must be compiled with the desired param
* RK4: Runge-Kutta 4th order in time
* RK14: Low storage Runge-Kutta 4, 14 stages version - Niegemann et al 2012
* DSMC: Direct Simulation Monte Carlo, Section {ref}`sec:DSMC`
- * RESERVOIR: Simplified DSMC module for single cell reservoir simulations
* FP-Flow: Fokker-Planck-based collision operator, Section {ref}`sec:FP-Flow`
* BGK-Flow: Bhatnagar-Gross-Krook collision operator, Section {ref}`sec:BGK-Flow`
* ``PICLAS_EQNSYSNAME``: Equation system to be solved
@@ -152,7 +151,7 @@ The concept of the parameter file is described as followed:
* The order of defined variables is irrelevant, except for the special case when redefining boundaries.
However, it is preferable to group similar variables together.
-The options and underlying models are discussed in Chapter {ref}`userguide/features-and-models/index:Features & Models`, while the available
+The options and underlying models are discussed in Chapter {ref}`userguide/features-and-models/index:Features & Models`, while the available
output options are given in Chapter {ref}`userguide/visu_output:Visualization & Output`.
Due to the sheer number of parameters available, it is advisable to build upon an existing parameter file from one of the tutorials
in Chapter {ref}`userguide/tutorials/index:Tutorials`.
@@ -167,6 +166,11 @@ The simulation may be restarted from an existing state file
piclas parameter.ini [DSMC.ini] [restart_file.h5]
+The state file , e.g., TestCase_State_000.5000000000000000.h5, contains all the required information to continue the simulation from
+this point in time
+
+ piclas parameter.ini DSMC.ini TestCase_State_000.5000000000000000.h5
+
A state file is generated at the end of the simulation and also at every time step defined by `Analyze_dt`. **Note:** When
restarting from an earlier time (or zero), all later state files possibly contained in your directory are deleted!
@@ -193,6 +197,18 @@ the mesh is simply divided into parts along the space filling curve. Thus, domai
not limited by e.g. an integer factor between the number of cores and elements. The only limitation is that the number of cores
may not exceed the number of elements.
+### Profile-guided optimization (PGO)
+
+To further increase performance for production runs, profile-guided optimization can be utilized with the GNU compiler. This requires the execution of a representative simulation run with PICLas compiled using profiling instrumentation. For this purpose, the code has to be configured and compiled using the following additional settings and the `Profile` build type:
+
+ -DPICLAS_PERFORMANCE=ON -DUSE_PGO=ON -DCMAKE_BUILD_TYPE=Profile
+
+A short representative simulation has to be performed, where additional files with the profiling information will be stored. Note that the test run should be relatively short as the code will be substantially slower than the regular `Release` build type. Afterwards, the code can be configured and compiled again for the production runs, using the `Release` build type:
+
+ -DPICLAS_PERFORMANCE=ON -DUSE_PGO=ON -DCMAKE_BUILD_TYPE=Release
+
+Warnings regarding missing profiling files (`-Wmissing-profile`) can be ignored, if they concern modules not relevant for the current simulation method (e.g. `bgk_colloperator.f90` will be missing profile information if only a DSMC simulation has been performed).
+
## Post-processing
**PICLas** comes with a tool for visualization. The piclas2vtk tool converts the HDF5 files generated by **PICLas** to the binary
diff --git a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini
index 6ddfe40b8..6b2340994 100644
--- a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini
+++ b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini
@@ -76,8 +76,8 @@ Particles-DSMC-CalcSurfaceVal=true
UseDSMC=true
Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds=2
-Particles-RandomSeed1=1
-Particles-RandomSeed2=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=3
Particles-DSMC-UseOctree=true
Particles-OctreePartNumNode=80
Particles-OctreePartNumNodeMin=50
diff --git a/regressioncheck/CHE_BGK/RELAX_CH4/parameter.ini b/regressioncheck/CHE_BGK/RELAX_CH4/parameter.ini
index 84e156f9a..2f13e57f3 100644
--- a/regressioncheck/CHE_BGK/RELAX_CH4/parameter.ini
+++ b/regressioncheck/CHE_BGK/RELAX_CH4/parameter.ini
@@ -73,7 +73,6 @@ Particles-DSMC-VibRelaxProb=0.05
! DSMC
! =============================================================================== !
UseDSMC=T
-Particles-DSMCReservoirSim=T
Particles-DSMC-CalcQualityFactors=F
Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds =2
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/PartAnalyze_ref.csv b/regressioncheck/CHE_DSMC/SurfaceOutput/PartAnalyze_ref.csv
new file mode 100644
index 000000000..4f9974a98
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/PartAnalyze_ref.csv
@@ -0,0 +1,22 @@
+001-TIME,002-NumDens-Spec-001,003-Current-Spec-001-SF-001
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.9999999999999999E-010,0.2496600000000000E+016,0.1999996962399000E-003
+0.2000000000000000E-009,0.4993200000000000E+016,0.1999996962399000E-003
+0.3000000000000000E-009,0.7489800000000000E+016,0.1999996962399000E-003
+0.3999999999999999E-009,0.9986400000000000E+016,0.1999996962399000E-003
+0.4999999999999999E-009,0.1248300000000000E+017,0.1999996962399000E-003
+0.6000000000000001E-009,0.1497960000000000E+017,0.1999996962399000E-003
+0.7000000000000003E-009,0.1747620000000000E+017,0.1999996962399000E-003
+0.8000000000000004E-009,0.1997300000000000E+017,0.2000157180052000E-003
+0.9000000000000006E-009,0.2246940000000000E+017,0.1999836744746000E-003
+0.1000000000000000E-008,0.2494860000000000E+017,0.1999996962399048E-003
+0.1100000000000000E-008,0.2496600000000000E+017,0.1999996962399000E-003
+0.1199999999999999E-008,0.2496560000000000E+017,0.1999996962399000E-003
+0.1299999999999999E-008,0.2496720000000000E+017,0.1999996962399000E-003
+0.1399999999999999E-008,0.2496760000000000E+017,0.1999996962399000E-003
+0.1499999999999998E-008,0.2496460000000000E+017,0.1999996962399000E-003
+0.1599999999999998E-008,0.2496700000000000E+017,0.1999996962399000E-003
+0.1699999999999998E-008,0.2496600000000000E+017,0.1999996962399000E-003
+0.1799999999999997E-008,0.2496340000000000E+017,0.1999996962399000E-003
+0.1899999999999997E-008,0.2496860000000000E+017,0.1999996962399000E-003
+0.2000000000000000E-008,0.2496760000000000E+017,0.1999996962398676E-003
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/70degCone2D_Set1_DSMCSurfState_000.00200000000000000_reference.h5 b/regressioncheck/CHE_DSMC/SurfaceOutput/SurfFlux_Tria_EmissionCurrent_DSMCSurfState_000.00000000200_ref.h5
similarity index 50%
rename from regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/70degCone2D_Set1_DSMCSurfState_000.00200000000000000_reference.h5
rename to regressioncheck/CHE_DSMC/SurfaceOutput/SurfFlux_Tria_EmissionCurrent_DSMCSurfState_000.00000000200_ref.h5
index 6144f0287..820194006 100644
Binary files a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/70degCone2D_Set1_DSMCSurfState_000.00200000000000000_reference.h5 and b/regressioncheck/CHE_DSMC/SurfaceOutput/SurfFlux_Tria_EmissionCurrent_DSMCSurfState_000.00000000200_ref.h5 differ
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/SurfaceAnalyze_ref.csv b/regressioncheck/CHE_DSMC/SurfaceOutput/SurfaceAnalyze_ref.csv
new file mode 100644
index 000000000..1c64b83af
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/SurfaceAnalyze_ref.csv
@@ -0,0 +1,22 @@
+001-TIME,002-Flux-Spec-001-BC_Xplus,003-TotalElectricCurrent-BC_Xplus
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.9999999999999999E-010,0.0000000000000000E+000,0.0000000000000000E+000
+0.2000000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.3000000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.3999999999999999E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.4999999999999999E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.6000000000000001E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.7000000000000003E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.8000000000000004E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.9000000000000006E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.1000000000000000E-008,0.8700000000000048E+013,-.1393893581100008E-005
+0.1100000000000000E-008,0.1239600000000004E+016,-.1986058026588007E-003
+0.1199999999999999E-008,0.1248500000000004E+016,-.2000317397705007E-003
+0.1299999999999999E-008,0.1247500000000004E+016,-.1998715221175007E-003
+0.1399999999999999E-008,0.1248100000000004E+016,-.1999676527093007E-003
+0.1499999999999998E-008,0.1249800000000004E+016,-.2002400227194007E-003
+0.1599999999999998E-008,0.1247100000000004E+016,-.1998074350563007E-003
+0.1699999999999998E-008,0.1248800000000004E+016,-.2000798050664007E-003
+0.1799999999999997E-008,0.1249600000000004E+016,-.2002079791888007E-003
+0.1899999999999997E-008,0.1245700000000002E+016,-.1995831303421003E-003
+0.2000000000000000E-008,0.1248799999999963E+016,-.2000798050663941E-003
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/analyze.ini b/regressioncheck/CHE_DSMC/SurfaceOutput/analyze.ini
new file mode 100644
index 000000000..eb171f8d9
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/analyze.ini
@@ -0,0 +1,13 @@
+! compare the last line of PartAnalyze.csv with a reference file
+compare_data_file_name = PartAnalyze.csv,SurfaceAnalyze.csv
+compare_data_file_reference = PartAnalyze_ref.csv,SurfaceAnalyze_ref.csv
+compare_data_file_tolerance = 1e-3
+compare_data_file_tolerance_type = relative
+compare_data_file_one_diff_per_run=F
+
+! Compare cell-local values
+h5diff_file = SurfFlux_Tria_EmissionCurrent_DSMCSurfState_000.00000000200.h5
+h5diff_reference_file = SurfFlux_Tria_EmissionCurrent_DSMCSurfState_000.00000000200_ref.h5
+h5diff_data_set = SurfaceData
+h5diff_tolerance_value = 1E20
+h5diff_tolerance_type = absolute
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/command_line.ini b/regressioncheck/CHE_DSMC/SurfaceOutput/command_line.ini
new file mode 100644
index 000000000..6c65a0613
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/command_line.ini
@@ -0,0 +1 @@
+MPI=1,4
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/externals.ini b/regressioncheck/CHE_DSMC/SurfaceOutput/externals.ini
new file mode 100644
index 000000000..0bdc5a5c4
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/externals.ini
@@ -0,0 +1,6 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/hopr.ini b/regressioncheck/CHE_DSMC/SurfaceOutput/hopr.ini
new file mode 100644
index 000000000..91992c93b
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/hopr.ini
@@ -0,0 +1,42 @@
+ProjectName = channel
+Debugvisu = T
+DebugVisuLevel=1
+NVisu =1
+Mode =1
+
+DEFVAR = (REAL): minus_x = 0.0
+DEFVAR = (REAL): plus_x = 5.0
+
+DEFVAR = (REAL): minus_y = 0.0
+DEFVAR = (REAL): plus_y = 0.1
+
+DEFVAR = (REAL): minus_z = 0.0
+DEFVAR = (REAL): plus_z = 0.1
+
+Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /)
+nElems =(/50,1,1/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+nZones = 1
+
+VV = (/0. , plus_y , 0./) ! Verschiebungsvektor 2 (y-Richtung)
+VV = (/0. , 0. , plus_z/) ! Verschiebungsvektor 3 (z-Richtung)
+
+BoundaryName=BC_Xplus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/1,0,0,-1/)
+BoundaryName=BC_Yminus
+BoundaryType=(/1,0,0,1/)
+BoundaryName=BC_Zplus
+BoundaryType=(/1,0,0,-2/)
+BoundaryName=BC_Zminus
+BoundaryType=(/1,0,0,2/)
+
+postscalemesh=true
+meshscale=1e-3
+jacobiantolerance=1e-20
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/parameter.ini b/regressioncheck/CHE_DSMC/SurfaceOutput/parameter.ini
new file mode 100644
index 000000000..9551d588a
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/parameter.ini
@@ -0,0 +1,103 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+VisuParticles = T
+TimeStampLength = 15
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = channel_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = SurfFlux_Tria_EmissionCurrent
+CalcSurfFluxInfo = T
+CalcNumDens = T
+CalcPartBalanace = T
+! =============================================================================== !
+! Load Balance
+! =============================================================================== !
+DoLoadBalance = T
+Load-DeviationThreshold = 1e-2
+LoadBalanceMaxSteps = 10
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 2.0E-9
+Analyze_dt = 1.0E-9
+! =============================================================================== !
+! PARTICLE BOUNDARY
+! =============================================================================== !
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=reflective
+Part-Boundary1-NbrOfSpeciesSwaps = 1
+Part-Boundary1-SpeciesSwaps1 = (/1,0/)
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=reflective
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=symmetric
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=symmetric
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=symmetric
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=symmetric
+Part-FIBGMdeltas=(/1e-4,1e-4,1e-4/)
+
+CalcBoundaryParticleOutput = T
+BPO-NPartBoundaries = 1
+BPO-PartBoundaries = (/1/)
+BPO-NSpecies = 1
+BPO-Species = (/1/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 1
+Part-Species$-MacroParticleFactor = 1E1
+
+Part-AnalyzeStep = 5
+Surface-AnalyzeStep = 5
+IterDisplayStep = 5
+ManualTimeStep = 2.0000E-11
+
+! Volume-average
+Part-WriteMacroValues = T
+Part-IterationForMacroVal = 50
+
+Particles-DSMC-CalcSurfaceVal=T
+CalcSurfaceImpact = T
+! =============================================================================== !
+! Species1 - electron
+! =============================================================================== !
+Part-Species1-MassIC = 9.11E-31
+Part-Species1-ChargeIC = -1.60217653E-19
+
+Part-Species1-nSurfaceFluxBCs=1
+
+Part-Species1-Surfaceflux1-BC=2
+Part-Species1-Surfaceflux1-VeloIC = 5E6
+Part-Species1-Surfaceflux1-VeloVecIC = (/1,0,0/)
+Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn
+Part-Species1-Surfaceflux1-MWTemperatureIC = 5.
+Part-Species1-Surfaceflux1-EmissionCurrent = 2E-4
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=1.0E+07
+UseDSMC=true
+Particles-DSMC-CollisMode = 0
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=1
+Particles-RandomSeed2=2
+Particles-DSMC-CalcQualityFactors = F
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/SurfaceOutput/readme.md b/regressioncheck/CHE_DSMC/SurfaceOutput/readme.md
new file mode 100644
index 000000000..b2012978a
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/SurfaceOutput/readme.md
@@ -0,0 +1,5 @@
+# Flow through channel: Testing of surface output
+* Constant inflow with a fixed emission current (2E-4A)
+* Output in ParticleAnalyze.csv of emission current through surface flux should correspond to input value
+* Output in SurfaceAnalyze.csv of current exiting the domain should be equal to the inflow
+* Output in DSMCSurfState (CalcSurfaceImpact = T): absolute comparison of ImpactFlux
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/cube/parameter.ini b/regressioncheck/CHE_DSMC/cube/parameter.ini
index 1208cf298..e537040ca 100644
--- a/regressioncheck/CHE_DSMC/cube/parameter.ini
+++ b/regressioncheck/CHE_DSMC/cube/parameter.ini
@@ -144,9 +144,6 @@ Part-Species14-MacroParticleFactor=1E7
! DSMC
! =============================================================================== !
UseDSMC=true
-Particles-DSMCReservoirSim=false
-!Particles-DSMCReservoirSimRate=true
-!Particles-DSMCReservoirStatistic=true
Particles-DSMC-CollisMode=2,3 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart1000.csv b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart1000.csv
new file mode 100644
index 000000000..dbc9553d0
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart1000.csv
@@ -0,0 +1,3 @@
+001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003
+0.0000000000000000E+000,0.0000000000000000E+000,0.3200000000000000E+006,0.3200000000000000E+006
+0.1000000000000000E-009,0.0000000000000000E+000,0.3200040000000000E+006,0.3200040000000000E+006
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart500.csv b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart500.csv
new file mode 100644
index 000000000..6d0966c36
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/PartAnalyze_ref_Npart500.csv
@@ -0,0 +1,3 @@
+001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003
+0.0000000000000000E+000,0.0000000000000000E+000,0.1600000000000000E+006,0.1600000000000000E+006
+0.1000000000000000E-009,0.0000000000000000E+000,0.1600010000000000E+006,0.1600010000000000E+006
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/analyze.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/analyze.ini
new file mode 100644
index 000000000..3ca3abe43
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/analyze.ini
@@ -0,0 +1,11 @@
+! absolute comparison of number density (2E17 corresponds to 0.2% deviation to target density 1E20)
+h5diff_file = vMPF_CellLocal_DSMCState_000.0000000001.h5
+h5diff_reference_file = vMPF_CellLocal_DSMCState_000.0000000001_ref.h5
+h5diff_data_set = ElemData
+h5diff_tolerance_value = 2E17
+h5diff_tolerance_type = absolute
+
+compare_data_file_name = PartAnalyze.csv, PartAnalyze.csv
+compare_data_file_reference = PartAnalyze_ref_Npart500.csv, PartAnalyze_ref_Npart1000.csv
+compare_data_file_tolerance = 1e-4
+compare_data_file_tolerance_type = relative
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/command_line.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/externals.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/externals.ini
new file mode 100644
index 000000000..5d54a1591
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr_noncomform.ini
+externalruntime = pre
+cmd_suffix =
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/hopr_noncomform.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/hopr_noncomform.ini
new file mode 100644
index 000000000..26ce9bdc0
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/hopr_noncomform.ini
@@ -0,0 +1,50 @@
+DEFVAR=(INT): i01 = 4 ! no. elems in left and right block
+DEFVAR=(INT): i02 = 8 ! no. elems in upper block
+
+DEFVAR=(INT): ir1 = 4 ! no. elems in r for first ring
+DEFVAR=(REAL): r01 = 3.5 ! middle square dim
+DEFVAR=(REAL): r02 = 7.0 ! middle square dim
+
+DEFVAR=(INT): iz1 = 4 !
+DEFVAR=(REAL): lz1 = 1 ! length of domain in z
+
+!================================================================================================================================= !
+! OUTPUT
+!================================================================================================================================= !
+ProjectName = cylinder_nonconform
+Debugvisu = T ! Visualize mesh and boundary conditions (tecplot ascii)
+checkElemJacobians = T
+
+!================================================================================================================================= !
+! MESH
+!================================================================================================================================= !
+Mode = 1 ! Mode for Cartesian boxes
+nZones = 2 ! number of boxes
+useCurveds = F
+
+! ---------------------------------------------------------------
+! Big segment
+! ---------------------------------------------------------------
+!right-lower (x+)
+Corner =(/r01 , 0. , -lz1 ,, r02 , 0. , -lz1 ,, r02 , r02 , -lz1 ,, r01 , r01 , -lz1 ,, r01 , 0. , lz1 ,, r02 , 0. , lz1 ,, r02 , r02 , lz1 ,, r01 , r01 , lz1 /)
+nElems =(/ir1,i01,iz1/) ! number of elements in each direction
+BCIndex =(/1 , 1 , 1 , 0 , 1 , 1/) ! Indices of Boundary Conditions for six Boundary Faces (z- , y- , x+ , y+ , x- , z+)
+
+! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+
+!right-upper (y+)
+Corner =(/0. , r01 , -lz1 ,, r01 , r01 , -lz1 ,, r02 , r02 , -lz1 ,, 0. , r02 , -lz1 ,, 0. , r01 , lz1 ,, r01 , r01 , lz1 ,, r02 , r02 , lz1 ,, 0. , r02 , lz1 /)
+nElems =(/i02,i02,iz1/) ! number of elements in each direction
+BCIndex =(/1 , 1 , 0 , 1 , 1 , 1/) ! Indices of Boundary Conditions for six Boundary Faces (z- , y- , x+ , y+ , x- , z+)
+! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+
+!================================================================================================================================= !
+! BOUNDARY CONDITIONS
+!================================================================================================================================= !
+
+BoundaryName=BC
+BoundaryType=(/4,0,0,0/)
+
+meshscale=1e-3
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/parameter.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/parameter.ini
new file mode 100644
index 000000000..c1c52b6a7
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/parameter.ini
@@ -0,0 +1,113 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cylinder_nonconform_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = vMPF_CellLocal
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcNumSpec = TRUE
+TimeStampLength = 14
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 1.0E-10
+Analyze_dt = 1.0E-10
+ManualTimeStep = 1.0E-10
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! BOUNDARIES
+! =============================================================================== !
+Part-nBounds=1
+Part-Boundary1-SourceName=BC
+Part-Boundary1-Condition=reflective
+Part-FIBGMdeltas=(/1e-3,1e-3,1e-3/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=2
+Part-Species$-MacroParticleFactor=1E8
+
+Part-vMPF = T
+Part-Species2-vMPFSplitThreshold = 500,1000
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=background
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=1E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=1
+Part-Species1-Init1-TempVib=1
+Part-Species1-Init1-TempRot=1
+! =============================================================================== !
+! Species2 - O2
+! =============================================================================== !
+Part-Species2-MassIC=5.31352E-26
+
+Part-Species2-nInits=1
+Part-Species2-Init1-SpaceIC=cell_local
+Part-Species2-Init1-velocityDistribution=maxwell_lpn
+Part-Species2-Init1-PartDensity=1E+20
+Part-Species2-Init1-VeloIC=0
+Part-Species2-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species2-Init1-MWTemperatureIC=1
+Part-Species2-Init1-TempVib=1
+Part-Species2-Init1-TempRot=1
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=1
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=1
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
+! =============================================================================== !
+! Species2, O2
+! =============================================================================== !
+Part-Species2-InteractionID = 2
+Part-Species2-Tref = 273
+Part-Species2-dref = 4.07E-10
+Part-Species2-omega=0.27
+Part-Species2-CharaTempRot=2.1
+Part-Species2-CharaTempVib=2272.18
+Part-Species2-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md
new file mode 100644
index 000000000..294f65ff4
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/readme.md
@@ -0,0 +1,6 @@
+# Cell-local insertion with variable MPF
+* Initial insertion with cell_local in the whole domain on a non-conform mesh with different cell volumes
+* Utilization of vMPF and a SplitThreshold to insert 500/1000 particles per cell at a constant number density
+* Comparison of the number density after one iteration, reference file was generated with 10000 particles per cell
+* Without vMPF, less particles are inserted and the number density fluctuates stronger, failing the comparison
+* Additionally, the total particle number is compared which should correspond to a multiple between number of cells (320) and the split threshold
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/vMPF_CellLocal_DSMCState_000.0000000001_ref.h5 b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/vMPF_CellLocal_DSMCState_000.0000000001_ref.h5
new file mode 100644
index 000000000..bd1522a4b
Binary files /dev/null and b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion/vMPF_CellLocal_DSMCState_000.0000000001_ref.h5 differ
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart1000.csv b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart1000.csv
new file mode 100644
index 000000000..f2c829f35
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart1000.csv
@@ -0,0 +1,3 @@
+001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003
+0.0000000000000000E+000,0.0000000000000000E+000,0.4800000000000000E+005,0.4800000000000000E+005
+0.2000000000000000E-011,0.0000000000000000E+000,0.4800000000000000E+005,0.4800000000000000E+005
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart500.csv b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart500.csv
new file mode 100644
index 000000000..a46dfabdf
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/PartAnalyze_ref_Npart500.csv
@@ -0,0 +1,3 @@
+001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003
+0.0000000000000000E+000,0.0000000000000000E+000,0.2400000000000000E+005,0.2400000000000000E+005
+0.2000000000000000E-011,0.0000000000000000E+000,0.2400000000000000E+005,0.2400000000000000E+005
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/analyze.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/analyze.ini
new file mode 100644
index 000000000..b5381a194
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/analyze.ini
@@ -0,0 +1,11 @@
+! absolute comparison of number density (2E17 corresponds to 0.2% deviation to target density 1E20)
+h5diff_file = vMPF_CellLocal_DSMCState_000.000000000002.h5
+h5diff_reference_file = vMPF_CellLocal_DSMCState_000.000000000002_ref.h5
+h5diff_data_set = ElemData
+h5diff_tolerance_value = 2E17
+h5diff_tolerance_type = absolute
+
+compare_data_file_name = PartAnalyze.csv, PartAnalyze.csv
+compare_data_file_reference = PartAnalyze_ref_Npart500.csv, PartAnalyze_ref_Npart1000.csv
+compare_data_file_tolerance = 1e-3
+compare_data_file_tolerance_type = relative
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/command_line.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/externals.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/externals.ini
new file mode 100644
index 000000000..5d54a1591
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr_noncomform.ini
+externalruntime = pre
+cmd_suffix =
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/hopr_noncomform.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/hopr_noncomform.ini
new file mode 100644
index 000000000..26ce9bdc0
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/hopr_noncomform.ini
@@ -0,0 +1,50 @@
+DEFVAR=(INT): i01 = 4 ! no. elems in left and right block
+DEFVAR=(INT): i02 = 8 ! no. elems in upper block
+
+DEFVAR=(INT): ir1 = 4 ! no. elems in r for first ring
+DEFVAR=(REAL): r01 = 3.5 ! middle square dim
+DEFVAR=(REAL): r02 = 7.0 ! middle square dim
+
+DEFVAR=(INT): iz1 = 4 !
+DEFVAR=(REAL): lz1 = 1 ! length of domain in z
+
+!================================================================================================================================= !
+! OUTPUT
+!================================================================================================================================= !
+ProjectName = cylinder_nonconform
+Debugvisu = T ! Visualize mesh and boundary conditions (tecplot ascii)
+checkElemJacobians = T
+
+!================================================================================================================================= !
+! MESH
+!================================================================================================================================= !
+Mode = 1 ! Mode for Cartesian boxes
+nZones = 2 ! number of boxes
+useCurveds = F
+
+! ---------------------------------------------------------------
+! Big segment
+! ---------------------------------------------------------------
+!right-lower (x+)
+Corner =(/r01 , 0. , -lz1 ,, r02 , 0. , -lz1 ,, r02 , r02 , -lz1 ,, r01 , r01 , -lz1 ,, r01 , 0. , lz1 ,, r02 , 0. , lz1 ,, r02 , r02 , lz1 ,, r01 , r01 , lz1 /)
+nElems =(/ir1,i01,iz1/) ! number of elements in each direction
+BCIndex =(/1 , 1 , 1 , 0 , 1 , 1/) ! Indices of Boundary Conditions for six Boundary Faces (z- , y- , x+ , y+ , x- , z+)
+
+! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+
+!right-upper (y+)
+Corner =(/0. , r01 , -lz1 ,, r01 , r01 , -lz1 ,, r02 , r02 , -lz1 ,, 0. , r02 , -lz1 ,, 0. , r01 , lz1 ,, r01 , r01 , lz1 ,, r02 , r02 , lz1 ,, 0. , r02 , lz1 /)
+nElems =(/i02,i02,iz1/) ! number of elements in each direction
+BCIndex =(/1 , 1 , 0 , 1 , 1 , 1/) ! Indices of Boundary Conditions for six Boundary Faces (z- , y- , x+ , y+ , x- , z+)
+! =(/z- , y- , x+ , y+ , x- , z+/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+
+!================================================================================================================================= !
+! BOUNDARY CONDITIONS
+!================================================================================================================================= !
+
+BoundaryName=BC
+BoundaryType=(/4,0,0,0/)
+
+meshscale=1e-3
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/parameter.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/parameter.ini
new file mode 100644
index 000000000..b5afbfb67
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/parameter.ini
@@ -0,0 +1,114 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cylinder_nonconform_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = vMPF_CellLocal
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcNumSpec = TRUE
+TimeStampLength = 16
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 2.0E-12
+Analyze_dt = 1.0E-12
+ManualTimeStep = 1.0E-12
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 1E-9
+LoadBalanceMaxSteps = 1
+! =============================================================================== !
+! BOUNDARIES
+! =============================================================================== !
+Part-nBounds=1
+Part-Boundary1-SourceName=BC
+Part-Boundary1-Condition=reflective
+Part-FIBGMdeltas=(/1e-3,1e-3,1e-3/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=2
+Part-Species$-MacroParticleFactor=1E8
+
+Part-vMPF = T
+Part-Species2-vMPFSplitThreshold = 500,1000
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=background
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=1E+12
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=0.1
+Part-Species1-Init1-TempVib=0.1
+Part-Species1-Init1-TempRot=0.1
+! =============================================================================== !
+! Species2 - O2
+! =============================================================================== !
+Part-Species2-MassIC=5.31352E-26
+
+Part-Species2-nInits=1
+Part-Species2-Init1-SpaceIC=cell_local
+Part-Species2-Init1-velocityDistribution=maxwell_lpn
+Part-Species2-Init1-MinimalLocation = (/ 0.0035, 0.0035, -1. /)
+Part-Species2-Init1-MaximalLocation = (/ 0.007, 999., 0. /)
+Part-Species2-Init1-PartDensity=1E+20
+Part-Species2-Init1-VeloIC=0
+Part-Species2-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species2-Init1-MWTemperatureIC=0.1
+Part-Species2-Init1-TempVib=0.1
+Part-Species2-Init1-TempRot=0.1
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.5
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=1
+Particles-RandomSeed2=2
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
+! =============================================================================== !
+! Species2, O2
+! =============================================================================== !
+Part-Species2-InteractionID = 2
+Part-Species2-Tref = 273
+Part-Species2-dref = 4.07E-10
+Part-Species2-omega=0.27
+Part-Species2-CharaTempRot=2.1
+Part-Species2-CharaTempVib=2272.18
+Part-Species2-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md
new file mode 100644
index 000000000..bb1e30f54
--- /dev/null
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/readme.md
@@ -0,0 +1,7 @@
+# Cell-local insertion with variable MPF
+* Initial insertion with cell_local in a limited domain on a non-conform mesh with different cell volumes
+* Utilization of vMPF and a SplitThreshold to insert 500/1000 particles per cell at a constant number density
+* Comparison of the number density after one iteration, reference file was generated with 10000 particles per cell
+* Without vMPF, less particles are inserted and the number density fluctuates stronger, failing the comparison
+* Additionally, the total particle number is compared which should correspond to a multiple between number of cells
+ * Within the Minimal/MaximalLocation, there are 48 cells
\ No newline at end of file
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/vMPF_CellLocal_DSMCState_000.000000000002_ref.h5 b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/vMPF_CellLocal_DSMCState_000.000000000002_ref.h5
new file mode 100644
index 000000000..1eeda22c0
Binary files /dev/null and b/regressioncheck/CHE_DSMC/vMPF_BGG_CellLocalInsertion_LimitLocation/vMPF_CellLocal_DSMCState_000.000000000002_ref.h5 differ
diff --git a/regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/parameter.ini b/regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/parameter.ini
index 44328e5e4..11b01d90f 100644
--- a/regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/parameter.ini
+++ b/regressioncheck/CHE_DSMC/vMPF_BGG_MultiSpec_Merge_TraceSpec/parameter.ini
@@ -47,9 +47,6 @@ Part-FIBGMdeltas=(/4.64E-6,4.64E-6,4.64E-6/)
! =============================================================================== !
UseDSMC = T
Particles-DSMC-CollisMode = 2
-Particles-DSMCReservoirSim = T
-Particles-DSMCReservoirSimRate = T
-Particles-DSMCReservoirStatistic = T
Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
Particles-RandomSeed2=2
diff --git a/regressioncheck/CHE_FPFlow/RELAX_CH4/parameter.ini b/regressioncheck/CHE_FPFlow/RELAX_CH4/parameter.ini
index 100076b68..57c244db3 100644
--- a/regressioncheck/CHE_FPFlow/RELAX_CH4/parameter.ini
+++ b/regressioncheck/CHE_FPFlow/RELAX_CH4/parameter.ini
@@ -74,7 +74,6 @@ Particles-DSMC-VibRelaxProb=0.05
! DSMC
! =============================================================================== !
UseDSMC=T
-Particles-DSMCReservoirSim=T
Particles-DSMC-CalcQualityFactors=F
Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds =2
diff --git a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini
index 0901591de..3a329ec81 100644
--- a/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini
+++ b/regressioncheck/CHE_PIC_maxwell_RK4/IMD_coupling/parameter.ini
@@ -162,7 +162,6 @@ Part-Species5-IsIMDSpecies = T
! DSMC
! =============================================================================== !
UseDSMC=false
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/PartAnalyze_ref.csv b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/PartAnalyze_ref.csv
index 90436bcef..faab753f3 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/PartAnalyze_ref.csv
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/PartAnalyze_ref.csv
@@ -1,12 +1,17 @@
001-TIME,002-Current-Spec-001-SF-001
0.0000000000000000E+000,0.0000000000000000E+000
-0.1000000000000000E-011,0.1467593701480000E+001
-0.2000000000000000E-011,0.1467433483827000E+001
-0.3000000000000000E-011,0.1467433483827000E+001
-0.4000000000000000E-011,0.1467433483827000E+001
-0.5000000000000000E-011,0.1467593701480000E+001
-0.5999999999999999E-011,0.1467593701480000E+001
-0.6999999999999999E-011,0.1467433483827000E+001
-0.8000000000000000E-011,0.1467593701480000E+001
-0.9000000000000000E-011,0.1467433483827000E+001
-0.9999999999999999E-011,0.1467593701480000E+001
+0.2000000000000000E-010,0.1467513592653500E+001
+0.4000000000000000E-010,0.1467513592653500E+001
+0.6000000000000000E-010,0.1467513592653500E+001
+0.8000000000000000E-010,0.1467433483827000E+001
+0.1000000000000000E-009,0.1467513592653499E+001
+0.1200000000000000E-009,0.1467593701480000E+001
+0.1400000000000000E-009,0.1467433483827000E+001
+0.1600000000000000E-009,0.1467513592653500E+001
+0.1800000000000000E-009,0.1467593701480000E+001
+0.2000000000000000E-009,0.1467513592653501E+001
+0.2200000000000000E-009,0.1467433483827000E+001
+0.2400000000000000E-009,0.1467513592653500E+001
+0.2600000000000000E-009,0.1467513592653500E+001
+0.2800000000000000E-009,0.1467513592653500E+001
+0.3000000000000000E-009,0.1467513592653498E+001
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/SurfaceAnalyze_ref.csv b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/SurfaceAnalyze_ref.csv
new file mode 100644
index 000000000..8f0ace133
--- /dev/null
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/SurfaceAnalyze_ref.csv
@@ -0,0 +1,17 @@
+001-TIME,002-Flux-Spec-001-BC_Xplus,003-TotalElectricCurrent-BC_Xplus
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.2000000000000000E-010,0.0000000000000000E+000,0.0000000000000000E+000
+0.4000000000000000E-010,0.0000000000000000E+000,0.0000000000000000E+000
+0.6000000000000000E-010,0.0000000000000000E+000,0.0000000000000000E+000
+0.8000000000000000E-010,0.0000000000000000E+000,0.0000000000000000E+000
+0.1000000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.1200000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.1400000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.1600000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.1800000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.2000000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.2200000000000000E-009,0.0000000000000000E+000,0.0000000000000000E+000
+0.2400000000000000E-009,0.2500000000000002E+017,-.4005441325000004E-002
+0.2600000000000000E-009,0.6887500000000006E+019,-.1103499085037501E+001
+0.2800000000000000E-009,0.9169500000000008E+019,-.1469115769183501E+001
+0.3000000000000000E-009,0.9144999999999985E+019,-.1465190436684997E+001
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/analyze.ini b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/analyze.ini
index acbbd87ef..8595f4e3e 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/analyze.ini
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/analyze.ini
@@ -1,5 +1,12 @@
-! compare the last line of PartAnalyze.csv with a reference file
-compare_data_file_name = PartAnalyze.csv
-compare_data_file_reference = PartAnalyze_ref.csv
-compare_data_file_tolerance = 5e-3
+! compare the current entering through the surface flux
+compare_column_file = PartAnalyze.csv
+compare_column_reference_file = PartAnalyze_ref.csv
+compare_column_index = 1
+compare_column_tolerance_value = 0.02
+compare_column_tolerance_type = relative
+
+! compare the current leaving the domain
+compare_data_file_name = SurfaceAnalyze.csv
+compare_data_file_reference = SurfaceAnalyze_ref.csv
+compare_data_file_tolerance = 0.02
compare_data_file_tolerance_type = relative
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/channel_mesh.h5 b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/channel_mesh.h5
index dc042beac..0edf3c726 100644
Binary files a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/channel_mesh.h5 and b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/channel_mesh.h5 differ
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/command_line.ini b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/command_line.ini
index fb34fa7f6..22525099f 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/command_line.ini
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/command_line.ini
@@ -1 +1 @@
-MPI=1,2,4
+MPI=1,4,10
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/hopr.ini b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/hopr.ini
index abd8b9d3b..0ea6e6195 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/hopr.ini
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/hopr.ini
@@ -5,7 +5,7 @@ NVisu =1
Mode =1
DEFVAR = (REAL): minus_x = 0.0
-DEFVAR = (REAL): plus_x = 10.0
+DEFVAR = (REAL): plus_x = 5.0
DEFVAR = (REAL): minus_y = 0.0
DEFVAR = (REAL): plus_y = 1.0
@@ -14,7 +14,7 @@ DEFVAR = (REAL): minus_z = 0.0
DEFVAR = (REAL): plus_z = 1.0
Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /)
-nElems =(/10,2,2/)
+nElems =(/5,2,2/)
elemtype =108
BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini
index d04cc4703..788960741 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/parameter.ini
@@ -14,27 +14,34 @@ NAnalyze = 1 ! Number of analyze points
MeshFile = channel_mesh.h5
useCurveds = F
! if boundaries have to be changed (else they are used from Mesh directly):
-TrackingMethod = triatracking
+TrackingMethod = triatracking
+CalcMeshInfo = T
+CalcHaloInfo = T
+
+Part-FIBGMdeltas=(/0.5E-01,0.1E-01,0.1E-01/)
+Part-FactorFIBGM=(/5,2,2/)
! =============================================================================== !
! OUTPUT / VISUALIZATION
! =============================================================================== !
ProjectName = SurfFlux_Tria_EmissionCurrent
-IterDisplayStep = 10
+IterDisplayStep = 5
Part-AnalyzeStep = 1
+Surface-AnalyzeStep = 1
CalcSurfFluxInfo = T
+!CalcPartBalance = T
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-tend = 1.0E-11
-Analyze_dt = 1.0E-11
-ManualTimeStep = 1.0000E-12
+tend = 3.0E-10
+Analyze_dt = 1.0E-10
+ManualTimeStep = 2.0000E-11
! Load balance
DoLoadBalance = T
PartWeightLoadBalance = T
! Initial load balance
-DoInitialAutoRestart = T
-InitialAutoRestart-PartWeightLoadBalance = T
-LoadBalanceMaxSteps = 1
+DoInitialAutoRestart = F
+InitialAutoRestart-PartWeightLoadBalance = F
+LoadBalanceMaxSteps = 5
Load-DeviationThreshold = 1E-9
! =============================================================================== !
! BOUNDARY CONDITIONS - FIELD SOLVER
@@ -43,7 +50,7 @@ BoundaryName = BC_Xplus
BoundaryType = (/4,0/)
BoundaryName = BC_Xminus
BoundaryType = (/5,1/)
-RefState = (/-1E6 , 0 , 0/)
+RefState = (/-5E5 , 0 , 0/)
BoundaryName = BC_Yplus
BoundaryType = (/10,0/)
BoundaryName = BC_Yminus
@@ -52,11 +59,14 @@ BoundaryName = BC_Zplus
BoundaryType = (/10,0/)
BoundaryName = BC_Zminus
BoundaryType = (/10,0/)
+
+epsCG = 1e-3
! =============================================================================== !
! BOUNDARY CONDITIONS - PARTICLES
! =============================================================================== !
Part-maxParticleNumber=500000
Part-nSpecies=1
+
Part-nBounds=6
Part-Boundary1-SourceName = BC_Xplus
Part-Boundary1-Condition = reflective
@@ -65,8 +75,8 @@ Part-Boundary1-SpeciesSwaps1 = (/1,0/)
Part-Boundary2-SourceName = BC_Xminus
Part-Boundary2-Condition = reflective
-
Part-Boundary2-WallTemp = 2700, 2635.24
+
Part-Boundary3-SourceName = BC_Yplus
Part-Boundary3-Condition = symmetric
Part-Boundary4-SourceName = BC_Yminus
@@ -75,7 +85,6 @@ Part-Boundary5-SourceName = BC_Zplus
Part-Boundary5-Condition = symmetric
Part-Boundary6-SourceName = BC_Zminus
Part-Boundary6-Condition = symmetric
-Part-FIBGMdeltas=(/1e-2,1e-2,1e-2/)
CalcBoundaryParticleOutput = T
BPO-NPartBoundaries = 1 ! Nbr of bounaries
@@ -87,7 +96,7 @@ BPO-Species = (/1/) ! electrons
! =============================================================================== !
Part-Species1-MassIC = 9.11E-31
Part-Species1-ChargeIC = -1.60217653E-19
-Part-Species1-MacroParticleFactor = 1E4
+Part-Species1-MacroParticleFactor = 5E4
Part-Species1-nSurfaceFluxBCs=1
Part-Species1-Surfaceflux1-BC=2
@@ -105,7 +114,8 @@ nocrosscombination:Part-Boundary2-WallTemp, Part-Species1-Surfaceflux1-Thermioni
! =============================================================================== !
! DSMC
! =============================================================================== !
-Particles-HaloEpsVelo=2.0E+07
+Particles-HaloEpsVelo=2.0E+06
Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
Particles-RandomSeed2=2
+NVisu=1
diff --git a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/readme.md b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/readme.md
index d08ab3bcf..9c06b4a08 100644
--- a/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/readme.md
+++ b/regressioncheck/CHE_poisson/SurfFlux_ThermionicEmission_Schottky/readme.md
@@ -4,3 +4,4 @@
* Comparing the calculated current to the expected value of the Richardson Dushman equation for Tungsten
* Input: W = 4.54 eV, A = 60 A/(cm^2 K^2), T_w = 2700 K (without Schottky), T_w = 2635.24 K
* Output: j = 1.47 A / cm^2 -> I = 1.4675 A (A = 1 cm^2)
+ * In the case with the Schottky effect, the current reduces slightly over time as the electrons in the domain reduce the potential difference
diff --git a/regressioncheck/CHE_poisson_periodic/builds.ini b/regressioncheck/CHE_poisson_periodic/builds.ini
new file mode 100644
index 000000000..1e0f330ab
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/builds.ini
@@ -0,0 +1,16 @@
+! relative binary path in build directory
+binary=./bin/piclas
+
+! fixed compiler flags
+CMAKE_BUILD_TYPE = DEBUG
+LIBS_BUILD_HDF5 = OFF
+PICLAS_POLYNOMIAL_DEGREE = N
+PICLAS_EQNSYSNAME = poisson
+PICLAS_PARTICLES = OFF
+PICLAS_TIMEDISCMETHOD = RK3
+PICLAS_PETSC = OFF,ON
+LIBS_USE_MPI = ON
+PICLAS_NODETYPE = GAUSS
+PICLAS_CODE_ANALYZE = ON
+PICLAS_DEBUG_MEMORY = ON
+PICLAS_MEASURE_MPI_WAIT = ON
\ No newline at end of file
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/analyze.ini b/regressioncheck/CHE_poisson_periodic/poisson/analyze.ini
new file mode 100644
index 000000000..a10791ae3
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/poisson/analyze.ini
@@ -0,0 +1,6 @@
+h5diff_file = periodic_test_State_001.0.h5
+h5diff_reference_file = periodic_test_State_ref.h5
+h5diff_data_set = DG_Solution
+h5diff_tolerance_value = 1.e-8
+h5diff_tolerance_type = absolute
+h5diff_max_differences = 4096
\ No newline at end of file
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/command_line.ini b/regressioncheck/CHE_poisson_periodic/poisson/command_line.ini
new file mode 100644
index 000000000..aa194a247
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/poisson/command_line.ini
@@ -0,0 +1 @@
+MPI = 1,2,3,6
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/externals.ini b/regressioncheck/CHE_poisson_periodic/poisson/externals.ini
new file mode 100644
index 000000000..460aff1c7
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/poisson/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas2vtk
+externaldirectory = hopr.ini , parameter.ini
+externalruntime = pre , post
+cmd_suffix = , periodic_test_State_001.0.h5
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
\ No newline at end of file
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/hopr.ini b/regressioncheck/CHE_poisson_periodic/poisson/hopr.ini
new file mode 100644
index 000000000..88d0666b6
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/poisson/hopr.ini
@@ -0,0 +1,39 @@
+DEFVAR=(INT): ni = 4
+DEFVAR=(REAL): li = 6.283185306
+
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = periodic_box ! name of the project (used for filenames)
+Debugvisu = T ! Write debug mesh to tecplot file
+Logging = F ! Write log files
+
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+Mode = 1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones = 1 ! number of zones
+Corner = (/0.,0.,0.,,li,0.,0.,,li,li,0.,,0.,li,0. ,,0.,0.,li,,li,0.,li,,li,li,li,,0.,li,li/)
+nElems = (/ni,ni,ni/) ! number of elements in each direction
+BCIndex = (/5,3,2,4,1,6/) ! Indices of UserDefinedBoundaries
+elemtype = 108 ! Element form (108: Hexahedra)
+
+!=============================================================================== !
+! BOUNDARY CONDITIONS
+!=============================================================================== !
+BoundaryName = BC_periodicx+ ! Periodic (+vv1)
+BoundaryType = (/1,0,0,1/) ! Periodic (+vv1)
+BoundaryName = BC_periodicx- ! Periodic (-vv1)
+BoundaryType = (/1,0,0,-1/) ! Periodic (-vv1)
+BoundaryName = BC_periodicy+ ! Periodic (+vv2)
+BoundaryType = (/1,0,0,2/) ! Periodic (+vv2)
+BoundaryName = BC_periodicy- ! Periodic (-vv2)
+BoundaryType = (/1,0,0,-2/) ! Periodic (-vv2)
+BoundaryName = BC_periodicz+ ! Periodic (+vv3)
+BoundaryType = (/1,0,0,3/) ! Periodic (+vv3)
+BoundaryName = BC_periodicz- ! Periodic (-vv3)
+BoundaryType = (/1,0,0,-3/) ! Periodic (-vv3)
+
+VV=(/li , 0. , 0./) ! Displacement vector 1 (x-direction)
+VV=(/0. , li , 0./) ! Displacement vector 2 (y-direction)
+VV=(/0. , 0. , li/) ! Displacement vector 3 (z-direction)
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/parameter.ini b/regressioncheck/CHE_poisson_periodic/poisson/parameter.ini
new file mode 100644
index 000000000..35814efa2
--- /dev/null
+++ b/regressioncheck/CHE_poisson_periodic/poisson/parameter.ini
@@ -0,0 +1,34 @@
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 3 ! Polynomial degree of the DG method (field solver)
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = periodic_box_mesh.h5 ! Relative path to the mesh .h5 file
+! =============================================================================== !
+! General
+! =============================================================================== !
+ProjectName = periodic_test ! Project name that is used for naming state files
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 1.
+tend = 1.
+Analyze_dt = 1.
+IterDisplayStep = 1
+! =============================================================================== !
+! Field Solver: HDGSEM
+! =============================================================================== !
+epsCG = 1e-16 ! Stopping criterion (residual) of iterative CG solver (default that is used for the HDGSEM solver)
+maxIterCG = 10000 ! Maximum number of iterations
+IniExactFunc = 105 ! Initial field condition. SIN³(x) solution
+! =============================================================================== !
+! Analysis
+! =============================================================================== !
+TimeStampLength = 5 ! Reduces the length of the timestamps in filenames for better postprocessing
+PIC-OutputSource = T ! writes the deposited charge
+! =============================================================================== !
+! piclas2vtk
+! =============================================================================== !
+NVisu = 10 ! Polynomial degree used for the visualization when the .h5 file is converted to .vtu/.vtk format.
\ No newline at end of file
diff --git a/regressioncheck/CHE_poisson_periodic/poisson/periodic_test_State_ref.h5 b/regressioncheck/CHE_poisson_periodic/poisson/periodic_test_State_ref.h5
new file mode 100644
index 000000000..1a5062861
Binary files /dev/null and b/regressioncheck/CHE_poisson_periodic/poisson/periodic_test_State_ref.h5 differ
diff --git a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini
index 38b42161e..11b536092 100644
--- a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini
+++ b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini
@@ -35,6 +35,7 @@ DoLoadBalance = T
PartWeightLoadBalance = T
LoadBalanceMaxSteps = 1
Load-DeviationThreshold = 1E-9
+UseH5IOLoadBalance = T
! =============================================================================== !
! PARTICLES
! =============================================================================== !
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/BGG_XSec_SampElecExci_DSMCState_000.00000000100000000_ref.h5 b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/BGG_XSec_SampElecExci_DSMCState_000.00000000100000000_ref.h5
new file mode 100644
index 000000000..76593b5b0
Binary files /dev/null and b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/BGG_XSec_SampElecExci_DSMCState_000.00000000100000000_ref.h5 differ
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/Electronic-State-Database.h5 b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/Electronic-State-Database.h5
new file mode 100644
index 000000000..d6a7b919e
Binary files /dev/null and b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/Electronic-State-Database.h5 differ
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/XSec_Database_Xe_Plasma_Update.h5 b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/XSec_Database_Xe_Plasma_Update.h5
new file mode 100644
index 000000000..19e327467
Binary files /dev/null and b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/XSec_Database_Xe_Plasma_Update.h5 differ
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/analyze.ini b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/analyze.ini
new file mode 100644
index 000000000..797a6fb75
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/analyze.ini
@@ -0,0 +1,7 @@
+! hdf5 diff
+h5diff_file = BGG_XSec_SampElecExci_DSMCState_000.00000000100000000.h5
+h5diff_reference_file = BGG_XSec_SampElecExci_DSMCState_000.00000000100000000_ref.h5
+h5diff_data_set = ExcitationData
+h5diff_tolerance_value = 30E-2
+h5diff_tolerance_type = relative
+h5diff_max_differences = 3
\ No newline at end of file
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/command_line.ini b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/command_line.ini
new file mode 100644
index 000000000..daa3adc2d
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/command_line.ini
@@ -0,0 +1 @@
+MPI=2,5
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/externals.ini b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/externals.ini
new file mode 100644
index 000000000..2f802c33f
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 1
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas2vtk
+externaldirectory = hopr.ini , parameter.ini
+externalruntime = pre , post
+cmd_suffix = , BGG_XSec_SampElecExci_DSMCState_000.00000000100000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/hopr.ini b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/hopr.ini
new file mode 100644
index 000000000..037760b20
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/hopr.ini
@@ -0,0 +1,39 @@
+ProjectName = cube
+Debugvisu = T
+DebugVisuLevel=2
+NVisu =1
+Mode =1
+
+DEFVAR = (REAL): minus_x = 0.0
+DEFVAR = (REAL): plus_x = 1.0
+
+DEFVAR = (REAL): minus_y = 0.0
+DEFVAR = (REAL): plus_y = 1.0
+
+DEFVAR = (REAL): minus_z = 0.0
+DEFVAR = (REAL): plus_z = 1.0
+
+Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /)
+nElems =(/5,5,5/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+nZones = 1
+nUserDefinedBoundaries=6
+BoundaryName=BC_Xplus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zminus
+BoundaryType=(/4,0,0,0/)
+
+postscalemesh=true
+meshscale=1e-3
+jacobiantolerance=1e-20
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/parameter.ini b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/parameter.ini
new file mode 100644
index 000000000..1c57b4396
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/parameter.ini
@@ -0,0 +1,134 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+NVisu=1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! LOAD BALANCE
+! =============================================================================== !
+DoLoadBalance = T
+PartWeightLoadBalance = T
+
+! Initial load balance
+DoInitialAutoRestart = T
+InitialAutoRestart-PartWeightLoadBalance = T
+LoadBalanceMaxSteps = 2
+Load-DeviationThreshold = 1E-9
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = BGG_XSec_SampElecExci
+IterDisplayStep = 100
+Part-AnalyzeStep = 100
+CalcTemp = T
+
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=1
+! XSec electronic excitation sampling
+Part-SampleElectronicExcitation = T
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 1.0E-9
+Analyze_dt = 1.0E-9
+ManualTimeStep = 1.0000E-11
+Particles-HaloEpsVelo=5.0E+07
+! =============================================================================== !
+! BOUNDARIES
+! =============================================================================== !
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=symmetric
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=symmetric
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=symmetric
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=symmetric
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=symmetric
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=symmetric
+Part-FIBGMdeltas=(/1e-3,1e-3,1e-3/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=1500000
+Part-nSpecies=2
+Part-Species$-MacroParticleFactor=1E3
+! =============================================================================== !
+! Species1 | Xe
+! =============================================================================== !
+Part-Species1-ChargeIC = 0
+Part-Species1-MassIC = 2.1801714e-25
+
+Part-Species1-nInits = 1
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-PartDensity = 1E23
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-MWTemperatureIC = 300.0
+Part-Species1-Init1-VeloIC = 0
+Part-Species1-Init1-VeloVecIC = (/0.,0.,1./)
+Part-Species1-Init1-Tempelec = 300.0
+! =============================================================================== !
+! Species2 | e
+! =============================================================================== !
+Part-Species2-ChargeIC = -1.60217653E-19
+Part-Species2-MassIC = 9.1093826E-31
+
+Part-Species2-nInits = 1
+Part-Species2-Init1-SpaceIC = cell_local
+Part-Species2-Init1-PartDensity = 1.0E+17
+Part-Species2-Init1-velocityDistribution = maxwell_lpn
+Part-Species2-Init1-MWTemperatureIC = 232090.50 ! 20 eV
+Part-Species2-Init1-VeloIC = 0.
+Part-Species2-Init1-VeloVecIC = (/1.,0.,0./)
+! =============================================================================== !
+! MCC
+! =============================================================================== !
+UseDSMC=true
+Part-NumberOfRandomSeeds = 2
+Particles-RandomSeed1 = 4
+Particles-RandomSeed2 = 3
+Particles-DSMC-CollisMode=2
+Particles-CollXSec-Database = XSec_Database_Xe_Plasma_Update.h5
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+
+! Electronic relaxation through XSec
+Part-Species1-UseElecXSec = T
+! Xe-electron collisions through XSec
+Part-Species2-UseCollXSec = T
+
+Particles-DSMC-ElectronicModel = 3
+
+! =============================================================================== !
+! Species1, Xe (BGG)
+! =============================================================================== !
+Part-Species1-SpeciesName = Xe
+Part-Species1-InteractionID = 1
+Part-Species1-Tref = 273
+Part-Species1-dref = 5.74E-10
+Part-Species1-omega = 0.35
+! =============================================================================== !
+! Species2, e
+! =============================================================================== !
+Part-Species2-SpeciesName = electron
+Part-Species2-InteractionID = 4
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.817920E-15
+Part-Species2-omega = 0.407
diff --git a/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md
new file mode 100644
index 000000000..71c98aeab
--- /dev/null
+++ b/regressioncheck/NIG_DSMC/MCC_BGG_Elec_XSec_Sampling/readme.md
@@ -0,0 +1,5 @@
+# Sampling of electronic excitation
+* Testing of the cell-local sampling of electronic excitation using ElectronicModel = 3 (cross-section based probability)
+* Xenon background gas and initially inserted electrons at 20 eV
+* 4 levels around 10 eV excitation threshold
+* Comparison of the ExcitationData container in the DSMCState file and performing a conversion with piclas2vtk
\ No newline at end of file
diff --git a/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini b/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini
index 17b84c8c3..5241016d9 100644
--- a/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini
+++ b/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini
@@ -95,7 +95,6 @@ Particles-NumberForDSMCOutputs = 1
Part-TimeFracForSampling = 0.5
Particles-DSMC-CalcSurfaceVal = T
Particles-DSMC-CalcQualityFactors = F
-Particles-DSMCReservoirSim = F
Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
diff --git a/regressioncheck/NIG_DSMC/RotPeriodicBCMulti/parameter.ini b/regressioncheck/NIG_DSMC/RotPeriodicBCMulti/parameter.ini
index 82b980e52..fb9e163e3 100644
--- a/regressioncheck/NIG_DSMC/RotPeriodicBCMulti/parameter.ini
+++ b/regressioncheck/NIG_DSMC/RotPeriodicBCMulti/parameter.ini
@@ -28,7 +28,7 @@ WriteErrorFiles = F
CalcHaloInfo = T
CalcMeshInfo = T
CheckExchangeProcs = T
-AbortExchangeProcs = F
+AbortExchangeProcs = T
!Particles-DSMC-CalcQualityFactors=T
! =============================================================================== !
! CALCULATION
diff --git a/regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/parameter.ini b/regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/parameter.ini
index 1818c717f..7fd731482 100644
--- a/regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/parameter.ini
+++ b/regressioncheck/NIG_DSMC/RotPeriodicBCMultiInterPlane/parameter.ini
@@ -28,7 +28,7 @@ WriteErrorFiles = F
CalcHaloInfo = T
CalcMeshInfo = T
CheckExchangeProcs = T
-AbortExchangeProcs = F
+AbortExchangeProcs = T
!Particles-DSMC-CalcQualityFactors=T
! =============================================================================== !
! CALCULATION
diff --git a/regressioncheck/NIG_IntKind8/builds.ini b/regressioncheck/NIG_IntKind8/builds.ini
index 30db78f02..0393379e9 100644
--- a/regressioncheck/NIG_IntKind8/builds.ini
+++ b/regressioncheck/NIG_IntKind8/builds.ini
@@ -7,7 +7,8 @@ LIBS_BUILD_HDF5 = OFF
PICLAS_POLYNOMIAL_DEGREE = N
PICLAS_EQNSYSNAME = maxwell , maxwell , poisson , poisson
PICLAS_TIMEDISCMETHOD = DSMC , RK4 , Leapfrog , Boris-Leapfrog
-PICLAS_PETSC = OFF , OFF , OFF , ON
+!PICLAS_PETSC = OFF , OFF , OFF , ON ! This used to test if petsc compiles with INT8 but if the code actually runs is untested
+PICLAS_PETSC = OFF , OFF , OFF , OFF
LIBS_USE_MPI = ON
PICLAS_NODETYPE = GAUSS
PICLAS_INTKIND8 = ON
diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/parameter.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/parameter.ini
index 46b48187d..397e53cb0 100644
--- a/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/parameter.ini
+++ b/regressioncheck/NIG_LoadBalance/sphere_soft_DSMC/parameter.ini
@@ -92,7 +92,6 @@ TrackingMethod = refmapping
! DSMC
! =============================================================================== !
UseDSMC = true
-Particles-DSMCReservoirSim = false
Particles-DSMC-CollisMode = 0 ! Collisionless flow
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/parameter.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/parameter.ini
index d0bfce27b..a23b5f1bb 100644
--- a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/parameter.ini
+++ b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_with_DSMC/parameter.ini
@@ -101,7 +101,6 @@ TrackingMethod = refmapping
! DSMC
! =============================================================================== !
UseDSMC=true
-Particles-DSMCReservoirSim=false
Particles-DSMC-CollisMode=0 ! Collisionless flow
Part-NumberOfRandomSeeds =2
Particles-RandomSeed1= 1
diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/analyze.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/analyze.ini
index 7f4dcf47a..0dc321181 100644
--- a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/analyze.ini
+++ b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/analyze.ini
@@ -2,7 +2,7 @@
analyze_L2=1000
! check if particles are outside of domain at tEnd
-check_hdf5_file = implicit_one_State_000.00000010000000000.h5
+check_hdf5_file = implicit_one_State_000.00000002000000000.h5
check_hdf5_data_set = PartData
check_hdf5_span = 1 ! check all rows
check_hdf5_dimension = 0:2
diff --git a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/parameter.ini b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/parameter.ini
index f1a36852d..68ede7641 100644
--- a/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/parameter.ini
+++ b/regressioncheck/NIG_LoadBalance/sphere_soft_RK4_without_DSMC/parameter.ini
@@ -8,11 +8,9 @@ IniExactFunc = 0
! =============================================================================== !
N = 3 ! Polynomial degree
NAnalyze = 2 ! Number of analyze points
-nSample = 4
! =============================================================================== !
! MESH
! =============================================================================== !
-!MeshFile = Sphere_Ngeo4_004_005_mesh.h5
MeshFile = Sphere_Ngeo4_001_001_mesh.h5
useCurveds = T
! if boundaries have to be changed (else they are used from Mesh directly):
@@ -30,7 +28,7 @@ DoCalcErrorNorms = T
! Load Balance
! =============================================================================== !
DoLoadBalance = T
-Load-DeviationThreshold = 0.1
+Load-DeviationThreshold = 1E-9
Particles-MPIWeight = 0.01
! =============================================================================== !
@@ -39,15 +37,14 @@ Particles-MPIWeight = 0.01
CFLscale = 0.9 ! Scaling of theoretical CFL number
c_corr = 1
BezierClipTolerance = 1e-12
-!BezierNewtonTolerance = 1e-4
! =============================================================================== !
! IMPLICIT
! =============================================================================== !
-tend = 1E-7 ! End time
+tend = 2E-8 ! End time
Analyze_dt = 1E-8 ! Timestep of analyze outputs
CalcPotentialEnergy = TRUE
-
+IterDisplayStep = 50
! =============================================================================== !
! PARTICLES
! =============================================================================== !
@@ -57,52 +54,33 @@ Part-Boundary1-Condition=reflective
Part-FIBGMdeltas=(/.5,.5,.5/)
-Part-vMPF=F
Part-maxParticleNumber=20000
Part-nSpecies=1
-PIC-externalField=(/0.,0.,0.,0.,0.,0./)
Part-Species1-ChargeIC=-1.6022E-19
Part-Species1-MassIC=9.1093826E-31
Part-Species1-MacroParticleFactor=1000
-Part-Species1-nInits=1
+Part-Species1-nInits=1
Part-Species1-Init1-SpaceIC=cuboid
-Part-Species1-Init1-velocityDistribution=maxwell
+Part-Species1-Init1-velocityDistribution=maxwell
Part-Species1-Init1-MWTemperatureIC=1e8
Part-Species1-Init1-ParticleNumber=500
-
Part-Species1-Init1-BasePointIC=(/.25,.25,-0.25/)
Part-Species1-Init1-BaseVector1IC=(/-.5,0.0,0.0/)
Part-Species1-Init1-BaseVector2IC=(/0.0,-.5,0.0/)
Part-Species1-Init1-CuboidHeightIC=0.5
-
Part-Species1-Init1-NormalIC=(/0.,0.,1./)
-
Part-Species1-Init1-VeloIC=0.
Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
! =============================================================================== !
! tracking
! =============================================================================== !
-RefMappingGuess=1 !,3
-!BezierClipTolerance=1e-8
-!BezierClipMaxIter =105
-!BezierClipHit =2e-4
-!BezierSplitLimit =0.6
-!!epsilontol =1e-12
-!BezierElevation=20
-!RefMappingEps =1e-8
-PIC-DoInterpolation=F
-
-
TrackingMethod = refmapping
+RefMappingGuess=1
+PIC-DoInterpolation=F
! =============================================================================== !
! DSMC
! =============================================================================== !
UseDSMC=F
-Particles-DSMCReservoirSim=false
-Particles-DSMC-CollisMode=0 ! Collisionless flow
-Part-NumberOfRandomSeeds =2
-Particles-RandomSeed1= 1
-Particles-RandomSeed2= 2
Particles-HaloEpsVelo=50000
diff --git a/regressioncheck/NIG_PIC_Deposition/Plasma_Ball_cell_volweight_mean_save_CVWM/parameter.ini b/regressioncheck/NIG_PIC_Deposition/Plasma_Ball_cell_volweight_mean_save_CVWM/parameter.ini
index d9da970f1..3b6811dc2 100644
--- a/regressioncheck/NIG_PIC_Deposition/Plasma_Ball_cell_volweight_mean_save_CVWM/parameter.ini
+++ b/regressioncheck/NIG_PIC_Deposition/Plasma_Ball_cell_volweight_mean_save_CVWM/parameter.ini
@@ -22,7 +22,7 @@ NAnalyze = 12 ! Number of analyze points
! =============================================================================== !
NVisu=1
VisuParticles=T
-MeshFile = Box_mesh.h5,Box_deformed_mesh.h5,Box_deformed_mesh.h5
+MeshFile = Box_mesh.h5, Box_deformed_mesh.h5, Box_deformed_mesh.h5
useCurveds = F
! =============================================================================== !
@@ -76,7 +76,7 @@ c_corr = 0.
Part-maxParticleNumber = 100500
Part-nSpecies = 2
PIC-Depo-Periodic = T
-Part-nBounds = 7
+Part-nBounds = 6,7,7
Part-Boundary1-SourceName = BC_x+
Part-Boundary1-Condition = reflective
Part-Boundary2-SourceName = BC_x-
@@ -173,4 +173,4 @@ xyzDielectricMinMax = (/0.0, 1.0, -1.0, 1.0, -1.0, 1.0/) ! define bounding bo
!xyzDielectricMinMax = (/-1.0, 0.4, -1.0, 1.0, -1.0, 1.0/) ! define bounding box of dielectric region
-nocrosscombination:MeshFile,Part-Species1-Init1-VeloIC,DoDielectric,tend
+nocrosscombination:MeshFile,Part-Species1-Init1-VeloIC,DoDielectric,tend,Part-nBounds
diff --git a/regressioncheck/NIG_PIC_maxwell_RK4/TWT_recordpoints/parameter.ini b/regressioncheck/NIG_PIC_maxwell_RK4/TWT_recordpoints/parameter.ini
index eb7f04c88..2759c8ddb 100644
--- a/regressioncheck/NIG_PIC_maxwell_RK4/TWT_recordpoints/parameter.ini
+++ b/regressioncheck/NIG_PIC_maxwell_RK4/TWT_recordpoints/parameter.ini
@@ -26,6 +26,9 @@ MeshFile = TWT_linsin_Ngeo6_001_003_06_mesh.h5
useCurveds = T
TrackingMethod = refmapping
+
+! Can be deactivated for TriaSurfaceFlux=F + DepositionType != shape_function_adaptive (in this case the check was skipped in the past anyway)
+meshCheckWeirdElements = F
! =============================================================================== !
! physical parameter
! =============================================================================== !
diff --git a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/analyze.ini b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/analyze.ini
index 02e4bbe4f..c61d5de89 100644
--- a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/analyze.ini
+++ b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/analyze.ini
@@ -3,5 +3,5 @@ integrate_line_file = SurfaceAnalyze.csv ! Data file name
integrate_line_columns = 0:1 ! Columns x:y for integration y over x
integrate_line_integral_value = 1.142E8 ! Number of removed electrons through the anode BC per second (=5.71e-4/5e-12)
! ! integrated value from one exemplary simulation
-integrate_line_tolerance_value = 4e-2 ! Tolerance
+integrate_line_tolerance_value = 5e-2 ! Tolerance
integrate_line_tolerance_type = relative ! Relative or absolute tolerance
diff --git a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/command_line.ini b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/command_line.ini
index 65c96f0f6..906585720 100644
--- a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/command_line.ini
+++ b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/command_line.ini
@@ -1,2 +1 @@
MPI = 4,10
-!restart_file = 2Dplasma_test_State_000.00000000000000000.h5, 2Dplasma_test_State_000.00000005000000000.h5
diff --git a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/parameter.ini b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/parameter.ini
index 10b209494..ee08df388 100644
--- a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/parameter.ini
+++ b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/2D_Landmark/parameter.ini
@@ -71,18 +71,15 @@ PIC-AlgebraicExternalField = 1 ! 1: Charoy 2019 magnetic + electric field
Part-maxParticleNumber = 500000
Part-nSpecies = 2
Part-FIBGMdeltas = (/2.5e-2 , 1.28e-2 , 0.01e-2/)
-!Part-FactorFIBGM = (/ 500 , 256 , 1/)
Part-FactorFIBGM = (/ 10 , 10 , 1/)
PIC-DoDeposition = T
PIC-DoInterpolation = T
PIC-Deposition-Type = cell_volweight_mean
-!PIC-AlgebraicExternalField = 1
DisplayLostParticles=T
Part-Species1-MacroParticleFactor = 1.67e4 ! 1.67e2 originally used for z=1e-4 m (case2: 75 parts per cell with dx=dy=5e-5 m)
Part-Species2-MacroParticleFactor = 1.67e4 ! 1.67e2 originally used for z=1e-4 m (case2: 75 parts per cell with dx=dy=5e-5 m)
-Part-Species3-MacroParticleFactor = 1.67e4 ! 1.67e2 originally used for z=1e-4 m (case2: 75 parts per cell with dx=dy=5e-5 m)
! =============================================================================== !
! Particle Boundary Conditions
@@ -91,17 +88,9 @@ Part-nBounds = 6
Part-Boundary1-SourceName = BC_ANODE
Part-Boundary1-Condition = open
-!Part-Boundary1-NbrOfSpeciesSwaps = 3
-!Part-Boundary1-SpeciesSwaps1 = (/1,0/)
-!Part-Boundary1-SpeciesSwaps2 = (/2,0/)
-!Part-Boundary1-SpeciesSwaps3 = (/3,0/)
Part-Boundary2-SourceName = BC_CATHODE
Part-Boundary2-Condition = open
-!Part-Boundary2-NbrOfSpeciesSwaps = 3
-!Part-Boundary2-SpeciesSwaps1 = (/1,0/)
-!Part-Boundary2-SpeciesSwaps2 = (/2,0/)
-!Part-Boundary2-SpeciesSwaps3 = (/3,0/)
Part-Boundary3-SourceName = BC_periodicy+
Part-Boundary3-Condition = periodic
@@ -133,6 +122,10 @@ Particles-RandomSeed2 = 2
Particles-HaloEpsVelo = 300e6
+Part-vMPF= F,T
+Part-Species1-vMPFMergeThreshold = 200
+Part-Species2-vMPFMergeThreshold = 200
+
! =============================================================================== !
! Species1 | e
! =============================================================================== !
diff --git a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/channel_mesh.h5 b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/channel_mesh.h5
deleted file mode 100644
index 431ace7dc..000000000
Binary files a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/channel_mesh.h5 and /dev/null differ
diff --git a/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini
new file mode 100644
index 000000000..0bdc5a5c4
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Boris-Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini
@@ -0,0 +1,6 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
\ No newline at end of file
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/DSMC.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/DSMC.ini
new file mode 100644
index 000000000..e0be438d9
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/DSMC.ini
@@ -0,0 +1,38 @@
+! =============================================================================== !
+! Species1, e
+! =============================================================================== !
+Part-Species1-SpeciesName = electron
+Part-Species1-InteractionID = 4
+Part-Species1-Tref = 273
+Part-Species1-dref = 1E-15
+Part-Species1-omega = 0.24
+Part-Species1-UseCollXSec = T
+! =============================================================================== !
+! Species2, Argon
+! =============================================================================== !
+Part-Species2-SpeciesName = Ar
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 273
+Part-Species2-dref = 4.05E-10
+Part-Species2-omega = 0.24
+Part-Species2-HeatOfFormation_K = 0.0
+! =============================================================================== !
+! Species3, Argon ion
+! =============================================================================== !
+Part-Species3-SpeciesName = ArIon1
+Part-Species3-InteractionID = 10
+Part-Species3-Tref = 273
+Part-Species3-dref = 4.05E-10
+Part-Species3-omega = 0.24
+Part-Species3-PreviousState = 2
+! =============================================================================== !
+! Reactions
+! =============================================================================== !
+DSMC-NumOfReactions = 1
+! ----------------------------------------------------
+! Electron impact
+! ----------------------------------------------------
+! Ionization: Ar + e --> ArIon1 + e + e
+DSMC-Reaction1-ReactionModel = XSec
+DSMC-Reaction1-Reactants = (/2,1,0/)
+DSMC-Reaction1-Products = (/3,1,1,0/)
\ No newline at end of file
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/Electronic-State-Database-Ar-ArIon1.h5 b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/Electronic-State-Database-Ar-ArIon1.h5
new file mode 100644
index 000000000..36f38b99c
Binary files /dev/null and b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/Electronic-State-Database-Ar-ArIon1.h5 differ
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/LXCat_Database_Phelps_Ar-e_100keV.h5 b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/LXCat_Database_Phelps_Ar-e_100keV.h5
new file mode 100644
index 000000000..82bad145f
Binary files /dev/null and b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/LXCat_Database_Phelps_Ar-e_100keV.h5 differ
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/PartAnalyze_ref.csv b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/PartAnalyze_ref.csv
new file mode 100644
index 000000000..ea25ea444
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/PartAnalyze_ref.csv
@@ -0,0 +1,21 @@
+001-TIME,002-NumDens-Spec-001,003-NumDens-Spec-002,004-NumDens-Spec-003,005-NumDens-Spec-004,006-Current-Spec-001-SF-001
+0,0,2E+019,0,2E+019,0
+1E-09,3028100000000000,2E+019,6600000000000,2.00030347E+019,0.000201073154515
+2.00000000000007E-09,3029000000000000,2E+019,13500000000000,2.00030425E+019,0.00020027206625
+2.99999999999997E-09,3029500000000000,2E+019,19300000000000,2.00030488E+019,0.000199470977985
+3.99999999999997E-09,3028700000000000,2E+019,25900000000000,2.00030546E+019,0.00020027206625
+5.00000000000028E-09,3028000000000000,2E+019,33700000000000,2.00030617E+019,0.00020027206625
+6.00000000000059E-09,3028700000000000,2E+019,41500000000000,2.00030702E+019,0.000199470977985
+7.0000000000009E-09,3029100000000000,2E+019,47900000000000,2.0003077E+019,0.00020027206625
+8.00000000000075E-09,3027400000000000,2E+019,54800000000000,2.00030822E+019,0.00020027206625
+9.00000000000023E-09,3027900000000000,2E+019,62700000000000,2.00030906E+019,0.000199470977985
+0.00000001,3027100000000000,2E+019,70000000000000,2.00030971E+019,0.00020027206619146
+0.00000002,3027600000000000,2E+019,133300000000000,2.00031609E+019,0.000200272066896514
+0.00000003,3027300000000000,2E+019,197700000000000,2.0003225E+019,0.000199470980245914
+0.00000004,3025900000000000,2E+019,265700000000000,2.00032916E+019,0.000200272068521319
+0.00000005,3024000000000000,2E+019,326300000000000,2.00033503E+019,0.000200272068521319
+0.00000006,3024200000000000,2E+019,392200000000000,2.00034164E+019,0.000200272068518668
+0.00000007,3023700000000000,2E+019,457800000000000,2.00034815E+019,0.000200272068521319
+0.00000008,3022200000000000,2E+019,523400000000000,2.00035456E+019,0.000200272068521319
+0.00000009,3022000000000000,2E+019,585700000000000,2.00036077E+019,0.000199470980247234
+0.0000001,3021400000000000,2E+019,655700000000000,2.00036771E+019,0.000200272068521319
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/analyze.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/analyze.ini
new file mode 100644
index 000000000..373e536b6
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/analyze.ini
@@ -0,0 +1,5 @@
+! compare the last line of PartAnalyze.csv with a reference file
+compare_data_file_name = PartAnalyze.csv
+compare_data_file_reference = PartAnalyze_ref.csv
+compare_data_file_tolerance = 10e-2
+compare_data_file_tolerance_type = relative
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/command_line.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/command_line.ini
new file mode 100644
index 000000000..9b0bb4a7d
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/command_line.ini
@@ -0,0 +1,2 @@
+MPI=4
+cmd_suffix=DSMC.ini
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini
new file mode 100644
index 000000000..0bdc5a5c4
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/externals.ini
@@ -0,0 +1,6 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
\ No newline at end of file
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/hopr.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/hopr.ini
new file mode 100644
index 000000000..91992c93b
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/hopr.ini
@@ -0,0 +1,42 @@
+ProjectName = channel
+Debugvisu = T
+DebugVisuLevel=1
+NVisu =1
+Mode =1
+
+DEFVAR = (REAL): minus_x = 0.0
+DEFVAR = (REAL): plus_x = 5.0
+
+DEFVAR = (REAL): minus_y = 0.0
+DEFVAR = (REAL): plus_y = 0.1
+
+DEFVAR = (REAL): minus_z = 0.0
+DEFVAR = (REAL): plus_z = 0.1
+
+Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /)
+nElems =(/50,1,1/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+nZones = 1
+
+VV = (/0. , plus_y , 0./) ! Verschiebungsvektor 2 (y-Richtung)
+VV = (/0. , 0. , plus_z/) ! Verschiebungsvektor 3 (z-Richtung)
+
+BoundaryName=BC_Xplus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/1,0,0,-1/)
+BoundaryName=BC_Yminus
+BoundaryType=(/1,0,0,1/)
+BoundaryName=BC_Zplus
+BoundaryType=(/1,0,0,-2/)
+BoundaryName=BC_Zminus
+BoundaryType=(/1,0,0,2/)
+
+postscalemesh=true
+meshscale=1e-3
+jacobiantolerance=1e-20
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/parameter.ini b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/parameter.ini
new file mode 100644
index 000000000..7db125a27
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/parameter.ini
@@ -0,0 +1,138 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+VisuParticles = T
+TimeStampLength = 15
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = channel_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = SurfFlux_Tria_EmissionCurrent
+CalcSurfFluxInfo = T
+CalcNumDens = T
+! =============================================================================== !
+! Load Balance
+! =============================================================================== !
+DoLoadBalance = T
+Load-DeviationThreshold = 1e-2
+LoadBalanceMaxSteps = 10
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 1.0E-7
+Analyze_dt = 1.0E-8
+! =============================================================================== !
+! FIELD SOLVER
+! =============================================================================== !
+epsCG = 1e-6
+PrecondType = 2
+
+PIC-Deposition-Type = cell_volweight_mean
+! =============================================================================== !
+! FIELD BOUNDARY
+! =============================================================================== !
+BoundaryName=BC_Xminus
+BoundaryType=(/5,1/)
+RefState = (/-20000.0 , 0.0 , 0.0/)
+BoundaryName=BC_Xplus
+BoundaryType=(/4,0/)
+! =============================================================================== !
+! PARTICLE BOUNDARY
+! =============================================================================== !
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=reflective
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=symmetric
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=symmetric
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=symmetric
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=symmetric
+Part-FIBGMdeltas=(/1e-4,1e-4,1e-4/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Particles-CollXSec-Database = LXCat_Database_Phelps_Ar-e_100keV.h5
+Particles-CollXSec-NullCollision = T
+
+Particles-DSMCElectronicDatabase = Electronic-State-Database-Ar-ArIon1.h5
+
+Part-maxParticleNumber=50000
+Part-nSpecies = 3
+Part-Species$-MacroParticleFactor = 2E1
+
+!## Parameters for reference file
+!ManualTimeStep = 1.0000E-12
+!Part-AnalyzeStep = 100
+!IterDisplayStep = 1000
+
+Part-AnalyzeStep = 5
+IterDisplayStep = 50
+ManualTimeStep = 2.0000E-11
+Part-Species1-TimeStepFactor = 0.05
+
+Part-VariableTimeStep-DisableForMCC = T
+! =============================================================================== !
+! Species1 - electron
+! =============================================================================== !
+Part-Species1-MassIC = 9.11E-31
+Part-Species1-ChargeIC = -1.60217653E-19
+
+Part-Species1-nSurfaceFluxBCs=1
+
+Part-Species1-Surfaceflux1-BC=2
+Part-Species1-Surfaceflux1-VeloIC = 0.
+Part-Species1-Surfaceflux1-VeloVecIC = (/1,0,0/)
+Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn
+Part-Species1-Surfaceflux1-MWTemperatureIC = 5.
+Part-Species1-Surfaceflux1-EmissionCurrent = 2E-4
+
+! =============================================================================== !
+! Species2 - Argon
+! =============================================================================== !
+Part-Species2-MassIC = 6.63400E-26
+Part-Species2-ChargeIC = 0
+
+Part-Species2-nInits = 1
+
+Part-Species2-Init1-SpaceIC = background
+Part-Species2-Init1-velocityDistribution = maxwell_lpn
+Part-Species2-Init1-MWTemperatureIC = 300
+Part-Species2-Init1-PartDensity = 2E19
+Part-Species2-Init1-VeloIC = 0
+Part-Species2-Init1-VeloVecIC = (/0.,0.,1./)
+! =============================================================================== !
+! Species3 - ArgonIon
+! =============================================================================== !
+Part-Species3-MassIC = 6.633908906174E-26
+Part-Species3-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=5.0E+08
+Particles-DSMC-CalcSurfaceVal=F
+UseDSMC=true
+Particles-DSMC-CollisMode = 3
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=1
+Particles-RandomSeed2=2
+Particles-DSMC-UseOctree=F
+Particles-DSMC-UseNearestNeighbour = F
+Particles-DSMC-CalcQualityFactors = F
\ No newline at end of file
diff --git a/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/readme.md b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/readme.md
new file mode 100644
index 000000000..a3eca87c6
--- /dev/null
+++ b/regressioncheck/NIG_PIC_poisson_Leapfrog/MCC_EBeam_SpeciesSpecificTimestep/readme.md
@@ -0,0 +1,10 @@
+# PIC-MCC - Electron beam acceleration and ionization of background gas with species-specific time step
+* Inserting electrons with a zero velocity and at a low temperature
+* Acceleration with a potential difference of 20 kV
+* Ionization of background gas through MCC
+* Species-specific time step to push electrons with dt = 1e-12s but not included in MCC
+ * ManualTimeStep = 1.0000E-11
+ * Part-Species1-TimeStepFactor = 0.1
+ * Part-VariableTimeStep-DisableForMCC = T
+* Reference file was generated using a regular time step of dt = 1e-12s
+* Comparing the number density of the electron and ions in the channel
\ No newline at end of file
diff --git a/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/PartAnalyze_ref.csv b/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/PartAnalyze_ref.csv
deleted file mode 100644
index fbf3ffa2d..000000000
--- a/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/PartAnalyze_ref.csv
+++ /dev/null
@@ -1,24 +0,0 @@
-001-TIME,002-nPart-Spec-001,003-nPart-Spec-002,004-nPart-Spec-003,005-nPart-Spec-004,006-nPart-Spec-005,007-E-Vib001,008-E-Vib002,009-E-Vib003,010-E-Vib004,011-E-Vib005,012-E-Rot001,013-E-Rot002,014-E-Rot003,015-E-Rot004,016-E-Rot005,017-E-Elec001,018-E-Elec002,019-E-Elec003,020-E-Elec004,021-E-Elec005,022-E-TotalPart
-0.0000000000000000E+000,0.0000000000000000E+000,0.4012000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8024000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2517594416481664E-013
-0.4580000000000000E-010,0.0000000000000000E+000,0.4011000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8023000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2518698200783414E-013
-0.9160000000000000E-010,0.0000000000000000E+000,0.4010000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8022000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2522462715369796E-013
-0.1374000000000000E-009,0.0000000000000000E+000,0.4008000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8020000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2528153121183654E-013
-0.1832000000000000E-009,0.0000000000000000E+000,0.4008000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8020000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2537316774570108E-013
-0.2290000000000000E-009,0.0000000000000000E+000,0.4007000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8019000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2547895782038987E-013
-0.2748000000000000E-009,0.0000000000000000E+000,0.4007000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8019000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2561151429942829E-013
-0.3206000000000000E-009,0.0000000000000000E+000,0.4005000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8017000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2575341266174985E-013
-0.3663999999999999E-009,0.0000000000000000E+000,0.4004000000000000E+004,0.4012000000000000E+004,0.0000000000000000E+000,0.8016000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2592967043329345E-013
-0.4121999999999999E-009,0.0000000000000000E+000,0.4002000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8015000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2606812409604058E-013
-0.4579999999999999E-009,0.0000000000000000E+000,0.4000000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8013000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2624571920908253E-013
-0.5000000000000000E-009,0.0000000000000000E+000,0.3999000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8012000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2641262427096647E-013
-0.5458000000000000E-009,0.0000000000000000E+000,0.3997000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8010000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2657709585005035E-013
-0.5916000000000000E-009,0.0000000000000000E+000,0.3997000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8010000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2680186010280453E-013
-0.6374000000000000E-009,0.0000000000000000E+000,0.3996000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8009000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2703333139144175E-013
-0.6832000000000000E-009,0.0000000000000000E+000,0.3993000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8006000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2722071667924760E-013
-0.7290000000000000E-009,0.0000000000000000E+000,0.3991000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8004000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2736908745529201E-013
-0.7748000000000000E-009,0.0000000000000000E+000,0.3989000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.8002000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2756365047732255E-013
-0.8205999999999999E-009,0.0000000000000000E+000,0.3985000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.7998000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2774018444632331E-013
-0.8663999999999999E-009,0.0000000000000000E+000,0.3982000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.7995000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2784862968426264E-013
-0.9121999999999999E-009,0.0000000000000000E+000,0.3980000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.7993000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2799497523940786E-013
-0.9580000000000000E-009,0.0000000000000000E+000,0.3978000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.7991000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2813652599466704E-013
-0.1000000000000000E-008,0.0000000000000000E+000,0.3978000000000000E+004,0.4013000000000000E+004,0.0000000000000000E+000,0.7991000000000000E+004,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.2828197009080410E-013
diff --git a/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/analyze.ini b/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/analyze.ini
index 91b4f21f3..dccb8ea36 100644
--- a/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/analyze.ini
+++ b/regressioncheck/NIG_PIC_poisson_RK3/turner_bias-voltage_AC-DC/analyze.ini
@@ -1,10 +1,3 @@
-! compare the last row in PartAnalyze.csv with a reference file
-!compare_data_file_name = PartAnalyze.csv
-!compare_data_file_reference = PartAnalyze_ref.csv
-!compare_data_file_tolerance = 20.0e-2
-!compare_data_file_tolerance_type = relative
-!compare_data_file_max_differences = 2
-
! integrate columns x:y in a data file as integral(y(x), x, x(1), x(end))
integrate_line_file = SurfaceAnalyze.csv ! data file name
integrate_line_columns = 0:9 ! columns x:y
diff --git a/regressioncheck/NIG_Photoionization/surface_emission/parameter.ini b/regressioncheck/NIG_Photoionization/surface_emission/parameter.ini
index 0cfffad2f..e1a74b474 100644
--- a/regressioncheck/NIG_Photoionization/surface_emission/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/surface_emission/parameter.ini
@@ -72,7 +72,6 @@ Part-Species$-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 5
-Part-maxParticleNumber = 4000000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/surface_emission/readme.md b/regressioncheck/NIG_Photoionization/surface_emission/readme.md
index 2e79593da..582e3cadf 100644
--- a/regressioncheck/NIG_Photoionization/surface_emission/readme.md
+++ b/regressioncheck/NIG_Photoionization/surface_emission/readme.md
@@ -1,4 +1,5 @@
# Photoionization: Surface Emission via SEE
+* **Comparing**: the total number of real electrons in the system with an analytical expression
* Particle emission due to secondary electron emission from a surface
* no deposition, no interpolation
* comparison of the number of emitted electrons with the analytic solution
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle/parameter.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle/parameter.ini
index 5f614a416..aa0946565 100644
--- a/regressioncheck/NIG_Photoionization/surface_emission_rectangle/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle/parameter.ini
@@ -72,7 +72,6 @@ Part-Species$-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 5
-Part-maxParticleNumber = 4000000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md b/regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md
index 32b314c04..4e64196c1 100644
--- a/regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle/readme.md
@@ -1,4 +1,5 @@
-# Photoionization: Surface Emission via SEE
+# Secondary electron emission from a surface (rectangle), PartBCIndex=1 (BoundaryParticleOutput), emission-specific MPF (vMPF)
+- **Comparing**: the total number of real electrons in the system with a numerical ref. solution
* Particle emission due to secondary electron emission from a surface
* no deposition, no interpolation
* comparison of the number of emitted electrons with the reference solution
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/DSMC.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/DSMC.ini
new file mode 100644
index 000000000..75c0cfeaf
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/DSMC.ini
@@ -0,0 +1,52 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/Electrons_ref.csv
new file mode 100644
index 000000000..cf1bea2f0
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"Nbr. of electrons (analytical)"
+0.0000000000000000E+000
+0.8899999999999994E+009
+0.5459999999999996E+010
+0.2429999999999998E+011
+0.8663999999999994E+011
+0.2525199999999998E+012
+0.6073799999999996E+012
+0.1217649999999999E+013
+0.2061439999999999E+013
+0.2999459999999998E+013
+0.3837849999999998E+013
+0.4440339999999997E+013
+0.4788419999999997E+013
+0.4950099999999997E+013
+0.5010469999999997E+013
+0.5028589999999997E+013
+0.5032959999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/analyze.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/analyze.ini
new file mode 100644
index 000000000..5e3acef0e
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/analyze.ini
@@ -0,0 +1,27 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 1e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
+
+! ===================================================================================================================
+! integrate columns x:y in a data file as integral(y(x), x, x(1), x(end))
+! ===================================================================================================================
+integrate_line_file = SurfaceAnalyze.csv ! data file name
+integrate_line_columns = 0:1 ! columns x:y [time:nPart_in]
+integrate_line_integral_value = 8.065565e-07 ! Ampere
+integrate_line_tolerance_value = 0.8e-2 ! tolerance
+integrate_line_tolerance_type = relative ! special option
+
+! ===================================================================================================================
+! hdf5 diff
+! ===================================================================================================================
+h5diff_file = photoionization_RadiationSurfState.h5 , photoionization_RadiationVolState.h5
+h5diff_reference_file = reference_RadiationSurfState.h5 , reference_RadiationVolState.h5
+h5diff_data_set = SurfaceData , ElemData
+h5diff_tolerance_value = 15E-2 , 10E-1
+h5diff_tolerance_type = relative , relative
+!h5diff_max_differences = 5
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/command_line.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/command_line.ini
new file mode 100644
index 000000000..6f94bea14
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8,11,25
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/externals.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/externals.ini
new file mode 100644
index 000000000..b7ec4f620
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 1 , 1 , 1
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas2vtk , ./bin/piclas2vtk , ./bin/piclas2vtk
+externaldirectory = pre-hopr , ./parameter.ini , ./parameter.ini , ./parameter.ini
+externalruntime = pre , post , post , post
+cmd_suffix = , photoionization_RadiationVolState.h5 , photoionization_RadiationSurfState.h5 , photoionization_PartStateBoundary_000.00000010000000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/parameter.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/parameter.ini
new file mode 100644
index 000000000..7dc66857c
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/parameter.ini
@@ -0,0 +1,191 @@
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+NVisu = 1
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+N = 1
+
+DoLoadBalance = T
+Load-DeviationThreshold = 0.15
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = ./pre-hopr/box_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 10
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+CalcElectronSEE = T
+
+!Surf-CalcCollCounter = T ! To Activate output of SurfaceAnalyze.csv
+!CheckExchangeProcs = T ! deactivate the asymmetric communicator check
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100.0E-9
+Analyze_dt = 100.0E-9
+
+PIC-DoDeposition = F
+
+PIC-DoInterpolation = T
+Part-LorentzType = 0
+
+epsCG = 1e-2
+
+! Change boundary conditions from definition in hopr.ini
+!BoundaryName = WALL
+!BoundaryType = (/5,0/)
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 0
+Part-NumberOfRandomSeeds = 2
+Particles-RandomSeed1 = 1
+Particles-RandomSeed2 = 2
+Particles-HaloEpsVelo = 3E8 ! 3e7 is enough for single-node run, but multi-node requires 3e8
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_periodicx-
+Part-Boundary1-Condition = periodic
+!Part-Boundary1-Condition = open
+
+Part-Boundary2-SourceName = BC_periodicx+
+Part-Boundary2-Condition = periodic
+!Part-Boundary2-Condition = open
+
+Part-Boundary3-SourceName = BC_periodicy-
+Part-Boundary3-Condition = periodic
+!Part-Boundary3-Condition = open
+
+Part-Boundary4-SourceName = BC_periodicy+
+Part-Boundary4-Condition = periodic
+!Part-Boundary4-Condition = open
+
+Part-Boundary5-SourceName = BC_WALL
+!Part-Boundary5-Condition = open
+Part-Boundary5-Condition = reflective
+Part-Boundary5-BoundaryParticleOutput = T
+Part-Boundary5-PhotonEnACC = 1.0
+Part-Boundary5-PhotonSpecularReflection = F ! F: diffuse with PhotonEnACC, T: perfect mirror
+
+Part-Boundary6-SourceName = BC_TOP
+Part-Boundary6-Condition = reflective
+Part-Boundary6-PhotonEnACC = 1.0
+!Part-Boundary6-BoundaryParticleOutput = T
+
+Part-nPeriodicVectors = 2
+Part-FIBGMdeltas = (/ 1.0 , 1.0 , 1.0 /)
+Part-FactorFIBGM = (/ 5 , 5 , 5 /)
+
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+!Particles-DSMC-CalcSurfaceVal = T ! activate InitParticleBoundarySampling
+RayTracing-PartBound = 6 ! -> iBC=6
+RayTracing-NumRays = 20000
+RayTracing-VolRefineMode = 0 ! 0: do nothing (default)
+! ! 1: refine below user-defined z-coordinate with NMax
+! ! 2: scale N according to the mesh element volume between NMin>=1 and NMax>=2
+! ! 3: refine below user-defined z-coordinate and scale N according to the mesh element volume between NMin>=1 and NMax>=2
+! ! (consider only elements below the user-defined z-coordinate for the scaling)
+PhotonModeBPO = 1 ! [INT] Output mode to store position, direction, host element etc. of
+! ! rays/photons in PartStateBoundary.h5 (only radiation transport or ray tracing
+! ! solver):
+! ! '0: Output nothing to PartStateBoundary.h5
+! ! '1: Output the initial position of the rays and their direction vector
+! ! '2: Output initial position and all calculated intersection points calculated in
+! ! radtrans tracking
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+RayTracing-PowerDensity = 1.0
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0. , 0.5 , -1.0 /)
+
+! SEE parameters
+Part-Boundary5-PhotonSEE-WorkFunction = 10.0
+Part-Boundary5-PhotonSEE-Yield = 0.1
+Part-Boundary5-PhotonSEE-ElectronSpecies = 3
+Part-Boundary$-PhotonEnACC = 1.0
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 1e4
+
+! Change MPF of SEE particles
+Part-vMPF = T
+Part-Boundary5-PhotonSEE-MacroParticleFactor = 1E7
+
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+Part-Species2-TempElec = 300.
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+!Part-Species4-TempVib = 300.
+!Part-Species4-TempRot = 300.
+!Part-Species4-TempElec = 300.
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
+!Part-Species5-TempElec = 300.
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/pre-hopr/hopr.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/pre-hopr/hopr.ini
new file mode 100644
index 000000000..26d400d3e
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/pre-hopr/hopr.ini
@@ -0,0 +1,59 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = box ! name of the project (used for filenames)
+Debugvisu = T ! Write debug mesh to file
+Logging = F ! Write log files
+
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones =1 ! number of zones
+Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0.,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/)
+nElems =(/5,5,5/) ! number of elements in each direction (30x30x30)
+BCIndex =(/5,3,2,4,1,6/) ! Indices of UserDefinedBoundaries
+elemtype =108 ! Elementform (108: Hexaeder)
+useCurveds =F ! T if curved boundaries defined
+SpaceQuandt =1. ! characteristic length of the mesh
+ConformConnect=T
+
+! !=============================================================================== !
+! ! BOUNDARY CONDITIONS
+! !=============================================================================== !
+! nUserDefinedBoundaries=6
+! BoundaryName=BC_periodicx- ! Periodic (+vv1)
+! BoundaryType=(/4,0,0,0/) ! Periodic (+vv1)
+! BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+! BoundaryType=(/4,0,0,0/) ! Periodic (-vv1)
+! BoundaryName=BC_periodicy- ! Periodic (+vv2)
+! BoundaryType=(/4,0,0,0/) ! Periodic (+vv2)
+! BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+! BoundaryType=(/4,0,0,0/) ! Periodic (-vv2)
+! BoundaryName=BC_WALL
+! BoundaryType=(/4,0,0,0/)
+! BoundaryName=BC_TOP
+! BoundaryType=(/4,0,0,0/)
+!
+!
+! PERIODIC
+! !=============================================================================== !
+! ! BOUNDARY CONDITIONS
+!=============================================================================== !
+nUserDefinedBoundaries=6
+BoundaryName=BC_periodicx- ! Periodic (+vv1)
+BoundaryType=(/1,0,0,1/) ! Periodic (+vv1)
+BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1)
+BoundaryName=BC_periodicy- ! Periodic (+vv2)
+BoundaryType=(/1,0,0,2/) ! Periodic (+vv2)
+BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+BoundaryType=(/1,0,0,-2/) ! Periodic (-vv2)
+BoundaryName=BC_WALL
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_TOP
+BoundaryType=(/4,0,0,0/)
+
+nVV=2
+VV=(/1.0 , 0. , 0./)
+VV=(/0. , 1.0 , 0./)
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/readme.md b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/readme.md
new file mode 100644
index 000000000..58016c942
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/readme.md
@@ -0,0 +1,8 @@
+# Photoionization: Surface Emission via SEE for ray tracing
+* **Comparing**: RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution
+* Ray tracing model from which surface emission is calculated
+* Particle emission due to secondary electron emission from a surface
+* No deposition, no interpolation
+* Comparison of the number of emitted electrons with the reference solution
+* Different MPF and number of MPI ranks are tested to yield the same result
+* Note: Because the volume is exactly 1 cubic metre, the calculated electron density is exactly the number of real electrons in the system
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationSurfState.h5 b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationSurfState.h5
new file mode 100644
index 000000000..24b42f714
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationSurfState.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationVolState.h5 b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationVolState.h5
new file mode 100644
index 000000000..1be59ce84
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace/reference_RadiationVolState.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/DSMC.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/DSMC.ini
new file mode 100644
index 000000000..75c0cfeaf
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/DSMC.ini
@@ -0,0 +1,52 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/Electrons_ref.csv
new file mode 100644
index 000000000..cf1bea2f0
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"Nbr. of electrons (analytical)"
+0.0000000000000000E+000
+0.8899999999999994E+009
+0.5459999999999996E+010
+0.2429999999999998E+011
+0.8663999999999994E+011
+0.2525199999999998E+012
+0.6073799999999996E+012
+0.1217649999999999E+013
+0.2061439999999999E+013
+0.2999459999999998E+013
+0.3837849999999998E+013
+0.4440339999999997E+013
+0.4788419999999997E+013
+0.4950099999999997E+013
+0.5010469999999997E+013
+0.5028589999999997E+013
+0.5032959999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
+0.5033809999999997E+013
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/analyze.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/analyze.ini
new file mode 100644
index 000000000..e723a6310
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/analyze.ini
@@ -0,0 +1,29 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 12e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
+
+! ===================================================================================================================
+! integrate columns x:y in a data file as integral(y(x), x, x(1), x(end))
+! ===================================================================================================================
+integrate_line_file = SurfaceAnalyze.csv ! data file name
+integrate_line_columns = 0:1 ! columns x:y [time:nPart_in]
+integrate_line_integral_value = 8.065565e-07 ! Ampere
+integrate_line_tolerance_value = 0.8e-2 ! tolerance
+integrate_line_tolerance_type = relative ! special option
+
+
+! cannot be tested because the number of rays is changed and the number of nSurfSample
+! ===================================================================================================================
+! hdf5 diff
+! ===================================================================================================================
+!h5diff_file = photoionization_RadiationSurfState.h5 , photoionization_RadiationVolState.h5
+!h5diff_reference_file = reference_RadiationSurfState.h5 , reference_RadiationVolState.h5
+!h5diff_data_set = SurfaceData , ElemData
+!h5diff_tolerance_value = 15E-2 , 10E-1
+!h5diff_tolerance_type = relative , relative
+!!h5diff_max_differences = 5
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/command_line.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/command_line.ini
new file mode 100644
index 000000000..6f94bea14
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8,11,25
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/externals.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/externals.ini
new file mode 100644
index 000000000..a00855e0a
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 6 , 1 , 1 , 1
+externalbinary = ./hopr/build/bin/hopr, bin/piclas , ./bin/piclas2vtk , ./bin/piclas2vtk , ./bin/piclas2vtk
+externaldirectory = pre-hopr , pre-piclas , ./parameter.ini , ./parameter.ini , ./parameter.ini
+externalruntime = pre , pre , post , post , post
+cmd_suffix = , ../DSMC.ini , photoionization_RadiationVolState.h5 , photoionization_RadiationSurfState.h5 , photoionization_PartStateBoundary_000.00000010000000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/parameter.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/parameter.ini
new file mode 100644
index 000000000..e8966e04a
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/parameter.ini
@@ -0,0 +1,173 @@
+NVisu = 1
+N = 1
+RayTracing-NMax = 2
+RayTracing-nSurfSample= 2,5
+RayTracing-NodeType = VISU
+RayTracing-NumRays = 10000, 20000
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+
+DoLoadBalance = T
+Load-DeviationThreshold = 1e-3
+LoadBalanceMaxSteps = 10
+DoInitialAutoRestart = T
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = ./pre-hopr/box_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 1
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+CalcElectronSEE = T
+
+CalcMeshInfo = T
+!Surf-CalcCollCounter = T ! To Activate output of SurfaceAnalyze.csv
+!CheckExchangeProcs = T ! deactivate the asymmetric communicator check
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100.0E-9
+Analyze_dt = 100.0E-9
+
+PIC-DoDeposition = F
+
+!PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 0
+Part-NumberOfRandomSeeds = 2
+Particles-RandomSeed1 = 1
+Particles-RandomSeed2 = 2
+Particles-HaloEpsVelo = 3E8 ! 3e7 is enough for single-node run, but multi-node requires 3e8
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_periodicx-
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0
+
+Part-Boundary2-SourceName = BC_periodicx+
+Part-Boundary2-Condition = reflective
+Part-Boundary2-PhotonEnACC = 1.0
+
+Part-Boundary3-SourceName = BC_periodicy-
+Part-Boundary3-Condition = reflective
+Part-Boundary3-PhotonEnACC = 1.0
+
+Part-Boundary4-SourceName = BC_periodicy+
+Part-Boundary4-Condition = reflective
+Part-Boundary4-PhotonEnACC = 1.0
+
+Part-Boundary5-SourceName = BC_WALL
+Part-Boundary5-Condition = reflective
+Part-Boundary5-BoundaryParticleOutput = T
+Part-Boundary5-PhotonSpecularReflection = F ! F: diffuse with PhotonEnACC, T: perfect mirror
+Part-Boundary5-PhotonEnACC = 1.0
+Part-Boundary5-PhotonSEE-Yield = 0.1
+Part-Boundary5-PhotonSEE-WorkFunction = 10
+Part-Boundary5-PhotonSEE-ElectronSpecies= 3
+
+! Change MPF of SEE particles
+Part-vMPF = T
+Part-Boundary5-PhotonSEE-MacroParticleFactor = 1E7,1E8
+
+Part-Boundary6-SourceName = BC_TOP
+Part-Boundary6-Condition = reflective
+Part-Boundary6-PhotonEnACC = 1.0
+!Part-Boundary6-BoundaryParticleOutput = T
+
+!Part-nPeriodicVectors = 2
+!Part-FIBGMdeltas = (/ 1.0 , 1.0 , 1.0 /)
+!Part-FactorFIBGM = (/ 5 , 5 , 5 /)
+
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+RayTracing-PartBound = 6 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+DoBoundaryParticleOutputRay = T
+RayTracing-VolRefineMode = 3 ! Volumetric refinement
+!RayTracing-VolRefineModeZ = 0.5
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+RayTracing-PowerDensity = 1.0
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0. , 0.0 , -1.0 /)
+!RayTracing-RayDirection = (/ 0. , 0.5 , -1.0 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 1e4
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini
new file mode 100644
index 000000000..c289054a5
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini
@@ -0,0 +1,58 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = box ! name of the project (used for filenames)
+Debugvisu = T ! Write debug mesh to file
+Logging = F ! Write log files
+
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones =1 ! number of zones
+Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0.,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/)
+nElems =(/5,5,5/) ! number of elements in each direction (30x30x30)
+BCIndex =(/5,3,2,4,1,6/) ! Indices of UserDefinedBoundaries
+elemtype =108 ! Elementform (108: Hexaeder)
+useCurveds =F ! T if curved boundaries defined
+SpaceQuandt =1. ! characteristic length of the mesh
+ConformConnect=T
+
+!=============================================================================== !
+! NON-PERIODIC BOUNDARY CONDITIONS
+!=============================================================================== !
+nUserDefinedBoundaries=6
+BoundaryName=BC_periodicx- ! Periodic (+vv1)
+BoundaryType=(/4,0,0,0/) ! Periodic (+vv1)
+BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+BoundaryType=(/4,0,0,0/) ! Periodic (-vv1)
+BoundaryName=BC_periodicy- ! Periodic (+vv2)
+BoundaryType=(/4,0,0,0/) ! Periodic (+vv2)
+BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+BoundaryType=(/4,0,0,0/) ! Periodic (-vv2)
+BoundaryName=BC_WALL
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_TOP
+BoundaryType=(/4,0,0,0/)
+
+
+! !=============================================================================== !
+! ! PERIODIC BOUNDARY CONDITIONS
+! !=============================================================================== !
+! nUserDefinedBoundaries=6
+! BoundaryName=BC_periodicx- ! Periodic (+vv1)
+! BoundaryType=(/1,0,0,1/) ! Periodic (+vv1)
+! BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+! BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1)
+! BoundaryName=BC_periodicy- ! Periodic (+vv2)
+! BoundaryType=(/1,0,0,2/) ! Periodic (+vv2)
+! BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+! BoundaryType=(/1,0,0,-2/) ! Periodic (-vv2)
+! BoundaryName=BC_WALL
+! BoundaryType=(/4,0,0,0/)
+! BoundaryName=BC_TOP
+! BoundaryType=(/4,0,0,0/)
+!
+! nVV=2
+! VV=(/1.0 , 0. , 0./)
+! VV=(/0. , 1.0 , 0./)
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-piclas/parameter.ini b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-piclas/parameter.ini
new file mode 100644
index 000000000..e85a88568
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/pre-piclas/parameter.ini
@@ -0,0 +1,177 @@
+NVisu = 1
+N = 1
+RayTracing-NMax = 2
+RayTracing-nSurfSample= 1
+RayTracing-NodeType = VISU
+RayTracing-NumRays = 10000
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+
+DoLoadBalance = T
+Load-DeviationThreshold = 1e-3
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = ../pre-hopr/box_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 10
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+CalcElectronSEE = T
+
+CalcMeshInfo = T
+!Surf-CalcCollCounter = T ! To Activate output of SurfaceAnalyze.csv
+!CheckExchangeProcs = T ! deactivate the asymmetric communicator check
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 2.5E-9
+tend = 5e-9!100.0E-9
+Analyze_dt = 100.0E-9
+
+PIC-DoDeposition = F
+
+!PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+
+! Change boundary conditions from definition in hopr.ini
+!BoundaryName = WALL
+!BoundaryType = (/5,0/)
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 0
+Part-NumberOfRandomSeeds = 2
+Particles-RandomSeed1 = 1
+Particles-RandomSeed2 = 2
+Particles-HaloEpsVelo = 3E8 ! 3e7 is enough for single-node run, but multi-node requires 3e8
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_periodicx-
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0
+
+Part-Boundary2-SourceName = BC_periodicx+
+Part-Boundary2-Condition = reflective
+Part-Boundary2-PhotonEnACC = 1.0
+
+Part-Boundary3-SourceName = BC_periodicy-
+Part-Boundary3-Condition = reflective
+Part-Boundary3-PhotonEnACC = 1.0
+
+Part-Boundary4-SourceName = BC_periodicy+
+Part-Boundary4-Condition = reflective
+Part-Boundary4-PhotonEnACC = 1.0
+
+Part-Boundary5-SourceName = BC_WALL
+Part-Boundary5-Condition = reflective
+Part-Boundary5-BoundaryParticleOutput = T
+Part-Boundary5-PhotonSpecularReflection = F ! F: diffuse with PhotonEnACC, T: perfect mirror
+Part-Boundary5-PhotonEnACC = 1.0
+Part-Boundary5-PhotonSEE-Yield = 0.1
+Part-Boundary5-PhotonSEE-WorkFunction = 10
+Part-Boundary5-PhotonSEE-ElectronSpecies= 3
+
+! Change MPF of SEE particles
+Part-vMPF = T
+Part-Boundary5-PhotonSEE-MacroParticleFactor = 1E7
+
+Part-Boundary6-SourceName = BC_TOP
+Part-Boundary6-Condition = reflective
+Part-Boundary6-PhotonEnACC = 1.0
+!Part-Boundary6-BoundaryParticleOutput = T
+
+!Part-nPeriodicVectors = 2
+!Part-FIBGMdeltas = (/ 1.0 , 1.0 , 1.0 /)
+!Part-FactorFIBGM = (/ 5 , 5 , 5 /)
+
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+RayTracing-PartBound = 6 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+DoBoundaryParticleOutputRay = T
+RayTracing-VolRefineMode = 3 ! Volumetric refinement
+!RayTracing-VolRefineModeZ = 0.5
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+RayTracing-PowerDensity = 1.0
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0. , 0.0 , -1.0 /)
+!RayTracing-RayDirection = (/ 0. , 0.5 , -1.0 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 1e4
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/readme.md b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/readme.md
new file mode 100644
index 000000000..9b4cdb867
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/surface_emission_rectangle_ray_trace_high-order/readme.md
@@ -0,0 +1,13 @@
+# Photoionization: Surface Emission via SEE for ray tracing with high-order refinement
+* **Comparing**: RadiationSurfState.h5 and RadiationVolState.h5 with reference files, the total number of real electrons in the system with a numerical ref. solution
++ hopr mesh is built on-the-fly
+ - 0.) single-core hopr run (pre-external)
++ Ray tracing model from which surface emission is calculated
+ - 1.) reference files are created by single-core run (pre-external)
+* Particle emission due to secondary electron emission from a surface
+* No deposition, no interpolation
+* Comparison of the number of emitted electrons with the reference solution
+* Different MPF and number of MPI ranks are tested to yield the same result
+ - 2.) single + multi node ray tracing runs and compare volume+surface output to .h5 (post-external)
+ - 3.) single + multi node plasma restart runs and compare the analytical or reference electron density over time (post-external)
+* Note: Because the volume is exactly 1 cubic metre, the calculated electron density is exactly the number of real electrons in the system
diff --git a/regressioncheck/NIG_Photoionization/volume_emission/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission/parameter.ini
index 976b2aee0..44f84ad45 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/volume_emission/parameter.ini
@@ -66,7 +66,6 @@ Part-Species$-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 5
-Part-maxParticleNumber = 500000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/volume_emission/readme.md b/regressioncheck/NIG_Photoionization/volume_emission/readme.md
index 7811b8fcc..40e73e8f2 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission/readme.md
+++ b/regressioncheck/NIG_Photoionization/volume_emission/readme.md
@@ -1,4 +1,5 @@
-# Photoionization: Volumetric Emission
+# Photoionization in the volume (circle and honeycomb)
+* **Comparing**: the total number of real electrons in the system with an analytical expression
* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
* no deposition, no interpolation
* comparison of the number of emitted electrons with the analytic solution
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/parameter.ini
index bd91942d1..a4a4c97d3 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/parameter.ini
@@ -34,7 +34,7 @@ Part-AnalyzeStep = 1
CalcNumSpec = T
CalcNumDens = T
-CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+CheckExchangeProcs = T ! deactivate the asymmetric communicator check
! =============================================================================== !
! CALCULATION
! =============================================================================== !
@@ -66,7 +66,6 @@ Particles-DSMC-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 5
-Part-maxParticleNumber = 500000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md
index a3cbc8d0c..55e2cdf39 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md
+++ b/regressioncheck/NIG_Photoionization/volume_emission_polychromatic/readme.md
@@ -1,4 +1,5 @@
-# Photoionization: Volumetric Emission Polychromatic
+# Photoionization in the volume with polychromatic photon spectrum and energy-dependent cross-section data
+- **Comparing**: the total number of real electrons in the system with a reference solution and particle numbers for different MPFs
* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
* no deposition, no interpolation
* comparison of the number of emitted electrons with a reference solution
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle/parameter.ini
index a175440da..3bc3993c3 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_rectangle/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle/parameter.ini
@@ -35,6 +35,9 @@ CalcNumSpec = T
CalcNumDens = T
!CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+! Output emission particles to PartStateBoundary.h5
+Part-Boundary1-BoundaryParticleOutput = T
+Part-Species3-Init1-PartBCIndex = 0
! =============================================================================== !
! CALCULATION
! =============================================================================== !
@@ -66,7 +69,6 @@ Part-Species$-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 5
-Part-maxParticleNumber = 500000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md
index 899726272..466254238 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle/readme.md
@@ -1,4 +1,5 @@
-# Photoionization: Volumetric Emission
+# Photoionization in the volume (rectangle)
+- **Comparing**: the total number of real electrons in the system with a numerical ref. solution
* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
* no deposition, no interpolation
* comparison of the number of emitted electrons with the reference solution (1 MPF and MPI=1)
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/DSMC.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/DSMC.ini
new file mode 100644
index 000000000..f0b045264
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/DSMC.ini
@@ -0,0 +1,71 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
+! =============================================================================== !
+! Reactions
+! =============================================================================== !
+DSMC-NumOfReactions = 2
+
+! ----------------------------------------------------
+! Photo-ionization (electron species should be at the first or second position of the product array)
+! ----------------------------------------------------
+! Reaction 1 | H2 + photon --> H2Ion + e
+DSMC-Reaction1-ReactionModel = phIon
+DSMC-Reaction1-Reactants = (/1,0,0/)
+DSMC-Reaction1-Products = (/4,3,0,0/)
+DSMC-Reaction1-CrossSection = 4.84E-24
+
+! Reaction 2 | H2 + photon --> H + HIon + e
+DSMC-Reaction2-ReactionModel = phIon
+DSMC-Reaction2-Reactants = (/1,0,0/)
+DSMC-Reaction2-Products = (/2,3,5,0/)
+DSMC-Reaction2-CrossSection = 8.3E-25
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electronic-State-Database.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electronic-State-Database.h5
new file mode 100644
index 000000000..9e335f4b5
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electronic-State-Database.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electrons_ref.csv
new file mode 100644
index 000000000..8ccf38709
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"electrons"
+0.0000000000000000E+000
+0.5099999999999998E+008
+0.3099999999999999E+009
+0.1377999999999999E+010
+0.4912999999999998E+010
+0.1431799999999999E+011
+0.3443899999999998E+011
+0.6904099999999997E+011
+0.1168840000000000E+012
+0.1700699999999999E+012
+0.2176069999999999E+012
+0.2517669999999999E+012
+0.2715039999999999E+012
+0.2806709999999999E+012
+0.2840939999999999E+012
+0.2851209999999999E+012
+0.2853689999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/XSec_Database_H2_Photoionization.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/XSec_Database_H2_Photoionization.h5
new file mode 100644
index 000000000..abef529f6
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/XSec_Database_H2_Photoionization.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/analyze.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/analyze.ini
new file mode 100644
index 000000000..847a8b187
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/analyze.ini
@@ -0,0 +1,8 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 3e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/command_line.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/command_line.ini
new file mode 100644
index 000000000..73e8d46c3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/externals.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/externals.ini
new file mode 100644
index 000000000..e13b3d06b
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 !, 6
+externalbinary = ./hopr/build/bin/hopr !, bin/piclas
+externaldirectory = pre-hopr !, pre-piclas
+externalruntime = pre !, pre
+cmd_suffix = !, ../DSMC.ini
+
+!nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/parameter.ini
new file mode 100644
index 000000000..0bb7610d4
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/parameter.ini
@@ -0,0 +1,162 @@
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+NVisu = 1
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+N = 1
+
+DoLoadBalance = T
+Load-DeviationThreshold = 0.001
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = ./pre-hopr/box_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 10
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+!CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100e-9
+Analyze_dt = 100e-9
+
+PIC-DoDeposition = F
+
+PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 3
+Part-NumberOfRandomSeeds = 0
+Particles-HaloEpsVelo = 3E7
+
+Particles-CollXSec-Database = XSec_Database_H2_Photoionization.h5
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_periodicx-
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0
+
+Part-Boundary2-SourceName = BC_periodicx+
+Part-Boundary2-Condition = reflective
+
+Part-Boundary3-SourceName = BC_periodicy-
+Part-Boundary3-Condition = reflective
+
+Part-Boundary4-SourceName = BC_periodicy+
+Part-Boundary4-Condition = reflective
+
+Part-Boundary5-SourceName = BC_WALL
+Part-Boundary5-Condition = reflective
+
+! Change MPF of SEE particles
+!Part-vMPF = T
+
+Part-Boundary6-SourceName = BC_TOP
+Part-Boundary6-Condition = reflective
+Part-Boundary6-PhotonEnACC = 1.0
+!Part-Boundary6-BoundaryParticleOutput = T
+
+
+
+
+
+Part-FIBGMdeltas = (/ 1.0 , 1.0 , 1.0 /)
+Part-FactorFIBGM = (/ 5 , 5 , 5 /)
+
+Part-Boundary$-BoundaryParticleOutput = T
+Part-Boundary$-PhotonSpecularReflection = F ! F: diffuse with PhotonEnACC, T: perfect mirror
+Part-Boundary$-PhotonEnACC = 1.0
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+RayTracing-NumRays = 20000
+RayTracing-PartBound = 6 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+RayTracing-VolRefineMode = 3 ! Volumetric refinement
+!RayTracing-VolRefineModeZ = 0.5
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+RayTracing-PowerDensity = 1.0
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0. , 0.0 , -1.0 /)
+!RayTracing-RayDirection = (/ 0. , 0.5 , -1.0 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 1e7
+
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini
new file mode 100644
index 000000000..c289054a5
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/pre-hopr/hopr.ini
@@ -0,0 +1,58 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = box ! name of the project (used for filenames)
+Debugvisu = T ! Write debug mesh to file
+Logging = F ! Write log files
+
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones =1 ! number of zones
+Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0.,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/)
+nElems =(/5,5,5/) ! number of elements in each direction (30x30x30)
+BCIndex =(/5,3,2,4,1,6/) ! Indices of UserDefinedBoundaries
+elemtype =108 ! Elementform (108: Hexaeder)
+useCurveds =F ! T if curved boundaries defined
+SpaceQuandt =1. ! characteristic length of the mesh
+ConformConnect=T
+
+!=============================================================================== !
+! NON-PERIODIC BOUNDARY CONDITIONS
+!=============================================================================== !
+nUserDefinedBoundaries=6
+BoundaryName=BC_periodicx- ! Periodic (+vv1)
+BoundaryType=(/4,0,0,0/) ! Periodic (+vv1)
+BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+BoundaryType=(/4,0,0,0/) ! Periodic (-vv1)
+BoundaryName=BC_periodicy- ! Periodic (+vv2)
+BoundaryType=(/4,0,0,0/) ! Periodic (+vv2)
+BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+BoundaryType=(/4,0,0,0/) ! Periodic (-vv2)
+BoundaryName=BC_WALL
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_TOP
+BoundaryType=(/4,0,0,0/)
+
+
+! !=============================================================================== !
+! ! PERIODIC BOUNDARY CONDITIONS
+! !=============================================================================== !
+! nUserDefinedBoundaries=6
+! BoundaryName=BC_periodicx- ! Periodic (+vv1)
+! BoundaryType=(/1,0,0,1/) ! Periodic (+vv1)
+! BoundaryName=BC_periodicx+ ! Periodic (-vv1)
+! BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1)
+! BoundaryName=BC_periodicy- ! Periodic (+vv2)
+! BoundaryType=(/1,0,0,2/) ! Periodic (+vv2)
+! BoundaryName=BC_periodicy+ ! Periodic (-vv2)
+! BoundaryType=(/1,0,0,-2/) ! Periodic (-vv2)
+! BoundaryName=BC_WALL
+! BoundaryType=(/4,0,0,0/)
+! BoundaryName=BC_TOP
+! BoundaryType=(/4,0,0,0/)
+!
+! nVV=2
+! VV=(/1.0 , 0. , 0./)
+! VV=(/0. , 1.0 , 0./)
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/readme.md
new file mode 100644
index 000000000..a981ec2cc
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order/readme.md
@@ -0,0 +1,9 @@
+# Photoionization in the volume (rectangle) for ray tracing with high-order refinement
+- **Comparing**: the total number of real electrons in the system with a numerical ref. solution
+* ray tracing + volume ionization reactions
+* reference density in Electrons_ref.csv calculated with the old model and 1x1x1 emission region for volume see and 1e-3 J
+* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
+* no deposition, no interpolation
+* comparison of the number of emitted electrons with the reference solution (1 MPF and MPI=1)
+* different MPF and number of MPI ranks are tested to yield the same result
+* Note: Because the volume is exactly 1 cubic metre, the calculated electron density is exactly the number of real electrons in the system
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/DSMC.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/DSMC.ini
new file mode 100644
index 000000000..f0b045264
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/DSMC.ini
@@ -0,0 +1,71 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
+! =============================================================================== !
+! Reactions
+! =============================================================================== !
+DSMC-NumOfReactions = 2
+
+! ----------------------------------------------------
+! Photo-ionization (electron species should be at the first or second position of the product array)
+! ----------------------------------------------------
+! Reaction 1 | H2 + photon --> H2Ion + e
+DSMC-Reaction1-ReactionModel = phIon
+DSMC-Reaction1-Reactants = (/1,0,0/)
+DSMC-Reaction1-Products = (/4,3,0,0/)
+DSMC-Reaction1-CrossSection = 4.84E-24
+
+! Reaction 2 | H2 + photon --> H + HIon + e
+DSMC-Reaction2-ReactionModel = phIon
+DSMC-Reaction2-Reactants = (/1,0,0/)
+DSMC-Reaction2-Products = (/2,3,5,0/)
+DSMC-Reaction2-CrossSection = 8.3E-25
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electronic-State-Database.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electronic-State-Database.h5
new file mode 100644
index 000000000..9e335f4b5
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electronic-State-Database.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electrons_ref.csv
new file mode 100644
index 000000000..8ccf38709
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"electrons"
+0.0000000000000000E+000
+0.5099999999999998E+008
+0.3099999999999999E+009
+0.1377999999999999E+010
+0.4912999999999998E+010
+0.1431799999999999E+011
+0.3443899999999998E+011
+0.6904099999999997E+011
+0.1168840000000000E+012
+0.1700699999999999E+012
+0.2176069999999999E+012
+0.2517669999999999E+012
+0.2715039999999999E+012
+0.2806709999999999E+012
+0.2840939999999999E+012
+0.2851209999999999E+012
+0.2853689999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/XSec_Database_H2_Photoionization.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/XSec_Database_H2_Photoionization.h5
new file mode 100644
index 000000000..abef529f6
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/XSec_Database_H2_Photoionization.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/analyze.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/analyze.ini
new file mode 100644
index 000000000..3b15ada32
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/analyze.ini
@@ -0,0 +1,8 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 15e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/command_line.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/command_line.ini
new file mode 100644
index 000000000..73e8d46c3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/export.neu b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/export.neu
new file mode 100644
index 000000000..ba1542012
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/export.neu
@@ -0,0 +1,333 @@
+ CONTROL INFO 2.4.6
+** GAMBIT NEUTRAL FILE
+/media/nizenkov/storage/boltzplatz/Projects/Zeiss/012-SMT-Dinger-P23006-MEMS-Raytracing/3-TestCases/meshes/2023-08-25-M0X-Debug-Cubit-3to1/export.neu
+PROGRAM: Coreform_Cubit VERSION: 2023.4
+
+ NUMNP NELEM NGRPS NBSETS NDFCD NDFVL
+ 96 49 2 6 3 3
+ENDOFSECTION
+ NODAL COORDINATES 2.4.6
+ 1 5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 2 1.66666666667e-01 5.00000000000e-01 2.86458333333e-02
+ 3 1.66666666667e-01 5.00000000000e-01 -1.61458333333e-01
+ 4 5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 5 5.00000000000e-01 1.66666666667e-01 2.97241210938e-02
+ 6 1.76708380738e-01 1.79483363067e-01 -1.92732493396e-02
+ 7 1.70986215705e-01 1.71365536089e-01 -1.75388514517e-01
+ 8 5.00000000000e-01 1.66666666667e-01 -1.60156250000e-01
+ 9 -1.66666666667e-01 5.00000000000e-01 2.99479166667e-02
+ 10 -1.66666666667e-01 5.00000000000e-01 -1.58854166667e-01
+ 11 -1.76757698738e-01 1.79371924687e-01 -1.91878832863e-02
+ 12 -1.70841566289e-01 1.71382951399e-01 -1.75183210145e-01
+ 13 -5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 14 -5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 15 -5.00000000000e-01 1.66666666667e-01 2.86458333333e-02
+ 16 -5.00000000000e-01 1.66666666667e-01 -1.61458333333e-01
+ 17 1.66666666667e-01 5.00000000000e-01 -3.32031250000e-01
+ 18 5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 19 1.68050720983e-01 1.68046773869e-01 -3.36720028064e-01
+ 20 5.00000000000e-01 1.66666666667e-01 -3.33333333333e-01
+ 21 -1.66666666667e-01 5.00000000000e-01 -3.31054687500e-01
+ 22 -1.67970039349e-01 1.68135871499e-01 -3.36483981681e-01
+ 23 -5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 24 -5.00000000000e-01 1.66666666667e-01 -3.32031250000e-01
+ 25 1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 26 5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 27 1.66666666667e-01 1.66666666667e-01 -5.00000000000e-01
+ 28 5.00000000000e-01 1.66666666667e-01 -5.00000000000e-01
+ 29 -1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 30 -1.66666666667e-01 1.66666666667e-01 -5.00000000000e-01
+ 31 -5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 32 -5.00000000000e-01 1.66666666667e-01 -5.00000000000e-01
+ 33 5.00000000000e-01 -1.66666666667e-01 2.90527343750e-02
+ 34 1.76733273392e-01 -1.79406401063e-01 -1.91723599758e-02
+ 35 1.70962160892e-01 -1.71408003494e-01 -1.75207218157e-01
+ 36 5.00000000000e-01 -1.66666666667e-01 -1.59830729167e-01
+ 37 -1.76629794550e-01 -1.79429072538e-01 -1.90680848152e-02
+ 38 -1.70853129197e-01 -1.71364388408e-01 -1.74988002849e-01
+ 39 -5.00000000000e-01 -1.66666666667e-01 2.99479166667e-02
+ 40 -5.00000000000e-01 -1.66666666667e-01 -1.58854166667e-01
+ 41 1.68040989340e-01 -1.68118176892e-01 -3.36635631438e-01
+ 42 5.00000000000e-01 -1.66666666667e-01 -3.33333333333e-01
+ 43 -1.68055817370e-01 -1.68109323888e-01 -3.36359806400e-01
+ 44 -5.00000000000e-01 -1.66666666667e-01 -3.31054687500e-01
+ 45 1.66666666667e-01 -1.66666666667e-01 -5.00000000000e-01
+ 46 5.00000000000e-01 -1.66666666667e-01 -5.00000000000e-01
+ 47 -1.66666666667e-01 -1.66666666667e-01 -5.00000000000e-01
+ 48 -5.00000000000e-01 -1.66666666667e-01 -5.00000000000e-01
+ 49 5.00000000000e-01 -5.00000000000e-01 0.00000000000e+00
+ 50 1.66666666667e-01 -5.00000000000e-01 2.97241210938e-02
+ 51 1.66666666667e-01 -5.00000000000e-01 -1.60156250000e-01
+ 52 5.00000000000e-01 -5.00000000000e-01 -1.66666666667e-01
+ 53 -1.66666666667e-01 -5.00000000000e-01 2.90527343750e-02
+ 54 -1.66666666667e-01 -5.00000000000e-01 -1.59830729167e-01
+ 55 -5.00000000000e-01 -5.00000000000e-01 0.00000000000e+00
+ 56 -5.00000000000e-01 -5.00000000000e-01 -1.66666666667e-01
+ 57 1.66666666667e-01 -5.00000000000e-01 -3.31705729167e-01
+ 58 5.00000000000e-01 -5.00000000000e-01 -3.33333333333e-01
+ 59 -1.66666666667e-01 -5.00000000000e-01 -3.31217447917e-01
+ 60 -5.00000000000e-01 -5.00000000000e-01 -3.33333333333e-01
+ 61 1.66666666667e-01 -5.00000000000e-01 -5.00000000000e-01
+ 62 5.00000000000e-01 -5.00000000000e-01 -5.00000000000e-01
+ 63 -1.66666666667e-01 -5.00000000000e-01 -5.00000000000e-01
+ 64 -5.00000000000e-01 -5.00000000000e-01 -5.00000000000e-01
+ 65 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 66 1.66666666667e-01 5.00000000000e-01 2.50000000000e-01
+ 67 1.75224475667e-01 1.87325558653e-01 1.24315387207e-01
+ 68 5.00000000000e-01 1.66666666667e-01 2.50000000000e-01
+ 69 -1.66666666667e-01 5.00000000000e-01 2.50000000000e-01
+ 70 -1.75305352846e-01 1.87236259741e-01 1.24326964392e-01
+ 71 -5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 72 -5.00000000000e-01 1.66666666667e-01 2.50000000000e-01
+ 73 1.75308731395e-01 -1.87246304991e-01 1.24358939826e-01
+ 74 5.00000000000e-01 -1.66666666667e-01 2.50000000000e-01
+ 75 -1.75182745767e-01 -1.87299782629e-01 1.24378343577e-01
+ 76 -5.00000000000e-01 -1.66666666667e-01 2.50000000000e-01
+ 77 1.66666666667e-01 -5.00000000000e-01 2.50000000000e-01
+ 78 5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 79 -1.66666666667e-01 -5.00000000000e-01 2.50000000000e-01
+ 80 -5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 81 1.66666666667e-01 -1.66666666667e-01 -8.30000000000e-01
+ 82 5.00000000000e-01 -1.66666666667e-01 -8.30000000000e-01
+ 83 5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 84 1.66666666667e-01 -5.00000000000e-01 -8.30000000000e-01
+ 85 -1.66666666667e-01 -1.66666666667e-01 -8.30000000000e-01
+ 86 -1.66666666667e-01 -5.00000000000e-01 -8.30000000000e-01
+ 87 -5.00000000000e-01 -1.66666666667e-01 -8.30000000000e-01
+ 88 -5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 89 1.66666666667e-01 1.66666666667e-01 -8.30000000000e-01
+ 90 5.00000000000e-01 1.66666666667e-01 -8.30000000000e-01
+ 91 -1.66666666667e-01 1.66666666667e-01 -8.30000000000e-01
+ 92 -5.00000000000e-01 1.66666666667e-01 -8.30000000000e-01
+ 93 1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 94 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 95 -1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 96 -5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ENDOFSECTION
+ ELEMENTS/CELLS 2.4.6
+ 1 4 8 1 2 4 3 5 6 8
+ 7
+ 2 4 8 2 9 3 10 6 11 7
+ 12
+ 3 4 8 9 13 10 14 11 15 12
+ 16
+ 4 4 8 4 3 18 17 8 7 20
+ 19
+ 5 4 8 3 10 17 21 7 12 19
+ 22
+ 6 4 8 10 14 21 23 12 16 22
+ 24
+ 7 4 8 18 17 26 25 20 19 28
+ 27
+ 8 4 8 17 21 25 29 19 22 27
+ 30
+ 9 4 8 21 23 29 31 22 24 30
+ 32
+ 10 4 8 5 6 8 7 33 34 36
+ 35
+ 11 4 8 6 11 7 12 34 37 35
+ 38
+ 12 4 8 11 15 12 16 37 39 38
+ 40
+ 13 4 8 8 7 20 19 36 35 42
+ 41
+ 14 4 8 7 12 19 22 35 38 41
+ 43
+ 15 4 8 12 16 22 24 38 40 43
+ 44
+ 16 4 8 20 19 28 27 42 41 46
+ 45
+ 17 4 8 19 22 27 30 41 43 45
+ 47
+ 18 4 8 22 24 30 32 43 44 47
+ 48
+ 19 4 8 33 34 36 35 49 50 52
+ 51
+ 20 4 8 34 37 35 38 50 53 51
+ 54
+ 21 4 8 37 39 38 40 53 55 54
+ 56
+ 22 4 8 36 35 42 41 52 51 58
+ 57
+ 23 4 8 35 38 41 43 51 54 57
+ 59
+ 24 4 8 38 40 43 44 54 56 59
+ 60
+ 25 4 8 42 41 46 45 58 57 62
+ 61
+ 26 4 8 41 43 45 47 57 59 61
+ 63
+ 27 4 8 43 44 47 48 59 60 63
+ 64
+ 28 4 8 1 2 5 6 65 66 68
+ 67
+ 29 4 8 2 9 6 11 66 69 67
+ 70
+ 30 4 8 9 13 11 15 69 71 70
+ 72
+ 31 4 8 5 6 33 34 68 67 74
+ 73
+ 32 4 8 6 11 34 37 67 70 73
+ 75
+ 33 4 8 11 15 37 39 70 72 75
+ 76
+ 34 4 8 33 34 49 50 74 73 78
+ 77
+ 35 4 8 34 37 50 53 73 75 77
+ 79
+ 36 4 8 37 39 53 55 75 76 79
+ 80
+ 37 4 8 67 70 73 75 68 72 74
+ 76
+ 38 4 8 68 72 74 76 65 71 78
+ 80
+ 39 4 8 66 69 67 70 65 71 68
+ 72
+ 40 4 8 73 75 77 79 74 76 78
+ 80
+ 41 4 8 45 46 61 62 81 82 84
+ 83
+ 42 4 8 47 45 63 61 85 81 86
+ 84
+ 43 4 8 48 47 64 63 87 85 88
+ 86
+ 44 4 8 27 28 45 46 89 90 81
+ 82
+ 45 4 8 30 27 47 45 91 89 85
+ 81
+ 46 4 8 32 30 48 47 92 91 87
+ 85
+ 47 4 8 25 26 27 28 93 94 89
+ 90
+ 48 4 8 29 25 30 27 95 93 91
+ 89
+ 49 4 8 31 29 32 30 96 95 92
+ 91
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 1 ELEMENTS: 40 MATERIAL: 0 NFLAGS: 0
+ Block 1
+
+
+ 1 2 3 4 5 6 7 8 9 10
+ 11 12 13 14 15 16 17 18 19 20
+ 21 22 23 24 25 26 27 28 29 30
+ 31 32 33 34 35 36 37 38 39 40
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 2 ELEMENTS: 9 MATERIAL: 0 NFLAGS: 0
+ Block 2
+
+
+ 41 42 43 44 45 46 47 48 49
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_TOP 1 1 0 6
+ 38 4 6
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_BOT 1 9 0 6
+ 41 4 6
+ 42 4 6
+ 43 4 6
+ 44 4 6
+ 45 4 6
+ 46 4 6
+ 47 4 6
+ 48 4 6
+ 49 4 6
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XPLUS 1 16 0 6
+ 34 4 4
+ 31 4 4
+ 28 4 4
+ 38 4 4
+ 7 4 4
+ 4 4 4
+ 1 4 4
+ 16 4 4
+ 13 4 4
+ 10 4 4
+ 25 4 4
+ 22 4 4
+ 19 4 4
+ 41 4 2
+ 44 4 2
+ 47 4 2
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XMINUS 1 16 0 6
+ 30 4 2
+ 33 4 2
+ 36 4 2
+ 38 4 2
+ 3 4 2
+ 6 4 2
+ 9 4 2
+ 12 4 2
+ 15 4 2
+ 18 4 2
+ 21 4 2
+ 24 4 2
+ 27 4 2
+ 49 4 4
+ 46 4 4
+ 43 4 4
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YMINUS 1 16 0 6
+ 36 4 3
+ 35 4 3
+ 34 4 3
+ 40 4 3
+ 19 4 6
+ 20 4 6
+ 21 4 6
+ 22 4 6
+ 23 4 6
+ 24 4 6
+ 25 4 6
+ 26 4 6
+ 27 4 6
+ 43 4 3
+ 42 4 3
+ 41 4 3
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YPLUS 1 16 0 6
+ 28 4 1
+ 29 4 1
+ 30 4 1
+ 39 4 1
+ 1 4 5
+ 4 4 5
+ 7 4 5
+ 2 4 5
+ 5 4 5
+ 8 4 5
+ 3 4 5
+ 6 4 5
+ 9 4 5
+ 47 4 1
+ 48 4 1
+ 49 4 1
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 1 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 2 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 3 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 4 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 5 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 6 1 0 0 51
+ENDOFSECTION
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/externals.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/externals.ini
new file mode 100644
index 000000000..a1a4a4745
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr!, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = hopr.ini !, parameter.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = pre !, post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = !, RadTrans_Cylinder_2D_RadiationState.h5 ! Suffix for the binary execution
+!nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/hopr.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/hopr.ini
new file mode 100644
index 000000000..85283bea6
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/hopr.ini
@@ -0,0 +1,26 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = mesh_cubitDebug ! name of the project (used for filenames)
+Debugvisu = T
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+FileName = export.neu ! name of mesh file as exported from grid generator
+Mode = 2 ! 1 Cartesian 2 gambit file 3 CGNS
+meshscale = 0.001
+!=============================================================================== !
+! BOUNDARY CONDITIONS
+!=============================================================================== !
+BoundaryName = BC_TOP
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_BOT
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_XMINUS
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_XPLUS
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_YMINUS
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_YPLUS
+BoundaryType = (/4,0,0,0/)
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/parameter.ini
new file mode 100644
index 000000000..61ab48584
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/parameter.ini
@@ -0,0 +1,161 @@
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+N = 1,2,3,4
+RayTracing-NMax = 1,2,3,4
+NVisu = 1,2,3,4
+NodeTypeVisu = VISU_INNER
+
+DoLoadBalance = T
+Load-DeviationThreshold = 0.001
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+!nocrosscombination:N,RayTracing-NMax,NVisu, RayTracing-nSurfSample,Part-Boundary$-PhotonSpecularReflection,Part-Boundary$-PhotonEnACC,RayTracing-PowerDensity
+nocrosscombination:N,RayTracing-NMax,NVisu,UsePhotonTriaTracking,RayTracing-nSurfSample,Part-Boundary$-PhotonSpecularReflection,Part-Boundary$-PhotonEnACC,RayTracing-PowerDensity
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = mesh_cubitDebug_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 1
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+!CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100e-9
+Analyze_dt = 100e-9
+
+PIC-DoDeposition = F
+
+PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 3
+Part-NumberOfRandomSeeds = 0
+Particles-HaloEpsVelo = 3E7
+
+Particles-CollXSec-Database = XSec_Database_H2_Photoionization.h5
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_TOP
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0 ! Photon inlet BC must always be absorbing
+
+Part-Boundary2-SourceName = BC_BOT
+Part-Boundary2-Condition = reflective
+
+Part-Boundary3-SourceName = BC_XMINUS
+Part-Boundary3-Condition = reflective
+
+Part-Boundary4-SourceName = BC_XPLUS
+Part-Boundary4-Condition = reflective
+
+Part-Boundary5-SourceName = BC_YMINUS
+Part-Boundary5-Condition = reflective
+
+Part-Boundary6-SourceName = BC_YPLUS
+Part-Boundary6-Condition = reflective
+
+
+Part-FIBGMdeltas = (/ 1.0 , 1.0 , 1.0 /)
+Part-FactorFIBGM = (/ 5 , 5 , 5 /)
+
+Part-Boundary$-BoundaryParticleOutput = T
+Part-Boundary$-PhotonSpecularReflection = T , F , T , F ! F: diffuse with PhotonEnACC , T: perfect mirror
+Part-Boundary$-PhotonEnACC = 1e-9 , 1.0 , 1e-9 , 1.0 ! 1: fully absorb, 1e-9: reflect all (double energy in volume)
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+UsePhotonTriaTracking = F,T,T,F
+RayTracing-nSurfSample= 1,2,5,10
+RayTracing-NumRays = 5000
+!RayTracing-NumRays = 5000000
+RayTracing-PartBound = 1 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+RayTracing-VolRefineMode = 1 ! Volumetric refinement
+RayTracing-VolRefineModeZ = 1000.
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+RayTracing-PowerDensity = 0.5 , 1.0 , 0.5 , 1.0
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0. , 0.0 , -1.0 /)
+!RayTracing-RayDirection = (/ 0. , 0.5 , -1.0 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 0.1
+
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md
new file mode 100644
index 000000000..b3e6719e3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1/readme.md
@@ -0,0 +1,13 @@
+# Photoionization in the volume (rectangle) for ray tracing with high-order refinement and bilinear tracking
+- **Comparing**: the total number of real electrons in the system with a numerical ref. solution
+* convert cubit mesh with hopr to .h5
+* ray tracing + volume ionization reactions
+* reference density in Electrons_ref.csv calculated with the old model and 1x1x1 emission region for volume see and 1e-3 J
+ * the size of the domain in this example is 1mm x 1mm x 1.33 mm, which is much smaller than the other reggies with 1m3 simulation
+ size, however, the resulting density must be the same as the irradiation is the same, just on a smaller scale
+ * the MPF is therefore chosen much smaller: MPF=0.01
+* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
+* no deposition, no interpolation
+* comparison of the number of emitted electrons with the reference solution (1 MPF and MPI=1)
+* different MPF and number of MPI ranks are tested to yield the same result
+* Note: Because the volume is exactly 1 cubic metre, the calculated electron density is exactly the number of real electrons in the system
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/DSMC.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/DSMC.ini
new file mode 100644
index 000000000..f0b045264
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/DSMC.ini
@@ -0,0 +1,71 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
+! =============================================================================== !
+! Reactions
+! =============================================================================== !
+DSMC-NumOfReactions = 2
+
+! ----------------------------------------------------
+! Photo-ionization (electron species should be at the first or second position of the product array)
+! ----------------------------------------------------
+! Reaction 1 | H2 + photon --> H2Ion + e
+DSMC-Reaction1-ReactionModel = phIon
+DSMC-Reaction1-Reactants = (/1,0,0/)
+DSMC-Reaction1-Products = (/4,3,0,0/)
+DSMC-Reaction1-CrossSection = 4.84E-24
+
+! Reaction 2 | H2 + photon --> H + HIon + e
+DSMC-Reaction2-ReactionModel = phIon
+DSMC-Reaction2-Reactants = (/1,0,0/)
+DSMC-Reaction2-Products = (/2,3,5,0/)
+DSMC-Reaction2-CrossSection = 8.3E-25
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electronic-State-Database.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electronic-State-Database.h5
new file mode 100644
index 000000000..9e335f4b5
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electronic-State-Database.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electrons_ref.csv
new file mode 100644
index 000000000..8ccf38709
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"electrons"
+0.0000000000000000E+000
+0.5099999999999998E+008
+0.3099999999999999E+009
+0.1377999999999999E+010
+0.4912999999999998E+010
+0.1431799999999999E+011
+0.3443899999999998E+011
+0.6904099999999997E+011
+0.1168840000000000E+012
+0.1700699999999999E+012
+0.2176069999999999E+012
+0.2517669999999999E+012
+0.2715039999999999E+012
+0.2806709999999999E+012
+0.2840939999999999E+012
+0.2851209999999999E+012
+0.2853689999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/XSec_Database_H2_Photoionization.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/XSec_Database_H2_Photoionization.h5
new file mode 100644
index 000000000..abef529f6
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/XSec_Database_H2_Photoionization.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/analyze.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/analyze.ini
new file mode 100644
index 000000000..2704b1816
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/analyze.ini
@@ -0,0 +1,8 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 12e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/command_line.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/command_line.ini
new file mode 100644
index 000000000..73e8d46c3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/export_periodic.neu b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/export_periodic.neu
new file mode 100644
index 000000000..4f8d22eaf
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/export_periodic.neu
@@ -0,0 +1,1060 @@
+ CONTROL INFO 2.4.6
+** GAMBIT NEUTRAL FILE
+/media/nizenkov/storage/boltzplatz/Projects/Zeiss/012-SMT-Dinger-P23006-MEMS-Raytracing/3-TestCases/meshes/2023-08-25-M0X-Debug-Cubit-3to1/export_periodic.neu
+PROGRAM: Coreform_Cubit VERSION: 2023.4
+
+ NUMNP NELEM NGRPS NBSETS NDFCD NDFVL
+ 384 196 8 6 3 3
+ENDOFSECTION
+ NODAL COORDINATES 2.4.6
+ 1 5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 2 8.22863561667e-01 5.00000000000e-01 5.80800343049e-02
+ 3 8.34077069911e-01 5.00000000000e-01 -1.33442609378e-01
+ 4 5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 5 5.00000000000e-01 8.22863561667e-01 5.80800343049e-02
+ 6 8.23291619262e-01 8.20516636933e-01 -1.92732493396e-02
+ 7 8.29013784295e-01 8.28634463911e-01 -1.75388514517e-01
+ 8 5.00000000000e-01 8.34077069911e-01 -1.33442609378e-01
+ 9 1.17713643833e+00 5.00000000000e-01 5.80800343049e-02
+ 10 1.16592293009e+00 5.00000000000e-01 -1.33442609378e-01
+ 11 1.17675769874e+00 8.20628075313e-01 -1.91878832863e-02
+ 12 1.17084156629e+00 8.28617048601e-01 -1.75183210145e-01
+ 13 1.50000000000e+00 5.00000000000e-01 0.00000000000e+00
+ 14 1.50000000000e+00 5.00000000000e-01 -1.66666666667e-01
+ 15 1.50000000000e+00 8.22863561667e-01 5.80800343049e-02
+ 16 1.50000000000e+00 8.34077069911e-01 -1.33442609378e-01
+ 17 8.35126784058e-01 5.00000000000e-01 -3.18360801562e-01
+ 18 5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 19 8.31949279017e-01 8.31953226131e-01 -3.36720028064e-01
+ 20 5.00000000000e-01 8.35126784058e-01 -3.18360801562e-01
+ 21 1.16487321594e+00 5.00000000000e-01 -3.18360801562e-01
+ 22 1.16797003935e+00 8.31864128501e-01 -3.36483981681e-01
+ 23 1.50000000000e+00 5.00000000000e-01 -3.33333333333e-01
+ 24 1.50000000000e+00 8.35126784058e-01 -3.18360801562e-01
+ 25 8.33333333333e-01 5.00000000000e-01 -5.00000000000e-01
+ 26 5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 27 8.33333333333e-01 8.33333333333e-01 -5.00000000000e-01
+ 28 5.00000000000e-01 8.33333333333e-01 -5.00000000000e-01
+ 29 1.16666666667e+00 5.00000000000e-01 -5.00000000000e-01
+ 30 1.16666666667e+00 8.33333333333e-01 -5.00000000000e-01
+ 31 1.50000000000e+00 5.00000000000e-01 -5.00000000000e-01
+ 32 1.50000000000e+00 8.33333333333e-01 -5.00000000000e-01
+ 33 5.00000000000e-01 1.17713643833e+00 5.80800343049e-02
+ 34 8.23266726608e-01 1.17940640106e+00 -1.91723599758e-02
+ 35 8.29037839108e-01 1.17140800349e+00 -1.75207218157e-01
+ 36 5.00000000000e-01 1.16592293009e+00 -1.33442609378e-01
+ 37 1.17662979455e+00 1.17942907254e+00 -1.90680848152e-02
+ 38 1.17085312920e+00 1.17136438841e+00 -1.74988002849e-01
+ 39 1.50000000000e+00 1.17713643833e+00 5.80800343049e-02
+ 40 1.50000000000e+00 1.16592293009e+00 -1.33442609378e-01
+ 41 8.31959010660e-01 1.16811817689e+00 -3.36635631438e-01
+ 42 5.00000000000e-01 1.16487321594e+00 -3.18360801562e-01
+ 43 1.16805581737e+00 1.16810932389e+00 -3.36359806400e-01
+ 44 1.50000000000e+00 1.16487321594e+00 -3.18360801562e-01
+ 45 8.33333333333e-01 1.16666666667e+00 -5.00000000000e-01
+ 46 5.00000000000e-01 1.16666666667e+00 -5.00000000000e-01
+ 47 1.16666666667e+00 1.16666666667e+00 -5.00000000000e-01
+ 48 1.50000000000e+00 1.16666666667e+00 -5.00000000000e-01
+ 49 5.00000000000e-01 1.50000000000e+00 0.00000000000e+00
+ 50 8.22863561667e-01 1.50000000000e+00 5.80800343049e-02
+ 51 8.34077069911e-01 1.50000000000e+00 -1.33442609378e-01
+ 52 5.00000000000e-01 1.50000000000e+00 -1.66666666667e-01
+ 53 1.17713643833e+00 1.50000000000e+00 5.80800343049e-02
+ 54 1.16592293009e+00 1.50000000000e+00 -1.33442609378e-01
+ 55 1.50000000000e+00 1.50000000000e+00 0.00000000000e+00
+ 56 1.50000000000e+00 1.50000000000e+00 -1.66666666667e-01
+ 57 8.35126784058e-01 1.50000000000e+00 -3.18360801562e-01
+ 58 5.00000000000e-01 1.50000000000e+00 -3.33333333333e-01
+ 59 1.16487321594e+00 1.50000000000e+00 -3.18360801562e-01
+ 60 1.50000000000e+00 1.50000000000e+00 -3.33333333333e-01
+ 61 8.33333333333e-01 1.50000000000e+00 -5.00000000000e-01
+ 62 5.00000000000e-01 1.50000000000e+00 -5.00000000000e-01
+ 63 1.16666666667e+00 1.50000000000e+00 -5.00000000000e-01
+ 64 1.50000000000e+00 1.50000000000e+00 -5.00000000000e-01
+ 65 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 66 8.28381901446e-01 5.00000000000e-01 2.68543406174e-01
+ 67 8.24775524333e-01 8.12674441347e-01 1.24315387207e-01
+ 68 5.00000000000e-01 8.28381901446e-01 2.68543406174e-01
+ 69 1.17161809855e+00 5.00000000000e-01 2.68543406174e-01
+ 70 1.17530535285e+00 8.12763740259e-01 1.24326964392e-01
+ 71 1.50000000000e+00 5.00000000000e-01 5.00000000000e-01
+ 72 1.50000000000e+00 8.28381901446e-01 2.68543406174e-01
+ 73 8.24691268605e-01 1.18724630499e+00 1.24358939826e-01
+ 74 5.00000000000e-01 1.17161809855e+00 2.68543406174e-01
+ 75 1.17518274577e+00 1.18729978263e+00 1.24378343577e-01
+ 76 1.50000000000e+00 1.17161809855e+00 2.68543406174e-01
+ 77 8.28381901446e-01 1.50000000000e+00 2.68543406174e-01
+ 78 5.00000000000e-01 1.50000000000e+00 5.00000000000e-01
+ 79 1.17161809855e+00 1.50000000000e+00 2.68543406174e-01
+ 80 1.50000000000e+00 1.50000000000e+00 5.00000000000e-01
+ 81 8.33333333333e-01 1.16666666667e+00 -8.30000000000e-01
+ 82 5.00000000000e-01 1.16666666667e+00 -8.30000000000e-01
+ 83 5.00000000000e-01 1.50000000000e+00 -8.30000000000e-01
+ 84 8.33333333333e-01 1.50000000000e+00 -8.30000000000e-01
+ 85 1.16666666667e+00 1.16666666667e+00 -8.30000000000e-01
+ 86 1.16666666667e+00 1.50000000000e+00 -8.30000000000e-01
+ 87 1.50000000000e+00 1.16666666667e+00 -8.30000000000e-01
+ 88 1.50000000000e+00 1.50000000000e+00 -8.30000000000e-01
+ 89 8.33333333333e-01 8.33333333333e-01 -8.30000000000e-01
+ 90 5.00000000000e-01 8.33333333333e-01 -8.30000000000e-01
+ 91 1.16666666667e+00 8.33333333333e-01 -8.30000000000e-01
+ 92 1.50000000000e+00 8.33333333333e-01 -8.30000000000e-01
+ 93 8.33333333333e-01 5.00000000000e-01 -8.30000000000e-01
+ 94 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 95 1.16666666667e+00 5.00000000000e-01 -8.30000000000e-01
+ 96 1.50000000000e+00 5.00000000000e-01 -8.30000000000e-01
+ 97 5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 98 1.77136438333e-01 5.00000000000e-01 5.80800343049e-02
+ 99 1.65922930089e-01 5.00000000000e-01 -1.33442609378e-01
+ 100 5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 101 5.00000000000e-01 1.77136438333e-01 5.80800343049e-02
+ 102 1.76708380738e-01 1.79483363067e-01 -1.92732493396e-02
+ 103 1.70986215705e-01 1.71365536089e-01 -1.75388514517e-01
+ 104 5.00000000000e-01 1.65922930089e-01 -1.33442609378e-01
+ 105 -1.77136438333e-01 5.00000000000e-01 5.80800343049e-02
+ 106 -1.65922930089e-01 5.00000000000e-01 -1.33442609378e-01
+ 107 -1.76757698738e-01 1.79371924687e-01 -1.91878832863e-02
+ 108 -1.70841566289e-01 1.71382951399e-01 -1.75183210145e-01
+ 109 -5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 110 -5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 111 -5.00000000000e-01 1.77136438333e-01 5.80800343049e-02
+ 112 -5.00000000000e-01 1.65922930089e-01 -1.33442609378e-01
+ 113 1.64873215942e-01 5.00000000000e-01 -3.18360801562e-01
+ 114 5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 115 1.68050720983e-01 1.68046773869e-01 -3.36720028064e-01
+ 116 5.00000000000e-01 1.64873215942e-01 -3.18360801562e-01
+ 117 -1.64873215942e-01 5.00000000000e-01 -3.18360801562e-01
+ 118 -1.67970039349e-01 1.68135871499e-01 -3.36483981681e-01
+ 119 -5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 120 -5.00000000000e-01 1.64873215942e-01 -3.18360801562e-01
+ 121 1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 122 5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 123 1.66666666667e-01 1.66666666667e-01 -5.00000000000e-01
+ 124 5.00000000000e-01 1.66666666667e-01 -5.00000000000e-01
+ 125 -1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 126 -1.66666666667e-01 1.66666666667e-01 -5.00000000000e-01
+ 127 -5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 128 -5.00000000000e-01 1.66666666667e-01 -5.00000000000e-01
+ 129 5.00000000000e-01 -1.77136438333e-01 5.80800343049e-02
+ 130 1.76733273392e-01 -1.79406401063e-01 -1.91723599758e-02
+ 131 1.70962160892e-01 -1.71408003494e-01 -1.75207218157e-01
+ 132 5.00000000000e-01 -1.65922930089e-01 -1.33442609378e-01
+ 133 -1.76629794550e-01 -1.79429072538e-01 -1.90680848152e-02
+ 134 -1.70853129197e-01 -1.71364388408e-01 -1.74988002849e-01
+ 135 -5.00000000000e-01 -1.77136438333e-01 5.80800343049e-02
+ 136 -5.00000000000e-01 -1.65922930089e-01 -1.33442609378e-01
+ 137 1.68040989340e-01 -1.68118176892e-01 -3.36635631438e-01
+ 138 5.00000000000e-01 -1.64873215942e-01 -3.18360801562e-01
+ 139 -1.68055817370e-01 -1.68109323888e-01 -3.36359806400e-01
+ 140 -5.00000000000e-01 -1.64873215942e-01 -3.18360801562e-01
+ 141 1.66666666667e-01 -1.66666666667e-01 -5.00000000000e-01
+ 142 5.00000000000e-01 -1.66666666667e-01 -5.00000000000e-01
+ 143 -1.66666666667e-01 -1.66666666667e-01 -5.00000000000e-01
+ 144 -5.00000000000e-01 -1.66666666667e-01 -5.00000000000e-01
+ 145 5.00000000000e-01 -5.00000000000e-01 0.00000000000e+00
+ 146 1.77136438333e-01 -5.00000000000e-01 5.80800343049e-02
+ 147 1.65922930089e-01 -5.00000000000e-01 -1.33442609378e-01
+ 148 5.00000000000e-01 -5.00000000000e-01 -1.66666666667e-01
+ 149 -1.77136438333e-01 -5.00000000000e-01 5.80800343049e-02
+ 150 -1.65922930089e-01 -5.00000000000e-01 -1.33442609378e-01
+ 151 -5.00000000000e-01 -5.00000000000e-01 0.00000000000e+00
+ 152 -5.00000000000e-01 -5.00000000000e-01 -1.66666666667e-01
+ 153 1.64873215942e-01 -5.00000000000e-01 -3.18360801562e-01
+ 154 5.00000000000e-01 -5.00000000000e-01 -3.33333333333e-01
+ 155 -1.64873215942e-01 -5.00000000000e-01 -3.18360801562e-01
+ 156 -5.00000000000e-01 -5.00000000000e-01 -3.33333333333e-01
+ 157 1.66666666667e-01 -5.00000000000e-01 -5.00000000000e-01
+ 158 5.00000000000e-01 -5.00000000000e-01 -5.00000000000e-01
+ 159 -1.66666666667e-01 -5.00000000000e-01 -5.00000000000e-01
+ 160 -5.00000000000e-01 -5.00000000000e-01 -5.00000000000e-01
+ 161 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 162 1.71618098554e-01 5.00000000000e-01 2.68543406174e-01
+ 163 1.75224475667e-01 1.87325558653e-01 1.24315387207e-01
+ 164 5.00000000000e-01 1.71618098554e-01 2.68543406174e-01
+ 165 -1.71618098554e-01 5.00000000000e-01 2.68543406174e-01
+ 166 -1.75305352846e-01 1.87236259741e-01 1.24326964392e-01
+ 167 -5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 168 -5.00000000000e-01 1.71618098554e-01 2.68543406174e-01
+ 169 1.75308731395e-01 -1.87246304991e-01 1.24358939826e-01
+ 170 5.00000000000e-01 -1.71618098554e-01 2.68543406174e-01
+ 171 -1.75182745767e-01 -1.87299782629e-01 1.24378343577e-01
+ 172 -5.00000000000e-01 -1.71618098554e-01 2.68543406174e-01
+ 173 1.71618098554e-01 -5.00000000000e-01 2.68543406174e-01
+ 174 5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 175 -1.71618098554e-01 -5.00000000000e-01 2.68543406174e-01
+ 176 -5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 177 1.66666666667e-01 -1.66666666667e-01 -8.30000000000e-01
+ 178 5.00000000000e-01 -1.66666666667e-01 -8.30000000000e-01
+ 179 5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 180 1.66666666667e-01 -5.00000000000e-01 -8.30000000000e-01
+ 181 -1.66666666667e-01 -1.66666666667e-01 -8.30000000000e-01
+ 182 -1.66666666667e-01 -5.00000000000e-01 -8.30000000000e-01
+ 183 -5.00000000000e-01 -1.66666666667e-01 -8.30000000000e-01
+ 184 -5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 185 1.66666666667e-01 1.66666666667e-01 -8.30000000000e-01
+ 186 5.00000000000e-01 1.66666666667e-01 -8.30000000000e-01
+ 187 -1.66666666667e-01 1.66666666667e-01 -8.30000000000e-01
+ 188 -5.00000000000e-01 1.66666666667e-01 -8.30000000000e-01
+ 189 1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 190 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 191 -1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 192 -5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 193 5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 194 5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 195 1.65922930089e-01 5.00000000000e-01 -1.33442609378e-01
+ 196 1.77136438333e-01 5.00000000000e-01 5.80800343049e-02
+ 197 5.00000000000e-01 8.22863561667e-01 5.80800343049e-02
+ 198 5.00000000000e-01 8.34077069911e-01 -1.33442609378e-01
+ 199 1.70986215705e-01 8.28634463911e-01 -1.75388514517e-01
+ 200 1.76708380738e-01 8.20516636933e-01 -1.92732493396e-02
+ 201 -1.65922930089e-01 5.00000000000e-01 -1.33442609378e-01
+ 202 -1.77136438333e-01 5.00000000000e-01 5.80800343049e-02
+ 203 -1.70841566289e-01 8.28617048601e-01 -1.75183210145e-01
+ 204 -1.76757698738e-01 8.20628075313e-01 -1.91878832863e-02
+ 205 -5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 206 -5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 207 -5.00000000000e-01 8.34077069911e-01 -1.33442609378e-01
+ 208 -5.00000000000e-01 8.22863561667e-01 5.80800343049e-02
+ 209 5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 210 1.64873215942e-01 5.00000000000e-01 -3.18360801562e-01
+ 211 5.00000000000e-01 8.35126784058e-01 -3.18360801562e-01
+ 212 1.68050720983e-01 8.31953226131e-01 -3.36720028064e-01
+ 213 -1.64873215942e-01 5.00000000000e-01 -3.18360801562e-01
+ 214 -1.67970039349e-01 8.31864128501e-01 -3.36483981681e-01
+ 215 -5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 216 -5.00000000000e-01 8.35126784058e-01 -3.18360801562e-01
+ 217 5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 218 1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 219 5.00000000000e-01 8.33333333333e-01 -5.00000000000e-01
+ 220 1.66666666667e-01 8.33333333333e-01 -5.00000000000e-01
+ 221 -1.66666666667e-01 5.00000000000e-01 -5.00000000000e-01
+ 222 -1.66666666667e-01 8.33333333333e-01 -5.00000000000e-01
+ 223 -5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 224 -5.00000000000e-01 8.33333333333e-01 -5.00000000000e-01
+ 225 5.00000000000e-01 1.17713643833e+00 5.80800343049e-02
+ 226 5.00000000000e-01 1.16592293009e+00 -1.33442609378e-01
+ 227 1.70962160892e-01 1.17140800349e+00 -1.75207218157e-01
+ 228 1.76733273392e-01 1.17940640106e+00 -1.91723599758e-02
+ 229 -1.70853129197e-01 1.17136438841e+00 -1.74988002849e-01
+ 230 -1.76629794550e-01 1.17942907254e+00 -1.90680848152e-02
+ 231 -5.00000000000e-01 1.16592293009e+00 -1.33442609378e-01
+ 232 -5.00000000000e-01 1.17713643833e+00 5.80800343049e-02
+ 233 5.00000000000e-01 1.16487321594e+00 -3.18360801562e-01
+ 234 1.68040989340e-01 1.16811817689e+00 -3.36635631438e-01
+ 235 -1.68055817370e-01 1.16810932389e+00 -3.36359806400e-01
+ 236 -5.00000000000e-01 1.16487321594e+00 -3.18360801562e-01
+ 237 5.00000000000e-01 1.16666666667e+00 -5.00000000000e-01
+ 238 1.66666666667e-01 1.16666666667e+00 -5.00000000000e-01
+ 239 -1.66666666667e-01 1.16666666667e+00 -5.00000000000e-01
+ 240 -5.00000000000e-01 1.16666666667e+00 -5.00000000000e-01
+ 241 5.00000000000e-01 1.50000000000e+00 0.00000000000e+00
+ 242 5.00000000000e-01 1.50000000000e+00 -1.66666666667e-01
+ 243 1.65922930089e-01 1.50000000000e+00 -1.33442609378e-01
+ 244 1.77136438333e-01 1.50000000000e+00 5.80800343049e-02
+ 245 -1.65922930089e-01 1.50000000000e+00 -1.33442609378e-01
+ 246 -1.77136438333e-01 1.50000000000e+00 5.80800343049e-02
+ 247 -5.00000000000e-01 1.50000000000e+00 -1.66666666667e-01
+ 248 -5.00000000000e-01 1.50000000000e+00 0.00000000000e+00
+ 249 5.00000000000e-01 1.50000000000e+00 -3.33333333333e-01
+ 250 1.64873215942e-01 1.50000000000e+00 -3.18360801562e-01
+ 251 -1.64873215942e-01 1.50000000000e+00 -3.18360801562e-01
+ 252 -5.00000000000e-01 1.50000000000e+00 -3.33333333333e-01
+ 253 5.00000000000e-01 1.50000000000e+00 -5.00000000000e-01
+ 254 1.66666666667e-01 1.50000000000e+00 -5.00000000000e-01
+ 255 -1.66666666667e-01 1.50000000000e+00 -5.00000000000e-01
+ 256 -5.00000000000e-01 1.50000000000e+00 -5.00000000000e-01
+ 257 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 258 5.00000000000e-01 8.28381901446e-01 2.68543406174e-01
+ 259 1.75224475667e-01 8.12674441347e-01 1.24315387207e-01
+ 260 1.71618098554e-01 5.00000000000e-01 2.68543406174e-01
+ 261 -1.75305352846e-01 8.12763740259e-01 1.24326964392e-01
+ 262 -1.71618098554e-01 5.00000000000e-01 2.68543406174e-01
+ 263 -5.00000000000e-01 8.28381901446e-01 2.68543406174e-01
+ 264 -5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 265 5.00000000000e-01 1.17161809855e+00 2.68543406174e-01
+ 266 1.75308731395e-01 1.18724630499e+00 1.24358939826e-01
+ 267 -1.75182745767e-01 1.18729978263e+00 1.24378343577e-01
+ 268 -5.00000000000e-01 1.17161809855e+00 2.68543406174e-01
+ 269 5.00000000000e-01 1.50000000000e+00 5.00000000000e-01
+ 270 1.71618098554e-01 1.50000000000e+00 2.68543406174e-01
+ 271 -1.71618098554e-01 1.50000000000e+00 2.68543406174e-01
+ 272 -5.00000000000e-01 1.50000000000e+00 5.00000000000e-01
+ 273 1.66666666667e-01 1.16666666667e+00 -8.30000000000e-01
+ 274 1.66666666667e-01 1.50000000000e+00 -8.30000000000e-01
+ 275 5.00000000000e-01 1.50000000000e+00 -8.30000000000e-01
+ 276 5.00000000000e-01 1.16666666667e+00 -8.30000000000e-01
+ 277 -1.66666666667e-01 1.16666666667e+00 -8.30000000000e-01
+ 278 -1.66666666667e-01 1.50000000000e+00 -8.30000000000e-01
+ 279 -5.00000000000e-01 1.16666666667e+00 -8.30000000000e-01
+ 280 -5.00000000000e-01 1.50000000000e+00 -8.30000000000e-01
+ 281 1.66666666667e-01 8.33333333333e-01 -8.30000000000e-01
+ 282 5.00000000000e-01 8.33333333333e-01 -8.30000000000e-01
+ 283 -1.66666666667e-01 8.33333333333e-01 -8.30000000000e-01
+ 284 -5.00000000000e-01 8.33333333333e-01 -8.30000000000e-01
+ 285 1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 286 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 287 -1.66666666667e-01 5.00000000000e-01 -8.30000000000e-01
+ 288 -5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 289 5.00000000000e-01 5.00000000000e-01 0.00000000000e+00
+ 290 5.00000000000e-01 5.00000000000e-01 -1.66666666667e-01
+ 291 8.34077069911e-01 5.00000000000e-01 -1.33442609378e-01
+ 292 8.22863561667e-01 5.00000000000e-01 5.80800343049e-02
+ 293 5.00000000000e-01 1.77136438333e-01 5.80800343049e-02
+ 294 5.00000000000e-01 1.65922930089e-01 -1.33442609378e-01
+ 295 8.29013784295e-01 1.71365536089e-01 -1.75388514517e-01
+ 296 8.23291619262e-01 1.79483363067e-01 -1.92732493396e-02
+ 297 1.16592293009e+00 5.00000000000e-01 -1.33442609378e-01
+ 298 1.17713643833e+00 5.00000000000e-01 5.80800343049e-02
+ 299 1.17084156629e+00 1.71382951399e-01 -1.75183210145e-01
+ 300 1.17675769874e+00 1.79371924687e-01 -1.91878832863e-02
+ 301 1.50000000000e+00 5.00000000000e-01 -1.66666666667e-01
+ 302 1.50000000000e+00 5.00000000000e-01 0.00000000000e+00
+ 303 1.50000000000e+00 1.65922930089e-01 -1.33442609378e-01
+ 304 1.50000000000e+00 1.77136438333e-01 5.80800343049e-02
+ 305 5.00000000000e-01 5.00000000000e-01 -3.33333333333e-01
+ 306 8.35126784058e-01 5.00000000000e-01 -3.18360801562e-01
+ 307 5.00000000000e-01 1.64873215942e-01 -3.18360801562e-01
+ 308 8.31949279017e-01 1.68046773869e-01 -3.36720028064e-01
+ 309 1.16487321594e+00 5.00000000000e-01 -3.18360801562e-01
+ 310 1.16797003935e+00 1.68135871499e-01 -3.36483981681e-01
+ 311 1.50000000000e+00 5.00000000000e-01 -3.33333333333e-01
+ 312 1.50000000000e+00 1.64873215942e-01 -3.18360801562e-01
+ 313 5.00000000000e-01 5.00000000000e-01 -5.00000000000e-01
+ 314 8.33333333333e-01 5.00000000000e-01 -5.00000000000e-01
+ 315 5.00000000000e-01 1.66666666667e-01 -5.00000000000e-01
+ 316 8.33333333333e-01 1.66666666667e-01 -5.00000000000e-01
+ 317 1.16666666667e+00 5.00000000000e-01 -5.00000000000e-01
+ 318 1.16666666667e+00 1.66666666667e-01 -5.00000000000e-01
+ 319 1.50000000000e+00 5.00000000000e-01 -5.00000000000e-01
+ 320 1.50000000000e+00 1.66666666667e-01 -5.00000000000e-01
+ 321 5.00000000000e-01 -1.77136438333e-01 5.80800343049e-02
+ 322 5.00000000000e-01 -1.65922930089e-01 -1.33442609378e-01
+ 323 8.29037839108e-01 -1.71408003494e-01 -1.75207218157e-01
+ 324 8.23266726608e-01 -1.79406401063e-01 -1.91723599758e-02
+ 325 1.17085312920e+00 -1.71364388408e-01 -1.74988002849e-01
+ 326 1.17662979455e+00 -1.79429072538e-01 -1.90680848152e-02
+ 327 1.50000000000e+00 -1.65922930089e-01 -1.33442609378e-01
+ 328 1.50000000000e+00 -1.77136438333e-01 5.80800343049e-02
+ 329 5.00000000000e-01 -1.64873215942e-01 -3.18360801562e-01
+ 330 8.31959010660e-01 -1.68118176892e-01 -3.36635631438e-01
+ 331 1.16805581737e+00 -1.68109323888e-01 -3.36359806400e-01
+ 332 1.50000000000e+00 -1.64873215942e-01 -3.18360801562e-01
+ 333 5.00000000000e-01 -1.66666666667e-01 -5.00000000000e-01
+ 334 8.33333333333e-01 -1.66666666667e-01 -5.00000000000e-01
+ 335 1.16666666667e+00 -1.66666666667e-01 -5.00000000000e-01
+ 336 1.50000000000e+00 -1.66666666667e-01 -5.00000000000e-01
+ 337 5.00000000000e-01 -5.00000000000e-01 0.00000000000e+00
+ 338 5.00000000000e-01 -5.00000000000e-01 -1.66666666667e-01
+ 339 8.34077069911e-01 -5.00000000000e-01 -1.33442609378e-01
+ 340 8.22863561667e-01 -5.00000000000e-01 5.80800343049e-02
+ 341 1.16592293009e+00 -5.00000000000e-01 -1.33442609378e-01
+ 342 1.17713643833e+00 -5.00000000000e-01 5.80800343049e-02
+ 343 1.50000000000e+00 -5.00000000000e-01 -1.66666666667e-01
+ 344 1.50000000000e+00 -5.00000000000e-01 0.00000000000e+00
+ 345 5.00000000000e-01 -5.00000000000e-01 -3.33333333333e-01
+ 346 8.35126784058e-01 -5.00000000000e-01 -3.18360801562e-01
+ 347 1.16487321594e+00 -5.00000000000e-01 -3.18360801562e-01
+ 348 1.50000000000e+00 -5.00000000000e-01 -3.33333333333e-01
+ 349 5.00000000000e-01 -5.00000000000e-01 -5.00000000000e-01
+ 350 8.33333333333e-01 -5.00000000000e-01 -5.00000000000e-01
+ 351 1.16666666667e+00 -5.00000000000e-01 -5.00000000000e-01
+ 352 1.50000000000e+00 -5.00000000000e-01 -5.00000000000e-01
+ 353 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 354 5.00000000000e-01 1.71618098554e-01 2.68543406174e-01
+ 355 8.24775524333e-01 1.87325558653e-01 1.24315387207e-01
+ 356 8.28381901446e-01 5.00000000000e-01 2.68543406174e-01
+ 357 1.17530535285e+00 1.87236259741e-01 1.24326964392e-01
+ 358 1.17161809855e+00 5.00000000000e-01 2.68543406174e-01
+ 359 1.50000000000e+00 1.71618098554e-01 2.68543406174e-01
+ 360 1.50000000000e+00 5.00000000000e-01 5.00000000000e-01
+ 361 5.00000000000e-01 -1.71618098554e-01 2.68543406174e-01
+ 362 8.24691268605e-01 -1.87246304991e-01 1.24358939826e-01
+ 363 1.17518274577e+00 -1.87299782629e-01 1.24378343577e-01
+ 364 1.50000000000e+00 -1.71618098554e-01 2.68543406174e-01
+ 365 5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 366 8.28381901446e-01 -5.00000000000e-01 2.68543406174e-01
+ 367 1.17161809855e+00 -5.00000000000e-01 2.68543406174e-01
+ 368 1.50000000000e+00 -5.00000000000e-01 5.00000000000e-01
+ 369 8.33333333333e-01 -1.66666666667e-01 -8.30000000000e-01
+ 370 8.33333333333e-01 -5.00000000000e-01 -8.30000000000e-01
+ 371 5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 372 5.00000000000e-01 -1.66666666667e-01 -8.30000000000e-01
+ 373 1.16666666667e+00 -1.66666666667e-01 -8.30000000000e-01
+ 374 1.16666666667e+00 -5.00000000000e-01 -8.30000000000e-01
+ 375 1.50000000000e+00 -1.66666666667e-01 -8.30000000000e-01
+ 376 1.50000000000e+00 -5.00000000000e-01 -8.30000000000e-01
+ 377 8.33333333333e-01 1.66666666667e-01 -8.30000000000e-01
+ 378 5.00000000000e-01 1.66666666667e-01 -8.30000000000e-01
+ 379 1.16666666667e+00 1.66666666667e-01 -8.30000000000e-01
+ 380 1.50000000000e+00 1.66666666667e-01 -8.30000000000e-01
+ 381 8.33333333333e-01 5.00000000000e-01 -8.30000000000e-01
+ 382 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 383 1.16666666667e+00 5.00000000000e-01 -8.30000000000e-01
+ 384 1.50000000000e+00 5.00000000000e-01 -8.30000000000e-01
+ENDOFSECTION
+ ELEMENTS/CELLS 2.4.6
+ 1 4 8 1 2 4 3 5 6 8
+ 7
+ 2 4 8 2 9 3 10 6 11 7
+ 12
+ 3 4 8 9 13 10 14 11 15 12
+ 16
+ 4 4 8 4 3 18 17 8 7 20
+ 19
+ 5 4 8 3 10 17 21 7 12 19
+ 22
+ 6 4 8 10 14 21 23 12 16 22
+ 24
+ 7 4 8 18 17 26 25 20 19 28
+ 27
+ 8 4 8 17 21 25 29 19 22 27
+ 30
+ 9 4 8 21 23 29 31 22 24 30
+ 32
+ 10 4 8 5 6 8 7 33 34 36
+ 35
+ 11 4 8 6 11 7 12 34 37 35
+ 38
+ 12 4 8 11 15 12 16 37 39 38
+ 40
+ 13 4 8 8 7 20 19 36 35 42
+ 41
+ 14 4 8 7 12 19 22 35 38 41
+ 43
+ 15 4 8 12 16 22 24 38 40 43
+ 44
+ 16 4 8 20 19 28 27 42 41 46
+ 45
+ 17 4 8 19 22 27 30 41 43 45
+ 47
+ 18 4 8 22 24 30 32 43 44 47
+ 48
+ 19 4 8 33 34 36 35 49 50 52
+ 51
+ 20 4 8 34 37 35 38 50 53 51
+ 54
+ 21 4 8 37 39 38 40 53 55 54
+ 56
+ 22 4 8 36 35 42 41 52 51 58
+ 57
+ 23 4 8 35 38 41 43 51 54 57
+ 59
+ 24 4 8 38 40 43 44 54 56 59
+ 60
+ 25 4 8 42 41 46 45 58 57 62
+ 61
+ 26 4 8 41 43 45 47 57 59 61
+ 63
+ 27 4 8 43 44 47 48 59 60 63
+ 64
+ 28 4 8 1 2 5 6 65 66 68
+ 67
+ 29 4 8 2 9 6 11 66 69 67
+ 70
+ 30 4 8 9 13 11 15 69 71 70
+ 72
+ 31 4 8 5 6 33 34 68 67 74
+ 73
+ 32 4 8 6 11 34 37 67 70 73
+ 75
+ 33 4 8 11 15 37 39 70 72 75
+ 76
+ 34 4 8 33 34 49 50 74 73 78
+ 77
+ 35 4 8 34 37 50 53 73 75 77
+ 79
+ 36 4 8 37 39 53 55 75 76 79
+ 80
+ 37 4 8 67 70 73 75 68 72 74
+ 76
+ 38 4 8 68 72 74 76 65 71 78
+ 80
+ 39 4 8 66 69 67 70 65 71 68
+ 72
+ 40 4 8 73 75 77 79 74 76 78
+ 80
+ 41 4 8 45 46 61 62 81 82 84
+ 83
+ 42 4 8 47 45 63 61 85 81 86
+ 84
+ 43 4 8 48 47 64 63 87 85 88
+ 86
+ 44 4 8 27 28 45 46 89 90 81
+ 82
+ 45 4 8 30 27 47 45 91 89 85
+ 81
+ 46 4 8 32 30 48 47 92 91 87
+ 85
+ 47 4 8 25 26 27 28 93 94 89
+ 90
+ 48 4 8 29 25 30 27 95 93 91
+ 89
+ 49 4 8 31 29 32 30 96 95 92
+ 91
+ 50 4 8 97 98 100 99 101 102 104
+ 103
+ 51 4 8 98 105 99 106 102 107 103
+ 108
+ 52 4 8 105 109 106 110 107 111 108
+ 112
+ 53 4 8 100 99 114 113 104 103 116
+ 115
+ 54 4 8 99 106 113 117 103 108 115
+ 118
+ 55 4 8 106 110 117 119 108 112 118
+ 120
+ 56 4 8 114 113 122 121 116 115 124
+ 123
+ 57 4 8 113 117 121 125 115 118 123
+ 126
+ 58 4 8 117 119 125 127 118 120 126
+ 128
+ 59 4 8 101 102 104 103 129 130 132
+ 131
+ 60 4 8 102 107 103 108 130 133 131
+ 134
+ 61 4 8 107 111 108 112 133 135 134
+ 136
+ 62 4 8 104 103 116 115 132 131 138
+ 137
+ 63 4 8 103 108 115 118 131 134 137
+ 139
+ 64 4 8 108 112 118 120 134 136 139
+ 140
+ 65 4 8 116 115 124 123 138 137 142
+ 141
+ 66 4 8 115 118 123 126 137 139 141
+ 143
+ 67 4 8 118 120 126 128 139 140 143
+ 144
+ 68 4 8 129 130 132 131 145 146 148
+ 147
+ 69 4 8 130 133 131 134 146 149 147
+ 150
+ 70 4 8 133 135 134 136 149 151 150
+ 152
+ 71 4 8 132 131 138 137 148 147 154
+ 153
+ 72 4 8 131 134 137 139 147 150 153
+ 155
+ 73 4 8 134 136 139 140 150 152 155
+ 156
+ 74 4 8 138 137 142 141 154 153 158
+ 157
+ 75 4 8 137 139 141 143 153 155 157
+ 159
+ 76 4 8 139 140 143 144 155 156 159
+ 160
+ 77 4 8 97 98 101 102 161 162 164
+ 163
+ 78 4 8 98 105 102 107 162 165 163
+ 166
+ 79 4 8 105 109 107 111 165 167 166
+ 168
+ 80 4 8 101 102 129 130 164 163 170
+ 169
+ 81 4 8 102 107 130 133 163 166 169
+ 171
+ 82 4 8 107 111 133 135 166 168 171
+ 172
+ 83 4 8 129 130 145 146 170 169 174
+ 173
+ 84 4 8 130 133 146 149 169 171 173
+ 175
+ 85 4 8 133 135 149 151 171 172 175
+ 176
+ 86 4 8 163 166 169 171 164 168 170
+ 172
+ 87 4 8 164 168 170 172 161 167 174
+ 176
+ 88 4 8 162 165 163 166 161 167 164
+ 168
+ 89 4 8 169 171 173 175 170 172 174
+ 176
+ 90 4 8 141 142 157 158 177 178 180
+ 179
+ 91 4 8 143 141 159 157 181 177 182
+ 180
+ 92 4 8 144 143 160 159 183 181 184
+ 182
+ 93 4 8 123 124 141 142 185 186 177
+ 178
+ 94 4 8 126 123 143 141 187 185 181
+ 177
+ 95 4 8 128 126 144 143 188 187 183
+ 181
+ 96 4 8 121 122 123 124 189 190 185
+ 186
+ 97 4 8 125 121 126 123 191 189 187
+ 185
+ 98 4 8 127 125 128 126 192 191 188
+ 187
+ 99 4 8 193 194 196 195 197 198 200
+ 199
+ 100 4 8 196 195 202 201 200 199 204
+ 203
+ 101 4 8 202 201 206 205 204 203 208
+ 207
+ 102 4 8 194 209 195 210 198 211 199
+ 212
+ 103 4 8 195 210 201 213 199 212 203
+ 214
+ 104 4 8 201 213 205 215 203 214 207
+ 216
+ 105 4 8 209 217 210 218 211 219 212
+ 220
+ 106 4 8 210 218 213 221 212 220 214
+ 222
+ 107 4 8 213 221 215 223 214 222 216
+ 224
+ 108 4 8 197 198 200 199 225 226 228
+ 227
+ 109 4 8 200 199 204 203 228 227 230
+ 229
+ 110 4 8 204 203 208 207 230 229 232
+ 231
+ 111 4 8 198 211 199 212 226 233 227
+ 234
+ 112 4 8 199 212 203 214 227 234 229
+ 235
+ 113 4 8 203 214 207 216 229 235 231
+ 236
+ 114 4 8 211 219 212 220 233 237 234
+ 238
+ 115 4 8 212 220 214 222 234 238 235
+ 239
+ 116 4 8 214 222 216 224 235 239 236
+ 240
+ 117 4 8 225 226 228 227 241 242 244
+ 243
+ 118 4 8 228 227 230 229 244 243 246
+ 245
+ 119 4 8 230 229 232 231 246 245 248
+ 247
+ 120 4 8 226 233 227 234 242 249 243
+ 250
+ 121 4 8 227 234 229 235 243 250 245
+ 251
+ 122 4 8 229 235 231 236 245 251 247
+ 252
+ 123 4 8 233 237 234 238 249 253 250
+ 254
+ 124 4 8 234 238 235 239 250 254 251
+ 255
+ 125 4 8 235 239 236 240 251 255 252
+ 256
+ 126 4 8 193 197 196 200 257 258 260
+ 259
+ 127 4 8 196 200 202 204 260 259 262
+ 261
+ 128 4 8 202 204 206 208 262 261 264
+ 263
+ 129 4 8 197 225 200 228 258 265 259
+ 266
+ 130 4 8 200 228 204 230 259 266 261
+ 267
+ 131 4 8 204 230 208 232 261 267 263
+ 268
+ 132 4 8 225 241 228 244 265 269 266
+ 270
+ 133 4 8 228 244 230 246 266 270 267
+ 271
+ 134 4 8 230 246 232 248 267 271 268
+ 272
+ 135 4 8 259 266 261 267 258 265 263
+ 268
+ 136 4 8 258 265 263 268 257 269 264
+ 272
+ 137 4 8 260 259 262 261 257 258 264
+ 263
+ 138 4 8 266 270 267 271 265 269 268
+ 272
+ 139 4 8 238 254 237 253 273 274 276
+ 275
+ 140 4 8 239 255 238 254 277 278 273
+ 274
+ 141 4 8 240 256 239 255 279 280 277
+ 278
+ 142 4 8 220 238 219 237 281 273 282
+ 276
+ 143 4 8 222 239 220 238 283 277 281
+ 273
+ 144 4 8 224 240 222 239 284 279 283
+ 277
+ 145 4 8 218 220 217 219 285 281 286
+ 282
+ 146 4 8 221 222 218 220 287 283 285
+ 281
+ 147 4 8 223 224 221 222 288 284 287
+ 283
+ 148 4 8 289 290 292 291 293 294 296
+ 295
+ 149 4 8 292 291 298 297 296 295 300
+ 299
+ 150 4 8 298 297 302 301 300 299 304
+ 303
+ 151 4 8 290 305 291 306 294 307 295
+ 308
+ 152 4 8 291 306 297 309 295 308 299
+ 310
+ 153 4 8 297 309 301 311 299 310 303
+ 312
+ 154 4 8 305 313 306 314 307 315 308
+ 316
+ 155 4 8 306 314 309 317 308 316 310
+ 318
+ 156 4 8 309 317 311 319 310 318 312
+ 320
+ 157 4 8 293 294 296 295 321 322 324
+ 323
+ 158 4 8 296 295 300 299 324 323 326
+ 325
+ 159 4 8 300 299 304 303 326 325 328
+ 327
+ 160 4 8 294 307 295 308 322 329 323
+ 330
+ 161 4 8 295 308 299 310 323 330 325
+ 331
+ 162 4 8 299 310 303 312 325 331 327
+ 332
+ 163 4 8 307 315 308 316 329 333 330
+ 334
+ 164 4 8 308 316 310 318 330 334 331
+ 335
+ 165 4 8 310 318 312 320 331 335 332
+ 336
+ 166 4 8 321 322 324 323 337 338 340
+ 339
+ 167 4 8 324 323 326 325 340 339 342
+ 341
+ 168 4 8 326 325 328 327 342 341 344
+ 343
+ 169 4 8 322 329 323 330 338 345 339
+ 346
+ 170 4 8 323 330 325 331 339 346 341
+ 347
+ 171 4 8 325 331 327 332 341 347 343
+ 348
+ 172 4 8 329 333 330 334 345 349 346
+ 350
+ 173 4 8 330 334 331 335 346 350 347
+ 351
+ 174 4 8 331 335 332 336 347 351 348
+ 352
+ 175 4 8 289 293 292 296 353 354 356
+ 355
+ 176 4 8 292 296 298 300 356 355 358
+ 357
+ 177 4 8 298 300 302 304 358 357 360
+ 359
+ 178 4 8 293 321 296 324 354 361 355
+ 362
+ 179 4 8 296 324 300 326 355 362 357
+ 363
+ 180 4 8 300 326 304 328 357 363 359
+ 364
+ 181 4 8 321 337 324 340 361 365 362
+ 366
+ 182 4 8 324 340 326 342 362 366 363
+ 367
+ 183 4 8 326 342 328 344 363 367 364
+ 368
+ 184 4 8 355 362 357 363 354 361 359
+ 364
+ 185 4 8 354 361 359 364 353 365 360
+ 368
+ 186 4 8 356 355 358 357 353 354 360
+ 359
+ 187 4 8 362 366 363 367 361 365 364
+ 368
+ 188 4 8 334 350 333 349 369 370 372
+ 371
+ 189 4 8 335 351 334 350 373 374 369
+ 370
+ 190 4 8 336 352 335 351 375 376 373
+ 374
+ 191 4 8 316 334 315 333 377 369 378
+ 372
+ 192 4 8 318 335 316 334 379 373 377
+ 369
+ 193 4 8 320 336 318 335 380 375 379
+ 373
+ 194 4 8 314 316 313 315 381 377 382
+ 378
+ 195 4 8 317 318 314 316 383 379 381
+ 377
+ 196 4 8 319 320 317 318 384 380 383
+ 379
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 8 ELEMENTS: 40 MATERIAL: 0 NFLAGS: 0
+ Block 8
+
+
+ 1 2 3 4 5 6 7 8 9 10
+ 11 12 13 14 15 16 17 18 19 20
+ 21 22 23 24 25 26 27 28 29 30
+ 31 32 33 34 35 36 37 38 39 40
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 9 ELEMENTS: 9 MATERIAL: 0 NFLAGS: 0
+ Block 9
+
+
+ 41 42 43 44 45 46 47 48 49
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 1 ELEMENTS: 40 MATERIAL: 0 NFLAGS: 0
+ Block 1
+
+
+ 50 51 52 53 54 55 56 57 58 59
+ 60 61 62 63 64 65 66 67 68 69
+ 70 71 72 73 74 75 76 77 78 79
+ 80 81 82 83 84 85 86 87 88 89
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 2 ELEMENTS: 9 MATERIAL: 0 NFLAGS: 0
+ Block 2
+
+
+ 90 91 92 93 94 95 96 97 98
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 3 ELEMENTS: 40 MATERIAL: 0 NFLAGS: 0
+ Block 3
+
+
+ 99 100 101 102 103 104 105 106 107 108
+ 109 110 111 112 113 114 115 116 117 118
+ 119 120 121 122 123 124 125 126 127 128
+ 129 130 131 132 133 134 135 136 137 138
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 4 ELEMENTS: 9 MATERIAL: 0 NFLAGS: 0
+ Block 4
+
+
+ 139 140 141 142 143 144 145 146 147
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 6 ELEMENTS: 40 MATERIAL: 0 NFLAGS: 0
+ Block 6
+
+
+ 148 149 150 151 152 153 154 155 156 157
+ 158 159 160 161 162 163 164 165 166 167
+ 168 169 170 171 172 173 174 175 176 177
+ 178 179 180 181 182 183 184 185 186 187
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 7 ELEMENTS: 9 MATERIAL: 0 NFLAGS: 0
+ Block 7
+
+
+ 188 189 190 191 192 193 194 195 196
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_TOP 1 4 0 6
+ 87 4 6
+ 136 4 6
+ 185 4 6
+ 38 4 6
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_BOT 1 36 0 6
+ 90 4 6
+ 91 4 6
+ 92 4 6
+ 93 4 6
+ 94 4 6
+ 95 4 6
+ 96 4 6
+ 97 4 6
+ 98 4 6
+ 139 4 6
+ 140 4 6
+ 141 4 6
+ 142 4 6
+ 143 4 6
+ 144 4 6
+ 145 4 6
+ 146 4 6
+ 147 4 6
+ 188 4 6
+ 189 4 6
+ 190 4 6
+ 191 4 6
+ 192 4 6
+ 193 4 6
+ 194 4 6
+ 195 4 6
+ 196 4 6
+ 41 4 6
+ 42 4 6
+ 43 4 6
+ 44 4 6
+ 45 4 6
+ 46 4 6
+ 47 4 6
+ 48 4 6
+ 49 4 6
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XPLUS 1 32 0 6
+ 177 4 3
+ 180 4 3
+ 183 4 3
+ 185 4 3
+ 150 4 3
+ 153 4 3
+ 156 4 3
+ 159 4 3
+ 162 4 3
+ 165 4 3
+ 168 4 3
+ 171 4 3
+ 174 4 3
+ 196 4 1
+ 193 4 1
+ 190 4 1
+ 30 4 2
+ 33 4 2
+ 36 4 2
+ 38 4 2
+ 3 4 2
+ 6 4 2
+ 9 4 2
+ 12 4 2
+ 15 4 2
+ 18 4 2
+ 21 4 2
+ 24 4 2
+ 27 4 2
+ 49 4 4
+ 46 4 4
+ 43 4 4
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XMINUS 1 32 0 6
+ 79 4 2
+ 82 4 2
+ 85 4 2
+ 87 4 2
+ 52 4 2
+ 55 4 2
+ 58 4 2
+ 61 4 2
+ 64 4 2
+ 67 4 2
+ 70 4 2
+ 73 4 2
+ 76 4 2
+ 98 4 4
+ 95 4 4
+ 92 4 4
+ 128 4 3
+ 131 4 3
+ 134 4 3
+ 136 4 3
+ 101 4 3
+ 104 4 3
+ 107 4 3
+ 110 4 3
+ 113 4 3
+ 116 4 3
+ 119 4 3
+ 122 4 3
+ 125 4 3
+ 147 4 1
+ 144 4 1
+ 141 4 1
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YMINUS 1 32 0 6
+ 85 4 3
+ 84 4 3
+ 83 4 3
+ 89 4 3
+ 68 4 6
+ 69 4 6
+ 70 4 6
+ 71 4 6
+ 72 4 6
+ 73 4 6
+ 74 4 6
+ 75 4 6
+ 76 4 6
+ 92 4 3
+ 91 4 3
+ 90 4 3
+ 183 4 2
+ 182 4 2
+ 181 4 2
+ 187 4 2
+ 166 4 6
+ 167 4 6
+ 168 4 6
+ 169 4 6
+ 170 4 6
+ 171 4 6
+ 172 4 6
+ 173 4 6
+ 174 4 6
+ 190 4 2
+ 189 4 2
+ 188 4 2
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YPLUS 1 32 0 6
+ 134 4 2
+ 133 4 2
+ 132 4 2
+ 138 4 2
+ 117 4 6
+ 118 4 6
+ 119 4 6
+ 120 4 6
+ 121 4 6
+ 122 4 6
+ 123 4 6
+ 124 4 6
+ 125 4 6
+ 141 4 2
+ 140 4 2
+ 139 4 2
+ 36 4 3
+ 35 4 3
+ 34 4 3
+ 40 4 3
+ 19 4 6
+ 20 4 6
+ 21 4 6
+ 22 4 6
+ 23 4 6
+ 24 4 6
+ 25 4 6
+ 26 4 6
+ 27 4 6
+ 43 4 3
+ 42 4 3
+ 41 4 3
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 1 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 2 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 3 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 4 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 5 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 6 1 0 0 51
+ENDOFSECTION
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/externals.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/externals.ini
new file mode 100644
index 000000000..a1a4a4745
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr!, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = hopr.ini !, parameter.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = pre !, post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = !, RadTrans_Cylinder_2D_RadiationState.h5 ! Suffix for the binary execution
+!nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/hopr.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/hopr.ini
new file mode 100644
index 000000000..ed08284ce
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/hopr.ini
@@ -0,0 +1,29 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = mesh_cubitDebug_periodic ! name of the project (used for filenames)
+Debugvisu = T
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+FileName = export_periodic.neu ! name of mesh file as exported from grid generator
+Mode = 2 ! 1 Cartesian 2 gambit file 3 CGNS
+meshscale = 0.001
+!=============================================================================== !
+! BOUNDARY CONDITIONS
+!=============================================================================== !
+BoundaryName=BC_TOP
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_BOT
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_XMINUS
+BoundaryType=(/1,0,0,1/)
+BoundaryName=BC_XPLUS
+BoundaryType=(/1,0,0,-1/)
+BoundaryName=BC_YMINUS
+BoundaryType=(/1,0,0,2/)
+BoundaryName=BC_YPLUS
+BoundaryType=(/1,0,0,-2/)
+
+vv=(/0.002,0.,0./)
+vv=(/0.,0.002,0./)
\ No newline at end of file
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/parameter.ini
new file mode 100644
index 000000000..28e20255d
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/parameter.ini
@@ -0,0 +1,166 @@
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+N = 1!,2,3,4
+RayTracing-NMax = 1!,2,3,4
+NVisu = 1!,2,3,4
+NodeTypeVisu = VISU_INNER
+
+DoLoadBalance = T
+Load-DeviationThreshold = 0.001
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+nocrosscombination:UsePhotonTriaTracking,RayTracing-nSurfSample,Part-Boundary$-PhotonSpecularReflection,Part-Boundary$-PhotonEnACC,RayTracing-PowerDensity
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = mesh_cubitDebug_periodic_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 10
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+!CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+CalcPartBalance = T
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100e-9
+Analyze_dt = 100e-9
+
+PIC-DoDeposition = F
+
+PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 3
+Part-NumberOfRandomSeeds = 0
+Particles-HaloEpsVelo = 3E7
+
+Particles-CollXSec-Database = XSec_Database_H2_Photoionization.h5
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_TOP
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0 ! Photon inlet BC must always be absorbing
+
+Part-Boundary2-SourceName = BC_BOT
+Part-Boundary2-Condition = reflective
+
+Part-Boundary3-SourceName = BC_XMINUS
+Part-Boundary3-Condition = periodic
+
+Part-Boundary4-SourceName = BC_XPLUS
+Part-Boundary4-Condition = periodic
+
+Part-Boundary5-SourceName = BC_YMINUS
+Part-Boundary5-Condition = periodic
+
+Part-Boundary6-SourceName = BC_YPLUS
+Part-Boundary6-Condition = periodic
+
+Part-nPeriodicVectors = 2
+
+Part-FIBGMdeltas = (/ 2.0e-3 , 2.0e-3 , 0.00133 /)
+Part-FactorFIBGM = (/ 1. , 1. , 1. /)
+
+Part-Boundary$-BoundaryParticleOutput = T
+Part-Boundary$-PhotonSpecularReflection = T , F , T , F ! F: diffuse with PhotonEnACC , T: perfect mirror
+Part-Boundary$-PhotonEnACC = 1e-9 , 1.0 , 1e-9 , 1.0 ! 1: fully absorb, 1e-9: reflect all (double energy in volume)
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+UsePhotonTriaTracking = T,F,F,T
+RayTracing-nSurfSample= 1,2,5,10
+RayTracing-NumRays = 5000
+!RayTracing-NumRays = 5000000
+RayTracing-PartBound = 1 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+RayTracing-VolRefineMode = 1 ! Volumetric refinement
+RayTracing-VolRefineModeZ = 1000.
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+! ATTENTION: This values is changed due to the increased optical path through the domain
+! The adjusted value reduces the input energy back to the original value for perpendicular irradiation
+! | Enhancement factor for energy deposited in the volume [-] | 1.17720111668984E+000 | CALCUL. |
+! When reflection is 100%, the optical path is doubled, hence, the energy is halved again
+RayTracing-PowerDensity = 0.424736260364707, 0.849472520729414, 0.424736260364707, 0.849472520729414
+
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0.25 , 0.5 , -0.9 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 0.1
+
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/readme.md
new file mode 100644
index 000000000..b3e6719e3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_3to1_periodic/readme.md
@@ -0,0 +1,13 @@
+# Photoionization in the volume (rectangle) for ray tracing with high-order refinement and bilinear tracking
+- **Comparing**: the total number of real electrons in the system with a numerical ref. solution
+* convert cubit mesh with hopr to .h5
+* ray tracing + volume ionization reactions
+* reference density in Electrons_ref.csv calculated with the old model and 1x1x1 emission region for volume see and 1e-3 J
+ * the size of the domain in this example is 1mm x 1mm x 1.33 mm, which is much smaller than the other reggies with 1m3 simulation
+ size, however, the resulting density must be the same as the irradiation is the same, just on a smaller scale
+ * the MPF is therefore chosen much smaller: MPF=0.01
+* Particle emission due to photoionization of $`H_{2}`$ in a volume only (no surface emission)
+* no deposition, no interpolation
+* comparison of the number of emitted electrons with the reference solution (1 MPF and MPI=1)
+* different MPF and number of MPI ranks are tested to yield the same result
+* Note: Because the volume is exactly 1 cubic metre, the calculated electron density is exactly the number of real electrons in the system
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/DSMC.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/DSMC.ini
new file mode 100644
index 000000000..f0b045264
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/DSMC.ini
@@ -0,0 +1,71 @@
+
+! =============================================================================== !
+! Species1, H2
+! =============================================================================== !
+Part-Species1-SpeciesName = H2
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 1000
+Part-Species1-dref = 2.68E-10
+Part-Species1-omega = 0.407
+Part-Species1-HeatOfFormation_K = 0.0
+Part-Species1-CharaTempVib = 6332.37
+Part-Species1-Ediss_eV = 4.47
+! =============================================================================== !
+! Species2, H
+! =============================================================================== !
+Part-Species2-SpeciesName = H
+Part-Species2-InteractionID = 1
+Part-Species2-Tref = 1000
+Part-Species2-dref = 2.581E-10
+Part-Species2-omega = 0.407
+Part-Species2-HeatOfFormation_K = 26159.76
+! =============================================================================== !
+! Species3, e
+! =============================================================================== !
+Part-Species3-SpeciesName = electron
+Part-Species3-InteractionID = 4
+Part-Species3-Tref = 1000
+Part-Species3-dref = 2.817920E-15
+Part-Species3-omega = 0.407
+! =============================================================================== !
+! Species4, H2Ion
+! =============================================================================== !
+Part-Species4-SpeciesName = H2Ion1
+Part-Species4-InteractionID = 20
+Part-Species4-Tref = 1000
+Part-Species4-dref = 3.883E-10
+Part-Species4-omega = 0.407
+Part-Species4-CharaTempVib = 3341.01
+Part-Species4-Ediss_eV = 2.65
+Part-Species4-PreviousState = 1
+! =============================================================================== !
+! Species5, HIon
+! =============================================================================== !
+Part-Species5-SpeciesName = HIon1
+Part-Species5-InteractionID = 10
+Part-Species5-Tref = 1000
+Part-Species5-dref = 3.912E-10
+Part-Species5-omega = 0.407
+Part-Species5-PreviousState = 2
+
+
+
+! =============================================================================== !
+! Reactions
+! =============================================================================== !
+DSMC-NumOfReactions = 2
+
+! ----------------------------------------------------
+! Photo-ionization (electron species should be at the first or second position of the product array)
+! ----------------------------------------------------
+! Reaction 1 | H2 + photon --> H2Ion + e
+DSMC-Reaction1-ReactionModel = phIon
+DSMC-Reaction1-Reactants = (/1,0,0/)
+DSMC-Reaction1-Products = (/4,3,0,0/)
+DSMC-Reaction1-CrossSection = 4.84E-24
+
+! Reaction 2 | H2 + photon --> H + HIon + e
+DSMC-Reaction2-ReactionModel = phIon
+DSMC-Reaction2-Reactants = (/1,0,0/)
+DSMC-Reaction2-Products = (/2,3,5,0/)
+DSMC-Reaction2-CrossSection = 8.3E-25
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electronic-State-Database.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electronic-State-Database.h5
new file mode 100644
index 000000000..9e335f4b5
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electronic-State-Database.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electrons_ref.csv b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electrons_ref.csv
new file mode 100644
index 000000000..8ccf38709
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/Electrons_ref.csv
@@ -0,0 +1,22 @@
+"electrons"
+0.0000000000000000E+000
+0.5099999999999998E+008
+0.3099999999999999E+009
+0.1377999999999999E+010
+0.4912999999999998E+010
+0.1431799999999999E+011
+0.3443899999999998E+011
+0.6904099999999997E+011
+0.1168840000000000E+012
+0.1700699999999999E+012
+0.2176069999999999E+012
+0.2517669999999999E+012
+0.2715039999999999E+012
+0.2806709999999999E+012
+0.2840939999999999E+012
+0.2851209999999999E+012
+0.2853689999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
+0.2854169999999999E+012
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/XSec_Database_H2_Photoionization.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/XSec_Database_H2_Photoionization.h5
new file mode 100644
index 000000000..abef529f6
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/XSec_Database_H2_Photoionization.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/analyze.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/analyze.ini
new file mode 100644
index 000000000..e3725f21b
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/analyze.ini
@@ -0,0 +1,8 @@
+! ===================================================================================================================
+! compare column
+! ===================================================================================================================
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = Electrons_ref.csv ! data file name
+compare_column_index = 9 ! column index for comparison
+compare_column_tolerance_value = 20e9 ! tolerance (depends on machine accuracy and MPI)
+compare_column_tolerance_type = absolute ! absolute or relative tolerance
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/command_line.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/command_line.ini
new file mode 100644
index 000000000..73e8d46c3
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/command_line.ini
@@ -0,0 +1,2 @@
+MPI = 1,2,5,8
+cmd_suffix = DSMC.ini
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/export_split2hex.neu b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/export_split2hex.neu
new file mode 100644
index 000000000..5c22e138a
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/export_split2hex.neu
@@ -0,0 +1,14285 @@
+ CONTROL INFO 2.4.6
+** GAMBIT NEUTRAL FILE
+/media/nizenkov/storage/boltzplatz/Projects/Zeiss/012-SMT-Dinger-P23006-MEMS-Raytracing/3-TestCases/meshes/2023-08-25-M0X-Debug-Cubit-3to1/export_split2hex.neu
+PROGRAM: Coreform_Cubit VERSION: 2023.4
+
+ NUMNP NELEM NGRPS NBSETS NDFCD NDFVL
+ 4865 4380 1 6 3 3
+ENDOFSECTION
+ NODAL COORDINATES 2.4.6
+ 1 2.72274554279e-01 1.77953789918e-01 -7.14615628033e-01
+ 2 1.54721719688e-01 1.07561337508e-01 -7.72307814017e-01
+ 3 2.69814479792e-01 2.38374225005e-01 -7.91538542678e-01
+ 4 3.86137277139e-01 3.38976894959e-01 -7.72307814017e-01
+ 5 3.86137277139e-01 8.89768949591e-02 -7.72307814017e-01
+ 6 2.69814479792e-01 7.17075583385e-02 -7.91538542678e-01
+ 7 3.27360859844e-01 1.78780668754e-01 -8.01153907008e-01
+ 8 4.24091518093e-01 2.25984596639e-01 -7.91538542678e-01
+ 9 2.68584442549e-01 2.68584442549e-01 -8.30000000000e-01
+ 10 5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 11 3.45722961699e-01 1.79056295032e-01 -8.30000000000e-01
+ 12 5.00000000000e-01 2.50000000000e-01 -8.30000000000e-01
+ 13 2.68584442549e-01 1.85844425486e-02 -8.30000000000e-01
+ 14 5.00000000000e-01 0.00000000000e+00 -8.30000000000e-01
+ 15 3.71688850972e-02 3.71688850972e-02 -8.30000000000e-01
+ 16 1.97625724784e-01 2.02969231938e-01 -6.83004442633e-01
+ 17 1.31750483189e-01 3.01979487959e-01 -7.32002961755e-01
+ 18 1.36137277139e-01 3.38976894959e-01 -7.72307814017e-01
+ 19 1.44140111555e-01 1.47702449658e-01 -7.32002961755e-01
+ 20 1.08105083666e-01 2.35776837243e-01 -7.56502221316e-01
+ 21 1.03147813125e-01 2.38374225005e-01 -7.91538542678e-01
+ 22 6.14884476448e-02 3.63992336979e-01 -7.40696628616e-01
+ 23 0.00000000000e+00 5.00000000000e-01 -8.30000000000e-01
+ 24 5.33819267956e-02 2.55051186352e-01 -7.70464419077e-01
+ 25 1.85844425486e-02 2.68584442549e-01 -8.30000000000e-01
+ 26 8.00728901934e-02 1.32576779528e-01 -7.40696628616e-01
+ 27 1.22976895290e-01 2.27984673959e-01 -6.51393257232e-01
+ 28 -2.72056303882e-01 -2.06424224657e-01 -7.32206115671e-01
+ 29 -1.17443709393e-01 -8.46276697797e-02 -7.81103057836e-01
+ 30 -7.82958062618e-02 -2.23085113186e-01 -7.97402038557e-01
+ 31 -1.36028151941e-01 -3.53212112328e-01 -7.81103057836e-01
+ 32 -3.86028151941e-01 -1.03212112328e-01 -7.81103057836e-01
+ 33 -2.44962472928e-01 -5.64184465198e-02 -7.97402038557e-01
+ 34 -1.83721854696e-01 -1.67313834890e-01 -8.05551528918e-01
+ 35 -2.57352101294e-01 -2.35474741552e-01 -7.97402038557e-01
+ 36 1.85844425486e-02 -2.31415557451e-01 -8.30000000000e-01
+ 37 0.00000000000e+00 -5.00000000000e-01 -8.30000000000e-01
+ 38 -1.54277038301e-01 -1.54277038301e-01 -8.30000000000e-01
+ 39 -2.50000000000e-01 -2.50000000000e-01 -8.30000000000e-01
+ 40 -2.31415557451e-01 1.85844425486e-02 -8.30000000000e-01
+ 41 -5.00000000000e-01 0.00000000000e+00 -8.30000000000e-01
+ 42 1.45017428921e-01 -4.11959107700e-02 -6.29748141368e-01
+ 43 1.55822436183e-01 2.43394812798e-02 -6.40603138014e-01
+ 44 2.06336057417e-01 7.05486130053e-03 -6.34963620979e-01
+ 45 2.26190364403e-01 -3.43551447140e-02 -6.26716364139e-01
+ 46 1.64199299999e-01 -7.57054530762e-02 -6.75016088746e-01
+ 47 1.65008681148e-01 -2.05120109410e-02 -6.67163437384e-01
+ 48 2.00597335832e-01 -2.22626028702e-02 -6.56293724765e-01
+ 49 2.11920633294e-01 -5.96417616035e-02 -6.57905588134e-01
+ 50 2.36995371665e-01 3.11802473358e-02 -6.37571360785e-01
+ 51 3.07363299885e-01 -2.75143786579e-02 -6.23684586910e-01
+ 52 2.19123971470e-01 -1.59515002369e-02 -6.65142252565e-01
+ 53 2.45372235481e-01 -6.88646870202e-02 -6.71984311517e-01
+ 54 1.75004307262e-01 -1.01700610264e-02 -6.85871085392e-01
+ 55 1.83381171078e-01 -1.10214995382e-01 -7.20284036125e-01
+ 56 1.66627443446e-01 8.98748733296e-02 -6.51458134659e-01
+ 57 1.88085189557e-01 -3.26316356012e-01 -5.83230139215e-01
+ 58 2.64912341062e-01 -3.38168322524e-01 -5.26009221254e-01
+ 59 1.81146476296e-01 -3.92112215016e-01 -5.14638095231e-01
+ 60 1.00849968162e-01 -4.13158178006e-01 -5.37562991200e-01
+ 61 3.44042594779e-01 -4.13158178006e-01 -7.06615069608e-01
+ 62 3.43274894041e-01 -3.92112215016e-01 -6.27339480836e-01
+ 63 2.60859857222e-01 -4.19084161262e-01 -5.93478571423e-01
+ 64 2.33899978774e-01 -4.42105452004e-01 -6.35041994133e-01
+ 65 1.77677119666e-01 -4.25010144518e-01 -4.80342073238e-01
+ 66 1.36147467661e-02 -5.00000000000e-01 -4.91895843185e-01
+ 67 2.85118079777e-01 -4.50006763012e-01 -5.96894715492e-01
+ 68 2.56807373383e-01 -5.00000000000e-01 -6.60947921592e-01
+ 69 4.20869746283e-01 -4.25010144518e-01 -6.49394151646e-01
+ 70 5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 71 3.41739492566e-01 -3.50020289036e-01 -4.68788303292e-01
+ 72 2.43974289443e-01 2.60176839421e-01 -5.47553399215e-01
+ 73 3.71987144721e-01 2.15416156877e-01 -5.13748596736e-01
+ 74 3.43758251331e-01 2.65657418528e-01 -5.49941144679e-01
+ 75 2.65637376996e-01 3.13158390625e-01 -5.84939819890e-01
+ 76 3.71987144721e-01 3.80088419711e-01 -4.07864925685e-01
+ 77 4.14658096481e-01 3.10277437918e-01 -4.31891215209e-01
+ 78 3.82818688498e-01 3.24243063896e-01 -4.79499971548e-01
+ 79 3.43758251331e-01 3.75438927083e-01 -4.79352030645e-01
+ 80 3.93650232275e-01 2.68397708082e-01 -5.51135017411e-01
+ 81 2.87300464550e-01 3.66139941829e-01 -6.22326240565e-01
+ 82 4.29100154850e-01 3.45598472054e-01 -4.56815495659e-01
+ 83 3.93650232275e-01 4.33069970915e-01 -4.45251346360e-01
+ 84 5.00000000000e-01 3.35327737167e-01 -3.74060123207e-01
+ 85 5.00000000000e-01 5.00000000000e-01 -2.68176452156e-01
+ 86 5.00000000000e-01 1.70655474334e-01 -4.79943794258e-01
+ 87 -3.05282120157e-01 -3.58791644431e-01 -3.85681612401e-01
+ 88 -1.45833686696e-01 -4.29395822216e-01 -4.38788727793e-01
+ 89 -2.63889124464e-01 -4.52930548144e-01 -4.16272802165e-01
+ 90 -4.02641060079e-01 -4.29395822216e-01 -3.78461281656e-01
+ 91 -4.02641060079e-01 -4.29395822216e-01 -6.07840806201e-01
+ 92 -2.63889124464e-01 -4.52930548144e-01 -5.69192485195e-01
+ 93 -3.22916843348e-01 -4.64697911108e-01 -5.19704601624e-01
+ 94 -4.35094040052e-01 -4.52930548144e-01 -5.28974187770e-01
+ 95 -2.43192626617e-01 -5.00000000000e-01 -4.31568397047e-01
+ 96 -5.00000000000e-01 -5.00000000000e-01 -3.71240950910e-01
+ 97 -3.28795084411e-01 -5.00000000000e-01 -5.64378931365e-01
+ 98 -5.00000000000e-01 -5.00000000000e-01 -6.00620475455e-01
+ 99 -2.43192626617e-01 -5.00000000000e-01 -6.60947921592e-01
+ 100 -5.00000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 101 -5.00000000000e-01 -2.03967303369e-01 -1.42173602522e-01
+ 102 -5.00000000000e-01 -3.51983651684e-01 -2.56707276716e-01
+ 103 -3.46008190530e-01 -4.01322434456e-01 -1.80833208398e-01
+ 104 -2.69012285796e-01 -3.51983651684e-01 -8.56293371419e-02
+ 105 -5.00000000000e-01 -3.51983651684e-01 1.78913198739e-01
+ 106 -5.00000000000e-01 -4.01322434456e-01 -4.47151781061e-03
+ 107 -3.84506142898e-01 -4.25991825842e-01 -1.06249062984e-02
+ 108 -3.46008190530e-01 -4.01322434456e-01 1.09580441905e-01
+ 109 -2.69012285796e-01 -5.00000000000e-01 -2.00163011336e-01
+ 110 -3.80245715914e-02 -5.00000000000e-01 -2.90850717617e-02
+ 111 -3.46008190530e-01 -5.00000000000e-01 3.32246591095e-02
+ 112 -2.69012285796e-01 -5.00000000000e-01 2.35457464119e-01
+ 113 -5.00000000000e-01 -5.00000000000e-01 6.43795245452e-02
+ 114 -5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 115 -1.09897314994e-01 -4.52930548144e-01 -3.02220842449e-01
+ 116 -1.71653345874e-01 -4.29395822216e-01 -2.07383342082e-01
+ 117 -2.07422986246e-01 -4.64697911108e-01 -3.19475869564e-01
+ 118 -2.81102230583e-01 -4.52930548144e-01 -2.62002545024e-01
+ 119 -1.22049124127e-02 -5.00000000000e-01 -2.60490457473e-01
+ 120 -1.74803274942e-01 -5.00000000000e-01 -2.97407288619e-01
+ 121 -2.63478886461e-01 2.52966228573e-01 9.80053919930e-02
+ 122 -3.81739443230e-01 3.76483114286e-01 -8.50855300814e-02
+ 123 -2.39994266754e-01 4.17655409524e-01 -5.70207617589e-02
+ 124 -1.09991400131e-01 3.76483114286e-01 4.85570834396e-02
+ 125 -2.49118359808e-01 2.71427143287e-01 -3.04760276624e-02
+ 126 -3.32745573205e-01 3.47618095525e-01 -1.09709502494e-01
+ 127 -2.38685158354e-01 3.85713571643e-01 -8.25049331486e-02
+ 128 -1.51580211139e-01 3.47618095525e-01 -2.06144268129e-02
+ 129 -2.28251956901e-01 5.00000000000e-01 -1.34533838635e-01
+ 130 4.34960861984e-02 5.00000000000e-01 -8.91225113863e-04
+ 131 -2.30420582319e-01 4.29962686000e-01 -1.42675041529e-01
+ 132 -9.56308734779e-02 3.94944029000e-01 -7.99243362158e-02
+ 133 -3.67378916577e-01 3.94944029000e-01 -2.13566949737e-01
+ 134 -2.34757833154e-01 2.89888058001e-01 -1.58957447318e-01
+ 135 -5.00000000000e-01 5.00000000000e-01 -2.68176452156e-01
+ 136 -3.80546922638e-01 -2.02387331160e-02 -3.12404801652e-01
+ 137 -4.40273461319e-01 7.52083706089e-02 -3.96174297955e-01
+ 138 -4.60182307546e-01 -1.78501873837e-02 -3.11507399477e-01
+ 139 -4.40273461319e-01 -1.12103018242e-01 -2.27289202087e-01
+ 140 -4.40273461319e-01 3.61116032277e-02 -1.74024001416e-01
+ 141 -4.60182307546e-01 8.09595602631e-02 -2.75997265697e-01
+ 142 -4.70136730660e-01 9.72784435512e-03 -2.42541349903e-01
+ 143 -4.60182307546e-01 -4.39146989711e-02 -1.63407201785e-01
+ 144 -5.00000000000e-01 -1.66559145175e-02 -3.11058698390e-01
+ 145 -5.00000000000e-01 1.97167035122e-02 -2.19253532653e-01
+ 146 -5.00000000000e-01 -5.57526818987e-02 -8.89084018514e-02
+ 147 -5.00000000000e-01 1.31558706953e-01 -2.57793497719e-01
+ 148 -5.00000000000e-01 9.24619395715e-02 -3.56432011806e-02
+ 149 -5.00000000000e-01 1.70655474334e-01 -4.79943794258e-01
+ 150 5.00000000000e-01 -2.03967303369e-01 -1.42173602522e-01
+ 151 2.30987714204e-01 -3.51983651684e-01 -8.56293371419e-02
+ 152 3.20658476136e-01 -4.01322434456e-01 -1.80833208398e-01
+ 153 5.00000000000e-01 -3.51983651684e-01 -2.56707276716e-01
+ 154 5.00000000000e-01 -3.51983651684e-01 1.78913198739e-01
+ 155 3.20658476136e-01 -4.01322434456e-01 1.09580441905e-01
+ 156 3.65493857102e-01 -4.25991825842e-01 -1.06249062984e-02
+ 157 5.00000000000e-01 -4.01322434456e-01 -4.47151781061e-03
+ 158 2.30987714204e-01 -5.00000000000e-01 -2.00163011336e-01
+ 159 5.00000000000e-01 -5.00000000000e-01 -3.71240950910e-01
+ 160 3.20658476136e-01 -5.00000000000e-01 3.32246591095e-02
+ 161 5.00000000000e-01 -5.00000000000e-01 6.43795245452e-02
+ 162 2.30987714204e-01 -5.00000000000e-01 2.35457464119e-01
+ 163 5.00000000000e-01 -5.00000000000e-01 5.00000000000e-01
+ 164 1.31331185504e-01 2.56114618453e-01 -2.84339608728e-01
+ 165 1.57858979116e-01 3.78057309226e-01 -3.82152249326e-01
+ 166 1.19738014810e-01 4.18704872818e-01 -2.55065241255e-01
+ 167 8.74136358509e-02 3.78057309226e-01 -1.42615416921e-01
+ 168 3.15665592752e-01 3.78057309226e-01 -2.76258030442e-01
+ 169 2.71905986077e-01 4.18704872818e-01 -3.44160316936e-01
+ 170 2.14803511108e-01 4.39028654613e-01 -2.58343043980e-01
+ 171 2.24942423901e-01 4.18704872818e-01 -1.84469095333e-01
+ 172 1.13941429463e-01 5.00000000000e-01 -2.40428057519e-01
+ 173 2.42627619642e-01 5.00000000000e-01 -2.49677522398e-01
+ 174 2.71748043099e-01 5.00000000000e-01 -1.34533838635e-01
+ 175 3.42193386364e-01 5.00000000000e-01 -3.74070671040e-01
+ 176 1.84386772728e-01 5.00000000000e-01 -4.79964889923e-01
+ 177 -2.42155598925e-01 2.27619469692e-01 -1.04542325995e-01
+ 178 -2.49263361437e-01 2.36068389319e-01 -3.70264199990e-02
+ 179 -3.67378916577e-01 1.91174998786e-01 -9.73003242492e-02
+ 180 -3.28103732617e-01 1.82566959652e-01 -8.15759510569e-02
+ 181 -3.11947521078e-01 2.00166776882e-01 -3.66806152944e-02
+ 182 -3.32745573205e-01 2.11772075382e-01 -3.21984188351e-02
+ 183 -2.56516125578e-01 2.09158554978e-01 2.39390936603e-02
+ 184 -3.37677417052e-01 1.70259683176e-01 4.07832871333e-03
+ 185 -3.81739443230e-01 1.72714084072e-01 3.11810954062e-02
+ 186 -3.74776682348e-01 1.28906410477e-01 -4.28852029265e-02
+ 187 -2.49553364695e-01 1.65350881383e-01 -5.01272046724e-02
+ 188 -3.13043635387e-02 2.90209979345e-01 -4.03435206244e-01
+ 189 5.00134109824e-02 2.73162298899e-01 -3.43887407486e-01
+ 190 9.48045315644e-02 3.48774865933e-01 -3.89246568299e-01
+ 191 7.65412045948e-02 3.95104989672e-01 -4.41700048084e-01
+ 192 -3.73920205374e-02 3.20351903285e-01 -3.33481274880e-01
+ 193 1.88490481429e-02 2.98939475008e-01 -3.17100719496e-01
+ 194 6.02334792893e-02 3.49204606256e-01 -3.57816762103e-01
+ 195 3.65342438845e-02 3.80234602190e-01 -3.82309146561e-01
+ 196 9.07460935653e-02 3.68869481893e-01 -3.42610614056e-01
+ 197 7.04535475961e-02 4.25246913613e-01 -3.71746116720e-01
+ 198 4.39257539837e-02 3.03304222839e-01 -2.73933476122e-01
+ 199 -4.34796775360e-02 3.50493827226e-01 -2.63527343516e-01
+ 200 1.00567700276e-01 3.53997571278e-01 -6.03474994053e-01
+ 201 1.11772297783e-01 2.90991122618e-01 -6.27434125643e-01
+ 202 1.04326184984e-01 2.83911026265e-01 -5.89884025770e-01
+ 203 9.50008298315e-02 3.11874202419e-01 -5.59129410039e-01
+ 204 4.62784704142e-02 2.98120670330e-01 -6.26563454582e-01
+ 205 7.18446120393e-02 2.74742004873e-01 -6.34840055465e-01
+ 206 7.62419488762e-02 2.73494212044e-01 -6.04825998105e-01
+ 207 6.06636334051e-02 2.88664058073e-01 -5.89303578396e-01
+ 208 1.06205427338e-01 2.48867753759e-01 -5.83088541629e-01
+ 209 8.94339593869e-02 2.69750833559e-01 -5.14783826025e-01
+ 210 6.81333650763e-02 2.46659758967e-01 -6.05276332790e-01
+ 211 4.07115999697e-02 2.55997301471e-01 -5.82217870568e-01
+ 212 5.74830679210e-02 2.35114221670e-01 -6.50522586172e-01
+ 213 -8.01075944755e-03 2.42243769382e-01 -6.49651915111e-01
+ 214 1.67492102733e-01 1.88850733631e-01 -4.49654347572e-01
+ 215 1.49411644118e-01 2.22482676042e-01 -3.66996978150e-01
+ 216 2.04104432333e-01 1.83973518944e-01 -3.57462685666e-01
+ 217 2.40491055748e-01 1.47902969189e-01 -3.94024224134e-01
+ 218 3.33746051367e-01 3.44425366816e-01 -3.58915399864e-01
+ 219 2.66274429412e-01 3.14988450695e-01 -3.34056802819e-01
+ 220 2.78078324250e-01 2.62980139208e-01 -3.35141127288e-01
+ 221 3.26994037165e-01 2.65268646126e-01 -3.52074966808e-01
+ 222 2.22410597133e-01 1.81534911600e-01 -3.11366854712e-01
+ 223 3.13490008763e-01 1.06955204747e-01 -3.38394100697e-01
+ 224 3.14940398089e-01 2.87689941067e-01 -2.96970053860e-01
+ 225 4.06745004381e-01 3.03477602373e-01 -3.03285276426e-01
+ 226 1.23839301166e-01 1.90062766741e-01 -3.14957593579e-02
+ 227 3.11919650583e-01 1.41262353156e-01 -3.35694802693e-02
+ 228 2.51723495556e-01 1.79546441588e-01 -1.17159523089e-01
+ 229 1.27585243335e-01 2.23088692597e-01 -1.57917684043e-01
+ 230 3.11919650583e-01 3.45031383370e-01 -1.49836105757e-01
+ 231 3.74613100389e-01 2.60841568771e-01 -1.11771804231e-01
+ 232 3.13792621667e-01 2.59659831191e-01 -1.54913755356e-01
+ 233 2.51723495556e-01 3.15392461731e-01 -1.94670606747e-01
+ 234 3.15665592752e-01 1.74288279012e-01 -1.59991404954e-01
+ 235 3.77110395168e-01 2.82858852675e-01 -1.96053087355e-01
+ 236 5.00000000000e-01 2.96230969786e-01 -1.51909826668e-01
+ 237 5.00000000000e-01 9.24619395715e-02 -3.56432011806e-02
+ 238 5.00000000000e-01 -1.96954445134e-01 -5.17505801094e-01
+ 239 3.93234823273e-01 -1.33551511106e-01 -4.87841385273e-01
+ 240 4.28823215515e-01 -1.57023441861e-01 -3.72618791023e-01
+ 241 5.00000000000e-01 -2.00460874252e-01 -3.29839701808e-01
+ 242 5.00000000000e-01 -1.31494854002e-02 -4.98724797676e-01
+ 243 4.28823215515e-01 -3.21491826263e-02 -4.85208854934e-01
+ 244 4.46617411636e-01 -7.51037128119e-02 -3.99450041831e-01
+ 245 5.00000000000e-01 -7.67554247231e-02 -3.79874399291e-01
+ 246 3.93234823273e-01 -1.37057940224e-01 -3.00175285987e-01
+ 247 4.28823215515e-01 -3.44868020378e-02 -3.60098122077e-01
+ 248 5.00000000000e-01 -1.66559145175e-02 -3.11058698390e-01
+ 249 3.93234823273e-01 5.02534486277e-02 -4.69060381854e-01
+ 250 2.86469646545e-01 -7.01485770784e-02 -4.58176969451e-01
+ 251 3.14940398089e-01 1.51843920924e-01 -2.19458970202e-01
+ 252 4.06745004381e-01 9.97085721592e-02 -1.87018650939e-01
+ 253 3.61205298567e-01 2.38882940693e-01 -2.31638340690e-01
+ 254 4.37830002921e-01 2.33139048106e-01 -2.14071251344e-01
+ 255 4.20869746283e-01 -4.25010144518e-01 -4.20014627101e-01
+ 256 2.85118079777e-01 -4.50006763012e-01 -4.43975032462e-01
+ 257 3.38838559833e-01 -4.62505072259e-01 -5.40481274347e-01
+ 258 4.47246497522e-01 -4.50006763012e-01 -5.56676418067e-01
+ 259 3.37871582255e-01 -5.00000000000e-01 -5.64378931365e-01
+ 260 5.00000000000e-01 -5.00000000000e-01 -6.00620475455e-01
+ 261 2.56807373383e-01 -5.00000000000e-01 -4.31568397047e-01
+ 262 3.27666408330e-01 -2.48979475517e-01 -6.69395589601e-01
+ 263 2.57875798944e-01 -2.87647915765e-01 -6.26312864408e-01
+ 264 2.12144909647e-01 -2.59135735742e-01 -6.21906325217e-01
+ 265 2.24174769692e-01 -2.25545425607e-01 -6.41244418217e-01
+ 266 1.63833204165e-01 -3.74489737758e-01 -7.49697794800e-01
+ 267 1.71917199296e-01 -3.58431943843e-01 -6.94208576272e-01
+ 268 1.59108682235e-01 -3.19351801807e-01 -6.73929743912e-01
+ 269 1.49449846461e-01 -3.17030283738e-01 -7.04162945478e-01
+ 270 1.54384160305e-01 -2.64213865855e-01 -5.98161693024e-01
+ 271 1.20683131054e-01 -2.02111375698e-01 -6.13093246834e-01
+ 272 1.02922773537e-01 -3.42809243903e-01 -6.75441128683e-01
+ 273 6.03415655268e-02 -3.51055687849e-01 -7.21546623417e-01
+ 274 9.40425947785e-02 -4.13158178006e-01 -7.06615069608e-01
+ 275 -4.60182307546e-01 -1.55125679722e-02 -4.36618132335e-01
+ 276 -4.40273461319e-01 -1.08596589125e-01 -4.14955301373e-01
+ 277 -4.70136730660e-01 -6.26262518213e-02 -3.63006999881e-01
+ 278 -4.60182307546e-01 -1.40386827206e-01 -3.24028068423e-01
+ 279 -5.00000000000e-01 -1.31494854002e-02 -4.98724797676e-01
+ 280 -5.00000000000e-01 -1.96954445134e-01 -5.17505801094e-01
+ 281 -5.00000000000e-01 -7.67554247231e-02 -3.79874399291e-01
+ 282 -5.00000000000e-01 -2.00460874252e-01 -3.29839701808e-01
+ 283 -4.00654411929e-01 5.64005762038e-02 -6.94818930202e-01
+ 284 -4.33769607953e-01 9.44855422471e-02 -6.23193884887e-01
+ 285 -5.00000000000e-01 8.53277371669e-02 -6.54971897129e-01
+ 286 -4.12472224806e-01 9.33471520759e-03 -6.66961326627e-01
+ 287 -3.75417757823e-01 4.38235276076e-02 -6.31186837886e-01
+ 288 -4.06563318367e-01 7.55315142891e-02 -5.93376076979e-01
+ 289 -4.41648149870e-01 6.31083015830e-02 -6.04622149170e-01
+ 290 -4.00654411929e-01 1.41728313371e-01 -5.19790827331e-01
+ 291 -3.75417757823e-01 1.00708685719e-01 -5.14501435972e-01
+ 292 -4.12472224806e-01 9.46624523745e-02 -4.91933223755e-01
+ 293 -3.13126636735e-01 6.57352914114e-02 -5.31780256829e-01
+ 294 -3.24944449611e-01 1.86694304152e-02 -5.03922653253e-01
+ 295 -3.01308823858e-01 1.12801152408e-01 -5.59637860404e-01
+ 296 -1.55818547188e-01 5.00000000000e-01 -4.57106030524e-01
+ 297 -3.27909273594e-01 5.00000000000e-01 -3.62641241340e-01
+ 298 -2.96858793447e-01 4.29962686000e-01 -2.94746643332e-01
+ 299 -1.95288190171e-01 3.94944029000e-01 -3.08031738921e-01
+ 300 -5.61612304946e-02 5.00000000000e-01 -2.28998627819e-01
+ 301 -2.04107486996e-01 5.00000000000e-01 -2.42057902598e-01
+ 302 -2.11770073536e-01 4.47472014500e-01 -2.21282788778e-01
+ 303 -1.15693431381e-01 4.29962686000e-01 -2.05651567652e-01
+ 304 -3.45789050550e-01 8.36476801846e-02 -7.57790823616e-01
+ 305 -3.97192700367e-01 2.22431786790e-01 -7.81860549078e-01
+ 306 -5.00000000000e-01 2.50000000000e-01 -8.30000000000e-01
+ 307 -4.05463670987e-01 1.13302024919e-01 -7.08387818381e-01
+ 308 -3.34168481025e-01 1.31299803402e-01 -7.00785761331e-01
+ 309 -3.75626360769e-01 2.23474852552e-01 -7.33089320999e-01
+ 310 -4.36975780658e-01 2.42201349946e-01 -7.48925212254e-01
+ 311 -3.45789050550e-01 3.33647680185e-01 -7.57790823616e-01
+ 312 -5.00000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 313 -3.34168481025e-01 2.97966470069e-01 -7.00785761331e-01
+ 314 -4.05463670987e-01 3.63302024919e-01 -7.08387818381e-01
+ 315 -2.51252721537e-01 1.96949705103e-01 -6.36178641997e-01
+ 316 -3.10927341974e-01 2.26604049837e-01 -5.86775636761e-01
+ 317 -1.91578101101e-01 1.67295360369e-01 -6.85581647233e-01
+ 318 -4.35094040052e-01 -3.54252982600e-01 -2.99698721944e-01
+ 319 -4.02641060079e-01 -2.81379473900e-01 -2.63927607462e-01
+ 320 -4.02641060079e-01 -2.77873044783e-01 -4.51593706748e-01
+ 321 -4.35094040052e-01 -3.51915363189e-01 -4.24809454802e-01
+ 322 -4.51320530039e-01 -3.14928348234e-01 -3.54150491732e-01
+ 323 -4.35094040052e-01 -2.53237797645e-01 -3.48453672006e-01
+ 324 -5.00000000000e-01 -3.00307249501e-01 -3.43640118175e-01
+ 325 -5.00000000000e-01 -3.48477222567e-01 -4.44373376002e-01
+ 326 -2.81102230583e-01 -3.54252982600e-01 -1.85646762228e-01
+ 327 -3.35826672937e-01 -3.90689736950e-01 -2.32045309399e-01
+ 328 -2.47369780789e-01 1.17720653183e-01 -5.23298029071e-01
+ 329 -1.97179855789e-01 1.56902443511e-01 -4.80800350651e-01
+ 330 -1.86535387143e-01 1.52386960751e-01 -4.98633728901e-01
+ 331 -2.06308115320e-01 1.30538324208e-01 -5.28799257236e-01
+ 332 -2.30198987067e-01 1.81759131661e-01 -4.96651473597e-01
+ 333 -2.02462634974e-01 1.86534165720e-01 -4.77201873142e-01
+ 334 -1.93158588694e-01 1.75739623098e-01 -4.91476526207e-01
+ 335 -2.08548141329e-01 1.68958086185e-01 -5.09201144198e-01
+ 336 -1.56118190321e-01 1.69720114535e-01 -4.86301578816e-01
+ 337 -1.65246449852e-01 1.43355995233e-01 -5.34300485400e-01
+ 338 -1.75088191329e-01 1.95079279736e-01 -4.80869358585e-01
+ 339 -1.89137321599e-01 1.94576802685e-01 -5.02152701762e-01
+ 340 -1.80009062067e-01 2.20940921988e-01 -4.54153795178e-01
+ 341 -2.13028193345e-01 2.45797610138e-01 -4.70004918124e-01
+ 342 -1.46989930790e-01 1.96084233838e-01 -4.38302672231e-01
+ 343 -2.50000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 344 -2.40229972784e-01 -4.34248900021e-01 -7.47222263577e-01
+ 345 -1.10344959176e-01 -4.01373350031e-01 -7.05833395366e-01
+ 346 -2.57352101294e-01 -4.02141408219e-01 -7.97402038557e-01
+ 347 -2.48186555559e-01 -3.77292731180e-01 -7.43468226601e-01
+ 348 -1.64248740745e-01 -3.36390308240e-01 -7.14624302134e-01
+ 349 -3.60344959176e-01 -4.01373350031e-01 -7.05833395366e-01
+ 350 -2.20689918352e-01 -3.02746700063e-01 -5.81666790732e-01
+ 351 -3.30915407411e-01 -3.36390308240e-01 -7.14624302134e-01
+ 352 -2.46373111117e-01 -2.54585462360e-01 -6.56936453201e-01
+ 353 -3.86028151941e-01 -3.53212112328e-01 -7.81103057836e-01
+ 354 8.20433117838e-06 4.25246913613e-01 -1.32209284315e-01
+ 355 -5.19340461751e-02 4.50164609075e-01 -2.40508199718e-01
+ 356 -9.96491123618e-02 4.25246913613e-01 -3.60316687020e-01
+ 357 -1.39118755345e-01 3.20190942613e-01 -2.11242395417e-01
+ 358 -7.82471414973e-02 3.80127295076e-01 -1.41125338649e-01
+ 359 -9.76399929199e-02 4.10095471307e-01 -2.20120511618e-01
+ 360 -1.44685352626e-01 3.80127295076e-01 -2.93196940453e-01
+ 361 4.34358417068e-01 -3.10862549564e-01 -2.95031039465e-01
+ 362 4.01537625603e-01 -3.64310172662e-01 -3.71459757936e-01
+ 363 3.78303163150e-01 -4.44059206068e-01 -3.42334818757e-01
+ 364 4.18868775433e-01 -3.64028571835e-01 -2.75614413345e-01
+ 365 3.89920394376e-01 -3.30176515207e-01 -2.99630451250e-01
+ 366 3.53227192502e-01 -3.72246252487e-01 -3.52116067492e-01
+ 367 4.01537625603e-01 -2.16293824346e-01 -2.56926083743e-01
+ 368 3.03075251205e-01 -2.28620345324e-01 -3.71678564963e-01
+ 369 3.53227192502e-01 -2.73568686943e-01 -2.75760284697e-01
+ 370 2.79840788752e-01 -3.08369378730e-01 -3.42553625784e-01
+ 371 3.78303163150e-01 -2.96042857753e-01 -2.27801144563e-01
+ 372 2.56606326300e-01 -3.88118412136e-01 -3.13428686604e-01
+ 373 -4.51320530039e-01 -3.88936522391e-01 -5.26107091101e-01
+ 374 -4.35094040052e-01 -3.51915363189e-01 -5.77729137832e-01
+ 375 -5.00000000000e-01 -3.98984815045e-01 -5.72915584001e-01
+ 376 -5.00000000000e-01 -3.48477222567e-01 -6.73752900547e-01
+ 377 -9.30383626661e-02 -4.01681872686e-01 -2.22460869969e-01
+ 378 -5.74873261887e-02 -4.34454581791e-01 -3.12272527707e-01
+ 379 -1.19436024681e-01 -4.15538847451e-01 -3.30624798881e-01
+ 380 -1.63786281830e-01 -3.87385129935e-01 -2.76867784113e-01
+ 381 -1.46573175711e-01 -3.87385129935e-01 -4.31138041254e-01
+ 382 -2.26667136949e-01 -3.31077694902e-01 -4.00759140289e-01
+ 383 -6.72187034874e-02 -4.01681872686e-01 -4.53866255680e-01
+ 384 -1.48052153741e-01 -3.03363745373e-01 -4.15836668176e-01
+ 385 -2.28004634021e-01 -1.85206769573e-01 -3.51910639623e-01
+ 386 -2.66643377089e-01 -2.71999207002e-01 -3.68796126012e-01
+ 387 -2.83204226862e-01 -2.35730443149e-01 -3.54480045317e-01
+ 388 -2.72165280215e-01 -1.74199842507e-01 -3.38879261775e-01
+ 389 -2.42084629391e-01 -1.96957512840e-01 -4.00506863078e-01
+ 390 -2.63150459646e-01 -2.50902223370e-01 -3.95565112852e-01
+ 391 -2.76444326337e-01 -2.28974896388e-01 -3.78135805621e-01
+ 392 -2.66831728397e-01 -1.85702647040e-01 -3.75620536694e-01
+ 393 -3.10804023283e-01 -2.60992279936e-01 -3.55764748164e-01
+ 394 -3.16325926409e-01 -1.63192915441e-01 -3.25847883926e-01
+ 395 -2.92590890442e-01 -2.43564271993e-01 -3.86877527620e-01
+ 396 -2.86245275584e-01 -1.85950585774e-01 -3.87475485230e-01
+ 397 -2.80723372459e-01 -2.83749950269e-01 -4.17392349467e-01
+ 398 -2.56164624760e-01 -2.08708256106e-01 -4.49103086533e-01
+ 399 5.00000000000e-01 -3.48477222567e-01 -6.73752900547e-01
+ 400 4.47246497522e-01 -3.48991578057e-01 -6.05431368129e-01
+ 401 4.60434873142e-01 -3.86743683542e-01 -5.46883763824e-01
+ 402 5.00000000000e-01 -3.98984815045e-01 -5.72915584001e-01
+ 403 4.47246497522e-01 -3.48991578057e-01 -4.52511685099e-01
+ 404 5.00000000000e-01 -3.48477222567e-01 -4.44373376002e-01
+ 405 4.20869746283e-01 -2.73487367085e-01 -4.93147052193e-01
+ 406 4.69898852988e-02 -3.17969094735e-01 -3.44119733077e-01
+ 407 3.03023160324e-02 -4.08984547367e-01 -4.18007788131e-01
+ 408 1.05736986122e-01 -4.02029168957e-01 -3.83148087622e-01
+ 409 1.51798105799e-01 -3.53043753436e-01 -3.28774209841e-01
+ 410 4.48265685367e-03 -4.08984547367e-01 -1.86602402420e-01
+ 411 7.52668682447e-03 -4.39323031578e-01 -2.88366882675e-01
+ 412 6.97965966933e-02 -4.26521876718e-01 -2.94632333657e-01
+ 413 8.85238800023e-02 -4.02029168957e-01 -2.28877830481e-01
+ 414 1.35110536533e-01 -4.44059206068e-01 -4.02662264895e-01
+ 415 7.73988338248e-02 -4.62706137379e-01 -2.78136533850e-01
+ 416 1.09290877354e-01 -4.44059206068e-01 -1.71256879183e-01
+ 417 2.82160102993e-01 -2.35101687187e-01 -4.29267793842e-01
+ 418 2.56214712722e-01 -2.13065736600e-01 -4.23086493531e-01
+ 419 2.53699591692e-01 -1.98807090374e-01 -3.91201228936e-01
+ 420 2.94772448875e-01 -1.49384461201e-01 -4.14927767207e-01
+ 421 2.83596617510e-01 -1.80117317151e-01 -4.38904185712e-01
+ 422 2.63778446178e-01 -1.77336446719e-01 -4.31859112511e-01
+ 423 2.64622943310e-01 -1.55920919276e-01 -4.13526475775e-01
+ 424 2.32784443480e-01 -2.05288432237e-01 -4.48790457816e-01
+ 425 2.04323932179e-01 -1.68993835425e-01 -4.10723892910e-01
+ 426 2.50679511168e-01 -1.60241813851e-01 -4.51919295028e-01
+ 427 2.45396789362e-01 -1.19571206252e-01 -4.34450431181e-01
+ 428 2.73857300663e-01 -1.55865803064e-01 -4.72516996086e-01
+ 429 2.61244954781e-01 -2.41583029050e-01 -4.86857022722e-01
+ 430 -3.16909948518e-01 3.46129296455e-01 -4.63146702974e-01
+ 431 -4.08454974259e-01 4.23064648228e-01 -6.46573351487e-01
+ 432 -4.38969982839e-01 3.38928256930e-01 -5.91030165744e-01
+ 433 -4.08454974259e-01 2.58392385395e-01 -4.71545248616e-01
+ 434 -4.08454974259e-01 4.23064648228e-01 -3.65661577565e-01
+ 435 -4.38969982839e-01 4.48709765485e-01 -5.20441051710e-01
+ 436 -4.54227487130e-01 3.79196192697e-01 -5.10316737347e-01
+ 437 -4.38969982839e-01 3.38928256930e-01 -4.03755649796e-01
+ 438 -5.00000000000e-01 3.35327737167e-01 -6.54971897129e-01
+ 439 -5.00000000000e-01 3.90218491445e-01 -5.26040082138e-01
+ 440 -5.00000000000e-01 3.35327737167e-01 -3.74060123207e-01
+ 441 -5.00000000000e-01 5.00000000000e-01 -5.49088226078e-01
+ 442 -2.13132829468e-01 8.31544306639e-02 -4.10251548488e-01
+ 443 -1.95967138928e-01 5.10847296121e-02 -4.47513151508e-01
+ 444 -2.38959575822e-01 4.02796298798e-02 -4.66316318757e-01
+ 445 -2.69038639540e-01 5.09119305395e-02 -4.57087100870e-01
+ 446 -2.30251305129e-01 1.00437541924e-01 -4.66774788779e-01
+ 447 -2.13101352881e-01 7.32967041359e-02 -4.72774777363e-01
+ 448 -2.41062127064e-01 5.96398857057e-02 -4.80561746335e-01
+ 449 -2.61815686623e-01 7.31815047542e-02 -4.79157410271e-01
+ 450 -2.51872948999e-01 1.88422294878e-02 -4.94348703891e-01
+ 451 -2.50371892929e-01 5.18017040530e-02 -5.03998478951e-01
+ 452 -2.86157115200e-01 6.81950417993e-02 -5.13610341162e-01
+ 453 -2.13085614588e-01 6.83678408719e-02 -5.04036391800e-01
+ 454 -1.78801448387e-01 1.90150285604e-02 -4.84774754529e-01
+ 455 -2.44215522228e-01 2.20742414642e-01 -2.27085333634e-01
+ 456 -2.39951763542e-01 1.83144816565e-01 -2.13944624226e-01
+ 457 -2.33091039661e-01 1.98918839205e-01 -1.73310326364e-01
+ 458 -2.94145557171e-01 2.07366502808e-01 -2.11780373228e-01
+ 459 -2.80654775215e-01 1.88776592300e-01 -2.39591322135e-01
+ 460 -2.68347142953e-01 1.68569849327e-01 -2.26609292954e-01
+ 461 -2.73238453504e-01 1.74227542008e-01 -2.03741317289e-01
+ 462 -2.42548728735e-01 1.29773195847e-01 -2.41438212680e-01
+ 463 -2.31424246169e-01 1.07949620409e-01 -1.87663205410e-01
+ 464 -2.79543579553e-01 1.28130446436e-01 -2.49159908166e-01
+ 465 -2.92478763678e-01 1.16397284012e-01 -2.26133252274e-01
+ 466 -3.03603246245e-01 1.38220859450e-01 -2.79908259544e-01
+ 467 -3.53533281188e-01 1.24844947615e-01 -2.64603299139e-01
+ 468 -2.53673211302e-01 1.51596771284e-01 -2.95213219950e-01
+ 469 3.66115272955e-01 -4.12712900391e-01 -3.84485980269e-01
+ 470 2.77990141408e-01 -4.34534675293e-01 -4.11338445998e-01
+ 471 2.56740357689e-01 -4.62706137379e-01 -3.92188493566e-01
+ 472 2.03986855211e-01 -4.12712900391e-01 -4.24704277694e-01
+ 473 2.99172909433e-01 -3.69069350586e-01 -3.91108494948e-01
+ 474 5.00000000000e-01 -3.00307249501e-01 -3.43640118175e-01
+ 475 4.50768812801e-01 -2.82385523457e-01 -3.50649729872e-01
+ 476 4.34358417068e-01 -3.08524930153e-01 -4.20141772322e-01
+ 477 4.34358417068e-01 -2.09847364609e-01 -3.43785989527e-01
+ 478 4.01537625603e-01 -2.12787395229e-01 -4.44592183029e-01
+ 479 -5.00000000000e-01 2.96230969786e-01 -1.51909826668e-01
+ 480 -4.21159628820e-01 2.81809389381e-01 -6.86047537812e-02
+ 481 -5.00000000000e-01 5.00000000000e-01 1.15911773922e-01
+ 482 -5.00000000000e-01 3.64153979857e-01 6.53934488879e-02
+ 483 -4.40869721615e-01 3.36357042036e-01 7.35464346641e-02
+ 484 -4.21159628820e-01 4.17655409524e-01 1.09942979946e-01
+ 485 -4.21159628820e-01 2.81809389381e-01 1.87454063604e-01
+ 486 -3.81739443230e-01 3.76483114286e-01 2.99002695996e-01
+ 487 -5.00000000000e-01 2.96230969786e-01 2.32178399410e-01
+ 488 -5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 489 -2.12285901233e-01 -1.41265844052e-01 -3.10237245506e-01
+ 490 -2.09812250997e-01 -1.09162206110e-01 -3.16634710187e-01
+ 491 -2.16434792274e-01 -1.15080849901e-01 -3.40670139586e-01
+ 492 -2.46965909625e-01 -1.48574867848e-01 -3.15440791646e-01
+ 493 -2.36440669850e-01 -1.22669883443e-01 -3.18938003622e-01
+ 494 -2.49731836985e-01 -1.31118205081e-01 -3.35729387699e-01
+ 495 -2.00716059486e-01 -7.11399243790e-02 -2.98996745469e-01
+ 496 -2.04864950526e-01 -4.49549302279e-02 -3.29429639549e-01
+ 497 -2.39252681793e-01 -1.01824254733e-01 -3.07947124955e-01
+ 498 -2.60595438467e-01 -1.04073922835e-01 -3.27638761738e-01
+ 499 -2.56446547427e-01 -1.30258916986e-01 -2.97205867658e-01
+ 500 -1.96567168445e-01 -9.73249185301e-02 -2.68563851390e-01
+ 501 -2.47565409937e-01 3.89330517962e-01 -3.72043059328e-01
+ 502 -3.31710273292e-01 4.26220345308e-01 -3.37420856938e-01
+ 503 -2.36364247853e-01 4.23064648228e-01 -4.60126366749e-01
+ 504 -2.70680256131e-01 3.74930110793e-01 -4.02410940544e-01
+ 505 -3.28010192098e-01 4.06197583095e-01 -3.68852318447e-01
+ 506 -3.24242831902e-01 4.48709765485e-01 -3.96143061884e-01
+ 507 -4.19656136344e-01 3.89330517962e-01 -2.77578270144e-01
+ 508 -3.85407407068e-01 3.74930110793e-01 -3.39434414421e-01
+ 509 -3.28111110603e-01 3.12395166189e-01 -3.75063395553e-01
+ 510 -3.39312272687e-01 2.78661035924e-01 -2.86980088133e-01
+ 511 -4.97048399845e-03 4.50164609075e-01 -4.00199421321e-01
+ 512 -7.68675294208e-02 3.80234602190e-01 -3.74689526762e-01
+ 513 -1.15539538835e-02 4.10175951643e-01 -4.01008367552e-01
+ 514 1.42841127703e-02 5.00000000000e-01 -4.68535460224e-01
+ 515 -9.12045999348e-04 4.30069993115e-01 -4.46835375564e-01
+ 516 -9.35614553632e-02 3.95104989672e-01 -4.30270618384e-01
+ 517 -2.35249772952e-01 -6.76558616781e-02 -3.73798383024e-01
+ 518 -2.62275157437e-01 -9.95015462658e-02 -3.57814883325e-01
+ 519 -2.92705936582e-01 -3.25968316719e-02 -3.20917220600e-01
+ 520 -2.83682156181e-01 -5.18501521574e-02 -3.53333855900e-01
+ 521 -2.91843098738e-01 -7.96858429784e-02 -3.46462362906e-01
+ 522 -3.00579266524e-01 -7.61288595950e-02 -3.22560775042e-01
+ 523 -2.90980260893e-01 -1.26774854285e-01 -3.72007505212e-01
+ 524 -3.20835814808e-01 -9.12628138952e-02 -3.52139937359e-01
+ 525 -3.48436424523e-01 -9.17158242786e-02 -3.19126342789e-01
+ 526 -3.23090759008e-01 -5.52977631222e-02 -3.65285964075e-01
+ 527 -2.65634595378e-01 -9.03567931284e-02 -4.18167126499e-01
+ 528 -1.17136493262e-01 1.16546109525e-01 -4.46674800355e-01
+ 529 -9.25962338666e-02 1.37720218621e-01 -3.95058318558e-01
+ 530 -9.78096280350e-02 1.08225737960e-01 -3.94940721237e-01
+ 531 -1.12686454817e-01 8.28914430826e-02 -4.20690163476e-01
+ 532 -7.57702746856e-02 1.13034480424e-01 -4.46276925996e-01
+ 533 -7.31988412809e-02 1.28321096188e-01 -4.11998562917e-01
+ 534 -8.19582350536e-02 1.08550016301e-01 -4.07675303837e-01
+ 535 -8.65923219143e-02 9.17685791630e-02 -4.29086459529e-01
+ 536 -8.81461954216e-02 1.04065552178e-01 -3.69073681678e-01
+ 537 -1.08236416372e-01 4.92367766402e-02 -3.94705526596e-01
+ 538 -7.02321489843e-02 1.05884651893e-01 -3.94675471664e-01
+ 539 -7.13202362407e-02 7.93798139820e-02 -4.20292289116e-01
+ 540 -5.12300152906e-02 1.34208589520e-01 -3.94660444198e-01
+ 541 -3.44040561096e-02 1.09522851324e-01 -4.45879051637e-01
+ 542 -6.80559744716e-02 1.58894327716e-01 -3.43441836760e-01
+ 543 -3.08662952632e-02 -9.42125629360e-02 -3.14001781323e-01
+ 544 -6.01439864263e-02 -4.96474952187e-02 -2.84999387408e-01
+ 545 -4.99377075716e-02 -6.31091341643e-02 -2.61136067414e-01
+ 546 -3.01957225627e-02 -9.21224874957e-02 -2.63705604374e-01
+ 547 -1.27552445096e-02 -4.89048074048e-02 -2.89515018358e-01
+ 548 -3.83107222029e-02 -3.42973474370e-02 -2.78342343403e-01
+ 549 -3.61143291177e-02 -4.82311135916e-02 -2.62109114409e-01
+ 550 -1.83452129604e-02 -6.26140089550e-02 -2.64146488047e-01
+ 551 -5.94734137258e-02 -4.75574197784e-02 -2.34703210459e-01
+ 552 -2.95251498622e-02 -9.00324120554e-02 -2.13409427425e-01
+ 553 -3.78636737359e-02 -3.29039638101e-02 -2.44811558771e-01
+ 554 -1.20846718091e-02 -4.68147319645e-02 -2.39218841409e-01
+ 555 -4.20329356727e-02 -4.33973968746e-03 -2.60512624443e-01
+ 556 5.35580624402e-03 -3.59705187362e-03 -2.65028255393e-01
+ 557 -8.94216775895e-02 -5.08242750129e-03 -2.55996993493e-01
+ 558 1.39450380224e-01 1.56375165665e-01 -4.14652439541e-01
+ 559 1.36743981984e-01 1.89621649927e-01 -3.71214829270e-01
+ 560 1.00910104389e-01 1.90474691671e-01 -4.75693275407e-01
+ 561 1.04409622164e-01 1.68282993680e-01 -4.43679027441e-01
+ 562 1.11140012999e-01 1.90240899873e-01 -4.03844172763e-01
+ 563 1.11050464760e-01 2.12354667265e-01 -4.11908719847e-01
+ 564 1.21369921609e-01 1.90007108075e-01 -3.31995070118e-01
+ 565 9.23559830876e-02 1.90704288620e-01 -3.88574114493e-01
+ 566 8.28296457740e-02 2.24106634082e-01 -3.93035905985e-01
+ 567 7.28683818796e-02 1.57999123704e-01 -4.40691367375e-01
+ 568 3.43281060445e-02 1.92098649711e-01 -5.01732203241e-01
+ 569 1.11408657715e-01 1.23899597698e-01 -3.79650531509e-01
+ 570 5.00000000000e-01 -5.57526818987e-02 -8.89084018514e-02
+ 571 5.00000000000e-01 -2.03835121266e-01 1.07394398766e-01
+ 572 5.00000000000e-01 -2.03769030214e-01 2.32178399410e-01
+ 573 3.40097724750e-01 -5.33014537612e-02 6.50491617206e-02
+ 574 3.93398483167e-01 -1.03523403630e-01 -4.02509302700e-03
+ 575 4.20048862375e-01 -2.02642552723e-01 1.21981180230e-01
+ 576 3.93398483167e-01 -2.02200969174e-01 2.10032774480e-01
+ 577 3.93398483167e-01 -3.01010716821e-01 1.74522640700e-01
+ 578 3.40097724750e-01 -3.49532423547e-01 3.32870762311e-01
+ 579 3.40097724750e-01 -2.01516075231e-01 1.17839610498e-02
+ 580 1.80195449500e-01 -1.99064847094e-01 1.65741524622e-01
+ 581 -4.09581234775e-02 -8.78866798302e-03 -3.62775955385e-01
+ 582 -1.78011586168e-02 -6.19285992832e-03 -3.13902105389e-01
+ 583 -2.52592488809e-02 2.29295506491e-02 -2.98441751878e-01
+ 584 -4.05667764434e-02 3.61928519104e-02 -3.15148500121e-01
+ 585 -6.51899005335e-02 -6.93554774215e-03 -3.09386474439e-01
+ 586 -4.16746649410e-02 -5.82271578598e-03 -2.94600401424e-01
+ 587 -4.12998560581e-02 1.59265561115e-02 -2.87830562282e-01
+ 588 -5.68517434921e-02 2.24344254398e-02 -2.95431331245e-01
+ 589 -1.74098115827e-02 3.87886599651e-02 -2.66274650125e-01
+ 590 -4.01754294093e-02 8.11743718038e-02 -2.67521044857e-01
+ 591 -4.14137669183e-02 2.41649641430e-02 -2.62848764581e-01
+ 592 -6.47985534994e-02 3.80459721513e-02 -2.61759019175e-01
+ 593 -1.61029175967e-01 2.94753314235e-01 -3.50387711833e-01
+ 594 -1.57653592126e-01 2.56575413538e-01 -2.97687584222e-01
+ 595 -1.21238268679e-01 2.54415317301e-01 -2.97994741217e-01
+ 596 -1.04718398875e-01 2.72424219532e-01 -3.24498383521e-01
+ 597 -1.02254426752e-01 3.22623570731e-01 -3.06957527675e-01
+ 598 -1.19595620596e-01 2.87881551434e-01 -2.86300837320e-01
+ 599 -1.01798620893e-01 2.78434944782e-01 -2.89377891792e-01
+ 600 -8.43054917622e-02 2.98447422096e-01 -3.04174703519e-01
+ 601 -1.01342815034e-01 2.34246318834e-01 -2.71798255909e-01
+ 602 -4.84076217833e-02 2.50095124828e-01 -2.98609055208e-01
+ 603 -8.20551025349e-02 2.72995488298e-01 -2.69041285112e-01
+ 604 -4.59436496596e-02 3.00294476027e-01 -2.81068199362e-01
+ 605 -9.88788429107e-02 2.84445670033e-01 -2.54257400063e-01
+ 606 -1.54278008285e-01 2.18397512841e-01 -2.44987456610e-01
+ 607 -7.14684787983e-02 1.59785052124e-01 -5.41773195330e-01
+ 608 -1.18357464325e-01 1.51570523678e-01 -5.38036840365e-01
+ 609 -1.27901619813e-01 1.66408427065e-01 -5.04792117654e-01
+ 610 -1.09229204794e-01 1.77934642981e-01 -4.90037933781e-01
+ 611 -8.70175654655e-02 2.40745425713e-01 -5.49188594516e-01
+ 612 -1.13093860261e-01 2.08282282220e-01 -5.44225891478e-01
+ 613 -1.21567877893e-01 2.05232770124e-01 -5.17745086666e-01
+ 614 -1.07008353907e-01 2.25858361755e-01 -5.12226620421e-01
+ 615 -1.38267677591e-01 2.20382009458e-01 -5.09735717111e-01
+ 616 -1.24778291461e-01 2.58895016570e-01 -4.97453332967e-01
+ 617 -1.33906550992e-01 2.32530897268e-01 -5.45452239551e-01
+ 618 -1.02566652133e-01 3.21705799302e-01 -5.56603993702e-01
+ 619 -3.98559926610e-02 2.70152552087e-01 -3.51022130726e-01
+ 620 1.72064000605e-02 2.65473240875e-01 -3.28794623393e-01
+ 621 -4.10638876193e-02 2.96932977133e-01 -3.21857201656e-01
+ 622 2.03488066137e-03 2.86728387463e-01 -3.12477803424e-01
+ 623 4.14617818601e-02 2.53104871641e-01 -2.91474331968e-01
+ 624 1.31479620614e-02 2.85567856836e-01 -2.82158669151e-01
+ 625 5.00000000000e-01 2.54372471302e-01 -2.61254482531e-01
+ 626 4.37830002921e-01 2.59203559694e-01 -3.62171449037e-01
+ 627 4.53372502191e-01 2.17518154663e-01 -2.80539387073e-01
+ 628 5.00000000000e-01 1.31558706953e-01 -2.57793497719e-01
+ 629 4.37830002921e-01 1.23357539551e-01 -2.84660365378e-01
+ 630 4.06745004381e-01 1.38805339540e-01 -4.09168947477e-01
+ 631 2.22445129121e-01 3.96687588914e-01 -1.00187812209e-01
+ 632 1.99666643217e-01 3.61544346298e-01 -1.46225761339e-01
+ 633 9.95555242892e-02 3.15392461731e-01 -1.05575531067e-01
+ 634 8.36676936821e-02 3.45031383370e-01 -1.61934922359e-02
+ 635 2.76587158256e-02 3.73615826880e-02 -8.34894703149e-02
+ 636 8.87669246301e-02 4.88815598460e-02 -1.22858174861e-01
+ 637 1.00457716809e-01 9.59419621443e-02 -9.24040363603e-02
+ 638 7.57490084957e-02 1.13712174714e-01 -5.74926148364e-02
+ 639 1.19322041546e-01 1.26929875548e-02 -5.31050091195e-02
+ 640 1.29506405509e-01 2.85958373713e-02 -8.94789658823e-02
+ 641 1.28089629423e-01 6.89625697136e-02 -7.49831642512e-02
+ 642 1.20827794752e-01 7.18162472835e-02 -4.59019258656e-02
+ 643 1.36857217300e-01 1.25232151872e-01 -9.68613193829e-02
+ 644 1.61566600622e-01 7.94962320555e-02 -7.21477288966e-02
+ 645 1.67412334216e-01 8.90435795812e-02 -2.71081536410e-02
+ 646 1.80430250350e-01 2.42129647129e-02 -9.24737136660e-02
+ 647 2.10985367266e-01 -1.19756075783e-02 -2.27205479241e-02
+ 648 1.49875133435e-01 6.04015370041e-02 -1.62226879408e-01
+ 649 1.61070020322e-01 3.14988450695e-01 -4.04652948741e-01
+ 650 1.10382572445e-01 2.62932726006e-01 -3.99561717376e-01
+ 651 1.35050639206e-01 3.41955150671e-01 -4.26362774892e-01
+ 652 1.43161005088e-01 3.03679046411e-01 -4.32185668062e-01
+ 653 1.29419082541e-01 2.38238728548e-01 -4.16259260775e-01
+ 654 1.75939437731e-01 3.44425366816e-01 -4.64809618748e-01
+ 655 1.47104278283e-01 3.19533855730e-01 -4.81467687840e-01
+ 656 1.28463031060e-01 2.29300783595e-01 -4.82219086799e-01
+ 657 1.36910366058e-01 3.84875416780e-01 -4.97374357974e-01
+ 658 3.53841721501e-01 -1.13710650209e-01 -2.22469673466e-01
+ 659 4.02561147667e-01 -4.49864536155e-02 -1.60194182704e-01
+ 660 4.06745004381e-01 -4.85060493109e-02 -2.40283851609e-01
+ 661 3.40391150588e-01 -4.01553652237e-02 -2.61111149210e-01
+ 662 3.80293362941e-01 -7.00103902489e-03 -2.04744162202e-01
+ 663 4.37830002921e-01 -1.51671968345e-03 -1.72070301466e-01
+ 664 3.53841721501e-01 3.45039712611e-02 -1.69204472795e-01
+ 665 3.40391150588e-01 5.86543824231e-02 -2.25601015429e-01
+ 666 2.60586725882e-01 4.17506038489e-02 -3.20579922553e-01
+ 667 2.07683443002e-01 -2.34539970492e-02 -3.02765744410e-01
+ 668 8.26247010630e-02 -7.93597989513e-02 -2.82416937509e-01
+ 669 7.29285876746e-02 -1.05279911378e-02 -2.59835796071e-01
+ 670 7.30059108265e-02 -2.24228418341e-02 -2.26832713915e-01
+ 671 7.78926290966e-02 -6.27861710890e-02 -2.21621743557e-01
+ 672 1.16249917249e-01 -9.47913097361e-03 -2.22321908458e-01
+ 673 9.85774362613e-02 1.31151849095e-02 -2.27299490516e-01
+ 674 9.22232164785e-02 -1.71674712455e-03 -2.10681255289e-01
+ 675 1.01886797209e-01 -2.17236017246e-02 -2.01823455507e-01
+ 676 6.81965157082e-02 6.04563672451e-03 -1.99040602119e-01
+ 677 7.31605571301e-02 -4.62125432267e-02 -1.60826549605e-01
+ 678 9.54227216170e-02 2.41642701510e-02 -1.86769361215e-01
+ 679 1.11517845282e-01 7.09449688870e-03 -1.61526714507e-01
+ 680 1.06553803860e-01 5.93526768399e-02 -1.99740767020e-01
+ 681 6.32324742863e-02 5.83038166757e-02 -2.37254654633e-01
+ 682 -1.07522952631e-01 1.77489280777e-01 -3.90872254496e-01
+ 683 -8.21167562666e-02 2.15062846966e-01 -3.95059905079e-01
+ 684 -4.96801690051e-02 2.24552153530e-01 -3.73438521502e-01
+ 685 -6.20752406404e-02 1.73703518048e-01 -3.97235476929e-01
+ 686 -9.03801373568e-02 1.81163756645e-01 -4.10924542030e-01
+ 687 -7.56111939023e-02 2.08425312320e-01 -4.09052208083e-01
+ 688 -5.18182816065e-02 2.12539005147e-01 -3.99302053368e-01
+ 689 -8.91471471642e-02 2.43147106591e-01 -4.20868939238e-01
+ 690 -7.81296003792e-02 2.24935640521e-01 -4.30922331858e-01
+ 691 -4.36994351740e-02 2.39361343863e-01 -4.27232161671e-01
+ 692 -1.01542218799e-01 1.92298471109e-01 -4.44665894665e-01
+ 693 -5.60945068093e-02 1.88512708380e-01 -4.51029117098e-01
+ 694 6.53876716884e-02 -1.81353241628e-02 -3.49921353589e-01
+ 695 4.55105295300e-02 2.77788384803e-02 -3.52767875627e-01
+ 696 3.21256217680e-02 1.73202083623e-02 -3.23521335549e-01
+ 697 3.53717389662e-02 -1.08661880182e-02 -3.07474804491e-01
+ 698 6.43100729874e-02 2.00842462565e-02 -2.93588004111e-01
+ 699 5.14178444488e-02 3.79538312121e-02 -3.14263468629e-01
+ 700 3.99023348976e-02 2.75661104407e-02 -3.01954665320e-01
+ 701 4.46586507396e-02 1.21904802131e-02 -2.84068087871e-01
+ 702 1.54945968078e-02 3.50479746248e-02 -3.10321326529e-01
+ 703 3.14072226340e-02 4.27999219751e-02 -2.85965769230e-01
+ 704 3.42941402652e-02 2.73533824010e-02 -2.51141455013e-01
+ 705 4.44329308290e-02 6.59984088995e-02 -2.96434526149e-01
+ 706 2.56333873716e-02 7.36930011233e-02 -3.55614397665e-01
+ 707 1.15285224385e-02 6.97390942398e-02 -2.52387849745e-01
+ 708 9.47095037367e-03 4.52937122020e-02 -2.56601318294e-01
+ 709 -7.27102101888e-03 7.74336864636e-02 -3.11567721261e-01
+ 710 1.62301440829e-02 7.10570632009e-02 -2.86796699052e-01
+ 711 1.35115596231e-02 5.23935344323e-02 -2.81354588137e-01
+ 712 -3.06207859791e-03 5.04234403512e-02 -2.96054565972e-01
+ 713 1.14812931075e-01 1.24939990711e-01 -2.27940380923e-01
+ 714 1.40603159469e-01 1.58258077729e-01 -2.23283244068e-01
+ 715 1.78779288218e-01 1.84737699774e-02 -2.32496311909e-01
+ 716 1.40263683574e-01 3.17504522102e-02 -2.34082426150e-01
+ 717 1.38030559057e-01 8.78414937709e-02 -2.46646721795e-01
+ 718 1.62963253980e-01 9.76873861359e-02 -2.49777410849e-01
+ 719 9.72818298949e-02 1.57209217564e-01 -2.60797131680e-01
+ 720 1.34082367597e-01 9.69881460265e-02 -2.74786669257e-01
+ 721 1.69507314253e-01 1.16330310702e-01 -2.93552676569e-01
+ 722 1.35457958644e-01 1.74249098132e-02 -2.70010199521e-01
+ 723 2.40183352058e-01 -2.43487034284e-02 -7.93428012042e-01
+ 724 1.10275028088e-01 -3.65230551426e-02 -7.75142018062e-01
+ 725 1.79056295032e-01 -1.54277038301e-01 -8.30000000000e-01
+ 726 1.80137514044e-01 -1.43261527571e-01 -8.02571009031e-01
+ 727 7.35166853917e-02 -1.91015370095e-01 -7.93428012042e-01
+ 728 3.41690585539e-01 -5.51074976912e-02 -7.75142018062e-01
+ 729 2.27793723693e-01 -2.03404998461e-01 -7.93428012042e-01
+ 730 9.16905855390e-02 -3.05107497691e-01 -7.75142018062e-01
+ 731 2.50000000000e-01 -2.50000000000e-01 -8.30000000000e-01
+ 732 1.88991823557e-01 -1.78437398106e-01 -5.22822641660e-01
+ 733 2.37730735051e-01 -1.24292987592e-01 -4.90499805556e-01
+ 734 2.45568808294e-01 -1.63389668078e-01 -4.89285544611e-01
+ 735 2.25118389169e-01 -2.10010213578e-01 -5.04839832191e-01
+ 736 2.11107742595e-01 -1.72156669784e-01 -5.53885421956e-01
+ 737 2.36228377245e-01 -1.38153972216e-01 -5.21982604454e-01
+ 738 2.42482521629e-01 -1.64011236424e-01 -5.13201209021e-01
+ 739 2.27820146657e-01 -1.95298789540e-01 -5.31542622211e-01
+ 740 2.60312754320e-01 -1.59202515864e-01 -5.09994064808e-01
+ 741 2.47234308207e-01 -2.03729485257e-01 -5.35902612486e-01
+ 742 2.59846654089e-01 -1.18012259271e-01 -5.21562585851e-01
+ 743 2.33223661633e-01 -1.65875941463e-01 -5.84948202251e-01
+ 744 4.24091518093e-01 2.82869754751e-01 -6.74853140764e-01
+ 745 3.86137277139e-01 1.74304632126e-01 -5.97279711145e-01
+ 746 4.43068638570e-01 2.12152316063e-01 -7.13639855573e-01
+ 747 4.24091518093e-01 1.16203088084e-01 -6.74853140764e-01
+ 748 5.00000000000e-01 3.35327737167e-01 -6.54971897129e-01
+ 749 5.00000000000e-01 2.23551824778e-01 -7.13314598086e-01
+ 750 5.00000000000e-01 8.53277371669e-02 -6.54971897129e-01
+ 751 3.42193386364e-01 5.00000000000e-01 -6.54982444962e-01
+ 752 2.28128924243e-01 5.00000000000e-01 -7.13321629974e-01
+ 753 2.50000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 754 3.93650232275e-01 4.33069970915e-01 -7.26163120282e-01
+ 755 3.23895745759e-01 4.55379980610e-01 -6.44097043496e-01
+ 756 2.42921809320e-01 4.66534985457e-01 -6.90572782622e-01
+ 757 2.62433488183e-01 4.55379980610e-01 -7.60775413522e-01
+ 758 9.21933863641e-02 5.00000000000e-01 -6.54982444962e-01
+ 759 1.57229079093e-01 4.55379980610e-01 -6.44097043496e-01
+ 760 1.43650232275e-01 4.33069970915e-01 -7.26163120282e-01
+ 761 2.35843618639e-01 4.33069970915e-01 -5.51145565244e-01
+ 762 -8.66155000354e-02 1.52529408953e-01 -4.48851958727e-01
+ 763 -1.06740310287e-01 1.67047683914e-01 -4.45335529895e-01
+ 764 -1.32063212026e-01 1.56315171682e-01 -4.42488736293e-01
+ 765 -8.04289915142e-02 1.54651048540e-01 -4.13715251405e-01
+ 766 -9.70692263330e-02 1.65009344865e-01 -4.19862106611e-01
+ 767 -1.10727466174e-01 1.57174890360e-01 -4.09473103116e-01
+ 768 -1.87028684656e-01 2.70275462187e-01 -4.10196314978e-01
+ 769 -1.58874673815e-01 2.87418907892e-01 -4.58998874553e-01
+ 770 -1.31797914050e-01 3.08229556769e-01 -4.53495852768e-01
+ 771 -1.54009553378e-01 2.45418774037e-01 -3.94345192032e-01
+ 772 -1.73682433367e-01 2.45545052737e-01 -4.19565100729e-01
+ 773 -1.55903488059e-01 2.64585239378e-01 -4.53824823973e-01
+ 774 -1.36861919630e-01 2.70847782459e-01 -4.48431459256e-01
+ 775 -1.57797422739e-01 2.83751704720e-01 -5.13304455913e-01
+ 776 -1.54194925422e-01 2.54529214426e-01 -4.88303861352e-01
+ 777 9.57698966038e-02 -4.02176624633e-02 -3.95464918307e-01
+ 778 1.08352729656e-01 -1.38138601027e-02 -4.16469704772e-01
+ 779 9.94530337237e-02 1.04292102279e-02 -4.04200315646e-01
+ 780 1.36535557345e-01 -2.07946606060e-02 -3.26343548999e-01
+ 781 1.33074412070e-01 -3.46297739919e-02 -3.64565193675e-01
+ 782 1.33185407992e-01 -1.62238943393e-02 -3.88043714682e-01
+ 783 1.35529836816e-01 -8.65192197802e-04 -3.70388791901e-01
+ 784 1.29835258639e-01 -1.16531280726e-02 -4.49743880364e-01
+ 785 1.33518395759e-01 3.89937446186e-02 -4.58479277703e-01
+ 786 1.55784653427e-01 -1.55867510648e-02 -4.00751168380e-01
+ 787 1.70600919380e-01 7.76987378468e-03 -3.80622511056e-01
+ 788 1.66917782261e-01 -4.28769989065e-02 -3.71887113718e-01
+ 789 1.26152121519e-01 -6.23000007638e-02 -4.41008483026e-01
+ 790 -4.29395129603e-02 -1.24276349928e-03 -4.57412391163e-01
+ 791 -9.84953320487e-02 -2.28665383279e-02 -4.41404824876e-01
+ 792 -1.01742360156e-01 1.16789999482e-03 -4.25838392116e-01
+ 793 -7.55879646660e-02 2.39970065705e-02 -4.26058958880e-01
+ 794 -1.10870480674e-01 8.88613253054e-03 -4.71093572846e-01
+ 795 -1.25264037495e-01 -8.90601603178e-03 -4.55861468094e-01
+ 796 -1.21007132214e-01 5.62968213621e-03 -4.40572482719e-01
+ 797 -1.09992459240e-01 2.23363472338e-02 -4.45630890763e-01
+ 798 -1.31143783754e-01 2.37323174188e-03 -4.10051392593e-01
+ 799 -1.47029671965e-01 7.92049734804e-03 -4.34959179905e-01
+ 800 -1.43518932380e-01 3.41259026003e-02 -4.39740140562e-01
+ 801 -1.66426299762e-01 -1.27376422980e-02 -4.55086006559e-01
+ 802 -1.54051151137e-01 -4.44903131564e-02 -4.25397258589e-01
+ 803 -1.14924434811e-01 2.34526379330e-01 1.52964405963e-02
+ 804 -1.82238899753e-01 1.99938630357e-01 -1.74153820380e-02
+ 805 -2.09318895322e-01 2.17614496429e-01 2.10582093056e-02
+ 806 -1.89201660636e-01 2.43746303951e-01 5.66509162947e-02
+ 807 -1.74841133983e-01 2.62207218665e-01 -7.18305033607e-02
+ 808 -1.99745210887e-01 2.29921772905e-01 -6.45960704646e-02
+ 809 -2.15678629780e-01 2.35682886822e-01 -2.39457048502e-02
+ 810 -2.04387051475e-01 2.59126888635e-01 -1.52185382428e-02
+ 811 -1.81866713703e-01 1.17392381950e-02 -2.22099021417e-01
+ 812 -1.35644195646e-01 3.32840534683e-03 -2.39048007455e-01
+ 813 -1.36756441774e-01 2.82426019122e-02 -2.61813765058e-01
+ 814 -1.60423823866e-01 4.49051166189e-02 -2.64722150840e-01
+ 815 -1.38961778261e-01 7.03547103514e-02 -2.22054125117e-01
+ 816 -1.22448411370e-01 4.52089977338e-02 -2.33368414576e-01
+ 817 -1.26581542035e-01 5.34244970611e-02 -2.51862630998e-01
+ 818 -1.38968163516e-01 7.29268052486e-02 -2.50484510166e-01
+ 819 -1.14201305809e-01 3.64942837708e-02 -2.81671136878e-01
+ 820 -1.38980934028e-01 7.80709950429e-02 -3.07345280263e-01
+ 821 -1.08153151478e-01 6.73195833498e-02 -2.61783834191e-01
+ 822 -1.17518888423e-01 1.03520588775e-01 -2.64677254540e-01
+ 823 -9.27392602037e-02 6.19438775033e-02 -2.39003111155e-01
+ 824 -9.60568428179e-02 1.28970182508e-01 -2.22009228817e-01
+ 825 -1.44171839659e-01 2.86259799356e-01 -2.22490749148e-01
+ 826 -1.94517920720e-01 2.54142785421e-01 -2.01972451964e-01
+ 827 -1.20106976241e-01 2.23170450383e-01 -1.75666283783e-01
+ 828 -9.45645433396e-02 2.65611575997e-01 -2.04953303694e-01
+ 829 -1.29612865793e-01 2.71680696498e-01 -1.93454339600e-01
+ 830 -1.58323928546e-01 2.45409652922e-01 -1.70096671628e-01
+ 831 -1.21391151629e-01 2.89441757717e-01 -1.76276633930e-01
+ 832 -1.60346888676e-01 2.58915722963e-01 -1.32651279137e-01
+ 833 -6.47078108668e-02 2.89218607575e-01 -1.84936227236e-01
+ 834 -8.59359441975e-02 2.27943387925e-01 -1.06345110956e-01
+ 835 -9.38553341989e-02 3.64434838736e-03 -7.47767381382e-01
+ 836 -1.53255657427e-01 -6.63785092939e-02 -7.42580292812e-01
+ 837 2.41072741431e-04 -5.70304713129e-02 -7.65339994385e-01
+ 838 -7.47991360040e-02 -4.79803769828e-02 -7.32071583845e-01
+ 839 -1.24113427974e-01 -8.75913389012e-02 -7.32105216801e-01
+ 840 -9.05247194665e-02 -1.06828389094e-01 -7.54295368147e-01
+ 841 -2.48467928689e-01 -1.18152206489e-01 -6.98870439218e-01
+ 842 -1.77874198997e-01 -1.29178080234e-01 -6.99473622402e-01
+ 843 -1.54371521748e-01 -1.78827026190e-01 -7.16443052220e-01
+ 844 -1.30783146555e-01 -9.05550080228e-02 -6.83107375767e-01
+ 845 -3.66867396143e-02 -1.51229827723e-01 -7.00679988769e-01
+ 846 -2.24879553495e-01 -2.98801883225e-02 -6.65534762764e-01
+ 847 -2.39145240557e-01 1.65263141349e-01 -4.15498157275e-01
+ 848 -2.26139035013e-01 1.24208786006e-01 -4.12874852882e-01
+ 849 -2.57106225052e-01 1.23927239508e-01 -4.01066032852e-01
+ 850 -2.79092922843e-01 1.44313643930e-01 -3.96473275034e-01
+ 851 -2.70863662377e-01 1.58684333052e-01 -4.45380435924e-01
+ 852 -2.51620051407e-01 1.33507698923e-01 -4.33670806779e-01
+ 853 -2.68475189838e-01 1.30971810820e-01 -4.19615203282e-01
+ 854 -2.86922643294e-01 1.46910937538e-01 -4.22736421547e-01
+ 855 -2.66086717299e-01 1.03259288588e-01 -3.93849970640e-01
+ 856 -3.19040605130e-01 1.23364146512e-01 -3.77448392793e-01
+ 857 -2.78251839598e-01 1.19541367310e-01 -4.20987551951e-01
+ 858 -3.10811344663e-01 1.37734835633e-01 -4.26355553683e-01
+ 859 -2.57857456832e-01 1.17629977710e-01 -4.42757131530e-01
+ 860 -3.02582084196e-01 1.52105524755e-01 -4.75262714573e-01
+ 861 -1.70820809933e-01 -1.61702940274e-01 -4.08562905441e-01
+ 862 -1.62435980535e-01 -1.03096626715e-01 -4.16980082015e-01
+ 863 -1.53057697225e-01 -1.25010119086e-01 -4.43990000723e-01
+ 864 -1.52560970269e-01 -1.65270022050e-01 -4.53286371789e-01
+ 865 -2.18227702655e-01 -1.26029866701e-01 -4.13365015970e-01
+ 866 -1.96835518816e-01 -9.88500155195e-02 -4.17375763510e-01
+ 867 -1.81201921763e-01 -1.16346787596e-01 -4.37534282167e-01
+ 868 -1.90252178639e-01 -1.40298945743e-01 -4.41579956693e-01
+ 869 -1.44176140871e-01 -1.06663708492e-01 -4.61703548364e-01
+ 870 -1.34301130605e-01 -1.68837103827e-01 -4.98009838138e-01
+ 871 -1.84662292373e-01 -1.01228070037e-01 -4.47191407742e-01
+ 872 -1.99967862992e-01 -1.29596948478e-01 -4.58088482318e-01
+ 873 -2.09842873257e-01 -6.74235531424e-02 -4.21782192544e-01
+ 874 -2.06820029203e-01 2.05411730417e-01 -1.97202703113e-01
+ 875 -2.14236350914e-01 2.19960780708e-01 -2.33052707959e-01
+ 876 -2.18533324728e-01 1.91957990634e-01 -2.21705332322e-01
+ 877 -1.92851127227e-01 1.63173566625e-01 -2.16325331010e-01
+ 878 -2.13125155252e-01 1.59314634845e-01 -2.42621293990e-01
+ 879 -2.03975609794e-01 1.84997142062e-01 -2.70100338280e-01
+ 880 -3.30962308320e-01 9.33655042590e-02 -6.91739835879e-01
+ 881 -3.25953566733e-01 1.26675140653e-01 -6.65498786100e-01
+ 882 -3.70745388611e-01 1.13135067415e-01 -6.58804499055e-01
+ 883 -2.67938088978e-01 1.68900187538e-01 -6.10665048133e-01
+ 884 -3.06118082916e-01 1.69702601122e-01 -5.73206748583e-01
+ 885 -2.46443462479e-01 1.40048256388e-01 -6.22609753819e-01
+ 886 4.09100602978e-02 4.10852899651e-01 -5.18284441813e-01
+ 887 -2.46661421974e-02 4.40568599767e-01 -4.97891638050e-01
+ 888 -1.29192599660e-01 4.10852899651e-01 -5.06855012113e-01
+ 889 -6.69355078358e-02 3.05957889324e-01 -4.80019599973e-01
+ 890 1.68385856856e-02 3.70638592882e-01 -4.80001363290e-01
+ 891 -2.63256975327e-02 4.02978944662e-01 -4.74277530098e-01
+ 892 -9.65631876197e-02 3.70638592882e-01 -4.72381743490e-01
+ 893 -4.52492814594e-02 1.49017779852e-01 -4.48454084368e-01
+ 894 -2.49797195889e-02 1.57515988022e-01 -4.24843260286e-01
+ 895 -9.42232597864e-03 1.42017627842e-01 -4.11750331879e-01
+ 896 -3.79750325396e-05 1.50810750517e-01 -4.73805627439e-01
+ 897 -1.87234856248e-02 1.63378069805e-01 -4.66213457326e-01
+ 898 -1.01527631805e-02 1.66161653444e-01 -4.44065496024e-01
+ 899 5.16115136241e-03 1.58711301798e-01 -4.41744289000e-01
+ 900 -2.02675513285e-02 1.81512556371e-01 -4.14325364610e-01
+ 901 1.55594041523e-02 1.74512404361e-01 -3.77621612121e-01
+ 902 -2.06899887083e-03 1.85041254151e-01 -4.43460977487e-01
+ 903 2.49437550984e-02 1.83305527036e-01 -4.39676907681e-01
+ 904 -1.08832003824e-02 1.90305679045e-01 -4.76380660170e-01
+ 905 -1.85701863769e-02 1.75941850917e-01 -5.21752699286e-01
+ 906 -4.65690082955e-02 2.24529833712e-01 -5.33369797424e-01
+ 907 -6.37814928038e-02 1.74148880252e-01 -4.96401156214e-01
+ 908 -3.10782931877e-02 1.80132136738e-01 -4.98178171890e-01
+ 909 -4.89503829240e-02 2.15525552379e-01 -5.12784627343e-01
+ 910 -7.67098792468e-02 2.23334519936e-01 -5.16468768710e-01
+ 911 -3.41192730441e-02 2.56902224506e-01 -5.29168098472e-01
+ 912 -4.14443509659e-02 2.34105719131e-01 -5.03121771347e-01
+ 913 -7.93305794710e-02 2.55109253841e-01 -5.03816555400e-01
+ 914 -5.39890139057e-02 1.52606870609e-01 -4.79560454688e-01
+ 915 -5.29362674539e-02 1.34653951724e-01 -4.93826123483e-01
+ 916 -3.19097339182e-02 1.62479815385e-01 -4.85103391827e-01
+ 917 -2.38481429544e-02 1.53802184386e-01 -4.96461483403e-01
+ 918 6.18810327157e-02 2.30924741635e-01 -5.08258014633e-01
+ 919 9.70847227216e-02 2.16900072300e-01 -4.88723458946e-01
+ 920 8.50310836450e-02 2.39321367241e-01 -4.33618545998e-01
+ 921 1.05646338417e-01 2.26703708839e-01 -4.37627496392e-01
+ 922 -1.14079648663e-01 -8.88087504252e-02 -2.09727235021e-01
+ 923 -1.11334386591e-01 -3.15373553532e-02 -1.81149592007e-01
+ 924 -1.34845162295e-01 -1.71118241705e-02 -1.94799401810e-01
+ 925 -1.47973181183e-01 -3.85347561151e-02 -2.15913128219e-01
+ 926 -1.49183793706e-01 -7.68033440145e-02 -1.74633087386e-01
+ 927 -1.35652237310e-01 -4.26242161034e-02 -1.67279374588e-01
+ 928 -1.47205856408e-01 -2.90333525288e-02 -1.80984286296e-01
+ 929 -1.60078100371e-01 -4.72891499447e-02 -1.90455065396e-01
+ 930 -1.45227919111e-01 1.87366389569e-02 -1.87335485205e-01
+ 931 -1.58247925657e-01 -9.10821989667e-03 -1.71403303387e-01
+ 932 -1.83077326226e-01 -2.65293497044e-02 -1.80818980584e-01
+ 933 -1.46438531633e-01 -1.95319489425e-02 -1.46055444372e-01
+ 934 -1.84287938748e-01 -6.47979376038e-02 -1.39538939751e-01
+ 935 -1.08589124519e-01 2.57340397188e-02 -1.52571948993e-01
+ 936 7.21966862530e-02 2.23729794328e-01 -2.25530652756e-01
+ 937 8.94108912239e-02 2.12507451799e-01 -1.60852354957e-01
+ 938 6.26298195682e-02 3.15819862885e-01 -1.50650843542e-01
+ 939 7.79321899676e-02 2.84380588849e-01 -1.20862072496e-01
+ 940 6.84507440842e-02 1.90703868472e-01 -9.91087280714e-02
+ 941 6.01325247889e-02 2.93802578981e-01 -6.63695604189e-02
+ 942 2.82791366005e-02 3.45672485101e-01 -8.38064609493e-02
+ 943 1.30621870026e-02 1.91344970203e-01 -1.66721696785e-01
+ 944 7.67493621088e-02 1.06028867480e-01 -4.15885518975e-01
+ 945 6.26089434207e-02 1.34718794890e-01 -4.44501080397e-01
+ 946 1.09930713620e-01 1.22415430162e-01 -4.60906651265e-01
+ 947 8.73171645811e-02 1.10996332529e-01 -4.57977936324e-01
+ 948 7.40698999470e-02 1.31271911824e-01 -4.68916503053e-01
+ 949 8.47298444283e-02 1.45643170012e-01 -4.74515168591e-01
+ 950 3.82090862737e-02 1.40128393486e-01 -4.76926354841e-01
+ 951 6.16236473577e-02 1.33729349866e-01 -4.98671826901e-01
+ 952 7.13904377851e-02 1.56514956169e-01 -5.21947487131e-01
+ 953 7.52714180143e-02 1.04544699944e-01 -4.97141638731e-01
+ 954 1.08452769526e-01 1.20931262627e-01 -5.42162771021e-01
+ 955 4.20900665028e-02 8.81581372617e-02 -4.52120506442e-01
+ 956 4.37830002921e-01 2.45477919040e-02 -3.20170499159e-01
+ 957 4.53372502191e-01 4.15263288209e-02 -2.49038674664e-01
+ 958 5.00000000000e-01 1.97167035122e-02 -2.19253532653e-01
+ 959 1.65238026849e-01 -1.15646918094e-01 -4.25866187968e-01
+ 960 1.49897693781e-01 -1.22224874161e-01 -4.13255965411e-01
+ 961 1.22684574582e-01 -9.88403935294e-02 -4.14522001662e-01
+ 962 1.28725196032e-01 -1.02918108966e-01 -4.63341537565e-01
+ 963 1.53924774748e-01 -1.24943351119e-01 -4.45802322680e-01
+ 964 1.45247837972e-01 -1.27552709913e-01 -4.31360622084e-01
+ 965 1.25555806570e-01 -1.13739001409e-01 -4.38239531809e-01
+ 966 1.61770479912e-01 -1.52187310860e-01 -3.99379706604e-01
+ 967 1.19217027646e-01 -1.35380786295e-01 -3.88035520298e-01
+ 968 1.51613076790e-01 -1.49303612963e-01 -4.28144668437e-01
+ 969 1.25257649096e-01 -1.39458501732e-01 -4.36855056201e-01
+ 970 1.67811101362e-01 -1.56265026297e-01 -4.48199242506e-01
+ 971 1.31298270546e-01 -1.43536217169e-01 -4.85674592103e-01
+ 972 1.33307312004e-02 1.35761382992e-01 -6.27263256459e-01
+ 973 2.38294186225e-02 1.63930016351e-01 -5.64497729850e-01
+ 974 2.06374460285e-02 1.33349773079e-01 -5.50828917101e-01
+ 975 1.37921160205e-02 1.03975334764e-01 -5.75377274031e-01
+ 976 6.08917503631e-02 1.28346322809e-01 -5.84713013740e-01
+ 977 5.20372022569e-02 1.49597098443e-01 -5.57052743574e-01
+ 978 4.25912769028e-02 1.30245145466e-01 -5.48662380581e-01
+ 979 4.53456671889e-02 1.09627310718e-01 -5.64305773028e-01
+ 980 2.42908034426e-02 1.32143968123e-01 -5.12611747422e-01
+ 981 1.42535008407e-02 7.21892865353e-02 -5.23491291602e-01
+ 982 5.23447921370e-02 1.28406399624e-01 -5.22462088622e-01
+ 983 6.13531351832e-02 9.65602745811e-02 -5.32827031312e-01
+ 984 -6.56187867021e-02 -5.24137431399e-02 -5.95554776140e-01
+ 985 -1.22210117545e-01 -1.66993572897e-02 -5.40164765335e-01
+ 986 -1.60294677240e-01 -4.65980711724e-02 -5.40890728255e-01
+ 987 -1.51041291667e-01 -7.94046210388e-02 -5.68948715118e-01
+ 988 -1.09834968920e-01 -4.84520281481e-02 -5.10476017365e-01
+ 989 -1.32823795409e-01 -2.59630092453e-02 -5.01908929753e-01
+ 990 -1.58733795714e-01 -4.60711316684e-02 -5.12017360838e-01
+ 991 -1.52044578157e-01 -6.77665184113e-02 -5.21098229608e-01
+ 992 -2.07632622509e-01 -4.36902351887e-02 -5.13558704312e-01
+ 993 -2.36463796631e-01 -1.06395498938e-01 -5.42342654095e-01
+ 994 -1.89772132052e-01 -4.39569278446e-02 -4.84171555738e-01
+ 995 -1.95257473884e-01 -7.54429060471e-02 -4.83869956342e-01
+ 996 -1.59436481837e-01 -2.32533342823e-01 -4.12199786808e-01
+ 997 -1.82292532565e-01 -2.16757818407e-01 -3.92103404413e-01
+ 998 -1.99412721977e-01 -1.73454854924e-01 -3.80236772532e-01
+ 999 -2.13492717346e-01 -1.85205598190e-01 -4.28832995987e-01
+ 1000 -1.91679196145e-01 -2.24591647251e-01 -4.24500886717e-01
+ 1001 -2.00760555614e-01 -2.14745427831e-01 -4.06353324943e-01
+ 1002 -2.18330022905e-01 -1.85205988651e-01 -4.03192210532e-01
+ 1003 -1.88028393881e-01 -2.44285257473e-01 -3.83873653899e-01
+ 1004 -2.10740470841e-01 -2.32426257017e-01 -4.05616798110e-01
+ 1005 -2.02108389250e-01 -2.56036000739e-01 -4.32469877354e-01
+ 1006 -2.38427271556e-01 -2.55727478084e-01 -5.15384938632e-01
+ 1007 -2.03718557906e-01 -2.26764019999e-01 -5.09593238468e-01
+ 1008 -1.77495524479e-01 -2.35791901945e-01 -5.39838314435e-01
+ 1009 -2.28576857492e-01 -2.04571099500e-01 -5.62004722413e-01
+ 1010 -2.37772779914e-01 -2.05950151702e-01 -5.24370843787e-01
+ 1011 -2.11904867587e-01 -1.96671889733e-01 -5.17780592374e-01
+ 1012 -1.97151615196e-01 -1.92659767609e-01 -5.40673094322e-01
+ 1013 -1.95232877682e-01 -1.88772679966e-01 -4.73556462335e-01
+ 1014 -2.08976517332e-01 -1.61313619624e-01 -4.96485192922e-01
+ 1015 -1.85382463618e-01 -1.37616301382e-01 -5.20176246116e-01
+ 1016 -2.46314210696e-01 -1.57551877522e-01 -4.95722870314e-01
+ 1017 -1.66723564742e-01 5.04687452882e-02 -4.29910609871e-01
+ 1018 -1.60684622920e-01 6.61956036521e-02 -4.02478537542e-01
+ 1019 -1.83591990303e-01 1.93320587537e-02 -4.17824403539e-01
+ 1020 -1.81995142998e-01 1.92263820226e-02 -4.40141187202e-01
+ 1021 -1.63555461341e-01 2.67289806770e-02 -4.28782272050e-01
+ 1022 -1.58473465659e-01 2.93002980492e-02 -4.10118111224e-01
+ 1023 -5.00000000000e-01 -2.50000000000e-01 -8.30000000000e-01
+ 1024 -3.33333333333e-01 -3.33333333333e-01 -8.30000000000e-01
+ 1025 -4.24018767961e-01 -2.35474741552e-01 -7.97402038557e-01
+ 1026 -3.18014075971e-01 -3.01606056164e-01 -8.05551528918e-01
+ 1027 3.23895745759e-01 4.55379980610e-01 -4.56822527548e-01
+ 1028 3.09453687390e-01 4.20058946474e-01 -4.31898247098e-01
+ 1029 3.03915381680e-01 4.06579195313e-01 -4.79505245465e-01
+ 1030 2.38553842240e-01 3.75438927083e-01 -5.49948176568e-01
+ 1031 2.14180531086e-01 3.80088419711e-01 -5.13759144569e-01
+ 1032 -2.06746997054e-01 2.74154924570e-01 -5.71689815232e-01
+ 1033 -2.08840729151e-01 2.64702486426e-01 -5.37794849529e-01
+ 1034 -2.09738300326e-01 3.33917547879e-01 -5.09875348338e-01
+ 1035 -2.43467980875e-01 2.98146381865e-01 -5.35508777812e-01
+ 1036 -2.35858033993e-01 2.85059188933e-01 -5.19132812890e-01
+ 1037 -2.10834931332e-01 3.04544235299e-01 -4.96585204933e-01
+ 1038 -2.61977767660e-01 2.36200829988e-01 -5.28390277443e-01
+ 1039 -2.80288494613e-01 2.72843652143e-01 -5.06642419286e-01
+ 1040 -2.64969070932e-01 2.95963453297e-01 -4.66575810549e-01
+ 1041 -3.13918645246e-01 2.86366673146e-01 -5.24961169868e-01
+ 1042 -1.13107823432e-01 2.60349175806e-01 -3.97375196770e-01
+ 1043 -9.61667697530e-02 2.92481646790e-01 -3.76911459039e-01
+ 1044 -9.36203154870e-02 2.69333337495e-01 -4.66113957393e-01
+ 1045 -1.10472530607e-01 2.75688331680e-01 -4.37182396003e-01
+ 1046 -9.83000638796e-02 3.02223030961e-01 -4.36808970593e-01
+ 1047 3.38749614574e-01 2.02928701224e-01 -5.80704273835e-01
+ 1048 2.58124421861e-01 2.19065314670e-01 -6.31084513624e-01
+ 1049 2.62037404889e-01 1.35329128740e-01 -6.37351596188e-01
+ 1050 3.41358269926e-01 1.47104577271e-01 -5.84882328878e-01
+ 1051 3.17012274805e-01 1.75372642809e-01 -5.75550096462e-01
+ 1052 2.56016366407e-01 1.76945032301e-01 -6.07418863864e-01
+ 1053 3.31924848314e-01 1.74512260439e-01 -5.29194919272e-01
+ 1054 2.47887272471e-01 1.76440653492e-01 -5.53820481779e-01
+ 1055 3.75900127749e-01 1.31679970948e-01 -5.20015679301e-01
+ 1056 2.51800255499e-01 9.27044675623e-02 -5.60087564344e-01
+ 1057 3.94795590909e-01 5.00000000000e-01 -5.26047114026e-01
+ 1058 5.00000000000e-01 5.00000000000e-01 -5.49088226078e-01
+ 1059 3.67921809320e-01 4.66534985457e-01 -5.50116895661e-01
+ 1060 4.29100154850e-01 4.55379980610e-01 -5.73500897573e-01
+ 1061 5.00000000000e-01 -9.84772225671e-02 -6.73752900547e-01
+ 1062 4.42555469443e-01 -1.48644640217e-01 -6.72300463565e-01
+ 1063 4.13833204165e-01 -2.22966960326e-01 -5.93450695347e-01
+ 1064 4.03681649942e-01 -1.12234411896e-01 -5.70595194002e-01
+ 1065 4.35787766628e-01 -7.48229412641e-02 -6.57063462668e-01
+ 1066 4.08757427054e-01 -1.18362074827e-01 -6.60146494401e-01
+ 1067 3.78343236072e-01 -1.57816099770e-01 -6.03528659202e-01
+ 1068 4.13833204165e-01 -1.24489737758e-01 -7.49697794800e-01
+ 1069 3.78343236072e-01 -9.21646180583e-02 -7.07693392170e-01
+ 1070 3.17514854107e-01 -1.38246927087e-01 -6.46540088255e-01
+ 1071 4.03681649942e-01 -1.37571893290e-02 -7.26842293455e-01
+ 1072 1.84236456340e-01 -1.26966682297e-01 -5.33664078882e-01
+ 1073 1.70963489205e-01 -1.25596943386e-01 -5.51784514843e-01
+ 1074 1.66704689245e-01 -1.50647431835e-01 -5.55424014213e-01
+ 1075 1.60145047051e-01 -1.60986807637e-01 -5.04248616882e-01
+ 1076 1.66590394409e-01 -1.32489860587e-01 -5.17667583289e-01
+ 1077 1.61047184540e-01 -1.30081761832e-01 -5.35257034158e-01
+ 1078 1.54902549679e-01 -1.48277026947e-01 -5.32174206843e-01
+ 1079 1.61949322029e-01 -9.91767160265e-02 -5.66265451434e-01
+ 1080 1.44417554934e-01 -1.22857465565e-01 -5.88025386765e-01
+ 1081 1.51732304868e-01 -1.13963216407e-01 -5.39401831657e-01
+ 1082 1.37857912740e-01 -1.33196841367e-01 -5.36849989434e-01
+ 1083 1.55389679835e-01 -1.09516091828e-01 -5.15090054103e-01
+ 1084 1.79481089123e-01 -7.54959664876e-02 -5.44505516103e-01
+ 1085 2.45684452638e-03 -2.80411485324e-01 -4.25437227085e-01
+ 1086 8.03579564624e-03 -3.90205742662e-01 -4.58666535135e-01
+ 1087 -2.13359380272e-02 -3.60030354676e-01 -4.82130308333e-01
+ 1088 -3.88112804238e-02 -2.90045532015e-01 -4.77247540907e-01
+ 1089 1.08775623863e-02 -2.54066799918e-01 -4.82532152860e-01
+ 1090 1.17899571796e-02 -3.36044533279e-01 -4.85653382968e-01
+ 1091 -1.11773834588e-02 -3.26953294636e-01 -4.96504500908e-01
+ 1092 -1.94414268671e-02 -2.69271059514e-01 -4.98040720150e-01
+ 1093 -3.32323293039e-02 -3.99839789353e-01 -5.10476848957e-01
+ 1094 -8.00794053739e-02 -2.99679578706e-01 -5.29057854729e-01
+ 1095 -1.57221261205e-02 -3.42467231073e-01 -5.20193592183e-01
+ 1096 -3.03905625638e-02 -2.63700846609e-01 -5.34342466682e-01
+ 1097 1.64565135062e-02 -3.63861057257e-01 -5.15761460910e-01
+ 1098 1.92982802463e-02 -2.27722114513e-01 -5.39627078635e-01
+ 1099 2.79581777692e-01 3.25950444522e-02 -5.91886075627e-01
+ 1100 2.81877733976e-01 -1.65282939134e-03 -5.47316373568e-01
+ 1101 2.69134951022e-01 1.12779452419e-02 -5.09132266898e-01
+ 1102 2.12853941762e-01 5.42720554759e-02 -5.58872458673e-01
+ 1103 2.44357061136e-01 2.70099107646e-02 -5.80476501419e-01
+ 1104 2.54885207489e-01 2.72028880385e-03 -5.49901618427e-01
+ 1105 2.37392510023e-01 1.27985112911e-02 -5.25307295599e-01
+ 1106 2.96916473215e-01 -4.88314778682e-02 -5.40930778181e-01
+ 1107 2.55913524819e-01 -2.72744374490e-02 -5.46506303121e-01
+ 1108 2.30188637286e-01 -2.71544668445e-02 -5.07917161227e-01
+ 1109 2.40635463955e-01 -5.83736763425e-03 -5.90670969956e-01
+ 1110 1.73907628026e-01 1.58396433894e-02 -5.57657353003e-01
+ 1111 2.08762785611e-01 -1.76235486795e-02 -6.03696693760e-01
+ 1112 2.43422194504e-01 -5.15051725727e-02 -5.84095051506e-01
+ 1113 2.20250672345e-01 -2.90569005854e-02 -5.75282485338e-01
+ 1114 2.01442361489e-01 -3.20916531315e-02 -5.88898899346e-01
+ 1115 2.10620605976e-01 -4.80687519718e-02 -5.99312748127e-01
+ 1116 1.59462528473e-01 -1.26781336903e-02 -5.93702747185e-01
+ 1117 1.66135382023e-01 -3.36174112894e-02 -5.77303670158e-01
+ 1118 1.62249259022e-01 -5.83459386288e-02 -5.87126828735e-01
+ 1119 1.76694358575e-01 -2.98281615491e-02 -5.51081434553e-01
+ 1120 9.49639666504e-02 -1.55562189595e-01 -5.24966146881e-02
+ 1121 1.51447973471e-01 -1.22555460925e-01 -1.11907113773e-01
+ 1122 2.67631982314e-01 -1.49692741739e-01 -1.21995943356e-01
+ 1123 2.97481983325e-01 -1.79764746482e-01 -9.73351086051e-02
+ 1124 1.33403558665e-01 -1.93771461550e-01 -1.67347006361e-01
+ 1125 1.58246365874e-01 -1.59030551785e-01 -1.68670541860e-01
+ 1126 2.43684774405e-01 -1.70264739681e-01 -1.62046307025e-01
+ 1127 2.55602372443e-01 -1.97170075490e-01 -1.58955871748e-01
+ 1128 3.53965990146e-01 -1.46758017812e-01 -1.56745607690e-01
+ 1129 2.93258376990e-01 -1.75165589709e-01 -1.98562871138e-01
+ 1130 3.35921575340e-01 -2.17974018437e-01 -2.12185500278e-01
+ 1131 1.89887565486e-01 -1.60764732880e-01 -2.26757505445e-01
+ 1132 1.71843150680e-01 -2.31980733505e-01 -2.82197398033e-01
+ 1133 2.07931980291e-01 -8.95487322546e-02 -1.71317612858e-01
+ 1134 -1.52528147978e-01 -1.66566856116e-01 -3.32522791242e-01
+ 1135 -1.74547658212e-01 -1.31945887323e-01 -3.00543321316e-01
+ 1136 -1.54245239976e-01 -1.12116390988e-01 -3.13329244073e-01
+ 1137 -1.33084275742e-01 -1.19512127218e-01 -3.35711940414e-01
+ 1138 -1.78696549252e-01 -1.05760893172e-01 -3.30976215395e-01
+ 1139 -1.84653422316e-01 -1.02948901625e-01 -3.10172094060e-01
+ 1140 -1.66900167614e-01 -9.53260257983e-02 -3.17354342942e-01
+ 1141 -1.57011167336e-01 -9.46597282211e-02 -3.33617840126e-01
+ 1142 -1.55103785976e-01 -8.48911584249e-02 -3.03732470488e-01
+ 1143 -1.13640403506e-01 -7.24573983198e-02 -3.38901089586e-01
+ 1144 -1.71690840826e-01 -7.15790823592e-02 -3.12298193508e-01
+ 1145 -1.59252677016e-01 -5.87061642738e-02 -3.34165364568e-01
+ 1146 -3.04939416676e-01 1.63836909000e-01 -5.40558737246e-01
+ 1147 -3.06754713085e-01 1.89354787296e-01 -5.31019175667e-01
+ 1148 -4.05463670987e-01 1.98629762085e-01 -5.33359715509e-01
+ 1149 -3.70745388611e-01 1.70020225526e-01 -5.42119097141e-01
+ 1150 -3.53704562507e-01 1.65541550333e-01 -5.25405001499e-01
+ 1151 -3.71169808724e-01 1.83121682975e-01 -5.13994048531e-01
+ 1152 -3.01945454027e-01 1.32453338581e-01 -5.17450287489e-01
+ 1153 -3.67963636018e-01 1.45187383832e-01 -5.04948123078e-01
+ 1154 -4.01291042098e-01 1.61380499544e-01 -4.77603254415e-01
+ 1155 -4.08162963204e-01 -1.80073680288e-01 -4.21676842510e-01
+ 1156 -3.98957616349e-01 -1.26795364564e-01 -3.85252828891e-01
+ 1157 -3.60653507262e-01 -1.50168051235e-01 -4.20506937173e-01
+ 1158 -3.65626861106e-01 -1.17685721705e-01 -3.93481403293e-01
+ 1159 -3.82060506005e-01 -1.02516657126e-01 -4.16025909748e-01
+ 1160 -3.82817297689e-01 -1.43655619131e-01 -4.67836463797e-01
+ 1161 2.18230615841e-01 4.08316507721e-02 -3.66546374270e-01
+ 1162 2.23504202261e-01 7.29744746828e-02 -3.98436689200e-01
+ 1163 2.99979827654e-01 1.84033138343e-02 -3.98285535074e-01
+ 1164 2.69214366103e-01 4.45087687310e-03 -3.66445604853e-01
+ 1165 2.35290373517e-01 1.30865938095e-02 -3.89454023065e-01
+ 1166 2.44492683689e-01 2.52667907624e-02 -4.18350115950e-01
+ 1167 2.09223828435e-01 -1.82029431697e-02 -4.06473997188e-01
+ 1168 2.09994021152e-01 -1.55774162299e-02 -4.58328123577e-01
+ 1169 2.47076544773e-01 -4.68012870638e-02 -3.80471356931e-01
+ 1170 1.18034998229e-01 -2.29265507147e-02 -5.85745884583e-01
+ 1171 1.36659208162e-01 -1.00044860133e-02 -5.76383040723e-01
+ 1172 1.00342258172e-01 -2.57250669339e-03 -6.24018617923e-01
+ 1173 9.72456946275e-02 -3.26740134869e-03 -5.96593621215e-01
+ 1174 1.16411177977e-01 1.50935983583e-03 -5.86859554162e-01
+ 1175 1.24864048124e-01 3.56487666755e-03 -6.01898196283e-01
+ 1176 1.32480097782e-01 5.59122636506e-03 -5.49700490400e-01
+ 1177 1.06875760996e-01 1.57444500378e-02 -5.72563358426e-01
+ 1178 1.14787357725e-01 2.59452703863e-02 -5.87973223740e-01
+ 1179 7.33598274809e-02 1.56968533620e-02 -5.80016361138e-01
+ 1180 5.56670874239e-02 3.60508973833e-02 -6.18289094478e-01
+ 1181 9.10525675379e-02 -4.65719065930e-03 -5.41743627798e-01
+ 1182 1.52816605321e-01 -6.88979836257e-02 -4.92756999564e-01
+ 1183 1.32228592727e-01 -4.74843859702e-02 -5.09085875642e-01
+ 1184 1.08602344529e-01 -3.34785957115e-02 -4.91376055412e-01
+ 1185 1.50029874773e-01 -2.32301786872e-02 -4.99332918014e-01
+ 1186 1.59846946223e-01 -4.06521079540e-02 -5.14390450710e-01
+ 1187 1.42648351552e-01 -3.16533786303e-02 -5.21228744982e-01
+ 1188 1.30370772361e-01 -1.70391826779e-02 -5.13469821275e-01
+ 1189 1.35266828331e-01 -4.00765785734e-02 -5.43124571950e-01
+ 1190 1.48147094896e-01 -2.14378379191e-02 -5.47968832301e-01
+ 1191 8.02554411822e-02 5.20223121226e-02 -1.60990334785e-01
+ 1192 8.14686602185e-02 1.25873253603e-01 -1.64474288096e-01
+ 1193 7.53899315745e-02 1.03350107961e-01 -1.88734410275e-01
+ 1194 6.34571276373e-02 8.68529766426e-02 -1.62423175285e-01
+ 1195 6.35320120876e-02 9.63693632983e-02 -1.37479348836e-01
+ 1196 4.54455950560e-02 4.78326996818e-02 -1.60372062474e-01
+ 1197 3.46511257048e-02 9.56701231888e-02 -1.62488607244e-01
+ 1198 2.03604514141e-02 1.14353276445e-01 -1.25105583550e-01
+ 1199 3.81473306444e-02 1.24824393439e-01 -2.01988175709e-01
+ 1200 2.57904811533e-01 1.14308747772e-01 -7.64552799821e-02
+ 1201 2.46174950466e-01 8.27376589345e-02 -6.30215969676e-02
+ 1202 2.78274889477e-01 9.01830329113e-02 -2.99531694875e-02
+ 1203 3.24937566717e-01 7.64317382878e-02 -9.89350402943e-02
+ 1204 2.86953500233e-01 4.69626229991e-02 -7.35302095042e-02
+ 1205 3.55492683633e-01 4.02431659966e-02 -2.91818745523e-02
+ 1206 7.49511950776e-02 1.48075850882e-02 9.06159039929e-02
+ 1207 8.49575808640e-02 -7.03773022534e-02 1.90596446524e-02
+ 1208 6.58579591845e-02 -3.44643406063e-02 -1.51233936700e-02
+ 1209 5.13049554516e-02 2.60845838881e-02 3.56321683900e-03
+ 1210 1.42968281172e-01 1.41598875496e-03 3.39476780344e-02
+ 1211 1.26966842998e-01 -5.09100706951e-02 5.13291379358e-03
+ 1212 1.02139811205e-01 -2.88421573493e-02 -1.70226822335e-02
+ 1213 1.04531759390e-01 1.33978533993e-02 -5.19803808202e-03
+ 1214 6.13113412380e-02 -5.91003034536e-02 -6.79930425015e-02
+ 1215 1.11202683247e-01 -4.33920714951e-02 -5.29022109757e-02
+ 1216 1.52974666958e-01 -8.37688985867e-02 -3.76085813061e-02
+ 1217 8.60997491235e-02 1.84842206837e-01 -3.47203917453e-01
+ 1218 6.34840309335e-02 1.49206001029e-01 -3.78636071815e-01
+ 1219 5.38064678207e-02 1.37093041524e-01 -3.20240757597e-01
+ 1220 7.96480403816e-02 1.76766900500e-01 -3.08273707974e-01
+ 1221 6.36258813243e-02 1.76203276465e-01 -3.25610684011e-01
+ 1222 4.10574465979e-02 1.49566162469e-01 -3.39367709105e-01
+ 1223 7.34452948279e-02 2.15313511407e-01 -3.30980610425e-01
+ 1224 4.76982891941e-02 1.93637836054e-01 -3.07597401512e-01
+ 1225 5.88184103945e-03 1.62399444855e-01 -3.19226297903e-01
+ 1226 6.37677317150e-02 2.03200551901e-01 -2.72585296207e-01
+ 1227 -3.79572207341e-03 1.50286485350e-01 -2.60830983686e-01
+ 1228 -9.95808242955e-02 1.99154273392e-01 -2.55201913545e-01
+ 1229 -7.22322323006e-02 1.89532653668e-01 -2.60309142012e-01
+ 1230 -1.76727173904e-02 2.20720047515e-01 -2.32665375996e-01
+ 1231 -6.32078143554e-02 2.19945869290e-01 -2.36772736201e-01
+ 1232 -7.14200714710e-02 1.97201947595e-01 -2.33081859355e-01
+ 1233 -4.38007591995e-02 1.90136759180e-01 -2.29113326937e-01
+ 1234 -1.25167425552e-01 1.73683847674e-01 -2.33498342713e-01
+ 1235 -7.90908880336e-02 1.79570888517e-01 -2.11239460737e-01
+ 1236 -4.14973279077e-02 1.60157576355e-01 -1.94365462801e-01
+ 1237 -7.06079106414e-02 2.04871241522e-01 -2.05854576697e-01
+ 1238 4.02643993430e-01 -6.70180320173e-02 -1.16378138853e-01
+ 1239 3.55492683633e-01 -1.07971455474e-01 -8.24470752231e-02
+ 1240 4.03661789089e-01 -4.11603237919e-02 -6.68457838756e-02
+ 1241 3.54729336889e-01 -5.32574259076e-02 -9.29637411211e-02
+ 1242 3.06305782519e-01 -1.01830547734e-01 -1.12070587768e-01
+ 1243 3.53965990146e-01 1.45660365844e-03 -1.03480407019e-01
+ 1244 3.06305782519e-01 -3.02080008714e-03 -7.65604539874e-02
+ 1245 2.09458673778e-01 -5.07621699164e-02 -9.70190803908e-02
+ 1246 1.09188326491e-02 1.11989743236e-01 -3.08222690675e-01
+ 1247 1.24656898168e-02 1.32830630278e-01 -3.31355664491e-01
+ 1248 4.44154410043e-02 1.15959694724e-01 -3.32031970953e-01
+ 1249 3.72014317913e-02 1.30597872133e-01 -3.43429381245e-01
+ 1250 2.05963957619e-02 1.24102702742e-01 -3.66618004893e-01
+ 1251 5.08671497462e-02 1.24035001061e-01 -3.70962180432e-01
+ 1252 6.85210225432e-02 9.87962994106e-02 -3.67632464587e-01
+ 1253 -1.06772468317e-01 2.60858442199e-01 -3.60773856682e-01
+ 1254 -1.44506520707e-01 2.46182673626e-01 -3.39443181902e-01
+ 1255 -1.16826833935e-01 2.44664890109e-01 -3.80156060570e-01
+ 1256 -1.45334324068e-01 2.29483193697e-01 -3.72396345345e-01
+ 1257 -7.96441144924e-02 2.43911006181e-01 -3.65966929107e-01
+ 1258 -1.27983865446e-01 1.97612033016e-01 -3.28498651970e-01
+ 1259 -1.02092719925e-01 2.27968748733e-01 -3.90078843482e-01
+ 1260 -1.37486898118e-01 1.96848133427e-01 -3.83400662101e-01
+ 1261 3.28276559575e-02 2.26907382547e-01 -3.20190092019e-01
+ 1262 2.63759472156e-02 2.18832076210e-01 -2.81259882541e-01
+ 1263 2.36718114498e-02 2.07752158248e-01 -3.05350314936e-01
+ 1264 -1.64241088155e-02 2.12303764594e-01 -3.38115333665e-01
+ 1265 -1.22146465681e-02 1.91631338179e-01 -3.12353883672e-01
+ 1266 -2.61016719283e-02 2.00190805089e-01 -2.79720019447e-01
+ 1267 6.19438221936e-03 2.18940344472e-01 -4.27596340536e-01
+ 1268 -7.87247969321e-03 2.32361191853e-01 -3.90528409183e-01
+ 1269 6.04062319001e-02 2.07575224175e-01 -3.87897808030e-01
+ 1270 3.74785830404e-02 2.28233912967e-01 -3.91782157584e-01
+ 1271 3.85287420390e-02 2.40279000720e-01 -3.55132142364e-01
+ 1272 1.51187125289e-03 2.41154314528e-01 -4.52583704743e-01
+ 1273 4.47849760031e-02 2.46141082503e-01 -3.96502339404e-01
+ 1274 2.90647979241e-02 2.79980406452e-01 -4.59109516135e-01
+ 1275 8.08387895255e-02 3.53320270968e-01 -4.66061307398e-01
+ 1276 9.34618885200e-02 3.29018857839e-01 -4.20630882730e-01
+ 1277 6.31535937839e-02 2.72025143786e-01 -4.00852880332e-01
+ 1278 1.16658415187e-01 2.51195020370e-02 -3.29190071038e-01
+ 1279 9.88497682199e-02 3.61809402499e-02 -2.98544932236e-01
+ 1280 1.59546050358e-01 5.02228003244e-02 -3.41208137960e-01
+ 1281 1.14908496029e-01 5.80462005907e-02 -3.46010224528e-01
+ 1282 1.01989490594e-01 5.81106046119e-02 -3.18821332054e-01
+ 1283 1.27441525001e-01 5.29164724415e-02 -3.06556976851e-01
+ 1284 6.67581731242e-02 8.52988051657e-02 -3.24173194602e-01
+ 1285 8.73205660005e-02 9.11017071868e-02 -3.08452593071e-01
+ 1286 1.86408759761e-01 4.91792851901e-02 -5.25408065016e-01
+ 1287 1.53713011893e-01 2.74166940040e-02 -5.08068315353e-01
+ 1288 2.11423981457e-01 1.93473196230e-02 -5.08600291125e-01
+ 1289 1.97965223443e-01 -5.10506302348e-03 -4.91437866719e-01
+ 1290 1.92659325629e-01 6.58491060904e-02 -5.09283421023e-01
+ 1291 2.23929432601e-01 2.05165450342e-02 -4.92247937166e-01
+ 1292 -2.39464887319e-02 2.17745030695e-01 -4.10695311821e-01
+ 1293 -9.37784003781e-03 2.11333435449e-01 -4.33454534676e-01
+ 1294 -1.76902547678e-02 2.23607112479e-01 -4.52065508861e-01
+ 1295 -7.57814011521e-02 2.15572113359e-01 -3.58458564991e-01
+ 1296 -9.80199199589e-02 1.78253180366e-01 -3.35970244365e-01
+ 1297 -9.35835335615e-02 2.10700143479e-01 -3.78419591801e-01
+ 1298 -1.14343256902e-01 1.84196864857e-01 -3.70081053654e-01
+ 1299 -6.92319502560e-02 2.45972379063e-01 -3.43514304474e-01
+ 1300 -8.81957436147e-02 2.23853578922e-01 -3.13553853589e-01
+ 1301 -6.89379563099e-02 2.24202866226e-01 -3.43496187546e-01
+ 1302 -8.14824872337e-02 2.02200495187e-01 -3.23516514646e-01
+ 1303 -4.92559865978e-02 2.33066477296e-01 -3.48495366071e-01
+ 1304 -5.82317981274e-02 2.04494726272e-01 -3.21025445984e-01
+ 1305 -1.34638616072e-02 1.29319183069e-03 -1.82523435385e-01
+ 1306 2.48843063396e-02 2.97985042532e-02 -2.09889045009e-01
+ 1307 7.23392280676e-03 5.01940989338e-02 -2.02316531568e-01
+ 1308 -2.07653529330e-02 4.61392400628e-02 -1.84847470035e-01
+ 1309 7.09742710922e-03 1.93273872593e-02 -1.33006452850e-01
+ 1310 2.58091095016e-02 3.23195303981e-02 -1.67755853444e-01
+ 1311 1.23401210615e-02 4.69859698723e-02 -1.72609766254e-01
+ 1312 -4.62399668014e-03 4.32133542712e-02 -1.51061470128e-01
+ 1313 1.75828150137e-02 7.46445524853e-02 -2.12213079659e-01
+ 1314 -2.80668442589e-02 9.09852882949e-02 -1.87171504686e-01
+ 1315 2.09414486177e-02 6.22168958862e-02 -1.69305209878e-01
+ 1316 -2.04064216614e-04 6.41734354914e-02 -1.35330487500e-01
+ 1317 -8.95260136756e-02 5.13876464485e-02 -2.76954439538e-01
+ 1318 -8.95781817186e-02 7.96226834234e-02 -2.87433162560e-01
+ 1319 -9.11587209612e-02 7.07832804633e-02 -2.63218136858e-01
+ 1320 -9.17377354184e-02 9.60718497849e-02 -2.65625184646e-01
+ 1321 -7.52179832722e-02 6.83540422701e-02 -2.48509089056e-01
+ 1322 -6.81161361136e-02 1.05072277156e-01 -2.44765136837e-01
+ 1323 6.92086155975e-02 1.68587801777e-01 -2.29438653382e-01
+ 1324 6.35893125721e-02 1.54901640159e-01 -2.60808415682e-01
+ 1325 5.09575311797e-02 1.64012472670e-01 -2.37286735958e-01
+ 1326 4.68658834776e-02 1.99248691335e-01 -2.37297429733e-01
+ 1327 2.41663130718e-02 1.33311757409e-01 -2.21602445034e-01
+ 1328 4.63323246457e-03 1.70815727776e-01 -2.13776340235e-01
+ 1329 2.97183761065e-02 1.04295151013e-01 -2.49042819159e-01
+ 1330 -7.50232862815e-03 1.41165129249e-01 -1.76946600735e-01
+ 1331 4.21801952311e-03 1.06563947062e-01 -1.45794223929e-01
+ 1332 1.89716332139e-02 9.44989144653e-02 -1.68659331605e-01
+ 1333 1.60759390100e-02 1.13544691724e-01 -1.97049285368e-01
+ 1334 -4.38533436900e-03 9.16079262236e-02 -4.00746724651e-01
+ 1335 2.26291180477e-03 1.19242752269e-01 -3.93038353808e-01
+ 1336 -2.56088810699e-02 1.14036726721e-01 -3.81645095354e-01
+ 1337 -1.53168097643e-02 1.29155646131e-01 -3.80639224546e-01
+ 1338 -2.89668754763e-02 1.47643194467e-01 -3.88980833506e-01
+ 1339 -8.95439431589e-03 1.35699911067e-01 -3.58892615515e-01
+ 1340 -2.62482851596e-02 1.66703366038e-01 -3.60531724441e-01
+ 1341 -2.12112935500e-02 1.16293664420e-01 -3.49528117213e-01
+ 1342 -8.86670732589e-02 5.60886292977e-02 -5.14230759557e-01
+ 1343 -8.00677760286e-02 1.07936840711e-01 -5.28001977443e-01
+ 1344 -9.24240151062e-02 1.10806596982e-01 -5.00892918414e-01
+ 1345 -1.02901783260e-01 8.63173694114e-02 -4.80452779956e-01
+ 1346 -6.15355646842e-02 8.28057403108e-02 -4.80054905597e-01
+ 1347 -6.48465360556e-02 1.08465510915e-01 -5.00627668841e-01
+ 1348 -7.79190253571e-02 1.10485660568e-01 -4.87139451720e-01
+ 1349 -8.00692075434e-02 9.40525300489e-02 -4.68928203850e-01
+ 1350 -9.43024860299e-02 1.38165580825e-01 -4.94223997843e-01
+ 1351 -7.43363427231e-02 1.28618004324e-01 -4.78109015774e-01
+ 1352 -1.12020354132e-01 1.63291107762e-01 -2.75253940393e-01
+ 1353 -9.73655609119e-02 1.61825514413e-01 -2.97983239182e-01
+ 1354 -8.51260761297e-02 1.83892917017e-01 -2.98139693189e-01
+ 1355 -9.08161100158e-02 1.92225780117e-01 -2.83038978665e-01
+ 1356 -7.08401463576e-02 1.79319878351e-01 -2.88020040262e-01
+ 1357 -8.20564086447e-02 1.43932255112e-01 -2.82725532788e-01
+ 1358 -4.99262824457e-02 1.39628333929e-01 -2.41420106251e-01
+ 1359 -4.94200622249e-02 1.76450597562e-01 -2.60483089237e-01
+ 1360 -3.59258482725e-02 1.54590406533e-01 -3.02136410223e-01
+ 1361 -5.59695131210e-02 1.46050331858e-01 -2.75427349754e-01
+ 1362 -5.40790402865e-02 1.72061530100e-01 -2.81222776118e-01
+ 1363 -4.00864394427e-02 1.86425312631e-01 -3.00960625218e-01
+ 1364 -1.47143314058e-01 -2.50186788646e-02 -2.92713316521e-01
+ 1365 -1.35975677207e-01 -4.08315853497e-02 -3.08109240876e-01
+ 1366 -1.71922942277e-01 1.65580324075e-02 -3.18387459906e-01
+ 1367 -1.44422520714e-01 9.34454577125e-03 -2.97590637768e-01
+ 1368 -1.36726991412e-01 -1.11059402515e-02 -3.07918250723e-01
+ 1369 -1.52495429353e-01 -1.31137778349e-02 -3.25225336466e-01
+ 1370 -1.01531040548e-01 -3.87699129105e-02 -2.97449041540e-01
+ 1371 -1.14014338374e-01 1.77056407269e-04 -3.00747787781e-01
+ 1372 -1.26310668767e-01 2.80679836155e-03 -3.23123184925e-01
+ 1373 -2.60899610069e-01 -1.49532524617e-01 -4.33635106516e-01
+ 1374 -2.52754338923e-01 -1.35153516057e-01 -4.69870955709e-01
+ 1375 -3.78082312380e-01 -2.02831350620e-01 -4.83304443814e-01
+ 1376 -3.40599740046e-01 -1.65339831456e-01 -4.61592004709e-01
+ 1377 -3.14565754192e-01 -1.50603748327e-01 -4.81779667055e-01
+ 1378 -3.30876140464e-01 -1.70686066726e-01 -5.02983847241e-01
+ 1379 -2.51049196005e-01 -9.83761460330e-02 -4.80254890297e-01
+ 1380 -3.34032797336e-01 -1.31235579067e-01 -4.92671860563e-01
+ 1381 -3.68231898316e-01 -1.51674972036e-01 -5.29924227595e-01
+ 1382 3.59905942474e-02 -1.74495870535e-01 -2.32658486091e-01
+ 1383 5.45755756888e-02 -1.10354206881e-01 -1.96742517848e-01
+ 1384 2.55477658829e-02 -9.54866807753e-02 -1.71478390143e-01
+ 1385 1.74137025921e-03 -1.20123749550e-01 -1.76804310412e-01
+ 1386 6.54772804489e-02 -1.65029030065e-01 -1.42577550389e-01
+ 1387 6.80383726760e-02 -1.25423534452e-01 -1.48660550128e-01
+ 1388 4.29018160747e-02 -1.10505557980e-01 -1.41732946279e-01
+ 1389 3.28155690563e-02 -1.31936562898e-01 -1.35368411837e-01
+ 1390 2.03263517006e-02 -5.59820858956e-02 -1.40888342169e-01
+ 1391 -3.25078537290e-02 -6.57516285645e-02 -1.20950134733e-01
+ 1392 4.52055566838e-02 -8.91754537954e-02 -1.11424433009e-01
+ 1393 3.12280564607e-02 -1.10656909080e-01 -8.67233747106e-02
+ 1394 8.40622618903e-02 -1.00887366411e-01 -1.06661582147e-01
+ 1395 0.00000000000e+00 5.00000000000e-01 5.00000000000e-01
+ 1396 -1.66666666667e-01 1.66666666667e-01 5.00000000000e-01
+ 1397 -5.00000000000e-01 0.00000000000e+00 5.00000000000e-01
+ 1398 -2.82524396111e-01 2.47999486801e-01 3.99197147845e-01
+ 1399 -2.16829307408e-02 3.31999657868e-01 4.32798098563e-01
+ 1400 -1.41262198056e-01 1.23999743401e-01 4.49598573923e-01
+ 1401 -3.55016264074e-01 -1.33367546567e-03 4.32798098563e-01
+ 1402 0.00000000000e+00 0.00000000000e+00 5.00000000000e-01
+ 1403 -2.16829307408e-02 -1.33367546567e-03 4.32798098563e-01
+ 1404 -2.82524396111e-01 -2.52000513199e-01 3.99197147845e-01
+ 1405 2.17475603889e-01 2.47999486801e-01 3.99197147845e-01
+ 1406 -6.50487922224e-02 -4.00102639702e-03 2.98394295690e-01
+ 1407 5.00000000000e-01 5.00000000000e-01 5.00000000000e-01
+ 1408 -9.97944302741e-02 2.04769564876e-01 -6.67616781172e-01
+ 1409 -1.00718504227e-01 2.43748309684e-01 -6.30612518682e-01
+ 1410 -5.52887057902e-02 2.81974784342e-01 -6.03127954407e-01
+ 1411 -4.00537972378e-03 3.71121884691e-01 -7.39825957556e-01
+ 1412 -6.65296201827e-02 3.03179709917e-01 -7.21744520781e-01
+ 1413 -7.55388781702e-02 3.07811232263e-01 -6.80459389012e-01
+ 1414 -3.68591371934e-02 3.54649856228e-01 -6.78751969605e-01
+ 1415 -1.47072376617e-01 2.44500579836e-01 -6.21092820468e-01
+ 1416 -9.80482510778e-02 3.29667053224e-01 -6.90728546978e-01
+ 1417 -5.12833260664e-02 4.10852899651e-01 -6.93301996851e-01
+ 1418 -9.57890505503e-02 3.33647680185e-01 -7.57790823616e-01
+ 1419 -3.31809698757e-02 2.68004809453e-01 -4.87257134396e-01
+ 1420 -3.89093541091e-02 2.48131784185e-01 -4.78200130072e-01
+ 1421 -6.33218408269e-02 2.66809495676e-01 -4.70356105682e-01
+ 1422 3.08192339642e-02 2.50686487538e-01 -4.73317078504e-01
+ 1423 5.59472218491e-02 2.52043520267e-01 -4.26072711060e-01
+ 1424 1.70349193136e-01 -2.86398156966e-01 -7.39893208575e-01
+ 1425 2.55523789704e-01 -1.79597235450e-01 -6.94839812863e-01
+ 1426 2.75888802777e-01 -2.49659825172e-01 -7.76465196534e-01
+ 1427 2.52761894852e-01 -2.14798617725e-01 -7.62419906431e-01
+ 1428 3.37015859803e-01 -1.19731490300e-01 -7.39893208575e-01
+ 1429 2.89818927082e-01 7.52197056302e-02 -6.69150107472e-01
+ 1430 3.59879284721e-01 5.01464704201e-02 -7.22766738314e-01
+ 1431 3.94909463541e-01 8.02737213985e-02 -6.62061002300e-01
+ 1432 3.59879284721e-01 1.07031628531e-01 -6.06081336400e-01
+ 1433 4.35787766628e-01 4.77136985586e-02 -6.44542793722e-01
+ 1434 4.03681649942e-01 7.15705478380e-02 -5.51814190584e-01
+ 1435 2.39527251569e-01 -3.64028571835e-01 -1.61562453629e-01
+ 1436 3.04645438677e-01 -3.98021428876e-01 -2.13982077949e-01
+ 1437 2.39527251569e-01 -4.62706137379e-01 -2.37918236425e-01
+ 1438 1.27233925872e-01 -1.55670266228e-01 -2.82307167771e-01
+ 1439 9.68194819968e-02 -1.61945467664e-01 -2.65757607211e-01
+ 1440 1.03916872464e-01 -2.03238302020e-01 -2.57427942062e-01
+ 1441 1.54133277345e-01 -1.33629754904e-01 -2.45310649467e-01
+ 1442 1.24597606570e-01 -1.43846283811e-01 -2.42147608623e-01
+ 1443 1.38588575073e-01 -1.65341778765e-01 -2.28724498994e-01
+ 1444 5.93076476552e-02 -1.26927834743e-01 -2.57537711800e-01
+ 1445 1.08849091867e-01 -1.14468133914e-01 -2.28797678819e-01
+ 1446 1.21961287269e-01 -1.32022301395e-01 -2.01988049474e-01
+ 1447 1.45278340677e-01 -8.44542656030e-02 -2.26867275183e-01
+ 1448 3.64610982143e-01 -9.82058002902e-02 -5.33122452485e-01
+ 1449 3.98458236607e-01 -3.09904816342e-02 -5.19827787928e-01
+ 1450 4.35787766628e-01 -1.79377831528e-02 -5.40378060754e-01
+ 1451 3.64610982143e-01 2.43308395325e-02 -5.20601783540e-01
+ 1452 -3.49793763884e-01 5.15627066978e-02 -3.44926597222e-01
+ 1453 -3.99862509256e-01 9.12602959098e-02 -3.89932329568e-01
+ 1454 -4.09520302565e-01 1.47009810423e-01 -4.28696093525e-01
+ 1455 -3.21992527371e-01 7.10167884634e-02 -4.40685523023e-01
+ 1456 -3.41510659126e-01 4.05982812702e-02 -3.97925282566e-01
+ 1457 -3.81132994345e-01 7.31125795361e-02 -4.18429910489e-01
+ 1458 -3.81328351580e-01 1.04229683754e-01 -4.53771613435e-01
+ 1459 -4.01830457416e-01 5.63620572110e-02 -4.32090416388e-01
+ 1460 -3.52745686125e-01 -7.84651350430e-04 -4.08163727453e-01
+ 1461 -2.74339302323e-01 1.15260902796e-01 -5.41467944738e-01
+ 1462 -2.86535315540e-01 1.52375285143e-01 -5.56570508746e-01
+ 1463 -2.83753562948e-01 1.27542443449e-01 -5.19399534683e-01
+ 1464 -2.90547007704e-01 1.52307845046e-01 -5.36243560203e-01
+ 1465 -2.79148561381e-01 1.72162351510e-01 -5.55036832916e-01
+ 1466 -2.86959735653e-01 1.65476742592e-01 -5.28445460135e-01
+ 1467 -2.74975932493e-01 1.34913088969e-01 -4.99280371822e-01
+ 1468 -1.99858628959e-01 -1.23524703511e-01 -5.83089114389e-01
+ 1469 -2.23924520600e-01 -1.51157877226e-01 -6.32794781483e-01
+ 1470 -2.54260050257e-01 -1.56409861797e-01 -6.37274384883e-01
+ 1471 -2.30671675063e-01 -6.81378436301e-02 -6.03938708430e-01
+ 1472 -2.08198937137e-01 -9.23098651147e-02 -6.10570997181e-01
+ 1473 -2.24163278824e-01 -1.20838455000e-01 -6.40979776804e-01
+ 1474 -2.44466551336e-01 -1.14233303972e-01 -6.46694510843e-01
+ 1475 -2.17654882584e-01 -1.73539066370e-01 -6.78020845178e-01
+ 1476 -2.20063106221e-01 -1.25652773688e-01 -6.73858817706e-01
+ 1477 -1.94066507390e-01 -8.52670482032e-02 -6.44685168724e-01
+ 1478 -1.63253461286e-01 -1.40653908084e-01 -6.23835574684e-01
+ 1479 5.04043271978e-02 -8.21767804974e-03 -2.61566615845e-01
+ 1480 4.39902536535e-02 -4.14784254125e-02 -2.73722596451e-01
+ 1481 5.60933846809e-02 -1.77163943440e-02 -2.36381599285e-01
+ 1482 5.37136881457e-02 -4.30564646839e-02 -2.36090580836e-01
+ 1483 4.72496125535e-02 2.83140719180e-03 -2.21036486544e-01
+ 1484 3.92581816871e-02 -2.49047975502e-02 -2.12927402499e-01
+ 1485 7.10854389542e-02 -3.49532423547e-01 6.83282264300e-02
+ 1486 2.14056959303e-01 -3.99688282365e-01 2.12218817620e-01
+ 1487 2.85542719477e-01 -3.50758037616e-01 1.23620712584e-01
+ 1488 2.14056959303e-01 -3.01010716821e-01 -1.83904988738e-03
+ 1489 -3.41211368341e-02 8.60798300494e-02 -2.27346274772e-01
+ 1490 -5.25546504192e-02 5.56924108658e-02 -2.36896514346e-01
+ 1491 -3.80770362534e-02 4.08700451810e-02 -2.43929449607e-01
+ 1492 -2.09621558081e-02 5.61875360750e-02 -2.39906934979e-01
+ 1493 -3.73775718681e-02 2.74352696400e-02 -2.36065584524e-01
+ 1494 -1.13555190074e-02 4.36941182106e-02 -2.26099880039e-01
+ 1495 -5.87442609242e-02 4.29514303968e-02 -2.21584249090e-01
+ 1496 -1.13786780813e-01 2.55886676235e-02 -1.05487941714e-01
+ 1497 -6.66382819337e-02 2.95129726450e-02 -9.81551179144e-02
+ 1498 -4.04652043466e-02 3.15478112034e-02 -1.18030709654e-01
+ 1499 -8.16428494599e-02 7.19850565244e-02 -1.20519403819e-01
+ 1500 -9.40900453425e-02 5.64711361923e-02 -9.98142473576e-02
+ 1501 -6.36528550505e-02 5.16937478163e-02 -9.57330530970e-02
+ 1502 -4.52089943647e-02 6.04438985789e-02 -1.08176092651e-01
+ 1503 -4.56628606411e-02 3.14024391081e-02 -7.09467023750e-02
+ 1504 -4.86740985610e-02 6.03469838487e-02 -7.67867544649e-02
+ 1505 -1.35189292876e-02 7.77988280090e-02 -8.59781644798e-02
+ 1506 -8.68405057544e-02 7.18396844291e-02 -7.34353965399e-02
+ 1507 -5.46965744009e-02 1.18236073330e-01 -8.84668586448e-02
+ 1508 -1.18984437108e-01 2.54432955282e-02 -5.84039344351e-02
+ 1509 5.04096364779e-02 -4.42548026937e-03 -1.22158009960e-01
+ 1510 2.27704730756e-02 -2.48675297011e-02 -1.21755384884e-01
+ 1511 4.08188464693e-02 -5.75411946746e-02 -1.04440692335e-01
+ 1512 6.52610798687e-02 -5.48043833779e-02 -9.89375448694e-02
+ 1513 3.00382762490e-02 -6.13174118239e-02 -8.56454065787e-02
+ 1514 -2.42456895169e-03 -1.41950229383e-02 -1.02219802524e-01
+ 1515 -1.94432944225e-01 -4.35135368543e-02 -2.73364170785e-01
+ 1516 -1.89216941074e-01 -4.27928401676e-02 -2.45331436403e-01
+ 1517 -1.42994423017e-01 -5.12036730157e-02 -2.62280422441e-01
+ 1518 -1.63617932187e-01 -4.91207587531e-02 -2.84663494811e-01
+ 1519 -1.68180127566e-01 -3.39057595161e-02 -2.69022376462e-01
+ 1520 -1.55951853246e-01 -3.02227026121e-02 -2.48886622100e-01
+ 1521 -1.93365832115e-01 -1.66078460165e-02 -2.75764330483e-01
+ 1522 -1.58717780606e-01 -1.27660398447e-02 -2.69175218153e-01
+ 1523 -5.33030538695e-02 1.25083770721e-01 2.40639154882e-02
+ 1524 -8.61437454886e-02 7.52635331248e-02 -1.71700094735e-02
+ 1525 -7.56613551261e-02 8.95877131932e-02 -4.09356258639e-02
+ 1526 -5.39998141352e-02 1.21659922026e-01 -3.22014715783e-02
+ 1527 -1.28221690219e-02 8.12226767047e-02 -2.97127774134e-02
+ 1528 -4.82095917172e-02 6.26295496459e-02 -3.92764964206e-02
+ 1529 -4.98313373881e-02 7.65311805669e-02 -5.15740869767e-02
+ 1530 -2.67803041483e-02 9.35604755798e-02 -4.92974711572e-02
+ 1531 -3.61970257095e-02 1.73973146819e-01 -3.90697521993e-01
+ 1532 -3.49738601668e-02 2.03032354950e-01 -3.93881943056e-01
+ 1533 -2.79336446193e-02 2.07872237141e-01 -3.74832885042e-01
+ 1534 2.88247353276e-02 1.31335270811e-01 -4.14871059281e-01
+ 1535 5.63527094566e-02 1.28856713107e-01 -4.03130883357e-01
+ 1536 5.08465586036e-02 1.44667197258e-01 -4.27781213328e-01
+ 1537 3.06591922332e-02 1.51589730444e-01 -4.43824773935e-01
+ 1538 5.37653893039e-02 1.63503550590e-01 -4.19668115624e-01
+ 1539 1.67946510835e-02 2.42733031747e-01 -3.41001370575e-01
+ 1540 -2.13841937232e-02 2.38272502845e-01 -3.59888624525e-01
+ 1541 7.31568383538e-02 1.86656317556e-01 -3.85835988900e-01
+ 1542 -1.01883696577e-01 2.35434247174e-01 -4.81978594344e-01
+ 1543 -8.42388633176e-02 2.49128180216e-01 -4.62342747319e-01
+ 1544 -3.97396191229e-02 2.01014410753e-01 -5.95712555221e-01
+ 1545 -6.06819634595e-02 2.41244873603e-01 -5.82676368048e-01
+ 1546 -3.69294460835e-02 2.28958317630e-01 -5.62440326846e-01
+ 1547 -1.50503774004e-02 1.98042490405e-01 -5.64385771227e-01
+ 1548 -2.54164351786e-02 2.52016072798e-01 -5.69329370685e-01
+ 1549 1.31586732985e-02 2.17171209546e-01 -5.75692059176e-01
+ 1550 1.50870165492e-01 4.64797817558e-02 -3.80298517874e-01
+ 1551 1.22463526737e-01 8.14466711583e-02 -4.19064904606e-01
+ 1552 7.95758915653e-02 5.63433728709e-02 -4.07046837684e-01
+ 1553 1.22278408711e-01 2.97442495642e-02 -3.72286473259e-01
+ 1554 1.19560970962e-01 5.32830865977e-02 -3.74127487822e-01
+ 1555 9.01868136151e-02 7.88621144799e-02 -3.97914735626e-01
+ 1556 2.12449333239e-01 1.15427401222e-01 -3.59022316103e-01
+ 1557 1.86139020746e-01 8.99495156878e-02 -3.92174636636e-01
+ 1558 2.10860703160e-01 6.91336017986e-02 -3.40270125539e-01
+ 1559 1.91525126310e-01 6.15986375036e-02 -3.69822413580e-01
+ 1560 9.56723733255e-02 8.36838265261e-02 -4.30083438551e-01
+ 1561 9.88674723756e-02 9.29956855513e-02 -4.58103271669e-01
+ 1562 1.17793274333e-01 9.46082016479e-02 -4.60097526744e-01
+ 1563 9.46870772625e-02 8.26943815024e-02 -4.84254185055e-01
+ 1564 1.20985582642e-01 7.99625036228e-02 -5.00321024362e-01
+ 1565 8.78042311309e-02 6.35759409401e-02 -4.55299892072e-01
+ 1566 -3.53815581639e-01 -2.54818115224e-01 -4.50763500010e-01
+ 1567 -2.60712221090e-01 -2.90082200200e-01 -4.72150496555e-01
+ 1568 -3.20534165817e-01 -2.66800261434e-01 -4.83489322690e-01
+ 1569 -3.25618181037e-01 -2.36136467101e-01 -5.16091892786e-01
+ 1570 -3.41990679503e-01 -2.86164263209e-01 -4.94951401409e-01
+ 1571 -3.60344959176e-01 -2.49850572598e-01 -5.49586295913e-01
+ 1572 -2.62986019255e-01 -3.30769172247e-01 -4.83674201567e-01
+ 1573 -3.41990679503e-01 -3.87179448165e-01 -5.99116134378e-01
+ 1574 -2.53089322936e-01 -4.15384586124e-01 -5.72311061580e-01
+ 1575 -2.35691723862e-01 -4.34248900021e-01 -6.34520877972e-01
+ 1576 -1.70785763914e-01 -3.87179448165e-01 -4.86414748773e-01
+ 1577 -1.03537585793e-01 -4.01373350031e-01 -5.36781316958e-01
+ 1578 -3.73869348855e-01 -2.39646335002e-01 -4.09678432474e-01
+ 1579 -3.44443167831e-01 -2.31911815278e-01 -4.19534595989e-01
+ 1580 -3.57496850390e-01 -1.89618538894e-01 -4.30818923851e-01
+ 1581 2.70293480759e-01 -9.66951600604e-02 -6.04316394580e-01
+ 1582 2.40022683547e-01 -8.96287622028e-02 -5.84379435088e-01
+ 1583 2.06352375378e-01 -1.20685953975e-01 -5.64726859177e-01
+ 1584 2.75685536021e-01 -8.78462990664e-02 -5.55603252871e-01
+ 1585 2.51634424296e-01 -8.47587159217e-02 -5.52828818679e-01
+ 1586 2.33058132434e-01 -1.03840161676e-01 -5.29210229268e-01
+ 1587 2.57771345184e-01 -5.77196407413e-02 -5.42122357488e-01
+ 1588 2.32975367834e-01 -7.28222717830e-02 -5.01341242777e-01
+ 1589 5.00000000000e-01 -8.76632360015e-03 -6.09149865117e-01
+ 1590 4.51840824971e-01 -1.34533373646e-02 -6.12783545565e-01
+ 1591 -4.05402011642e-01 -2.30726577094e-01 -3.42802224986e-01
+ 1592 -4.38775308803e-01 -1.88038221315e-01 -3.28509095848e-01
+ 1593 -3.73869348855e-01 -2.41983954414e-01 -2.84567699617e-01
+ 1594 -4.08162963204e-01 -1.83580109405e-01 -2.34010743224e-01
+ 1595 -4.24018767961e-01 -3.01126223264e-01 -6.93237305589e-01
+ 1596 -3.86028151941e-01 -2.01689334895e-01 -6.24855958383e-01
+ 1597 -4.06896639451e-01 -3.33233715066e-01 -6.43057530609e-01
+ 1598 -3.73186555559e-01 -3.01531342463e-01 -6.65344676874e-01
+ 1599 -3.30915407411e-01 -2.35375123284e-01 -6.10459569166e-01
+ 1600 -4.24018767961e-01 -1.34459556597e-01 -6.93237305589e-01
+ 1601 -4.43014075971e-01 -2.25844667448e-01 -7.27427979191e-01
+ 1602 -5.00000000000e-01 -2.32318148378e-01 -7.25835267031e-01
+ 1603 -5.00000000000e-01 -9.84772225671e-02 -6.73752900547e-01
+ 1604 -1.41191471557e-01 1.29951052379e-01 -4.90487642878e-01
+ 1605 -1.43124291301e-01 1.51995446199e-01 -4.73092652662e-01
+ 1606 -1.89189639660e-01 1.13255212948e-01 -4.72276016944e-01
+ 1607 -1.65171924194e-01 1.14352178474e-01 -4.63742278081e-01
+ 1608 -1.60626425843e-01 1.34785192315e-01 -4.57382376619e-01
+ 1609 -1.75123070037e-01 1.40864886578e-01 -4.60951568707e-01
+ 1610 -1.59086417840e-01 1.31928258009e-01 -4.31743007025e-01
+ 1611 -1.80061380129e-01 1.39619332251e-01 -4.24277110360e-01
+ 1612 -1.65134661365e-01 9.98502700945e-02 -4.28463174422e-01
+ 1613 1.42477236502e-01 4.26998785639e-01 -5.41719941988e-01
+ 1614 1.90751645851e-01 4.06712504369e-01 -5.68588708180e-01
+ 1615 1.93934082413e-01 3.60068756554e-01 -6.12900617309e-01
+ 1616 5.02838501380e-02 4.26998785639e-01 -7.16737497026e-01
+ 1617 9.49848243348e-02 4.51332523759e-01 -6.37813294659e-01
+ 1618 1.43063734389e-01 4.30034378277e-01 -6.33941531135e-01
+ 1619 1.29289388275e-01 4.06712504369e-01 -6.85267078206e-01
+ 1620 -2.23655370650e-01 1.04124643349e-01 -6.07082981272e-01
+ 1621 -2.39694005424e-01 7.25392848391e-02 -5.67833648291e-01
+ 1622 -2.63094188677e-01 4.14604820426e-02 -6.12586311584e-01
+ 1623 -2.39255492818e-01 8.34054414848e-02 -6.36918090134e-01
+ 1624 -2.23961416361e-01 7.06234354312e-02 -6.21695926645e-01
+ 1625 -2.34755854781e-01 3.83994604519e-02 -6.00400686449e-01
+ 1626 -1.84828644045e-01 9.97863888199e-02 -6.30805541705e-01
+ 1627 -1.78079186990e-01 3.22774172705e-02 -5.76029436177e-01
+ 1628 -1.98178947195e-01 5.65641964391e-02 -6.42381948725e-01
+ 1629 -2.01479370243e-01 1.19861447403e-03 -6.20782099471e-01
+ 1630 -2.08228827298e-01 6.87075860234e-02 -6.75558204998e-01
+ 1631 -4.93768432758e-02 -1.70601852947e-01 9.94528932942e-02
+ 1632 6.54093031121e-02 -1.84833350021e-01 1.32597208958e-01
+ 1633 6.85899337673e-02 -1.18286371651e-01 1.18603440636e-01
+ 1634 1.27871759009e-02 -7.78971339295e-02 9.50343986436e-02
+ 1635 -5.72128177491e-02 -8.73014396721e-02 1.98923594492e-01
+ 1636 2.19232713339e-02 -1.24555908813e-01 1.87862904535e-01
+ 1637 3.51802522699e-02 -8.97150353375e-02 1.63551154400e-01
+ 1638 -1.31581468068e-02 -5.32650980854e-02 1.62821030992e-01
+ 1639 1.27573322289e-01 -9.21286310028e-02 1.28178714307e-01
+ 1640 6.33659507851e-02 -6.27527628009e-02 1.84917241435e-01
+ 1641 4.95120142762e-03 5.40327934559e-03 1.94505099842e-01
+ 1642 5.75733286388e-02 -1.01532936745e-01 2.32067910156e-01
+ 1643 -7.62859377349e-02 6.39990241584e-02 -6.16087507759e-01
+ 1644 -1.33932019418e-01 1.15647192264e-01 -6.50834577496e-01
+ 1645 -1.48647741942e-01 8.78572672661e-02 -6.25899530390e-01
+ 1646 -1.27182562363e-01 4.81382207145e-02 -5.96058471968e-01
+ 1647 -1.20766193793e-01 1.03677509696e-01 -5.75193996580e-01
+ 1648 -1.44370162896e-01 1.24883459920e-01 -6.11989880131e-01
+ 1649 -1.52797418919e-01 1.01731949258e-01 -6.02999769143e-01
+ 1650 -1.39870524859e-01 7.98774788873e-02 -5.75472476446e-01
+ 1651 -1.78301245981e-01 1.14309590958e-01 -5.98637189604e-01
+ 1652 -1.71662818421e-01 8.78167062517e-02 -5.55164960789e-01
+ 1653 -1.78412275476e-01 1.55325677801e-01 -6.09941066317e-01
+ 1654 4.01939142512e-02 -8.79871573438e-03 -4.52636726932e-01
+ 1655 4.11419903770e-02 3.96797107636e-02 -4.52378616687e-01
+ 1656 3.59724560419e-02 5.10174742169e-02 -4.20123877013e-01
+ 1657 3.29136508114e-02 3.24471426945e-02 -4.04125562298e-01
+ 1658 8.68561550051e-02 1.50975144421e-02 -4.55558002317e-01
+ 1659 7.19341255043e-02 3.94510553820e-02 -4.54412170359e-01
+ 1660 6.03589409712e-02 4.80115418173e-02 -4.29712727185e-01
+ 1661 6.64485657939e-02 3.46293433358e-02 -4.22243467433e-01
+ 1662 3.38617269372e-02 8.09255691925e-02 -4.03867452053e-01
+ 1663 6.70806165445e-02 6.69482943345e-02 -4.22071393937e-01
+ 1664 1.11064659216e-02 9.04579965696e-02 -4.17871318581e-01
+ 1665 1.22197004793e-02 1.11471598517e-01 -4.07808891966e-01
+ 1666 2.77609526756e-02 1.12121180915e-01 -3.95118838743e-01
+ 1667 7.74847151518e-03 1.24064464315e-01 -4.25207056733e-01
+ 1668 3.84300519661e-03 9.88404942928e-02 -4.48999779039e-01
+ 1669 -5.28515124635e-02 1.52309962473e-01 -4.13450001832e-01
+ 1670 -3.57487833095e-02 1.57860572945e-01 -4.04492904404e-01
+ 1671 5.97107038630e-02 9.52502453610e-02 -3.95795145205e-01
+ 1672 7.81626268370e-02 8.11861201754e-02 -4.11466178330e-01
+ 1673 7.12529459681e-02 6.28211195010e-02 -5.35799230140e-01
+ 1674 9.97526685318e-02 5.81370359839e-02 -5.41953199410e-01
+ 1675 8.54082220418e-02 7.73714312603e-02 -5.08044446775e-01
+ 1676 8.68193084158e-02 5.68642757804e-02 -5.16469242031e-01
+ 1677 1.11007910941e-01 5.17559388621e-02 -5.14128558841e-01
+ 1678 5.26530341893e-02 3.37660479380e-02 -5.32617459700e-01
+ 1679 7.96081547125e-02 3.55086134982e-02 -5.07904732368e-01
+ 1680 1.12285481648e-01 1.71682769796e-02 -5.00111452750e-01
+ 1681 7.38859482998e-02 5.55915155769e-02 -4.90985284653e-01
+ 1682 -1.03518454250e-01 1.18482661379e-01 -3.25393558511e-01
+ 1683 -6.04678403759e-02 1.03552774627e-01 -3.35467171563e-01
+ 1684 -5.66737733281e-02 7.58819980831e-02 -3.31479838964e-01
+ 1685 -1.23608675200e-01 6.36538858415e-02 -3.51025403429e-01
+ 1686 -1.05091108290e-01 9.54006997997e-02 -3.48497547873e-01
+ 1687 -7.24099843749e-02 8.99737751306e-02 -3.50276760321e-01
+ 1688 -7.38613210093e-02 6.70002576021e-02 -3.52555068175e-01
+ 1689 -5.02196678239e-02 9.39413684931e-02 -3.64587253674e-01
+ 1690 -4.13015145001e-02 6.14648888817e-02 -3.75159962131e-01
+ 1691 7.89335917235e-02 4.01652111420e-01 -2.57180766820e-01
+ 1692 6.14677271302e-02 4.50164609075e-01 -2.48127819518e-01
+ 1693 4.37825313886e-02 3.68869481893e-01 -1.82919392453e-01
+ 1694 -3.30521389103e-02 2.18427959062e-01 -3.55776927583e-01
+ 1695 -3.36347307008e-02 1.94500618968e-01 -3.39890834696e-01
+ 1696 -1.54061030578e-02 1.27624604730e-01 -3.19962406037e-01
+ 1697 -7.66472625527e-03 1.39346554637e-01 -3.34377207558e-01
+ 1698 -1.87640974642e-02 1.61231072475e-01 -3.27298144189e-01
+ 1699 6.42044093453e-03 9.65882246097e-02 -2.55202227725e-01
+ 1700 -2.19855757414e-02 1.15730428577e-01 -2.64176014272e-01
+ 1701 2.83567131948e-02 9.40944343829e-02 -2.84566678661e-01
+ 1702 1.12236775438e-02 9.08644187381e-02 -2.80305270210e-01
+ 1703 -6.11258803706e-03 1.01717952759e-01 -2.94655475403e-01
+ 1704 -1.01262944330e-01 1.89562206470e-01 -1.30858005537e-01
+ 1705 -1.18934632315e-01 1.99173975260e-01 -1.68901155895e-01
+ 1706 -3.64368785975e-02 2.09644179064e-01 -1.36533403871e-01
+ 1707 -6.31545672188e-02 1.90156461047e-01 -1.42812569287e-01
+ 1708 -8.59354274855e-02 1.97216723996e-01 -1.68356291117e-01
+ 1709 -7.57172551601e-02 2.12561956989e-01 -1.72684754784e-01
+ 1710 -1.35433976373e-01 1.84789268927e-01 -2.00179178364e-01
+ 1711 -8.59352552481e-02 1.86974502686e-01 -1.89026684504e-01
+ 1712 -5.17638787295e-02 1.71262997609e-01 -1.61046298452e-01
+ 1713 -1.16589944461e-01 1.51181025014e-01 -1.55370900118e-01
+ 1714 -1.59312831661e-02 1.20635886822e-01 -2.24001244186e-01
+ 1715 -2.40126652472e-02 1.07482048483e-01 -2.38507844410e-01
+ 1716 1.04566359847e-02 9.98585301067e-02 -2.28419047668e-01
+ 1717 -2.20138036382e-03 9.51874905310e-02 -2.38194546965e-01
+ 1718 -1.66993312729e-03 7.68211589248e-02 -2.30649068059e-01
+ 1719 -1.33845777321e-01 -5.84738557381e-02 -3.82149174088e-01
+ 1720 -1.46170788192e-01 -9.28835505833e-02 -3.90953751206e-01
+ 1721 -1.42230606719e-01 -1.17080169297e-01 -3.73731997514e-01
+ 1722 -1.57518835056e-01 -5.39675472347e-02 -3.64575995908e-01
+ 1723 -1.60844328775e-01 -8.09013954944e-02 -3.75572723291e-01
+ 1724 -1.63108721322e-01 -9.30384229404e-02 -3.58964544859e-01
+ 1725 -1.76578970532e-01 -8.37160612193e-02 -3.87796601193e-01
+ 1726 -1.87842880229e-01 -1.03328935251e-01 -3.68996272495e-01
+ 1727 -1.79458050831e-01 -4.47226216921e-02 -3.77413449069e-01
+ 1728 -2.23572327909e-01 -2.13534301927e-01 -2.19858547956e-01
+ 1729 -1.30798449750e-01 -3.56767150964e-01 -1.24471809859e-01
+ 1730 -2.53865633167e-01 -3.05833868432e-01 -1.30372407413e-01
+ 1731 -3.61786163955e-01 -2.08750802648e-01 -1.81016075239e-01
+ 1732 -2.64427224033e-01 -2.86162973179e-01 -3.02770080179e-01
+ 1733 -1.88959673219e-01 -3.57441982120e-01 -2.11541744040e-01
+ 1734 -2.66719754914e-01 -3.19073312432e-01 -1.94199708660e-01
+ 1735 -3.42951482689e-01 -2.58764416576e-01 -2.49237920960e-01
+ 1736 -2.30873343357e-01 -1.53589329836e-01 -4.25277706158e-01
+ 1737 -2.18700116914e-01 -1.55967384354e-01 -4.55093350390e-01
+ 1738 -2.06730290169e-01 -1.57401273334e-01 -4.43460739153e-01
+ 1739 -1.87095521766e-01 -1.79749433402e-01 -4.51891943371e-01
+ 1740 -2.41181190872e-01 1.62560232751e-01 -5.48124717078e-01
+ 1741 -2.19473940945e-01 1.42508006776e-01 -6.04439838152e-01
+ 1742 -2.49958407955e-01 1.70540021130e-01 -5.98551771022e-01
+ 1743 -2.28780418429e-01 1.63744014656e-01 -5.82488949616e-01
+ 1744 -2.01398110580e-01 1.42790669595e-01 -5.81060053901e-01
+ 1745 -2.38086895913e-01 1.84980022535e-01 -5.60538061081e-01
+ 1746 -2.22583964309e-01 1.79085135146e-01 -6.02219256465e-01
+ 1747 -4.00397026870e-02 -3.99839789353e-01 -6.79528927364e-01
+ 1748 -6.22977972998e-02 -3.48883441016e-01 -6.69859977019e-01
+ 1749 -9.34466959496e-02 -2.73325161525e-01 -5.89789965529e-01
+ 1750 -2.02603750425e-02 -3.42467231073e-01 -6.32894977788e-01
+ 1751 -4.18987779132e-02 -3.18593109391e-01 -6.37301752423e-01
+ 1752 -5.58650372177e-02 -2.58124145854e-01 -5.73069003231e-01
+ 1753 -5.34069932627e-02 -3.73485372172e-01 -7.40261038164e-01
+ 1754 -1.06813986525e-01 -2.46970744344e-01 -6.50522076329e-01
+ 1755 -2.91719020930e-02 -3.24897619619e-01 -6.73383051655e-01
+ 1756 -4.37578531395e-02 -2.37346429428e-01 -5.95074577482e-01
+ 1757 9.64914012316e-03 -3.63861057257e-01 -6.84813539318e-01
+ 1758 -7.85312364543e-02 -2.43076066926e-01 -4.72365212865e-01
+ 1759 -5.15352094607e-02 -2.55521206392e-01 -4.56722550938e-01
+ 1760 -3.38268370340e-02 -2.48571433422e-01 -4.77448682863e-01
+ 1761 -4.59213975541e-02 -2.37958082788e-01 -4.94785834789e-01
+ 1762 -1.84093142540e-02 -2.31535384994e-01 -4.60245625574e-01
+ 1763 -2.88423936442e-02 -2.07097334829e-01 -4.77649824818e-01
+ 1764 -3.72631115041e-02 -2.33442020235e-01 -4.20554899043e-01
+ 1765 -7.69830675346e-02 -1.86472555146e-01 -4.15672571002e-01
+ 1766 -6.90250571953e-02 -4.34248900021e-01 -6.34520877972e-01
+ 1767 -1.76768792896e-01 -4.50686675016e-01 -6.83390658479e-01
+ 1768 6.80737338304e-03 -5.00000000000e-01 -6.60947921592e-01
+ 1769 -1.62128417745e-01 -5.00000000000e-01 -7.17298614395e-01
+ 1770 8.31730178852e-02 -3.55493582491e-02 -4.46822604979e-01
+ 1771 9.99548105098e-02 -1.07016572932e-02 -4.50708162553e-01
+ 1772 8.57995344361e-02 -2.52519690525e-02 -4.78462945918e-01
+ 1773 9.77292497668e-02 -9.19054063472e-03 -4.73467028865e-01
+ 1774 1.16907694939e-01 -9.32114893483e-03 -4.80410462842e-01
+ 1775 8.82549591827e-02 8.51261274163e-03 -4.84286544144e-01
+ 1776 6.56232408946e-02 -6.72795319684e-03 -4.97190177365e-01
+ 1777 1.01354767377e-01 -2.70775457027e-01 -7.21125760986e-01
+ 1778 1.57932677615e-01 -2.65326461649e-01 -7.08193218140e-01
+ 1779 1.52032151066e-01 -1.56163185540e-01 -6.66688641479e-01
+ 1780 2.10576903487e-01 -1.87101948866e-01 -6.67590957520e-01
+ 1781 -1.17950473971e-01 1.39895718961e-01 -5.07582827029e-01
+ 1782 -1.25210338175e-01 1.53942847680e-01 -4.90262788329e-01
+ 1783 -1.11864967616e-01 1.57471798496e-01 -4.75583555972e-01
+ 1784 -7.93654718445e-03 1.62548361609e-01 -5.56922885010e-01
+ 1785 -7.62895730436e-03 1.41357662790e-01 -5.22332230058e-01
+ 1786 -2.38903517817e-03 1.39958592840e-01 -5.48564986658e-01
+ 1787 -2.90688737989e-02 1.47773217558e-01 -5.84518225894e-01
+ 1788 -1.46280822524e-02 1.22578573884e-01 -5.64175914464e-01
+ 1789 -2.86074889788e-02 1.15987169330e-01 -5.32632243466e-01
+ 1790 -3.62725428426e-02 7.92669223856e-02 -4.94533700932e-01
+ 1791 -3.72067862091e-02 6.41389579165e-02 -5.18861025579e-01
+ 1792 -4.50715268315e-02 9.93964548202e-02 -5.06343574531e-01
+ 1793 -4.86273504055e-02 9.60209893190e-02 -5.26498415496e-01
+ 1794 -1.00752776345e-02 9.08560689296e-02 -4.84685171620e-01
+ 1795 -3.05396780224e-02 1.13832396661e-01 -5.03714512856e-01
+ 1796 1.99083002071e-01 -9.63935869116e-02 -4.96119025886e-01
+ 1797 2.08883958545e-01 -1.06842397124e-01 -4.71925780777e-01
+ 1798 2.06310884032e-01 -6.62242889211e-02 -4.49592726239e-01
+ 1799 1.97367619063e-01 -6.93148481099e-02 -4.81230322860e-01
+ 1800 1.80850281933e-01 -8.78701903746e-02 -4.82341390171e-01
+ 1801 1.81306679537e-01 -9.19949316703e-02 -4.61620014860e-01
+ 1802 1.45643827063e-01 -9.37773948067e-02 -4.90396197077e-01
+ 1803 -3.04497998036e-01 3.49436616380e-01 -6.57793210155e-01
+ 1804 -3.01283326066e-01 4.10852899651e-01 -6.93301996851e-01
+ 1805 -3.75945763498e-01 3.57577782097e-01 -6.26640779912e-01
+ 1806 -3.07600985656e-01 3.48609786399e-01 -6.09131583359e-01
+ 1807 -3.06492200217e-01 3.89278365253e-01 -6.16583565559e-01
+ 1808 -2.50000000000e-01 5.00000000000e-01 -8.30000000000e-01
+ 1809 -2.30526033700e-01 3.89098453456e-01 -7.81860549078e-01
+ 1810 -1.98536188308e-01 3.72250289918e-01 -7.25546410234e-01
+ 1811 -2.00855550711e-01 4.40568599767e-01 -7.38867997901e-01
+ 1812 -2.64714917744e-01 3.29667053224e-01 -6.90728546978e-01
+ 1813 2.72733735318e-02 4.40568599767e-01 -6.22189627875e-01
+ 1814 4.55969552179e-02 4.18925842645e-01 -6.17510969420e-01
+ 1815 -6.66317285600e-04 3.91901123527e-01 -6.63359662585e-01
+ 1816 6.07959402905e-02 3.91901123527e-01 -5.46681292559e-01
+ 1817 -9.99475928400e-04 3.37851685290e-01 -5.80039493877e-01
+ 1818 -2.50000000000e-01 2.50000000000e-01 -8.30000000000e-01
+ 1819 -2.30526033700e-01 2.22431786790e-01 -7.81860549078e-01
+ 1820 -1.54277038301e-01 1.79056295032e-01 -8.30000000000e-01
+ 1821 -1.63602304001e-01 1.76116061367e-01 -7.93895411808e-01
+ 1822 -2.18136405334e-01 6.81547484888e-02 -7.81860549078e-01
+ 1823 -5.14697386678e-02 2.34821415155e-01 -7.81860549078e-01
+ 1824 -7.72046080017e-02 1.02232122733e-01 -7.57790823616e-01
+ 1825 1.77455249402e-01 8.31276172152e-02 1.32097202197e-01
+ 1826 9.66205688604e-02 5.40847360111e-02 1.87529566695e-01
+ 1827 1.17514289020e-01 -9.20265976512e-03 1.82082556177e-01
+ 1828 1.78368649434e-01 -1.09365375545e-02 1.43311976339e-01
+ 1829 1.31701987001e-01 -1.72060747162e-02 2.12571440238e-01
+ 1830 2.30077376613e-01 -2.38085988758e-02 1.69660012511e-01
+ 1831 1.07455255752e-01 7.37233114726e-02 2.35986398046e-01
+ 1832 2.79959303726e-01 1.51447649342e-01 1.73578500401e-01
+ 1833 1.95590408383e-01 -1.05520227336e-01 7.15104883488e-02
+ 1834 1.55377337281e-01 -6.54109565280e-02 7.78789602302e-02
+ 1835 1.86522828892e-01 -1.11963050604e-02 1.01803845273e-01
+ 1836 2.23713373497e-01 -1.98642684433e-02 1.05533159033e-01
+ 1837 1.88631955356e-01 5.14265422840e-02 8.04912854900e-02
+ 1838 2.45472335496e-01 6.97360208819e-02 7.54289762386e-02
+ 1839 3.30314890330e-01 7.73113271118e-02 3.84049170988e-02
+ 1840 2.97060272255e-01 -3.95261717002e-02 3.57925918390e-02
+ 1841 2.92785030123e-01 8.21728356038e-03 7.02390689796e-02
+ 1842 3.89979651863e-01 1.21954794457e-01 6.89676496103e-02
+ 1843 3.20051584409e-01 1.49482472733e-02 1.01225607947e-01
+ 1844 1.41180198776e-01 6.83854530082e-02 -5.49910062012e-01
+ 1845 1.38626264437e-01 5.85882168783e-02 -5.19433133909e-01
+ 1846 1.78053551017e-01 7.64917911929e-02 -5.53302562789e-01
+ 1847 1.66919762202e-01 6.71172795493e-02 -5.29596741518e-01
+ 1848 1.64590473594e-01 8.42098249360e-02 -5.20243204356e-01
+ 1849 1.80126512512e-01 1.06817865095e-01 -5.51125167682e-01
+ 1850 8.20599284748e-02 7.84910800051e-02 -5.80225932750e-01
+ 1851 5.94577859301e-02 7.63904821819e-02 -5.61314385701e-01
+ 1852 5.91501960500e-02 9.75811810007e-02 -5.95905040653e-01
+ 1853 4.79260222477e-02 9.12332073843e-02 -5.77801603390e-01
+ 1854 3.49602941323e-02 5.41200919593e-02 -5.70890193040e-01
+ 1855 2.77504398216e-02 8.13338556368e-02 -5.89681214180e-01
+ 1856 3.44989093121e-02 8.59061401875e-02 -6.22776175469e-01
+ 1857 -3.62439776747e-01 -1.49400941612e-02 -7.47767381382e-01
+ 1858 -4.08293184498e-01 -7.56115444856e-02 -6.71013521286e-01
+ 1859 -3.74233964344e-01 -1.08314714528e-01 -6.86311669882e-01
+ 1860 -3.32311952459e-01 -7.87681376597e-02 -7.42580292812e-01
+ 1861 -3.32311952459e-01 -1.44419619371e-01 -6.38415559843e-01
+ 1862 -3.62439776747e-01 -1.13417316728e-01 -5.91520281929e-01
+ 1863 4.14902397731e-02 -2.46232482635e-01 -2.88389109584e-01
+ 1864 1.35230683555e-03 -2.32474617511e-01 -2.87300415702e-01
+ 1865 -1.59668368704e-02 -2.61463990999e-01 -3.14621380507e-01
+ 1866 1.49853026516e-02 -3.30821655090e-01 -2.01954430310e-01
+ 1867 -8.49191277120e-03 -2.99355963133e-01 -2.22746579717e-01
+ 1868 -2.33194151107e-02 -3.40975993999e-01 -2.19442610925e-01
+ 1869 -2.14664823961e-02 -1.89727378899e-01 -2.58890757014e-01
+ 1870 -7.89235590396e-02 -2.04958887263e-01 -2.85123027937e-01
+ 1871 -2.69858454612e-02 -2.93151585933e-01 -1.82288861930e-01
+ 1872 -5.84740653155e-02 -3.52479443632e-01 -1.57104049849e-01
+ 1873 -1.01698867200e-03 -3.37247935267e-01 -1.30871778926e-01
+ 1874 -2.49934618053e-01 -1.61423939603e-01 -4.06393617552e-01
+ 1875 -2.30156166023e-01 -1.61493689770e-01 -4.06935939524e-01
+ 1876 -2.46819614700e-01 -1.37781781351e-01 -3.85038883061e-01
+ 1877 -2.21486679777e-01 -1.45755500992e-01 -3.92880223854e-01
+ 1878 -3.39183018768e-01 -3.14335840027e-02 -2.51881212401e-01
+ 1879 -3.31563987982e-01 -7.53533611488e-02 -2.76536769576e-01
+ 1880 -2.94410329354e-01 -3.59406994111e-02 -2.77730688117e-01
+ 1881 -2.99889228618e-01 -6.77537534186e-02 -2.89759987069e-01
+ 1882 -3.07072520653e-01 -1.02910675165e-01 -2.58602753538e-01
+ 1883 -2.73003330611e-01 -8.35920935195e-02 -2.82211715542e-01
+ 1884 -2.51342032712e-01 -4.37916825586e-02 -2.60393631350e-01
+ 1885 -2.97819114898e-01 -4.26284348893e-02 -1.91357623150e-01
+ 1886 -2.39842914301e-01 -1.54445983472e-02 -2.06728322284e-01
+ 1887 -2.28183593042e-01 -2.52813756407e-02 -2.47628761372e-01
+ 1888 -2.25417665682e-01 -4.27380384081e-02 -2.27340165319e-01
+ 1889 -2.20279486893e-01 -4.32922613631e-02 -2.52862533877e-01
+ 1890 -2.33083744623e-01 -6.16360945491e-02 -2.63117038030e-01
+ 1891 -2.47193141672e-01 -6.99766767097e-02 -2.29960737270e-01
+ 1892 1.05694377223e-01 -1.03419048672e-01 -1.88267549518e-01
+ 1893 1.03011774580e-01 -1.16454833903e-01 -1.54324815810e-01
+ 1894 1.12962180396e-01 -1.39868930795e-01 -1.52157571212e-01
+ 1895 1.25352168024e-01 -9.71078216921e-02 -1.28213592384e-01
+ 1896 1.40546268711e-01 -6.78806377406e-02 -1.66072081231e-01
+ 1897 -6.42924730890e-02 -4.34084667292e-02 2.98459205597e-03
+ 1898 1.53357467807e-02 -9.94853281621e-02 -2.47560113161e-02
+ 1899 1.94434031290e-02 -5.38696912121e-02 -4.43338309824e-02
+ 1900 -1.83168786317e-02 -3.02344202063e-03 -4.02524391295e-02
+ 1901 5.32936099433e-03 -1.43004408205e-02 4.68002480245e-02
+ 1902 3.52075628797e-02 -6.13876904120e-02 1.37012937869e-02
+ 1903 3.33203511162e-02 -3.67003721370e-02 -1.05963972385e-02
+ 1904 1.27724792714e-02 2.92023368231e-03 3.37034191133e-03
+ 1905 -7.11817882221e-02 7.16243477672e-02 -2.21725908999e-01
+ 1906 -6.20618435384e-02 1.09977735401e-01 -2.04590366751e-01
+ 1907 -1.02322983668e-01 7.73521111134e-02 -1.87290588905e-01
+ 1908 -9.80225483087e-02 4.98739315751e-02 -2.10192723768e-01
+ 1909 -8.05336222963e-02 6.01517707551e-02 -2.04437418997e-01
+ 1910 -7.75709371985e-02 8.18965035072e-02 -1.87250894165e-01
+ 1911 -7.53592154557e-02 3.72123001708e-02 -1.98580149057e-01
+ 1912 -6.83279843888e-02 5.83596640069e-02 -1.69871726839e-01
+ 1913 -9.90054010541e-02 1.03258061088e-02 -2.04284471243e-01
+ 1914 -1.22077225889e-01 5.25507921612e-02 3.94815481138e-02
+ 1915 -1.71553616425e-01 1.62684019809e-02 8.70779265497e-03
+ 1916 -1.64256619135e-01 1.38197750795e-03 3.51101362820e-02
+ 1917 -1.35869925221e-01 1.20799603616e-02 6.36981858249e-02
+ 1918 -1.67704669585e-01 7.02278944779e-02 3.31951571770e-02
+ 1919 -1.85479782043e-01 4.01472669188e-02 1.47747838500e-02
+ 1920 -1.76525492671e-01 2.30127323296e-02 3.30597937715e-02
+ 1921 -1.61690654575e-01 3.73549725060e-02 5.14350459633e-02
+ 1922 -1.85346315757e-01 -2.42024298187e-02 3.29244303661e-02
+ 1923 -1.49662624554e-01 -2.83908714379e-02 8.79148235361e-02
+ 1924 -1.94674914932e-01 1.31667123858e-02 3.09192089908e-02
+ 1925 -1.81497368917e-01 2.97570626784e-02 5.74117948881e-02
+ 1926 -2.17181060121e-01 3.39455042976e-02 2.42140171813e-03
+ 1927 -2.13332113281e-01 8.79049967947e-02 2.69087662401e-02
+ 1928 -2.21030006961e-01 -2.00139881994e-02 -2.20659628039e-02
+ 1929 -1.14436123994e-01 -9.65338256118e-02 -6.09695175412e-01
+ 1930 -8.85196625340e-02 -1.14765826316e-01 -6.40023446531e-01
+ 1931 -5.11527631582e-02 -1.01821785431e-01 -6.48117382455e-01
+ 1932 -8.05837757165e-02 -1.24287752819e-01 -5.90881454495e-01
+ 1933 -1.08140337573e-01 -1.29743137907e-01 -6.01866161225e-01
+ 1934 -9.02769380833e-02 -1.35114810361e-01 -6.26569618111e-01
+ 1935 -6.59514303491e-02 -1.33268444454e-01 -6.27480965920e-01
+ 1936 -9.99701004500e-02 -1.45941867903e-01 -6.62257781727e-01
+ 1937 -9.84963218770e-02 -1.62681832769e-01 -6.36907898768e-01
+ 1938 -6.61177521726e-02 -1.73695795111e-01 -6.43444060810e-01
+ 1939 -1.29401113008e-01 -1.68407835291e-01 -6.05021853767e-01
+ 1940 -9.55487647309e-02 -1.96161762499e-01 -5.86208132850e-01
+ 1941 -1.41606584798e-01 -1.07254641376e-01 -6.63350108739e-01
+ 1942 -1.22609635274e-01 -9.35444168173e-02 -6.46401275589e-01
+ 1943 -1.09061693270e-01 -7.78412530618e-02 -6.53923175891e-01
+ 1944 -1.51250600494e-01 -7.43159465154e-02 -6.28308371196e-01
+ 1945 -1.45249170098e-01 -4.11469657312e-02 -6.30544769452e-01
+ 1946 1.03691734902e-01 -2.77019235263e-01 -5.61428608925e-01
+ 1947 1.09355533619e-01 -2.52049948741e-01 -5.78650154895e-01
+ 1948 8.20166502142e-02 -3.14037461556e-01 -6.41487616171e-01
+ 1949 6.91278232678e-02 -3.51346156842e-01 -6.50952405950e-01
+ 1950 4.66604704333e-02 -3.09944496737e-01 -6.60906775156e-01
+ 1951 6.99907056499e-02 -2.14916745106e-01 -5.76360162734e-01
+ 1952 -7.22533493845e-02 -8.33349806279e-02 -3.26451435455e-01
+ 1953 -7.79761254528e-02 -5.72507962524e-02 -3.02966621468e-01
+ 1954 -1.13860026085e-01 -8.06330743725e-02 -2.74314162304e-01
+ 1955 -8.61954491441e-02 -8.51595705604e-02 -2.87543368643e-01
+ 1956 -8.70020062554e-02 -6.51402847956e-02 -2.79656774856e-01
+ 1957 -1.05713909920e-01 -5.54495254154e-02 -2.68208439367e-01
+ 1958 -7.81225405053e-02 -6.27012469542e-02 -2.59908669946e-01
+ 1959 -1.01750663126e-01 -4.69455889633e-02 -2.32862114257e-01
+ 1960 -7.24729719632e-02 -9.15106566806e-02 -2.61864508172e-01
+ 1961 1.96657877868e-01 -1.73715616765e-01 -4.66773267285e-01
+ 1962 2.26595134094e-01 -1.39193270203e-01 -4.63907834674e-01
+ 1963 1.74871342094e-01 -1.63655816900e-01 -4.73073708891e-01
+ 1964 2.02770918207e-01 -1.40279006944e-01 -4.69349524031e-01
+ 1965 2.02253246883e-01 -1.30707397451e-01 -4.88891401072e-01
+ 1966 2.07363949757e-01 -1.27559543224e-01 -4.51525151488e-01
+ 1967 5.00000000000e-01 -2.50000000000e-01 -8.30000000000e-01
+ 1968 3.33333333333e-01 -3.33333333333e-01 -8.30000000000e-01
+ 1969 2.50000000000e-01 -5.00000000000e-01 -8.30000000000e-01
+ 1970 4.13833204165e-01 -3.74489737758e-01 -7.49697794800e-01
+ 1971 4.42555469443e-01 -2.49659825172e-01 -7.76465196534e-01
+ 1972 3.31916602083e-01 -3.12244868879e-01 -7.89848897400e-01
+ 1973 2.75888802777e-01 -4.16326491839e-01 -7.76465196534e-01
+ 1974 -1.20582998740e-02 2.95604760840e-02 -2.11574398488e-01
+ 1975 -4.05402768158e-03 -1.15193002147e-03 -2.23775845389e-01
+ 1976 -5.14427695983e-02 -1.89461783530e-03 -2.19260214439e-01
+ 1977 -4.36507944852e-02 2.90653508748e-02 -2.08563977855e-01
+ 1978 -3.13991443029e-02 2.08997501877e-02 -2.22680047239e-01
+ 1979 -3.25099109842e-02 -2.46209584807e-03 -2.34516228090e-01
+ 1980 1.83748063077e-02 1.86666522109e-02 -2.28268781803e-01
+ 1981 6.76439366608e-03 3.67463112319e-02 -2.17994462524e-01
+ 1982 1.35071454238e-02 4.85640176990e-02 -2.29818138237e-01
+ 1983 -9.60584912924e-02 3.95063679000e-02 -3.54942254081e-01
+ 1984 -8.99695287527e-02 3.46411635299e-02 -3.35060617824e-01
+ 1985 -1.20285917968e-01 1.82834577878e-02 -3.46983965482e-01
+ 1986 -1.00453969346e-01 1.15154263451e-02 -3.50931962958e-01
+ 1987 -9.78598203371e-02 -1.05835708664e-03 -3.36340775078e-01
+ 1988 -7.45972699246e-02 2.02240543286e-02 -3.78740740990e-01
+ 1989 -8.76116477850e-02 -1.06697632209e-02 -3.65460857189e-01
+ 1990 -7.72992634917e-02 -4.06230331514e-02 -3.50838522486e-01
+ 1991 -1.10938409939e-01 -1.16103108398e-02 -3.66803308091e-01
+ 1992 -2.08998889997e-01 1.90997502180e-02 -3.69840594018e-01
+ 1993 -1.90682977044e-01 -2.09693757346e-03 -3.88359482209e-01
+ 1994 -1.70071336876e-01 1.07364909800e-02 -3.89945993305e-01
+ 1995 -1.75411398789e-01 2.91454256921e-02 -3.78128904877e-01
+ 1996 -1.55717506012e-01 -1.34028222480e-02 -3.83177474911e-01
+ 1997 -1.56550683449e-01 2.14092320616e-03 -3.62067583072e-01
+ 1998 7.96999938995e-02 4.01990157381e-03 -4.20345786074e-01
+ 1999 5.27907929698e-02 -1.34670199486e-02 -4.01279040260e-01
+ 2000 9.13130258044e-02 -1.25600740106e-02 -4.25511460312e-01
+ 2001 7.72445691529e-02 -2.97446802203e-02 -4.14522187849e-01
+ 2002 7.31317041130e-03 8.99567583736e-02 -4.73830283227e-01
+ 2003 2.81717836717e-02 8.01737118985e-02 -4.87805899022e-01
+ 2004 -4.24723228758e-04 4.34576868812e-02 -4.54766448802e-01
+ 2005 -1.17511675224e-02 6.54794083621e-02 -4.51803983081e-01
+ 2006 -5.25000043161e-03 6.71568779054e-02 -4.69725810211e-01
+ 2007 4.46801812772e-03 5.30348867659e-02 -4.77674729736e-01
+ 2008 -2.10300227431e-02 6.01564581199e-02 -4.75594244801e-01
+ 2009 -1.43430060598e-02 3.54732615180e-02 -4.90451841383e-01
+ 2010 -3.86717845350e-02 5.41400439123e-02 -4.51645721400e-01
+ 2011 -3.90023617032e-02 7.74842096958e-02 -3.98732991966e-01
+ 2012 -4.62657648953e-02 9.78367392008e-02 -3.84910203165e-01
+ 2013 -6.18599951472e-02 5.25056214883e-02 -4.32665656465e-01
+ 2014 -8.65306279437e-03 3.62251188120e-02 -4.06513394414e-01
+ 2015 -1.72367272328e-02 6.06576963160e-02 -4.19635280155e-01
+ 2016 -3.99866495175e-02 5.78024663970e-02 -4.13402841765e-01
+ 2017 -4.18475139868e-02 4.05623380881e-02 -4.02577438475e-01
+ 2018 -1.46629471157e-01 1.48234253942e-01 -2.76166368437e-01
+ 2019 -1.29771928377e-01 1.41812896797e-01 -2.58113988563e-01
+ 2020 -1.33482399737e-01 1.37841514030e-01 -3.17921966117e-01
+ 2021 -1.40414269253e-01 1.64693513633e-01 -2.93610462948e-01
+ 2022 -1.29324912644e-01 1.55762680852e-01 -2.75710154415e-01
+ 2023 -1.21007214097e-01 1.34884403522e-01 -2.85951053683e-01
+ 2024 -1.26106238850e-01 1.81659909455e-01 -2.65165112466e-01
+ 2025 -1.41130936866e-01 2.08004772928e-01 -2.86743054290e-01
+ 2026 -1.11673591315e-01 1.44859118592e-01 -3.26428589664e-01
+ 2027 -1.07769404191e-01 1.40886884571e-01 -3.00323749452e-01
+ 2028 -1.01031250439e-01 1.21978501756e-01 -2.90932115280e-01
+ 2029 1.45154072032e-01 -5.14068980003e-02 -2.92591340959e-01
+ 2030 1.18565271918e-01 -4.03163733878e-02 -3.11701345169e-01
+ 2031 7.40061863757e-02 -4.87475615570e-02 -3.16169145549e-01
+ 2032 1.17846872784e-01 -1.48366597749e-02 -2.74145778850e-01
+ 2033 1.04732072510e-01 -1.56613258719e-02 -2.93089672535e-01
+ 2034 7.04149490126e-02 -1.30637688128e-02 -2.89864315243e-01
+ 2035 1.12101196326e-01 5.57149848791e-03 -2.96647250877e-01
+ 2036 2.37459200943e-01 -2.30300539414e-01 -3.26937981498e-01
+ 2037 2.27533948296e-01 -1.61351691959e-01 -3.18880569135e-01
+ 2038 2.55379347104e-01 -1.26037171187e-01 -3.37222154687e-01
+ 2039 2.26414111355e-01 -2.09864971418e-01 -3.54866618635e-01
+ 2040 2.21731444267e-01 -1.63262227826e-01 -3.41841400079e-01
+ 2041 2.38360875462e-01 -1.40356059266e-01 -3.61722734094e-01
+ 2042 1.89763296841e-01 -1.27717365277e-01 -2.92481571222e-01
+ 2043 1.94616841954e-01 -1.41476188660e-01 -3.31895678451e-01
+ 2044 2.06003687591e-01 -9.62239162370e-02 -3.56744818660e-01
+ 2045 1.88083541430e-01 -2.00487284465e-01 -3.46460645471e-01
+ 2046 -2.10069748177e-01 -1.55429610229e-01 -2.44211199673e-01
+ 2047 -1.90889214777e-01 -1.59142025524e-01 -2.73648396862e-01
+ 2048 -1.88050237943e-01 -1.90050579021e-01 -2.76190669599e-01
+ 2049 -2.25788480965e-01 -1.99370535750e-01 -2.85884593789e-01
+ 2050 -2.16048043459e-01 -1.65355330010e-01 -2.80111012989e-01
+ 2051 -2.00168069588e-01 -1.65658211537e-01 -2.93213957552e-01
+ 2052 -2.01368369969e-01 -1.88435975872e-01 -3.01430659607e-01
+ 2053 -1.92366650148e-01 -1.49699514740e-01 -3.17665760751e-01
+ 2054 -1.90266391000e-01 -1.75886812845e-01 -3.42216715432e-01
+ 2055 9.99269581829e-02 -9.74042362418e-02 -2.11804896516e-01
+ 2056 6.39252841469e-02 -1.00022737571e-01 -2.25300657735e-01
+ 2057 1.21239079495e-01 -7.17070248109e-02 -2.04853699991e-01
+ 2058 3.63181632583e-01 -1.67578741924e-01 -3.24009712312e-01
+ 2059 3.97386224438e-01 -1.74922667726e-01 -3.72383734508e-01
+ 2060 3.63181632583e-01 -1.65241122512e-01 -4.49120445170e-01
+ 2061 8.39359371306e-02 -9.16797605165e-02 -5.38912229656e-01
+ 2062 1.14476683026e-01 -6.64378356433e-02 -5.84330185512e-01
+ 2063 1.06668644530e-01 -4.58442873153e-02 -5.70134666274e-01
+ 2064 8.74942523342e-02 -4.81684755879e-02 -5.40327928727e-01
+ 2065 1.31708513127e-01 -8.35878635020e-02 -5.41708872880e-01
+ 2066 1.36144818392e-01 -6.94572125914e-02 -5.71055295709e-01
+ 2067 1.24871755678e-01 -5.32572071084e-02 -5.63727378731e-01
+ 2068 1.18156531264e-01 -5.72776392211e-02 -5.41720457852e-01
+ 2069 1.38517028527e-01 -4.04496893056e-02 -5.71999095089e-01
+ 2070 5.52627827034e-02 -8.60388413665e-02 -3.32204438237e-01
+ 2071 7.88925623086e-02 -7.81258944989e-02 -3.68472453166e-01
+ 2072 1.04388411291e-01 -7.08298998575e-02 -3.61712710267e-01
+ 2073 1.00920864354e-01 -1.07370292623e-01 -3.35226228903e-01
+ 2074 7.65808643508e-02 -1.02486156343e-01 -3.50814798924e-01
+ 2075 8.89736786429e-02 -9.24396174479e-02 -3.73363219949e-01
+ 2076 1.09331283409e-01 -9.23468620034e-02 -3.70486980278e-01
+ 2077 7.70264929315e-02 -7.75089422727e-02 -4.11500210995e-01
+ 2078 9.10900045029e-02 -9.67995569468e-02 -4.03678647430e-01
+ 2079 7.35589459948e-02 -1.14049335038e-01 -3.85013729631e-01
+ 2080 2.79008643438e-02 -9.27178837816e-02 -3.81991938965e-01
+ 2081 2.00565524771e-01 -1.39936435352e-01 -5.50758786671e-01
+ 2082 2.22041555215e-01 -1.22489470784e-01 -5.27613332366e-01
+ 2083 2.18314186409e-01 -1.08027313891e-01 -5.08501709072e-01
+ 2084 3.53054518461e-01 7.86151877461e-02 -5.54571981837e-01
+ 2085 3.36408300482e-01 4.14242465399e-02 -5.30473228741e-01
+ 2086 3.46089967348e-01 6.44037882726e-02 -4.99402776018e-01
+ 2087 1.70267535736e-01 5.28572583595e-02 -6.04557743831e-01
+ 2088 1.61850833464e-01 2.15062019830e-02 -6.12954543010e-01
+ 2089 1.98228950069e-01 9.25105682275e-03 -6.15637053985e-01
+ 2090 2.15966123786e-01 2.60667126870e-02 -6.10933358191e-01
+ 2091 2.01899302446e-01 1.70755208041e-01 7.10413705216e-02
+ 2092 3.01266201631e-01 2.80503472028e-01 -4.20312370375e-02
+ 2093 3.89979651863e-01 3.25723824671e-01 -4.72989758773e-02
+ 2094 3.01266201631e-01 1.44657451885e-01 3.54798466209e-02
+ 2095 3.50949651223e-01 2.33493088914e-01 -4.04342280733e-02
+ 2096 4.26653101242e-01 2.47969862971e-01 -4.34137176451e-02
+ 2097 4.35953188830e-03 3.47279599143e-01 -1.43713421805e-01
+ 2098 -1.52087452667e-02 2.70919398714e-01 -2.15124520151e-01
+ 2099 -9.79255699887e-03 3.06429452709e-01 -9.13193442850e-02
+ 2100 -1.82143371332e-02 3.17445546338e-01 -1.34371344093e-01
+ 2101 -3.87844782437e-02 2.56594061785e-01 -1.78864717086e-01
+ 2102 -2.86398451784e-02 3.59479071717e-01 -1.23587893196e-01
+ 2103 -2.12199289996e-02 3.63971693963e-01 -5.36181680352e-02
+ 2104 -4.13817093299e-02 1.04610680812e-01 -1.37819181665e-01
+ 2105 -2.32337438857e-02 1.33522110609e-01 -1.47453353372e-01
+ 2106 -2.08171936992e-02 1.54790521766e-01 -1.27594277715e-01
+ 2107 -1.83682342781e-02 8.21943147709e-02 -1.19709277882e-01
+ 2108 -1.05106289579e-02 1.09481978629e-01 -1.31462382608e-01
+ 2109 -4.65855719091e-03 1.15647542074e-01 -1.12892675248e-01
+ 2110 3.19952502409e-02 2.32518237828e-01 -2.49890120240e-01
+ 2111 1.31265182967e-02 2.62012135177e-01 -2.53299426059e-01
+ 2112 -2.62750374389e-02 2.63977974086e-01 -2.42952698503e-01
+ 2113 3.36378983233e-02 2.65984471961e-01 -2.38196216343e-01
+ 2114 -4.41368963530e-02 -3.12738825753e-02 -2.17309952101e-01
+ 2115 -2.14945057347e-02 -4.43696101124e-02 -1.97966431405e-01
+ 2116 -3.17637207037e-02 -2.43546748999e-02 -2.29239527924e-01
+ 2117 -1.25444017418e-02 -3.07787573661e-02 -2.20320372734e-01
+ 2118 9.06294726465e-03 -3.68903266535e-02 -1.54766706574e-01
+ 2119 -2.29858576681e-02 -3.22292183669e-02 -1.51736785059e-01
+ 2120 1.37118894049e-02 -1.83273493181e-02 -1.36947397509e-01
+ 2121 -6.10433317019e-03 -9.03228468195e-03 -1.28987680144e-01
+ 2122 2.98483477615e-02 -2.24596756980e-02 -1.71674992495e-01
+ 2123 2.91184704495e-02 -2.51925623601e-03 -1.42279818435e-01
+ 2124 -7.58453173235e-02 -2.31269332793e-02 -2.07326123304e-01
+ 2125 -6.90571371905e-02 -3.21491861683e-02 -1.82990688209e-01
+ 2126 -6.02499533944e-02 -1.70219020018e-02 -2.01125451324e-01
+ 2127 -5.05260453294e-02 -2.10017268353e-02 -1.82834937268e-01
+ 2128 -7.04915545718e-02 7.31493468274e-03 -1.97030792624e-01
+ 2129 -6.10264930630e-02 1.35136157748e-02 -1.67547692189e-01
+ 2130 3.76469714087e-02 1.26865119919e-02 -1.66023527484e-01
+ 2131 4.09763899364e-02 4.46148842657e-03 -1.93534879874e-01
+ 2132 5.46839157474e-02 1.64842853790e-02 -1.60523558184e-01
+ 2133 2.16841672557e-02 -1.61721344232e-02 -2.02792746794e-01
+ 2134 3.20712440133e-02 2.44685335152e-03 -2.11408223754e-01
+ 2135 -3.09611785889e-01 9.45253691926e-02 -5.12941076077e-01
+ 2136 -3.13763266904e-01 8.53874775852e-02 -4.89592683913e-01
+ 2137 -2.91207684753e-01 8.30637453354e-02 -5.28952847576e-01
+ 2138 -2.94051284614e-01 1.00324190190e-01 -5.15530314326e-01
+ 2139 -2.91632104865e-01 9.61652027846e-02 -5.00827798966e-01
+ 2140 -4.41648149870e-01 -2.54318012843e-03 -5.00457416202e-01
+ 2141 -4.12472224806e-01 -8.91425073596e-02 -5.10714227174e-01
+ 2142 -4.26372843062e-01 -6.96706837533e-03 -4.53444262564e-01
+ 2143 -4.01830457416e-01 -6.61745826117e-02 -4.44611085333e-01
+ 2144 -4.26766640594e-01 1.47750210975e-01 -3.72273546698e-01
+ 2145 -3.97615184625e-01 1.91387152624e-01 -3.43842393843e-01
+ 2146 -3.46422776938e-01 2.01752991769e-01 -2.75791693636e-01
+ 2147 -3.36286943159e-01 1.24104547063e-01 -3.21025845966e-01
+ 2148 -3.90857962106e-01 1.39621522820e-01 -3.73998495396e-01
+ 2149 -3.77971539751e-01 1.74381401096e-01 -3.52243893581e-01
+ 2150 -3.37295386335e-01 1.75623376684e-01 -3.09677260022e-01
+ 2151 -4.19656136344e-01 2.24658255129e-01 -3.83461941195e-01
+ 2152 -3.86117625939e-01 1.90893552256e-01 -3.81457425061e-01
+ 2153 -3.29176438908e-01 2.01012591218e-01 -3.32214240463e-01
+ 2154 -2.57865924088e-01 9.02094870920e-03 -3.92817433196e-01
+ 2155 -2.88453264609e-01 6.61925476104e-02 -3.85132912995e-01
+ 2156 -2.63346452895e-01 7.18465086282e-02 -3.93505791492e-01
+ 2157 -2.35499376778e-01 4.60876896866e-02 -4.01534490842e-01
+ 2158 -2.91405186850e-01 1.38451895622e-02 -4.48370043225e-01
+ 2159 -3.00616992943e-01 5.03515085453e-02 -4.24729493081e-01
+ 2160 -2.78745952074e-01 5.85522390750e-02 -4.21110006933e-01
+ 2161 -2.65314401056e-01 3.69482699294e-02 -4.35663878312e-01
+ 2162 -2.85705961403e-01 7.50626691969e-02 -4.30540864845e-01
+ 2163 -2.18333686238e-01 1.40179886348e-02 -4.38796093863e-01
+ 2164 -1.96906174538e-01 -5.48477862896e-03 -4.34329815438e-01
+ 2165 -2.05958537613e-01 -1.77346822236e-02 -4.09107345893e-01
+ 2166 -2.61750259733e-01 -4.06679222096e-02 -4.05492279847e-01
+ 2167 -2.34100655951e-01 -2.07736052863e-02 -4.31919771408e-01
+ 2168 -2.14088279748e-01 -2.67027822538e-02 -4.30289143203e-01
+ 2169 -2.25850556868e-01 -4.19420525252e-02 -4.12127272761e-01
+ 2170 -1.99495731634e-01 -3.86106925748e-02 -4.42779713206e-01
+ 2171 -2.22218021883e-01 -3.56708822840e-02 -4.51470940514e-01
+ 2172 -3.19051238328e-01 -2.02032214712e-01 -5.47171748640e-01
+ 2173 -3.03329584936e-01 -2.03701225060e-01 -5.22654583113e-01
+ 2174 -2.56460164459e-01 -1.75574447176e-02 -4.68954844760e-01
+ 2175 -2.95289522495e-01 -3.58436813566e-02 -4.61044889876e-01
+ 2176 -2.80704123121e-01 -4.38630342612e-02 -5.23132653674e-01
+ 2177 -2.46736564877e-01 -2.29036799874e-02 -5.10346687292e-01
+ 2178 -2.51461072502e-01 -3.97669582726e-02 -4.87301797094e-01
+ 2179 -2.75680947207e-01 -5.93609538836e-02 -4.88144144616e-01
+ 2180 -2.26966613466e-01 -5.92457545019e-02 -4.81761511708e-01
+ 2181 4.76854929051e-02 -8.63095480576e-02 -6.22797180593e-01
+ 2182 6.93690302215e-02 -4.54833693585e-02 -5.82270404196e-01
+ 2183 9.45851631213e-02 -4.40542164956e-02 -5.98096316586e-01
+ 2184 9.63514609129e-02 -6.37527294138e-02 -6.26272660980e-01
+ 2185 5.16762901645e-02 -2.51293253372e-02 -6.20543137536e-01
+ 2186 6.48017159556e-02 -1.83052804445e-02 -5.94276634290e-01
+ 2187 8.48556441969e-02 -2.40279380259e-02 -6.03144511059e-01
+ 2188 8.27900030832e-02 -3.04848538148e-02 -6.23611472146e-01
+ 2189 1.88455901706e-01 -2.92272075682e-02 -4.15107618648e-01
+ 2190 2.06768403689e-01 -5.19675249638e-02 -4.00650398962e-01
+ 2191 1.82046721274e-01 -3.11516110745e-02 -4.52554910060e-01
+ 2192 -2.52286360696e-01 -2.52510905311e-01 -3.19150266660e-01
+ 2193 -2.69949127159e-01 -1.88363608684e-01 -2.72853215941e-01
+ 2194 -2.55967629446e-01 -1.87311328981e-01 -2.99205690502e-01
+ 2195 -2.68296252124e-01 -2.30181407843e-01 -3.20824670977e-01
+ 2196 -2.81726791492e-01 -2.45172953933e-01 -3.10462681428e-01
+ 2197 -1.54969964096e-01 -6.39275778241e-02 -1.15853335982e-01
+ 2198 -1.80749222270e-01 -8.84130199468e-02 -8.88377902413e-02
+ 2199 -2.08297838683e-01 -1.01090920898e-01 -8.71728192554e-02
+ 2200 -1.34362148563e-01 -1.15435737095e-01 -1.24794320995e-01
+ 2201 -1.31458762190e-01 -9.79762307449e-02 -1.13918791401e-01
+ 2202 -1.56671006297e-01 -1.07828149107e-01 -9.41407682407e-02
+ 2203 -1.67010678581e-01 -1.22751792794e-01 -9.47984469166e-02
+ 2204 -1.78979864031e-01 -1.00220561118e-01 -6.34872154865e-02
+ 2205 -2.32307738617e-01 -1.37383904192e-01 -3.48066987600e-02
+ 2206 -1.47465362147e-01 -1.22171552941e-01 -7.90080444040e-02
+ 2207 -1.58372048498e-01 -1.51728720389e-01 -7.24282004995e-02
+ 2208 -1.05044173911e-01 -1.14565377315e-01 -1.01108717226e-01
+ 2209 -8.44363583788e-02 -1.66073536586e-01 -1.10049702239e-01
+ 2210 -1.25651989444e-01 -6.30572180445e-02 -9.21677322130e-02
+ 2211 3.66611830816e-01 -1.81415193299e-01 -5.51227001673e-01
+ 2212 3.46862320506e-01 -1.30114921752e-01 -5.75379530085e-01
+ 2213 3.53630023321e-01 -2.03936620705e-01 -5.90616530982e-01
+ 2214 3.42063342462e-01 -1.59831060193e-01 -5.98883544964e-01
+ 2215 2.89417789949e-01 -1.47456598546e-01 -6.26009459587e-01
+ 2216 2.80445034982e-01 -2.07427708490e-01 -6.27171895926e-01
+ 2217 2.19450998862e-01 1.33914331624e-01 -6.83036881346e-01
+ 2218 2.07427722934e-01 5.25378892884e-02 -6.95452599606e-01
+ 2219 2.27827862678e-01 3.38693972679e-02 -7.17449832079e-01
+ 2220 2.48755099203e-01 8.01047615300e-02 -6.63252783201e-01
+ 2221 2.32411617172e-01 3.25248223019e-02 -6.77510596432e-01
+ 2222 2.54339675080e-01 1.34081386260e-02 -6.86194750356e-01
+ 2223 -5.15202799517e-02 -1.29081323383e-02 -1.52015173037e-01
+ 2224 -2.51656217328e-02 -5.14969495964e-02 -1.72294332514e-01
+ 2225 -4.60214974293e-02 -3.21892022676e-02 -1.67363736634e-01
+ 2226 -7.05484891239e-02 -2.00087944228e-02 -1.36761041863e-01
+ 2227 -5.68740427033e-02 -4.33500003004e-02 -1.62310503717e-01
+ 2228 -3.10165017956e-02 -7.78920203100e-02 -1.67179781079e-01
+ 2229 -1.58801426292e-01 2.08191931731e-01 -1.11193038104e-01
+ 2230 -1.95234167340e-01 1.98316203633e-01 -1.13617001678e-01
+ 2231 -1.75673888808e-01 2.20534541508e-01 -1.57164173718e-01
+ 2232 -1.45761240604e-01 2.23004156980e-01 -1.40224486131e-01
+ 2233 -1.48248555835e-01 1.93939205051e-01 -1.22237503608e-01
+ 2234 -1.69019426380e-01 1.82604477427e-01 -1.27534967825e-01
+ 2235 -1.20823222862e-01 1.67343868595e-01 -8.73108334972e-02
+ 2236 -1.55710501526e-01 1.06744349266e-01 -6.82765560380e-02
+ 2237 -1.19412130062e-01 1.61956254068e-01 -1.09997522371e-01
+ 2238 -1.36150222994e-01 1.28962687140e-01 -1.11823728078e-01
+ 2239 -2.43707204127e-01 4.80760872281e-02 -3.66603792706e-01
+ 2240 -2.58994391456e-01 3.05369155102e-02 -3.44779914816e-01
+ 2241 -2.31365437307e-01 -1.79669907593e-02 -3.61123536373e-01
+ 2242 -2.25287901361e-01 1.57401497151e-02 -3.77499540411e-01
+ 2243 -2.33996640727e-01 2.48183328641e-02 -3.57310254417e-01
+ 2244 -2.40951244479e-01 5.37296693083e-03 -3.39663156394e-01
+ 2245 -2.36627844146e-01 6.76036564875e-02 -3.53496972462e-01
+ 2246 -2.60122858824e-01 5.20528823111e-02 -2.96742396435e-01
+ 2247 -2.26040212939e-01 3.00841275824e-02 -3.45474528157e-01
+ 2248 -2.32493904675e-01 3.54897604164e-03 -3.13086017992e-01
+ 2249 -2.01690698403e-01 2.38535069836e-01 -6.09653759232e-01
+ 2250 -2.76268023802e-01 3.03901302377e-01 -6.64740319424e-01
+ 2251 -1.58423861577e-01 3.97376657118e-01 -4.03746871178e-01
+ 2252 -1.39804791763e-01 3.72153037846e-01 -4.54699245353e-01
+ 2253 -2.38969562243e-01 3.20441305345e-01 -4.06767207403e-01
+ 2254 -2.11252557224e-01 3.80294203564e-01 -4.23546815110e-01
+ 2255 -1.84081080951e-01 3.65647102498e-01 -4.56811109758e-01
+ 2256 -1.93501925539e-01 3.20862803331e-01 -4.56712802836e-01
+ 2257 -1.91765049280e-01 3.89278365253e-01 -4.92285575733e-01
+ 2258 -3.14566409811e-01 2.26694163849e-01 -4.36443093631e-01
+ 2259 -3.26939341249e-01 2.52677599886e-01 -3.61711590882e-01
+ 2260 -2.95746014798e-01 2.43490977251e-01 -3.63829807378e-01
+ 2261 -2.73962885854e-01 2.25905947914e-01 -4.02254667000e-01
+ 2262 -3.15738179165e-01 2.86411730152e-01 -4.49794898302e-01
+ 2263 -3.23596210339e-01 2.83828165409e-01 -3.95523294912e-01
+ 2264 -3.01036998228e-01 2.69150557052e-01 -3.88659031277e-01
+ 2265 -2.88278573409e-01 2.65980397428e-01 -4.22552012325e-01
+ 2266 -2.86335817292e-01 2.51889383952e-01 -3.27523164252e-01
+ 2267 -2.33359361897e-01 2.25117731980e-01 -3.68066240370e-01
+ 2268 -2.96527194367e-01 2.83302688120e-01 -3.72731010492e-01
+ 2269 -2.75134655208e-01 2.85623514218e-01 -4.15606471672e-01
+ 2270 -8.61283997735e-02 4.40568599767e-01 -6.14570008075e-01
+ 2271 -7.79092735938e-02 5.00000000000e-01 -6.43553015262e-01
+ 2272 -1.84996066480e-02 4.55426449826e-01 -5.80918728537e-01
+ 2273 9.52274184690e-03 5.00000000000e-01 -5.89023640149e-01
+ 2274 -9.42798921325e-02 2.16521948411e-01 -4.96927244590e-01
+ 2275 -9.15176387991e-02 1.81460664781e-01 -4.77034994887e-01
+ 2276 -2.74688421638e-01 -3.35300926474e-01 2.99726446647e-01
+ 2277 -2.04808545166e-01 -2.24867626448e-01 2.99282396328e-01
+ 2278 -1.59902275250e-01 -3.49532423547e-01 3.32870762311e-01
+ 2279 -1.23060464592e-01 -2.89888900014e-01 2.55064805972e-01
+ 2280 -1.08557546500e-01 -2.18416931610e-01 2.65897178402e-01
+ 2281 -1.28284447574e-01 -2.34355291164e-01 3.21378606771e-01
+ 2282 -5.00000000000e-01 2.54372471302e-01 -2.61254482531e-01
+ 2283 -4.46437424229e-01 2.90374325165e-01 -1.96933247156e-01
+ 2284 -4.59828068172e-01 2.60444612457e-01 -2.67685883932e-01
+ 2285 -4.46437424229e-01 3.16438836753e-01 -3.45033444849e-01
+ 2286 -4.46437424229e-01 1.80592816610e-01 -2.67522361190e-01
+ 2287 -4.19656136344e-01 1.85561487748e-01 -1.61311644657e-01
+ 2288 -3.03773124057e-01 -6.85404875758e-02 1.50873198959e-01
+ 2289 -4.01886562029e-01 -1.36253895472e-01 4.34979821818e-03
+ 2290 -4.34591041352e-01 -2.57502596982e-01 1.69566532145e-01
+ 2291 -4.01886562029e-01 -2.84270243788e-01 3.25436599479e-01
+ 2292 -4.01886562029e-01 1.19607259979e-02 5.76149988889e-02
+ 2293 -4.34591041352e-01 -6.00152837910e-02 -8.98120158142e-03
+ 2294 -4.50943281014e-01 -1.70011462843e-01 1.18264098814e-01
+ 2295 -4.34591041352e-01 -1.58692849335e-01 2.05076665926e-01
+ 2296 -5.00000000000e-01 -2.03835121266e-01 1.07394398766e-01
+ 2297 -5.00000000000e-01 -2.03769030214e-01 2.32178399410e-01
+ 2298 -4.03059041458e-01 1.27515169145e-01 -6.14089322856e-01
+ 2299 -4.36975780658e-01 1.32419841390e-01 -6.32239810340e-01
+ 2300 3.18551908452e-01 2.25795981786e-02 -7.54966554719e-01
+ 2301 2.48206152613e-01 2.62269199082e-02 -7.73724916039e-01
+ 2302 1.64274870151e-01 3.49692265443e-02 -7.54966554719e-01
+ 2303 1.01898164272e-01 6.35218792134e-02 -7.40729067330e-01
+ 2304 1.16271252488e-01 2.86159492189e-02 -7.03735425342e-01
+ 2305 9.10931570090e-02 -2.01351283642e-03 -7.29874070684e-01
+ 2306 1.29059166540e-01 5.60958768144e-03 -7.33914056928e-01
+ 2307 1.33048732135e-01 -6.09178693143e-03 -7.07872578038e-01
+ 2308 1.21855828365e-01 -3.80806736851e-02 -7.26677392497e-01
+ 2309 3.33746051367e-01 1.79753103983e-01 -4.64799070915e-01
+ 2310 3.06430786077e-01 1.50736891842e-01 -4.96561902058e-01
+ 2311 2.09646179116e-01 1.40777600597e-01 -5.04870955958e-01
+ 2312 2.05733196088e-01 2.24513786526e-01 -4.98603873394e-01
+ 2313 3.03822130725e-01 2.06561015795e-01 -4.92383847015e-01
+ 2314 2.90816661919e-01 1.78096878737e-01 -5.09309776347e-01
+ 2315 2.21088882558e-01 1.80577346872e-01 -5.19098437044e-01
+ 2316 1.72598340519e-01 3.43309224327e-01 -5.14100705054e-01
+ 2317 1.66704124415e-01 2.64963836490e-01 -5.31168612620e-01
+ 2318 1.98617721635e-01 3.16342524351e-01 -4.92390878904e-01
+ 2319 1.71321781073e-01 3.04694601653e-01 -4.97989115684e-01
+ 2320 1.66966783854e-01 2.39592802204e-01 -5.03997190937e-01
+ 2321 7.86525006670e-02 2.10041661835e-01 -5.76562730237e-01
+ 2322 5.68785775115e-02 1.85281568887e-01 -5.93462905644e-01
+ 2323 6.81538132450e-02 1.81873028475e-01 -6.39328256846e-01
+ 2324 1.15714832408e-01 1.74457968293e-01 -5.96778014127e-01
+ 2325 8.85859236199e-02 1.80338195432e-01 -5.65096077165e-01
+ 2326 6.97721255150e-02 1.69193992322e-01 -5.80637871988e-01
+ 2327 8.15867986719e-02 1.61559106526e-01 -6.06939761571e-01
+ 2328 1.58690294274e-01 1.01665849448e-01 -7.32024587564e-01
+ 2329 1.64863013475e-01 4.86956382406e-02 -7.29089449704e-01
+ 2330 1.11147265435e-01 6.29628853564e-02 -6.34873614569e-01
+ 2331 8.64878053224e-02 5.43648852700e-02 -6.99915743046e-01
+ 2332 1.01120211222e-01 3.04746862600e-02 -6.82373842626e-01
+ 2333 1.22437319930e-01 2.82432866476e-02 -6.33165123502e-01
+ 2334 7.92844671473e-02 1.06746239035e-02 -6.92679078615e-01
+ 2335 4.64179862605e-02 3.66098912402e-02 -7.24144547239e-01
+ 2336 1.32067386299e-01 4.72551380341e-02 -6.09134860713e-01
+ 2337 1.35304896954e-01 2.51423758330e-02 -6.14288180877e-01
+ 2338 1.79095987921e-01 -1.59400770848e-01 -6.39441828403e-01
+ 2339 1.76953396343e-01 -1.83993658580e-01 -5.99020724542e-01
+ 2340 2.16238593024e-01 -1.81795447015e-01 -6.46930268702e-01
+ 2341 2.27191067006e-01 -2.05655597559e-01 -6.22479012895e-01
+ 2342 2.08302416355e-01 -1.38045468423e-01 -6.52616119188e-01
+ 2343 2.48090413680e-01 -1.75023470787e-01 -6.58209275992e-01
+ 2344 3.34702950448e-01 -2.99499882276e-01 -5.69091946446e-01
+ 2345 2.85830363485e-01 -3.08438706855e-01 -5.73804677369e-01
+ 2346 3.89801966966e-01 -3.66333254851e-01 -6.56061297631e-01
+ 2347 3.39372772613e-01 -3.56329030141e-01 -6.37853508027e-01
+ 2348 3.38583865962e-01 -3.58431943843e-01 -6.94208576272e-01
+ 2349 -1.83433698072e-02 -3.25614913862e-01 -7.65339994385e-01
+ 2350 1.60715160954e-04 -2.04686980875e-01 -7.86893329590e-01
+ 2351 7.33472157318e-02 -1.30722411553e-01 -7.10482012447e-01
+ 2352 4.88981438212e-02 -2.53814941035e-01 -7.50321341631e-01
+ 2353 4.59658291402e-02 -1.81068984502e-01 -7.70241006224e-01
+ 2354 6.12877721869e-02 -7.47586460028e-02 -7.50321341631e-01
+ 2355 1.50141095407e-01 1.18853406367e-01 -3.22251961549e-01
+ 2356 1.90978323746e-01 1.15878855962e-01 -3.26287496336e-01
+ 2357 1.85409950660e-01 1.62323140299e-01 -3.34128080311e-01
+ 2358 2.17501545756e-01 1.13205275384e-01 -3.08499817945e-01
+ 2359 4.91196993248e-02 1.01545725212e-01 -3.08337641873e-01
+ 2360 5.69484699759e-02 1.10829966574e-01 -2.92578723276e-01
+ 2361 9.92845148496e-03 -1.01736813398e-02 -3.25908521456e-01
+ 2362 1.22147741054e-02 -1.34619960729e-02 -3.56348654487e-01
+ 2363 -7.66236805297e-03 3.24521665701e-02 -3.59195176525e-01
+ 2364 -3.32297662064e-03 2.04357604222e-02 -3.27806202814e-01
+ 2365 1.38546854566e-02 1.07929892760e-02 -3.33334990508e-01
+ 2366 1.66876451941e-02 1.55896696592e-02 -3.56103902213e-01
+ 2367 9.95681673539e-02 1.07012266371e-02 -3.36100498555e-01
+ 2368 1.08055724455e-01 1.77743561325e-02 -3.66695193342e-01
+ 2369 7.48464849397e-02 3.15171405264e-02 -3.88005009652e-01
+ 2370 1.01990772502e-01 1.46106010942e-01 -3.00414931623e-01
+ 2371 7.55441488578e-02 1.47151129544e-01 -2.90518944639e-01
+ 2372 9.04842440870e-02 2.26018741468e-02 -3.11389037574e-01
+ 2373 5.41501633204e-02 -1.06970895780e-02 -2.83655300281e-01
+ 2374 5.11227263318e-02 -3.36973916626e-02 -2.99122182164e-01
+ 2375 8.65017155370e-05 5.67166062252e-02 -2.39243864892e-01
+ 2376 -6.34301985189e-02 7.40118537763e-02 -2.33174692963e-01
+ 2377 -5.47663721620e-02 1.00376614202e-01 -2.25567259453e-01
+ 2378 -2.61749785440e-02 1.83447085564e-01 -3.20125871944e-01
+ 2379 -1.85000551718e-02 4.86929016480e-02 -3.28637132636e-01
+ 2380 -5.14352233779e-02 4.76584427277e-02 -3.41911877771e-01
+ 2381 -4.86202748858e-02 5.60374249968e-02 -3.23314169543e-01
+ 2382 -5.11743253552e-02 7.76461226567e-02 -3.10160240929e-01
+ 2383 -7.33714956382e-02 5.01522329546e-02 -3.12547426835e-01
+ 2384 -6.15651662729e-02 2.53412103423e-01 -2.25078832304e-01
+ 2385 -5.82757801505e-02 2.52582858774e-01 -2.43461388030e-01
+ 2386 -1.25360898178e-02 3.56204132676e-02 -3.12734913325e-01
+ 2387 9.13881647568e-02 -5.32650412926e-02 -3.57782258041e-01
+ 2388 1.38820088528e-01 -5.50379322548e-02 -3.42063721648e-01
+ 2389 1.20461984318e-01 -4.58122802318e-02 -3.44028129633e-01
+ 2390 7.11248125458e-02 -1.96395942239e-01 -3.88662599670e-01
+ 2391 4.95128384448e-02 -1.44556913010e-01 -3.85327269318e-01
+ 2392 6.05501259842e-02 -1.22824541657e-01 -3.51023825381e-01
+ 2393 7.68747568044e-02 -1.37877870595e-01 -3.35539768590e-01
+ 2394 9.51709200957e-02 -1.65888364267e-01 -3.88349059984e-01
+ 2395 7.27475681784e-02 -1.41498204105e-01 -3.86230019644e-01
+ 2396 7.52168513996e-02 -1.25963602817e-01 -3.60276749111e-01
+ 2397 9.09888470848e-02 -1.37045509162e-01 -3.53038352492e-01
+ 2398 2.18177036340e-02 -6.81224776411e-02 -1.87117988515e-01
+ 2399 1.63304045040e-02 -4.66140023853e-02 -2.13088077475e-01
+ 2400 8.88183797620e-03 -3.46372038313e-02 -2.05446916952e-01
+ 2401 1.00571818869e-02 -4.49839211505e-02 -1.85586470805e-01
+ 2402 4.20867027770e-02 -7.18682514111e-02 -2.18884304846e-01
+ 2403 2.65497756004e-02 -8.46961055034e-02 -2.47913182467e-01
+ 2404 3.29039786437e-02 -5.48004515268e-02 -2.30420292483e-01
+ 2405 1.94851191483e-02 -5.76630876268e-02 -2.53618206776e-01
+ 2406 1.90380706813e-02 -5.90564712537e-02 -2.87148991408e-01
+ 2407 2.58792028999e-02 -8.67861809437e-02 -2.98209359416e-01
+ 2408 1.72606882126e-02 -5.61739435494e-02 -3.31961567456e-01
+ 2409 1.32923942231e-02 -3.86483129908e-02 -3.09650463435e-01
+ 2410 3.06254709330e-02 -4.88261844809e-02 -3.02842081953e-01
+ 2411 3.90486924961e-02 -6.39025620167e-02 -3.15446690807e-01
+ 2412 -2.23193777621e-01 2.35457671059e-01 -4.19035579247e-01
+ 2413 -1.97792495344e-01 2.22333191985e-01 -4.25457943575e-01
+ 2414 -1.88601665500e-01 2.40438222548e-01 -4.06690385640e-01
+ 2415 -2.02472243736e-01 2.55222885451e-01 -3.96152956776e-01
+ 2416 -1.80459489551e-01 2.38651760018e-01 -3.85585541478e-01
+ 2417 -1.97194268932e-01 2.59935523108e-01 -3.59226976102e-01
+ 2418 -1.90174646343e-01 2.10600982909e-01 -4.03184456301e-01
+ 2419 -1.12473554399e-01 2.47486824027e-01 -3.25831806337e-01
+ 2420 -9.21812566838e-02 2.58167612856e-01 -3.45232656314e-01
+ 2421 -8.02470537631e-02 2.78352806136e-01 -3.50810657762e-01
+ 2422 -2.43516286599e-01 1.88357251632e-01 -3.31639730160e-01
+ 2423 -2.13770193828e-01 1.98370672035e-01 -3.02755638977e-01
+ 2424 -1.93818685091e-01 2.21757622410e-01 -3.06526848490e-01
+ 2425 -2.75448281962e-01 2.18458513063e-01 -3.16753182818e-01
+ 2426 -2.45155713543e-01 2.18443263007e-01 -2.98811751266e-01
+ 2427 -2.42316547623e-01 2.40725426915e-01 -3.00011261704e-01
+ 2428 -2.49087830758e-01 2.16218440016e-01 -2.75726921564e-01
+ 2429 -2.46795140486e-01 2.48529274382e-01 -2.65983772371e-01
+ 2430 -2.96492741994e-01 2.15128903604e-01 -2.91096654041e-01
+ 2431 -4.11360067942e-01 9.17538962777e-02 -3.52317298349e-01
+ 2432 -3.88280202239e-01 9.96564588361e-02 -3.58600071960e-01
+ 2433 -3.51040269652e-01 7.59901203369e-02 -3.18152164528e-01
+ 2434 -3.67040101913e-01 5.23031072496e-02 -2.88504050395e-01
+ 2435 -9.49722312665e-02 -5.32328423869e-02 -4.45915700785e-02
+ 2436 -7.41507720873e-02 -5.74057711127e-02 -7.00444249634e-02
+ 2437 -7.90799215865e-02 -6.44044233045e-02 -1.06558933473e-01
+ 2438 -1.22318213276e-01 -1.88069612581e-02 -7.52858333241e-02
+ 2439 -1.02976299880e-01 -2.70074630818e-02 -4.91956915307e-02
+ 2440 -8.53591883425e-02 -3.66935044525e-02 -6.71343023313e-02
+ 2441 -9.23814267603e-02 -3.44551836936e-02 -9.05072671271e-02
+ 2442 -4.84001634090e-02 -5.45800476469e-02 -5.89827713386e-02
+ 2443 -7.19282546419e-02 -2.79055999218e-02 -5.87898257041e-02
+ 2444 -7.57461454184e-02 -2.01541665181e-02 -8.96770345841e-02
+ 2445 -9.16384550984e-02 -8.98258560050e-03 -2.77096711896e-02
+ 2446 9.80895019802e-02 1.69287041887e-01 -2.04429394974e-01
+ 2447 8.93752450567e-02 1.41541235584e-01 -2.12635709888e-01
+ 2448 7.84817201692e-02 2.74635982853e-02 -1.60949388490e-01
+ 2449 8.35648021301e-02 1.71835254885e-02 -1.35514299776e-01
+ 2450 1.78903556863e-01 -1.45735976253e-02 -1.66772246133e-01
+ 2451 2.85935704575e-01 2.11049147737e-02 -1.23062564482e-01
+ 2452 2.07807711646e-01 -5.65013646519e-02 -2.37041678634e-01
+ 2453 1.88496852242e-01 -1.75337307666e-02 -2.12103412225e-01
+ 2454 2.66372639182e-01 9.96518681794e-03 -1.67988359464e-01
+ 2455 3.05205141098e-01 -6.84692991078e-03 -1.69908852816e-01
+ 2456 2.85852858812e-01 4.31364931755e-02 -1.66878608333e-01
+ 2457 2.79671542835e-01 1.08374186992e-01 -2.07582851439e-01
+ 2458 2.47222440485e-01 9.63810244948e-02 -1.96243858432e-01
+ 2459 2.60402106313e-01 1.36326031676e-01 -1.60736563105e-01
+ 2460 1.43655890285e-01 -2.51199128257e-02 -1.64790347290e-01
+ 2461 1.46810604930e-01 -3.61689980673e-02 -2.05320476591e-01
+ 2462 1.28398092980e-01 -3.86798843571e-02 -1.94196994845e-01
+ 2463 2.26261405026e-01 1.49760215442e-01 -1.28426362169e-01
+ 2464 1.35015206701e-01 1.68859640733e-01 -1.59354082498e-01
+ 2465 1.36591954503e-01 6.42982480836e-02 1.21331989036e-02
+ 2466 1.09358644834e-01 5.75640817347e-02 -1.17724684010e-02
+ 2467 9.93952481217e-02 1.02435175914e-01 2.95600723175e-02
+ 2468 7.54830706897e-02 8.07439781723e-02 -8.12310855997e-03
+ 2469 1.42072962198e-01 -2.90940754025e-02 -9.17735487646e-02
+ 2470 1.03934880074e-01 -6.94218937234e-03 -8.90121892814e-02
+ 2471 1.15419943414e-01 9.89374222176e-03 -1.07315861813e-01
+ 2472 1.44673685943e-01 7.37795399701e-04 -1.15257992312e-01
+ 2473 1.71293771402e-01 -8.56955098093e-02 -8.21782584899e-02
+ 2474 2.68649777972e-01 -1.23835033514e-01 -7.24635883781e-02
+ 2475 2.53470328552e-01 -1.15263458199e-01 -9.71770944980e-02
+ 2476 -4.26766640594e-01 1.08653443593e-01 -1.50123250160e-01
+ 2477 -3.83784132029e-01 5.82261507658e-02 -1.63868041157e-01
+ 2478 -3.25676198043e-01 4.11082563629e-02 -2.27980461145e-01
+ 2479 -3.61652509119e-01 1.08418835865e-01 -1.62636568576e-01
+ 2480 -3.45694160564e-01 7.06570181766e-02 -1.69816832220e-01
+ 2481 -2.94258880752e-01 6.33887110450e-02 -2.14541375900e-01
+ 2482 -3.98909557449e-01 2.49167523411e-02 -1.13500412166e-01
+ 2483 -3.43081120356e-01 5.25943750304e-02 -1.38221343247e-01
+ 2484 -2.64621680533e-01 3.26605927599e-02 -1.89510414280e-01
+ 2485 -3.65712123084e-01 1.00205779990e-01 -1.11653203295e-01
+ 2486 -4.11360067942e-01 6.56893846902e-02 -2.04217100657e-01
+ 2487 -4.33520050957e-01 9.19309071011e-02 -2.73148774057e-01
+ 2488 -4.51177760396e-01 1.29320787174e-01 -2.60063431526e-01
+ 2489 -1.50694100308e-01 2.74509471517e-02 -3.43826815469e-01
+ 2490 -1.41430676108e-01 2.47386078386e-03 -3.42595383999e-01
+ 2491 -1.42247256801e-01 -2.27251839692e-02 -3.54345418577e-01
+ 2492 -1.61176119787e-01 1.37371875022e-01 -3.68274863179e-01
+ 2493 -1.54083025288e-01 1.66728054430e-01 -4.03288767705e-01
+ 2494 -1.25407341683e-01 1.64116812192e-01 -3.83339790723e-01
+ 2495 -1.14616047129e-01 1.48133101369e-01 -3.55858349970e-01
+ 2496 -1.39156306524e-01 1.26958992273e-01 -4.07474831767e-01
+ 2497 -1.41767514613e-01 1.50000739462e-01 -4.17750778589e-01
+ 2498 -1.23339629577e-01 1.52224136525e-01 -3.99173543131e-01
+ 2499 -1.15456195840e-01 1.37604104088e-01 -3.86130500098e-01
+ 2500 -2.27855046840e-01 4.20686901975e-02 -1.05340603228e-01
+ 2501 -1.91782774183e-01 7.44065197315e-02 -8.68085796330e-02
+ 2502 -1.67516661824e-01 5.80854449971e-02 -7.73403645670e-02
+ 2503 -1.73419741974e-01 3.37559928628e-02 -8.18722688315e-02
+ 2504 -1.68222085679e-01 3.39013649581e-02 -1.28956276111e-01
+ 2505 -1.64051557628e-01 5.81823597273e-02 -1.08729702753e-01
+ 2506 -1.52784777498e-01 4.99975936775e-02 -9.61482606735e-02
+ 2507 -1.51809536155e-01 3.10820084815e-02 -1.05438828885e-01
+ 2508 -1.37347469317e-01 6.60938223969e-02 -6.33402452365e-02
+ 2509 -1.27761354384e-01 5.26405615042e-02 -9.30841464887e-02
+ 2510 -1.32149813022e-01 6.62391944922e-02 -1.10424252516e-01
+ 2511 -4.07283204906e-01 1.98674819091e-01 -4.58193443944e-01
+ 2512 -3.77869004980e-01 1.73571261565e-01 -4.31278426894e-01
+ 2513 -3.16803507471e-01 1.75029155180e-01 -4.06945743212e-01
+ 2514 -3.84626227499e-01 2.25336891369e-01 -4.01122325340e-01
+ 2515 -3.68229821907e-01 1.99843705154e-01 -3.95203842204e-01
+ 2516 -3.24306429209e-01 2.09573115428e-01 -3.66957191519e-01
+ 2517 -1.76056881748e-01 8.06127128534e-02 -3.58798414375e-01
+ 2518 -1.71096627761e-01 9.95324335761e-02 -3.61957230643e-01
+ 2519 -1.50078526907e-01 1.07721435032e-01 -3.37810071721e-01
+ 2520 -1.53450059956e-01 7.01540674490e-02 -3.70767451782e-01
+ 2521 -1.55381574914e-01 8.69585193421e-02 -3.70144304631e-01
+ 2522 -1.36131156729e-01 8.82265489015e-02 -3.56775223346e-01
+ 2523 -1.87154474628e-01 1.10263152843e-01 -3.89263205833e-01
+ 2524 -1.60848455209e-01 8.99210274419e-02 -3.91077312754e-01
+ 2525 -1.34706268079e-01 9.33043258309e-02 -3.81490194887e-01
+ 2526 -2.29733995057e-01 2.05252551736e-01 -5.30360346762e-01
+ 2527 -2.57108438703e-01 1.96707437720e-01 -5.26692861319e-01
+ 2528 -2.34142941490e-01 1.83369577098e-01 -5.28594767339e-01
+ 2529 -9.84517448153e-02 5.26627029689e-02 -4.54468143076e-01
+ 2530 -7.71025152467e-02 7.16160857539e-02 -4.51605112596e-01
+ 2531 -8.71110097504e-02 8.28485916967e-02 -4.50372534536e-01
+ 2532 -1.04679994297e-01 7.39571718210e-02 -4.51870362169e-01
+ 2533 -2.82814989692e-01 -2.08888046680e-02 -4.38302404316e-01
+ 2534 -2.56811604366e-01 -1.09128463609e-02 -4.49920491869e-01
+ 2535 -2.53870607362e-01 1.55684692282e-02 -4.60504946993e-01
+ 2536 -2.83710942322e-01 3.38634648334e-02 -5.76365092141e-01
+ 2537 -2.74912001553e-01 -5.60537895365e-03 -5.84728708009e-01
+ 2538 -2.57303003489e-01 3.34669529427e-02 -5.76281178150e-01
+ 2539 -2.42634396699e-01 7.02221978775e-03 -5.81828950732e-01
+ 2540 -2.68110820153e-01 5.45826666978e-02 -5.46529983278e-01
+ 2541 -2.51511818301e-01 2.54734238429e-02 -5.39976044715e-01
+ 2542 -9.99599586536e-02 -1.10625423483e-01 -5.46782307139e-01
+ 2543 -1.45461237980e-01 -1.09215448635e-01 -5.45302422791e-01
+ 2544 -1.21057792864e-01 -1.20634918350e-01 -5.72466729654e-01
+ 2545 -1.49909293806e-01 -1.17075063497e-01 -5.64935710764e-01
+ 2546 -1.55112014873e-01 -9.98210500538e-02 -5.87244334973e-01
+ 2547 -1.78006129507e-01 -1.38628836949e-01 -5.54729355639e-01
+ 2548 -1.48777295945e-01 -1.54745505955e-01 -5.60922706411e-01
+ 2549 -7.38772082666e-02 1.11892038141e-01 -5.78930351545e-01
+ 2550 -7.88071632640e-02 9.32909018600e-02 -5.57363820882e-01
+ 2551 -8.24765054969e-02 6.00438267281e-02 -5.65159133658e-01
+ 2552 -3.10162184471e-02 6.80941553468e-02 -5.69789399681e-01
+ 2553 -4.45003052308e-02 9.86577876059e-02 -5.60450664897e-01
+ 2554 -5.55419972379e-02 8.80154980288e-02 -5.48895688562e-01
+ 2555 -5.02331700511e-02 6.40923133305e-02 -5.51269852973e-01
+ 2556 -1.75654045609e-01 -6.28964768000e-02 -6.01144064333e-01
+ 2557 -1.72553899529e-01 -8.23358346210e-02 -6.06816941921e-01
+ 2558 1.01692151718e-01 -4.40971894280e-02 -7.98832956331e-02
+ 2559 1.26369963682e-01 -7.12501134667e-02 -7.86812374058e-02
+ 2560 3.70918451298e-03 -6.73321946155e-02 -1.65062037255e-01
+ 2561 -5.84077017063e-04 -5.01758480040e-02 -1.69427386787e-01
+ 2562 -7.18023992627e-02 -8.94205812403e-02 -2.11568331223e-01
+ 2563 -8.40646410147e-02 -5.10357075873e-02 -1.91902870480e-01
+ 2564 -7.32937511961e-02 -7.72801894949e-02 -1.65338684877e-01
+ 2565 -5.87042174181e-02 -8.15309303484e-02 -1.81362265726e-01
+ 2566 -7.11754441933e-02 -5.47146878316e-02 -1.74164686543e-01
+ 2567 -8.50588756370e-02 -4.29421130903e-02 -1.61083106249e-01
+ 2568 -1.04030150257e-01 -2.27190460692e-02 -2.06098725836e-01
+ 2569 -8.54039001584e-02 -3.95473875658e-02 -2.07926401233e-01
+ 2570 -7.76754920383e-02 -6.13078633273e-02 -2.26377885313e-01
+ 2571 -1.41339858952e-01 -7.22213020245e-02 -1.47144635662e-01
+ 2572 -1.19865819054e-01 -7.59329842349e-02 -1.50947483617e-01
+ 2573 -1.33152175343e-01 -4.77324665887e-02 -1.48501463994e-01
+ 2574 -1.16106920875e-01 -4.20439762503e-02 -1.51488972076e-01
+ 2575 -1.39509684237e-01 -3.40403719765e-02 -1.28092873652e-01
+ 2576 -1.17120556981e-01 -1.86615891628e-02 -1.22369840603e-01
+ 2577 -3.14647567668e-02 2.14629380792e-02 -1.39528284898e-01
+ 2578 -3.17255310073e-02 -3.40703581760e-04 -1.34883747356e-01
+ 2579 -3.78127541407e-02 -8.85335385911e-04 -1.19003851347e-01
+ 2580 -1.05203537963e-01 1.12490211298e-01 -7.83717073414e-02
+ 2581 -1.08999006796e-01 1.25387149203e-01 -1.04038104934e-01
+ 2582 -8.56432594312e-02 1.34708549172e-01 -1.21918879382e-01
+ 2583 -1.06332066815e-01 8.35714874381e-02 -1.03105121225e-01
+ 2584 -1.08896536227e-01 1.00473871832e-01 -1.16171565949e-01
+ 2585 -9.32918811271e-02 9.83837126878e-02 -1.32136569252e-01
+ 2586 -1.26963190169e-01 9.45531379996e-02 -1.25406468383e-01
+ 2587 -1.12589534490e-01 8.84575323666e-02 -1.53971424556e-01
+ 2588 -1.09797171012e-01 8.34745727079e-02 -7.17157830393e-02
+ 2589 -1.09495159388e-01 6.90394394606e-02 -9.19298245277e-02
+ 2590 -7.23283943602e-02 1.21083156655e-01 -1.71271202402e-01
+ 2591 -6.64511210404e-02 1.20134128880e-01 -1.43669754483e-01
+ 2592 -4.65727940297e-02 1.37936839211e-01 -1.49432740058e-01
+ 2593 -4.38648672393e-02 1.44503761171e-01 -1.69754700530e-01
+ 2594 -5.27414439533e-02 1.53587356182e-01 -1.36853151849e-01
+ 2595 -5.00399434616e-02 3.93375066148e-02 -1.74088963021e-01
+ 2596 -5.98853769936e-02 2.82325230858e-02 -1.94565970639e-01
+ 2597 -5.98274294712e-04 2.41641171526e-01 1.95902286736e-01
+ 2598 3.71764603914e-02 1.28224378307e-01 1.43259095365e-01
+ 2599 3.10137618685e-03 8.41492434056e-02 1.94970828807e-01
+ 2600 -3.28235332585e-02 1.18820072564e-01 2.47148291213e-01
+ 2601 -2.58219852767e-02 1.35051480605e-01 1.56642125661e-01
+ 2602 7.76907484138e-03 9.49701820997e-02 1.34633385105e-01
+ 2603 -1.04353919246e-02 7.02273799755e-02 1.75573612751e-01
+ 2604 -3.88975875919e-02 8.87006449380e-02 2.03892849004e-01
+ 2605 -1.37144311345e-02 1.30894494588e-02 1.68797388090e-01
+ 2606 -5.80472442406e-02 1.22303816442e-02 2.07888130138e-01
+ 2607 1.19527494094e-02 2.16346873868e-02 1.03998934289e-01
+ 2608 -5.10456962588e-02 2.84617896853e-02 1.17381964585e-01
+ 2609 -1.38893863707e-01 7.96475707134e-02 -1.43975039621e-02
+ 2610 -1.32257388174e-01 6.15794789850e-02 -2.90663141198e-02
+ 2611 -1.20530831498e-01 3.89970438447e-02 -9.46119316064e-03
+ 2612 -1.63706613565e-01 8.24000460738e-02 -6.28747228003e-04
+ 2613 -1.52526069451e-01 6.81608584374e-02 -1.50725440298e-02
+ 2614 -1.51464592092e-01 5.52996948280e-02 2.66212663962e-03
+ 2615 -1.62675683971e-01 7.33642138628e-02 -3.32572414110e-02
+ 2616 -1.66158275194e-01 5.66741461615e-02 -1.57475840975e-02
+ 2617 -1.84521307403e-01 9.73246730301e-02 -2.06838948989e-02
+ 2618 -1.42154652609e-01 1.00182410702e-01 1.30573216732e-01
+ 2619 -9.66001744340e-02 6.43221001939e-02 1.23977590659e-01
+ 2620 -1.14287657807e-01 3.34177763166e-02 1.11956668284e-01
+ 2621 -1.45908638582e-01 3.58957696323e-02 1.09244020134e-01
+ 2622 -1.32115939249e-01 7.63666014318e-02 8.50273824228e-02
+ 2623 -1.05092524919e-01 6.03983308496e-02 9.58122431437e-02
+ 2624 -1.16235049828e-01 3.82010302778e-02 9.38378882418e-02
+ 2625 -1.37964834351e-01 4.14474438086e-02 8.59898627939e-02
+ 2626 -1.00354160406e-01 3.54591237178e-05 1.02648394061e-01
+ 2627 -1.07595182234e-01 1.75405701362e-02 8.15927787451e-02
+ 2628 -8.65614610738e-02 4.05062909233e-02 7.84317563496e-02
+ 2629 -1.37287166791e-01 -4.54020078558e-03 -1.16838274393e-01
+ 2630 -1.73577370035e-01 1.00159743750e-03 -1.32483830657e-01
+ 2631 -1.59929136804e-01 7.11202196018e-03 -1.13963856602e-01
+ 2632 -1.51636187928e-01 -1.96773210378e-02 -9.89714370930e-02
+ 2633 -1.77042474232e-01 9.04682707297e-04 -1.01094492471e-01
+ 2634 -2.06071492794e-01 -1.13646237032e-02 -1.22439771489e-01
+ 2635 -1.01784712029e-01 1.15285403201e-02 -5.31259808844e-03
+ 2636 -9.31848494889e-02 4.57116271597e-03 2.12330700849e-02
+ 2637 -5.87977634792e-02 4.08376519961e-02 1.35242537721e-02
+ 2638 -7.88599880221e-02 3.57061998401e-02 -1.04518089636e-02
+ 2639 -8.96642974887e-02 3.99173479204e-02 2.03153030572e-03
+ 2640 -7.98909176157e-02 4.47420320511e-02 2.21766852193e-02
+ 2641 -9.81215722887e-02 6.76926194703e-02 1.71384305564e-03
+ 2642 -8.76901398791e-02 8.88172814413e-02 3.17727318010e-02
+ 2643 -1.71873745209e-01 2.13709092612e-01 -3.13850782984e-01
+ 2644 -1.47763683233e-01 2.36920953364e-01 -3.07957940138e-01
+ 2645 -1.69162602899e-01 2.33970148018e-01 -3.22985015196e-01
+ 2646 -1.82888848716e-01 2.46089519685e-01 -3.21147136271e-01
+ 2647 -1.80671613671e-01 2.11364882498e-01 -3.48282446170e-01
+ 2648 -1.74124134437e-01 2.39161026411e-01 -3.48984201391e-01
+ 2649 -2.09327386852e-01 1.24041025656e-01 -3.57913210539e-01
+ 2650 -2.07424665544e-01 1.44484323153e-01 -3.31744041564e-01
+ 2651 -2.00160680172e-01 1.51317508185e-01 -3.91886510227e-01
+ 2652 -2.04484729937e-01 1.28596482345e-01 -3.98008189647e-01
+ 2653 -2.16781850278e-01 1.34346554579e-01 -3.72309447223e-01
+ 2654 -2.17998190549e-01 1.51410595885e-01 -3.59662080135e-01
+ 2655 -2.33403020385e-01 1.17375600974e-01 -3.52732384219e-01
+ 2656 -2.35317093776e-01 1.33338114432e-01 -3.73654308571e-01
+ 2657 -2.46409225929e-01 1.58429956316e-01 -3.55355688613e-01
+ 2658 -2.89581731977e-01 8.77085144114e-02 -3.37095394614e-01
+ 2659 -2.64098764474e-01 8.61904864956e-02 -3.61480779239e-01
+ 2660 -2.86356908216e-01 1.37480458898e-01 -3.36330806371e-01
+ 2661 -2.77612225085e-01 1.09004600036e-01 -3.23134669726e-01
+ 2662 -2.61492376181e-01 1.02542057693e-01 -3.44913889416e-01
+ 2663 -2.61948881967e-01 1.19371782820e-01 -3.60971053743e-01
+ 2664 -2.42309633198e-01 9.56013614197e-02 -3.34069054958e-01
+ 2665 -2.56898035063e-01 1.01824826798e-01 -2.95977808193e-01
+ 2666 2.65998587642e-03 1.89002576187e-01 -6.38457585785e-01
+ 2667 -2.20495023485e-02 1.79263401499e-01 -6.06229455633e-01
+ 2668 1.32160259325e-02 1.90034600695e-01 -5.92882458270e-01
+ 2669 -7.95510025022e-03 1.82472213552e-01 -5.80105142535e-01
+ 2670 -1.08460667303e-01 1.19743225552e-01 -5.30101480096e-01
+ 2671 -1.26956761555e-01 9.97223122653e-02 -5.24265622478e-01
+ 2672 -1.10629623793e-01 1.18943946545e-01 -5.09244810161e-01
+ 2673 -1.23683338791e-01 1.05330244685e-01 -4.98402015104e-01
+ 2674 -6.92116853935e-02 1.38193889743e-01 -4.47860989697e-01
+ 2675 -6.97758837447e-02 1.43591680338e-01 -4.71339041105e-01
+ 2676 -8.15664929564e-02 1.54947956676e-01 -4.79825704261e-01
+ 2677 -1.12489503543e-01 1.15167659793e-01 -3.68807408845e-01
+ 2678 -1.13651250973e-01 1.15512272226e-01 -3.88274256723e-01
+ 2679 -1.28849676473e-01 1.01051587062e-01 -4.03218396710e-01
+ 2680 -1.46168579701e-01 8.29791056097e-02 -4.17210625146e-01
+ 2681 -1.47968970824e-01 6.77805690427e-02 -4.65724777442e-01
+ 2682 -1.34724786007e-01 6.15993049085e-02 -4.42051693827e-01
+ 2683 -1.54326796872e-01 6.69880863474e-02 -4.34101657492e-01
+ 2684 -1.69690257039e-01 7.29051895831e-02 -4.47233701124e-01
+ 2685 -6.89227576630e-02 1.43368999236e-01 -4.21756201463e-01
+ 2686 1.00978356645e-01 1.51206976760e-01 -6.43371549450e-01
+ 2687 8.99790873232e-02 1.12818128161e-01 -6.39360695559e-01
+ 2688 2.52498081488e-02 8.64651340445e-02 -7.28631628229e-01
+ 2689 5.78255038624e-02 1.33638314016e-01 -7.02885504564e-01
+ 2690 8.50259887583e-02 1.22697453844e-01 -6.90028662088e-01
+ 2691 7.23756865812e-02 8.76017138062e-02 -7.02907130373e-01
+ 2692 1.44802169368e-01 1.58929773644e-01 -6.51425695946e-01
+ 2693 1.08924407944e-01 1.18342810795e-01 -7.10950463964e-01
+ 2694 2.52692476432e-03 -1.16433288791e-02 -5.44272433291e-01
+ 2695 -2.02062940980e-02 -6.44304618921e-03 -5.00842412227e-01
+ 2696 -1.12596079853e-02 -4.00096102222e-02 -4.93544337942e-01
+ 2697 4.58034450228e-03 -5.93930335837e-02 -5.11610311332e-01
+ 2698 2.13604195078e-02 -1.02210223068e-02 -4.98454580112e-01
+ 2699 -7.28913149243e-05 -7.22826937094e-03 -4.84773850462e-01
+ 2700 1.60377257386e-03 -3.22068866003e-02 -4.83317435190e-01
+ 2701 1.64515344186e-02 -4.25282609673e-02 -4.91952449865e-01
+ 2702 -1.81528743600e-02 -5.41927508938e-02 -4.68180290267e-01
+ 2703 6.63376424023e-03 -1.07142738288e-01 -4.78948189372e-01
+ 2704 1.29605517705e-03 -3.90614058406e-02 -4.62999102489e-01
+ 2705 2.34138392457e-02 -5.79707270113e-02 -4.65792458152e-01
+ 2706 -1.37279935455e-03 -5.02073961683e-03 -4.55024559047e-01
+ 2707 -7.99476675303e-02 3.46942141462e-02 -4.55449559105e-01
+ 2708 -6.58032931096e-02 2.74229328992e-02 -4.85821575360e-01
+ 2709 -1.04661112745e-01 3.07744177497e-02 -4.62780857961e-01
+ 2710 -1.03469344869e-01 2.46202981196e-02 -4.85472635083e-01
+ 2711 -1.25234979339e-01 4.14468114994e-02 -4.64570346894e-01
+ 2712 -1.33734260823e-01 3.75518289290e-02 -4.99502757043e-01
+ 2713 4.72585025853e-03 1.24603595857e-01 -4.90367515494e-01
+ 2714 -1.43227320057e-02 1.33398959923e-01 -5.03218935453e-01
+ 2715 1.43933801475e-02 1.41073010664e-01 -4.44338343360e-01
+ 2716 1.40047054792e-02 1.29926546099e-01 -4.66577253773e-01
+ 2717 4.37383244371e-02 1.55863204087e-02 -3.86057492729e-01
+ 2718 2.25642124584e-02 9.49257331078e-03 -3.80237108393e-01
+ 2719 8.28972604843e-03 1.87018724686e-02 -3.90342359994e-01
+ 2720 2.15411541540e-02 -1.19075692934e-02 -3.88444678635e-01
+ 2721 -3.82104613149e-04 -8.79369185870e-03 -4.07706341158e-01
+ 2722 -3.81493009627e-01 -3.39623197407e-01 -5.78713551057e-01
+ 2723 2.41322710865e-01 -1.01201771834e-01 -6.42972275095e-01
+ 2724 2.62908635231e-01 -1.38146197755e-01 -6.49578103722e-01
+ 2725 2.72803626431e-01 -1.28902949852e-01 -6.71121404212e-01
+ 2726 2.10654425595e-01 -2.46096148738e-01 -5.84089170733e-01
+ 2727 2.27517935324e-01 -2.44591775508e-01 -5.51678454729e-01
+ 2728 2.24665072169e-01 -2.83949692531e-01 -5.35043580968e-01
+ 2729 2.49658419840e-01 -2.47057257664e-01 -6.12524643689e-01
+ 2730 2.52555053575e-01 -2.45688700511e-01 -5.81107738447e-01
+ 2731 2.58998850889e-01 -2.72292953526e-01 -5.79827583846e-01
+ 2732 2.74045008248e-01 -2.18812815343e-01 -5.80400271524e-01
+ 2733 2.94455681555e-01 -2.45281252284e-01 -5.78126306161e-01
+ 2734 -3.75842177936e-01 1.13810143168e-01 -4.86376387361e-01
+ 2735 -3.57208839416e-01 1.13557895478e-01 -5.04691755622e-01
+ 2736 -1.73766293348e-01 1.38870179841e-01 -4.05609694633e-01
+ 2737 -1.59608843327e-01 1.33289162262e-01 -4.15875971063e-01
+ 2738 -1.63815147506e-01 1.12357471737e-01 -4.08400404007e-01
+ 2739 -2.63032368514e-01 1.45029773096e-01 -4.71352966973e-01
+ 2740 -2.43257510673e-01 1.41491897266e-01 -4.69398093173e-01
+ 2741 -2.50557483753e-01 1.29560937488e-01 -4.56077612352e-01
+ 2742 -2.33215950271e-01 1.22046075065e-01 -4.49682578278e-01
+ 2743 -2.54361564818e-01 1.17660202868e-01 -4.69604097377e-01
+ 2744 -3.06828070006e-01 8.84489149632e-02 -2.80672847787e-01
+ 2745 -2.89109783771e-01 1.09498200403e-01 -2.85519638508e-01
+ 2746 -2.74688399371e-01 1.09111055405e-01 -2.61055530234e-01
+ 2747 -2.81693462060e-01 9.49491501118e-02 -2.49669633661e-01
+ 2748 -2.48406772098e-01 1.03866424668e-01 -2.59872940598e-01
+ 2749 -2.45773552496e-01 8.00012513601e-02 -2.42202800923e-01
+ 2750 -3.04008696373e-01 1.84540651240e-01 -3.19880566959e-01
+ 2751 -3.08749032540e-01 1.33268621804e-01 -3.12421637294e-01
+ 2752 -3.16389842577e-01 1.69616725334e-01 -3.06061250004e-01
+ 2753 -3.15506255059e-01 1.85034251608e-01 -2.82265535740e-01
+ 2754 -3.97615184625e-01 1.65322641037e-01 -1.95742196151e-01
+ 2755 -2.87035052921e-01 2.84274546962e-01 -2.22968767725e-01
+ 2756 -3.58023368614e-01 2.20337011165e-01 -1.60526912210e-01
+ 2757 -3.56900846757e-01 1.96463995278e-01 -1.86546008942e-01
+ 2758 -3.09201129010e-01 2.31131347180e-01 -2.36846944863e-01
+ 2759 -3.62763704781e-01 1.69064981729e-01 -1.53067982546e-01
+ 2760 -1.74007095315e-01 1.29565322712e-01 -1.71517052764e-01
+ 2761 -1.67430732972e-01 1.59176052755e-01 -1.96007187380e-01
+ 2762 -1.94257341261e-01 1.83006234475e-01 -1.67330517615e-01
+ 2763 -1.84262508017e-01 1.91854054066e-01 -1.86744752364e-01
+ 2764 -1.68541928634e-01 2.19822198619e-01 -1.86438601349e-01
+ 2765 -2.20739055694e-01 3.66532329309e-02 -3.34992665972e-02
+ 2766 -2.20593580060e-01 6.49868434961e-02 -3.92159184939e-02
+ 2767 -1.84448852450e-01 3.11114347078e-02 -1.78537103329e-02
+ 2768 -1.95300401047e-01 3.38507485802e-02 -3.97254335567e-02
+ 2769 -1.86723865743e-01 5.18056608401e-02 -4.56119238076e-02
+ 2770 -2.24442526900e-01 1.10273509990e-02 -6.37032830159e-02
+ 2771 -1.89289830303e-01 1.58326658421e-02 -6.19368334890e-02
+ 2772 -1.70007222034e-01 2.71465366440e-03 -4.02349486195e-02
+ 2773 -2.05594008584e-01 -2.68080982250e-02 -3.82548110445e-01
+ 2774 -2.42788489997e-01 -4.20969248824e-02 -3.80138066415e-01
+ 2775 -2.20604155282e-01 -4.26952719509e-02 -3.91452864458e-01
+ 2776 -2.08183565680e-01 -5.99340121709e-02 -3.90998008212e-01
+ 2777 -2.53894290070e-01 -8.70252997721e-02 -2.78799749504e-01
+ 2778 -2.70237403251e-01 -1.01048756287e-01 -2.61923119489e-01
+ 2779 -9.79223524147e-02 1.65232025967e-01 -4.69444946254e-01
+ 2780 -4.36975780658e-01 2.99086508057e-01 -6.32239810340e-01
+ 2781 -4.52731835494e-01 2.24314881043e-01 -6.81679857755e-01
+ 2782 -5.00000000000e-01 2.23551824778e-01 -7.13314598086e-01
+ 2783 -1.97942159326e-01 2.34365863628e-01 -5.36921258497e-01
+ 2784 -1.60280431777e-01 2.36953134891e-01 -5.20303132409e-01
+ 2785 -1.92913481320e-01 2.30555281457e-01 -5.59226705288e-01
+ 2786 -1.53728130500e-01 9.29723777728e-02 -4.88583346762e-01
+ 2787 -1.72023949120e-01 8.11855118966e-02 -5.09537619965e-01
+ 2788 -1.68579305242e-01 9.05178909956e-02 -4.69000397193e-01
+ 2789 -1.85726909236e-01 8.18418181524e-02 -4.76442262806e-01
+ 2790 -2.08583020036e-01 1.14743693027e-01 -4.89283354320e-01
+ 2791 -2.01137627124e-01 9.08115269102e-02 -4.88156204372e-01
+ 2792 -1.97139226343e-01 9.33638923256e-02 -5.14124423000e-01
+ 2793 -6.20860431159e-02 1.81766837581e-01 -6.54165606268e-01
+ 2794 -8.91236849501e-02 1.51528371681e-01 -6.56422451846e-01
+ 2795 -6.44316520365e-02 1.76271391217e-01 -6.26067503533e-01
+ 2796 -8.32386162328e-02 1.54280598495e-01 -6.18206033007e-01
+ 2797 -9.03524464488e-02 1.89774727292e-01 -6.25668919225e-01
+ 2798 -1.31523289949e-01 1.63540206247e-01 -6.13677421281e-01
+ 2799 -1.21871077344e-01 2.16262070599e-01 -5.94652945422e-01
+ 2800 -9.34059978698e-02 2.22757495294e-01 -6.08402687844e-01
+ 2801 -2.62796011930e-01 1.56105303949e-01 -5.88823293367e-01
+ 2802 -2.46752235249e-01 1.32605721987e-01 -5.89505845569e-01
+ 2803 -1.10066486949e-01 8.78145495630e-02 -5.54872917572e-01
+ 2804 -1.27069661959e-01 7.39302664899e-02 -5.60162047223e-01
+ 2805 -1.14344065995e-01 5.07883569089e-02 -5.68782567831e-01
+ 2806 -1.43997570034e-01 7.72406806004e-02 -5.41520227045e-01
+ 2807 -1.33373130125e-01 4.41830232841e-02 -5.45130097867e-01
+ 2808 -1.98842876743e-01 -8.53762441966e-02 -3.95389232520e-01
+ 2809 -2.13773451946e-01 -9.90048878766e-02 -3.85386557163e-01
+ 2810 -1.06977548822e-01 -3.58996690836e-02 4.54497077960e-02
+ 2811 -1.48754278754e-01 -6.97277474530e-02 1.86975722773e-02
+ 2812 -1.90985181586e-01 -8.28873878150e-02 2.65540623880e-02
+ 2813 -1.44995034868e-01 -3.06044421222e-02 2.29444842627e-02
+ 2814 -1.66823210805e-01 -5.72993076396e-02 8.50668850704e-03
+ 2815 -2.01000123377e-01 -6.19295879431e-02 1.03473873241e-02
+ 2816 -1.48300105853e-01 -9.03961854606e-02 -1.59110533520e-02
+ 2817 -1.72543406222e-01 -6.69354530402e-02 -1.79626898360e-02
+ 2818 -2.26668872789e-01 -7.86989461957e-02 -2.84363307819e-02
+ 2819 -1.42661240025e-01 -3.17112274643e-02 -9.54068537396e-03
+ 2820 -1.42974788433e-01 -3.41372867067e-02 -9.67035354663e-02
+ 2821 -1.34378372455e-01 -1.91694551003e-02 -1.10670638848e-01
+ 2822 -1.17741850357e-01 -3.95996093249e-03 -1.01047871880e-01
+ 2823 -3.53802748748e-01 -9.48935045523e-02 -5.21257036147e-01
+ 2824 -3.20447783375e-01 -1.11076710798e-01 -5.75127739318e-01
+ 2825 -3.21571949934e-01 -7.86401754948e-02 -5.57326467802e-01
+ 2826 -2.62095933246e-01 -3.92020856150e-02 -5.70600023371e-01
+ 2827 -3.49941334369e-01 -6.93884010139e-02 -5.62321072371e-01
+ 2828 -2.23141036844e-01 -1.43574413000e-01 -4.76905676316e-01
+ 2829 -2.12133174205e-01 -1.21863131964e-01 -4.86173206244e-01
+ 2830 -2.41091746682e-01 -2.13322098936e-02 -5.71957376572e-01
+ 2831 -2.46495811078e-01 -1.84828837507e-02 -5.40764914508e-01
+ 2832 -2.13140845706e-01 -3.46660899965e-02 -5.94635617679e-01
+ 2833 -2.07271491811e-01 -3.70590408336e-02 -5.59186045136e-01
+ 2834 -7.09523622185e-02 5.79264050927e-03 -6.05821141950e-01
+ 2835 -1.22261425977e-01 -6.09830243465e-03 -6.25725682221e-01
+ 2836 -1.21848986846e-01 -1.00681629347e-02 -5.85792106159e-01
+ 2837 -1.06661303809e-01 1.46208994297e-02 -5.95890573359e-01
+ 2838 -1.36215866231e-01 3.49562749165e-03 -6.13301620710e-01
+ 2839 -1.56192509062e-01 -1.66721713973e-02 -6.12372991694e-01
+ 2840 -1.50582745615e-01 1.70594179180e-02 -6.40811135262e-01
+ 2841 -1.59748226073e-01 2.21320843688e-02 -6.19217235567e-01
+ 2842 -2.08737747883e-01 -5.55568941655e-02 -4.67670448428e-01
+ 2843 -2.18716514382e-01 -8.04142017408e-02 -4.61969013061e-01
+ 2844 -1.74938692791e-01 -1.06574305307e-01 -4.88583250274e-01
+ 2845 -1.97612668438e-01 -1.02519927262e-01 -4.70979219330e-01
+ 2846 -1.85659571341e-01 3.87568318263e-02 -3.49008822767e-01
+ 2847 -1.66303782598e-01 4.13768180298e-02 -3.60432998724e-01
+ 2848 -1.96327072665e-01 1.14833883163e-01 -3.01279250106e-01
+ 2849 -2.01928991599e-01 1.04274065664e-01 -3.37603349567e-01
+ 2850 -1.99551896426e-01 6.50619386770e-02 -3.02043838349e-01
+ 2851 -2.17592334718e-01 9.39068828793e-02 -2.99766965549e-01
+ 2852 -2.16477458405e-01 9.12187698255e-02 -3.27388111284e-01
+ 2853 -2.04078874107e-01 7.10927693393e-02 -3.38113075062e-01
+ 2854 -1.85202590098e-01 9.30103077260e-02 -2.47504242837e-01
+ 2855 -1.74894396161e-01 1.34806042764e-01 -2.46665314094e-01
+ 2856 -2.08026130499e-01 1.12539128912e-01 -2.63407235208e-01
+ 2857 -1.94589099946e-01 1.39003724894e-01 -2.58802290558e-01
+ 2858 -1.82310717872e-01 1.49355093056e-01 -2.82515318941e-01
+ 2859 -1.48023677816e-01 1.29366942644e-01 -1.88347778115e-01
+ 2860 -1.63740544493e-01 1.18459901458e-01 -2.04836217113e-01
+ 2861 -1.49587260433e-01 1.51624585193e-01 -2.02507697739e-01
+ 2862 -1.60586365757e-01 1.51772438586e-01 -2.18219963612e-01
+ 2863 -1.06323393640e-01 1.40075603761e-01 -1.88690064468e-01
+ 2864 -1.22308265188e-01 1.66182906788e-01 -2.07455861848e-01
+ 2865 -2.42782704709e-01 2.62315535588e-01 -2.30308330687e-01
+ 2866 -2.45505331357e-01 2.34635844512e-01 -2.46534553003e-01
+ 2867 -2.75914439048e-01 2.40048621736e-01 -2.47050251800e-01
+ 2868 -1.26625838604e-01 1.07969501375e-02 -2.10222654635e-01
+ 2869 -1.18983589657e-01 4.03402582301e-02 -2.13169298180e-01
+ 2870 -1.28837560347e-01 5.54811534739e-02 -1.98893399742e-01
+ 2871 -9.56736417260e-02 9.38768722113e-02 -4.77708584074e-02
+ 2872 -1.09332664168e-01 8.57571385051e-02 -3.42055249950e-02
+ 2873 -8.79033765987e-02 1.16688064439e-01 -4.42264997315e-02
+ 2874 -1.04506777698e-01 1.15914059993e-01 -2.21063202749e-02
+ 2875 -5.18727314571e-02 6.46547049565e-03 -4.63029375647e-02
+ 2876 -2.30472036641e-02 -2.39328375353e-02 -6.71516709974e-02
+ 2877 -4.70315120250e-02 -1.15888042694e-02 -6.49647368568e-02
+ 2878 -4.12778583371e-02 -9.82250116113e-04 -8.76145131611e-02
+ 2879 -8.44153044130e-02 8.93001176760e-02 -1.65038117932e-01
+ 2880 -6.37841810595e-02 7.83184671146e-02 -1.42736770775e-01
+ 2881 -7.69856219100e-02 9.65341065895e-02 -1.45895303110e-01
+ 2882 -1.07078637266e-01 1.01961749080e-01 -1.76650692643e-01
+ 2883 -8.73256890143e-02 9.92176338840e-02 -1.79280895653e-01
+ 2884 -8.02378771794e-02 1.23712165272e-01 -1.88183877874e-01
+ 2885 -6.12120055857e-04 -8.82407616296e-02 -5.68207191218e-02
+ 2886 6.45558891452e-03 -5.68401755502e-02 -6.34879069200e-02
+ 2887 -2.99789370443e-02 3.96789622267e-02 -1.88136542569e-02
+ 2888 -5.22303120602e-02 3.61200455521e-02 -2.87112243015e-02
+ 2889 2.58386472050e-01 -1.86198113353e-01 -9.64289752950e-03
+ 2890 1.37579708075e-01 -1.77313518344e-01 5.66224549668e-02
+ 2891 2.84696975295e-02 -3.27781094798e-01 -4.07908432249e-02
+ 2892 1.85646465020e-01 -2.86509830988e-01 -7.45850963240e-02
+ 2893 1.84283711140e-01 -2.64648585014e-01 -1.45034410876e-02
+ 2894 7.90449481863e-02 -2.84875678896e-01 2.80532793906e-02
+ 2895 1.16703537076e-01 -1.13273150534e-01 6.79536046422e-02
+ 2896 1.62048261139e-01 -1.22200881422e-01 3.01747873365e-02
+ 2897 1.40273994623e-01 -8.79487647947e-02 4.52850665006e-02
+ 2898 1.32826197108e-01 1.67253991162e-02 -5.19293419501e-01
+ 2899 1.44526048435e-01 -2.48887091859e-03 -4.85715037910e-01
+ 2900 1.31157678211e-01 -3.03095085377e-03 -4.99722185382e-01
+ 2901 4.24271890012e-02 -2.45703314802e-02 -7.26398590297e-01
+ 2902 7.66239356410e-02 -3.01121912435e-02 -6.94181773987e-01
+ 2903 1.15533331992e-01 -9.82622717200e-02 -6.71540608359e-01
+ 2904 8.94118496934e-02 -5.31185527809e-02 -7.24360405573e-01
+ 2905 1.03313244500e-01 -5.01378922782e-02 -7.00707339521e-01
+ 2906 1.25361364301e-01 -7.92401514034e-02 -6.57609786029e-01
+ 2907 2.28534796813e-01 -7.81954102970e-02 -6.12793643509e-01
+ 2908 1.89120545277e-01 -1.03535926117e-01 -6.07348171809e-01
+ 2909 2.17246390379e-01 -8.62003065683e-02 -6.39666241663e-01
+ 2910 1.87207420544e-01 -1.05762282538e-01 -6.44993459914e-01
+ 2911 2.83919970269e-01 4.31703650769e-02 -4.52219544831e-01
+ 2912 2.82645132131e-01 9.98298361546e-02 -4.49240832520e-01
+ 2913 3.66653218436e-01 6.91540340008e-02 -4.25504954802e-01
+ 2914 3.37939977702e-01 7.50416423912e-02 -4.59150607187e-01
+ 2915 3.55096754754e-01 1.23438382214e-01 -4.59475153099e-01
+ 2916 2.46319576641e-01 4.21262099624e-02 -4.53784478049e-01
+ 2917 2.32936220007e-01 7.95511389759e-02 -4.52320314248e-01
+ 2918 1.84270251330e-01 1.06849648604e-01 -4.89407063206e-01
+ 2919 1.50505249246e-01 1.13922239125e-01 -4.54066812638e-01
+ 2920 1.37972436130e-01 1.54890998129e-01 -4.95908559297e-01
+ 2921 1.75915042586e-01 1.34162154607e-01 -5.17301560979e-01
+ 2922 1.65315880879e-01 1.10370052110e-01 -5.02595990160e-01
+ 2923 1.36487756006e-01 1.16258580292e-01 -4.83432132099e-01
+ 2924 2.04833502418e-01 1.11599894332e-01 -4.15509241991e-01
+ 2925 1.37473052069e-01 1.17248025316e-01 -4.29261385595e-01
+ 2926 1.81477291242e-01 1.14674820174e-01 -4.06544564370e-01
+ 2927 1.97463589737e-01 1.39901845359e-01 -3.89232993259e-01
+ 2928 5.49321122897e-02 9.37595621413e-02 -5.05924856355e-01
+ 2929 4.97811107284e-02 1.18344334034e-01 -5.04876693077e-01
+ 2930 3.02238911293e-02 1.17482024503e-01 -4.92448000428e-01
+ 2931 1.40669043196e-02 1.15492231208e-01 -4.80805763231e-01
+ 2932 6.32873210342e-02 6.64470561385e-02 -4.78030358582e-01
+ 2933 7.45786831571e-02 8.00681077606e-02 -4.94063461692e-01
+ 2934 4.86728789354e-02 1.15065785111e-01 -3.91251761934e-01
+ 2935 -1.14680535831e-01 -1.39516629387e-01 -5.75902080453e-01
+ 2936 -9.84895606794e-02 -1.39137536488e-01 -5.59924249043e-01
+ 2937 -1.31034452207e-01 -1.68550924803e-01 -5.69351181891e-01
+ 2938 -1.14924947668e-01 -1.82499433163e-01 -5.42108985494e-01
+ 2939 -1.07190267990e-01 -2.34258341266e-01 -5.13533846433e-01
+ 2940 -6.50274185776e-02 -2.32079599015e-01 -5.22231590501e-01
+ 2941 -8.78140850524e-02 -2.47920670602e-01 -5.57632993789e-01
+ 2942 -1.03309766903e-01 -2.21559481677e-01 -5.37758608572e-01
+ 2943 -7.26577551159e-02 -2.23100139886e-01 -5.38225726088e-01
+ 2944 -5.21099632862e-02 -2.41187818572e-01 -5.51631022071e-01
+ 2945 -5.75014251794e-02 -1.98279609170e-01 -5.18818458387e-01
+ 2946 -7.01838716966e-02 -1.97573660279e-01 -5.41281683208e-01
+ 2947 -3.81252422423e-02 -2.11941938506e-01 -5.62917605743e-01
+ 2948 -1.02914347832e-01 -2.85884684127e-01 -7.54295368147e-01
+ 2949 -6.78935395999e-02 -2.05121291821e-01 -7.73221526110e-01
+ 2950 -1.35033723906e-01 -1.93812326214e-01 -6.37178825506e-01
+ 2951 -1.80707917231e-01 -1.98016292361e-01 -6.68854588895e-01
+ 2952 -1.89435145204e-01 -2.26697484500e-01 -6.91364096000e-01
+ 2953 -1.63751952439e-01 -2.74858722203e-01 -6.16094433530e-01
+ 2954 -1.63585788721e-01 -2.30123784163e-01 -6.18674813915e-01
+ 2955 -1.90703417511e-01 -2.24198894287e-01 -6.47057639354e-01
+ 2956 -1.99853402920e-01 -2.52047223021e-01 -6.54798327577e-01
+ 2957 -2.18666561173e-01 -2.16608277601e-01 -6.45902827029e-01
+ 2958 -1.91971689819e-01 -2.21700304073e-01 -6.02751182708e-01
+ 2959 -3.36173366838e-01 -1.69924722909e-01 -5.97351523620e-01
+ 2960 -3.07302504716e-01 -2.03130217198e-01 -5.93430340398e-01
+ 2961 -2.43070006289e-01 -2.05188807886e-01 -6.18738520166e-01
+ 2962 -3.08349913502e-01 -1.34913589263e-01 -6.14397333406e-01
+ 2963 -1.10223165172e-01 2.22034890228e-01 -2.90698387929e-01
+ 2964 -1.06681584583e-01 1.98768713298e-01 -2.73526098151e-01
+ 2965 -2.15984346457e-02 1.16012046498e-01 -3.06852065742e-01
+ 2966 -3.73423753181e-02 1.30118394956e-01 -2.90597955101e-01
+ 2967 -2.75326721698e-02 1.04587233548e-01 -3.22192426428e-01
+ 2968 -5.41157019405e-02 1.20034349760e-01 -3.05481440809e-01
+ 2969 -4.66759981002e-02 1.20143679887e-01 -2.50120419120e-01
+ 2970 -4.26398030501e-02 1.23413985384e-01 -2.23337239063e-01
+ 2971 -4.20237096399e-02 1.12854081989e-01 -2.34383190511e-01
+ 2972 -5.20209921931e-02 1.29831341844e-01 -2.73450773530e-01
+ 2973 -6.80960822329e-02 1.23012960676e-01 -2.77657370145e-01
+ 2974 2.36805415895e-01 -3.93298197086e-02 -5.46006106367e-01
+ 2975 2.13286121232e-01 -4.32683000589e-02 -5.20113279519e-01
+ 2976 -3.98909557449e-01 -1.23297869129e-01 -1.66765612836e-01
+ 2977 -4.32606371633e-01 -5.13779328955e-02 -1.23058142284e-01
+ 2978 -3.66153869309e-01 -1.70675603780e-01 -8.84901506411e-02
+ 2979 -3.43375617839e-01 -1.27993214150e-01 -1.22779308144e-01
+ 2980 -3.82531713379e-01 -7.28794257197e-02 -1.00995281403e-01
+ 2981 -4.10769246206e-01 -8.29630893298e-02 -7.08745008209e-02
+ 2982 -3.43375617839e-01 -2.91834665033e-02 -8.72691743637e-02
+ 2983 -3.66153869309e-01 -2.24609823103e-02 -3.52249499703e-02
+ 2984 -2.65063426758e-01 -9.00061695407e-02 -1.13082160955e-01
+ 2985 -3.63927523420e-01 6.72653148845e-02 -7.04919022043e-02
+ 2986 -3.13729053373e-01 7.41452088546e-02 -3.80250127228e-02
+ 2987 -2.38704205768e-01 1.03709785790e-01 -7.77339039502e-02
+ 2988 -3.25802803845e-01 9.99605037174e-02 -6.37036696936e-02
+ 2989 -2.97685131204e-01 9.69466269867e-02 -4.10505607102e-02
+ 2990 -2.30246841605e-01 9.84415227918e-02 -4.28530138867e-02
+ 2991 -3.56666056640e-01 9.01834681831e-02 -4.36721747024e-03
+ 2992 -3.20961825992e-01 1.15239272583e-01 -1.96205465376e-02
+ 2993 -2.31442738988e-01 1.26627939089e-01 -1.16092192161e-02
+ 2994 -3.15522379646e-01 9.80463672273e-02 -4.52211253540e-01
+ 2995 -3.61641784734e-01 1.16198644004e-01 -4.59144388719e-01
+ 2996 -3.73874229775e-01 1.48708381867e-01 -4.44218300541e-01
+ 2997 -1.23489291119e-01 -1.41044750032e-02 -2.10098799731e-01
+ 2998 -1.28456013319e-01 -2.73839799105e-02 -2.29274416644e-01
+ 2999 -2.04860880271e-01 2.69039641962e-02 -1.63719812323e-01
+ 3000 -1.98003233097e-01 -3.66333640379e-03 -1.55659521465e-01
+ 3001 -1.75649705952e-01 3.68600762686e-03 -1.54887628347e-01
+ 3002 -1.72770295021e-01 2.65139893704e-02 -1.60003857879e-01
+ 3003 -5.76690846739e-02 -7.47333852194e-03 6.01832783207e-02
+ 3004 -8.83335979673e-02 -1.44458494939e-02 6.94271267258e-02
+ 3005 -9.67695049477e-02 2.30331091984e-03 6.19407320728e-02
+ 3006 -7.91384650788e-02 1.25347050391e-02 5.32827015850e-02
+ 3007 -1.12010774511e-01 -6.41618200199e-03 4.34603212353e-02
+ 3008 1.97445108990e-01 6.61396614271e-02 -5.89734350669e-01
+ 3009 2.24924656714e-01 4.27261514058e-02 -5.98221909729e-01
+ 3010 2.09213849472e-01 9.12896704459e-02 -6.05772849502e-01
+ 3011 2.41930332943e-01 5.16883207447e-02 -6.11743428638e-01
+ 3012 -2.89301259629e-02 1.56867212687e-01 -2.16520636429e-01
+ 3013 -1.30470522847e-02 1.97242193460e-01 -2.42053911893e-01
+ 3014 -3.37994999180e-02 1.80174190722e-01 -2.37042741124e-01
+ 3015 -5.69128611339e-02 1.40620366505e-01 -1.82818332601e-01
+ 3016 -6.65282000923e-02 1.57165392575e-01 -1.81367275240e-01
+ 3017 -3.70205000247e-02 1.37100147002e-01 -1.91967476762e-01
+ 3018 -8.84656521405e-02 1.72473422641e-01 -1.97272320582e-01
+ 3019 1.72270994859e-01 3.07087205349e-01 -5.75514196634e-01
+ 3020 1.76309587482e-01 3.71391470233e-01 -5.43664427730e-01
+ 3021 2.10614151423e-01 3.26771450843e-01 -5.91118211277e-01
+ 3022 2.04057306749e-01 3.70078588132e-01 -5.63329880939e-01
+ 3023 2.79787509414e-01 2.72046865874e-01 -6.68470934299e-01
+ 3024 3.53191672943e-01 2.38249735360e-01 -6.05628554285e-01
+ 3025 3.53191672943e-01 3.48031243916e-01 -7.22313956199e-01
+ 3026 3.89893754707e-01 3.03687301520e-01 -6.61721415714e-01
+ 3027 4.29100154850e-01 3.45598472054e-01 -6.44090011607e-01
+ 3028 1.07617103838e-01 -1.17607988843e-01 -5.12293410880e-01
+ 3029 1.13795443065e-01 -9.91719928164e-02 -4.88531768262e-01
+ 3030 1.05044029325e-01 -7.69898806402e-02 -4.89960356341e-01
+ 3031 4.52848506854e-02 -9.94112494024e-02 -5.08930209514e-01
+ 3032 7.39559906388e-02 -1.14119571991e-01 -5.01178337044e-01
+ 3033 8.70050233589e-02 -1.01164679184e-01 -4.86135873539e-01
+ 3034 7.22406076300e-02 -8.70408331895e-02 -4.86289634018e-01
+ 3035 8.80280521017e-02 -1.04326318740e-01 -4.68543754834e-01
+ 3036 6.63929428797e-02 -8.47213695260e-02 -4.59978336199e-01
+ 3037 6.89660173930e-02 -1.25339477728e-01 -4.82311390737e-01
+ 3038 2.72237075459e-02 3.16952854004e-02 -4.88064009267e-01
+ 3039 3.21791605316e-02 5.05162360209e-02 -4.76082841659e-01
+ 3040 6.26552702836e-02 3.41281051398e-02 -4.78202432079e-01
+ 3041 5.75139693384e-02 4.76356131703e-02 -4.71681950670e-01
+ 3042 1.72673142920e-02 -9.99303110349e-02 -4.30470064168e-01
+ 3043 5.12505520766e-02 -1.11747136122e-01 -4.16325216212e-01
+ 3044 6.29253959430e-02 -1.21261762292e-01 -4.33491854835e-01
+ 3045 5.35622500344e-02 -8.73868742779e-02 -4.33982870454e-01
+ 3046 6.99759444372e-02 -9.93853522822e-02 -4.22496032915e-01
+ 3047 8.40009711350e-02 -1.01607841782e-01 -4.35997397565e-01
+ 3048 1.26732840212e-01 4.27768649939e-02 -5.25010757381e-01
+ 3049 1.24470988363e-01 4.40379051191e-02 -5.47187917274e-01
+ 3050 -5.53368807763e-02 5.47895723741e-02 -4.72507400786e-01
+ 3051 -6.85617646751e-02 5.34013734406e-02 -4.53056932238e-01
+ 3052 3.83596737719e-03 2.07159357672e-02 -4.77846803232e-01
+ 3053 1.31148225979e-02 2.60388860093e-02 -4.54056541512e-01
+ 3054 1.33994921586e-02 3.75764861408e-02 -4.71415229035e-01
+ 3055 6.61833422676e-02 2.14381764612e-02 -4.04162938972e-01
+ 3056 1.44658649702e-01 2.94641748086e-01 -5.55270739764e-01
+ 3057 1.24796144130e-01 3.74582801612e-01 -5.32741236667e-01
+ 3058 1.54590680459e-01 3.45981311065e-01 -5.36444277304e-01
+ 3059 1.44578182172e-01 1.50733969173e-01 -5.61949031950e-01
+ 3060 1.26196774577e-01 1.90406257302e-01 -5.46227296641e-01
+ 3061 9.89433644563e-02 1.95341048093e-01 -5.28473298523e-01
+ 3062 1.52216155692e-01 1.63439557326e-01 -5.24517470490e-01
+ 3063 1.36520606616e-01 1.90017376384e-01 -5.22084059374e-01
+ 3064 1.21792943882e-01 1.93177609939e-01 -5.02200314873e-01
+ 3065 1.35068777103e-01 2.25143754639e-01 -5.48259559451e-01
+ 3066 1.45876552313e-01 2.13046080970e-01 -5.15391155492e-01
+ 3067 1.74097848776e-01 1.84693704675e-01 -5.15694820225e-01
+ 3068 1.80703594818e-01 1.80536675720e-01 -5.81735292878e-01
+ 3069 1.03424326101e-01 1.67293548656e-01 -4.97849773945e-01
+ 3070 9.99267344226e-02 1.92907869882e-01 -5.02083286965e-01
+ 3071 7.74049449857e-02 1.94260248632e-01 -5.19559600096e-01
+ 3072 2.44260788998e-01 1.29503468647e-01 -4.49378670871e-01
+ 3073 2.16575190688e-01 1.06876037640e-01 -4.51653822579e-01
+ 3074 1.30217981433e-01 1.18168834644e-01 -4.57486731951e-01
+ 3075 1.29117843325e-01 1.44560531319e-01 -4.57155883368e-01
+ 3076 1.05420409005e-01 1.56445060917e-01 -4.68299963336e-01
+ 3077 3.15754756310e-01 1.00561039695e-02 -7.22146062767e-01
+ 3078 3.30248156987e-01 -4.59097913468e-02 -7.24656207678e-01
+ 3079 2.77146036554e-01 8.10479596075e-02 -6.32795926429e-01
+ 3080 3.32859527415e-01 1.03449838289e-01 -5.94582893386e-01
+ 3081 -9.07464972787e-02 -7.25391990114e-02 -1.40948367322e-01
+ 3082 -9.92580035210e-02 -1.27441143506e-01 -1.59888468630e-01
+ 3083 -7.70079535904e-02 -1.06877971859e-01 -1.46909023998e-01
+ 3084 -8.91689625538e-02 -9.59227834052e-02 -1.33223701052e-01
+ 3085 -1.08055998829e-01 -1.05979835019e-01 -1.37314889824e-01
+ 3086 -8.08654005173e-02 -9.82941277318e-02 -1.07722523062e-01
+ 3087 -5.84721060539e-02 -1.15912582575e-01 -1.15499918486e-01
+ 3088 -4.37007074336e-02 -3.35300926474e-01 3.51839107662e-02
+ 3089 -1.06569717828e-01 -2.69328585713e-01 1.18537075908e-02
+ 3090 -1.40842290947e-01 -1.53992878570e-01 3.23230972671e-02
+ 3091 -6.69066008273e-02 -1.68337694767e-01 -5.29840447244e-03
+ 3092 -5.72792577487e-02 -2.78891796511e-01 -1.32272935689e-02
+ 3093 -1.01036377966e-01 -2.43514823431e-01 -1.86221448667e-02
+ 3094 -1.22040313424e-01 -1.58019764575e-01 -1.51345025683e-02
+ 3095 -1.35166155104e-01 -3.18691952096e-01 -3.19458852609e-02
+ 3096 -1.18256222863e-01 -2.67819146926e-01 -5.79804909203e-02
+ 3097 -6.12304649851e-02 -3.33036768293e-01 -6.95673870004e-02
+ 3098 -2.56777436736e-01 -2.80450402520e-01 -6.86884576813e-02
+ 3099 -2.68040431337e-01 -1.02962195884e-01 5.80332500993e-02
+ 3100 -3.45360287558e-01 -1.36630565046e-01 -8.70236744121e-03
+ 3101 -2.68526358567e-01 -2.27472923784e-01 -1.37980435213e-02
+ 3102 -1.91368478089e-01 -2.35308130589e-01 2.89938094789e-02
+ 3103 -2.80599231883e-01 -2.57502596982e-01 -6.79515844179e-03
+ 3104 -1.70898847824e-01 -2.84270243788e-01 6.08940635984e-02
+ 3105 -6.51372526583e-02 -1.02666581908e-01 -1.63534124855e-01
+ 3106 -7.60137189681e-02 -1.14971566356e-01 -1.77728788228e-01
+ 3107 -4.88231206567e-02 -1.07285859069e-01 -1.48136421466e-01
+ 3108 -5.69807541205e-02 -1.28052974321e-01 -1.61729564832e-01
+ 3109 -1.17990356148e-01 -8.85803867077e-02 -5.06320624289e-01
+ 3110 -1.47608716269e-01 -9.30341647652e-02 -5.15326131741e-01
+ 3111 7.62926288750e-03 2.12171739632e-02 -4.21887838587e-01
+ 3112 1.62444637913e-02 3.79524147878e-02 -4.29446005550e-01
+ 3113 8.26131363802e-03 5.35361249619e-02 -4.21715765090e-01
+ 3114 2.49095142784e-02 -6.95531126014e-02 -4.37858951756e-01
+ 3115 5.02201660886e-02 -6.77398346420e-02 -4.38646334574e-01
+ 3116 5.76599333369e-02 -5.94138182621e-02 -4.57531133110e-01
+ 3117 6.47489667047e-02 -5.46055334266e-02 -4.25212382974e-01
+ 3118 3.40473892975e-02 -5.07582997580e-02 -4.17314332948e-01
+ 3119 6.73564813320e-02 5.61285639716e-02 -5.56421696225e-01
+ 3120 8.50574748292e-02 5.07749897837e-02 -5.67398497766e-01
+ 3121 5.36577186008e-02 3.45276644197e-02 -5.61174671293e-01
+ 3122 1.09710090041e-02 -4.09240704838e-01 -6.20507640607e-01
+ 3123 -2.21548862026e-02 -4.33226526235e-01 -6.16984565971e-01
+ 3124 -1.17915945904e-02 -3.81850423305e-01 -5.97645194137e-01
+ 3125 -1.58119341541e-01 -2.49454231281e-01 -5.83937461791e-01
+ 3126 -1.50179937896e-01 -2.22581855463e-01 -5.55294920573e-01
+ 3127 -1.53448318743e-01 -2.02099868618e-01 -5.72430084101e-01
+ 3128 -1.59830714790e-01 -2.13187456882e-01 -5.97236832755e-01
+ 3129 -1.72748170081e-01 -2.04079237324e-01 -5.67837401185e-01
+ 3130 -1.50384661863e-01 -3.01213139384e-01 -5.55362322730e-01
+ 3131 -1.00256441242e-01 -3.67475426256e-01 -6.46908215153e-01
+ 3132 -9.57181923199e-02 -3.67475426256e-01 -5.34206829548e-01
+ 3133 -7.17886442399e-02 -4.00606569692e-01 -6.08155122161e-01
+ 3134 -1.26290096803e-01 -3.17798323000e-01 -7.37576064000e-01
+ 3135 -1.03889257506e-01 -2.76156199181e-01 -7.28352045192e-01
+ 3136 -1.38519010007e-01 -2.01541598908e-01 -6.94469393590e-01
+ 3137 -4.78335753799e-02 -2.99400190689e-01 -7.27067355033e-01
+ 3138 -7.17503630698e-02 -1.99100286033e-01 -6.75601032549e-01
+ 3139 -2.24674730750e-01 -3.21634029956e-01 -4.61061690436e-01
+ 3140 -1.65102361371e-01 -3.66225522467e-01 -4.68770228623e-01
+ 3141 -1.84371036046e-01 -3.03055222718e-01 -4.98751729454e-01
+ 3142 -1.18375775109e-01 -3.68703481812e-01 -4.96466434031e-01
+ 3143 -2.08302232284e-01 -2.71606233847e-01 -4.82202181813e-01
+ 3144 -2.32547204252e-01 -2.93402586493e-01 -4.58072039460e-01
+ 3145 -2.36499632886e-01 -2.90287881970e-01 -4.16873789037e-01
+ 3146 -1.69444386044e-01 2.06271332945e-01 -3.78289188191e-01
+ 3147 -1.97267740842e-01 1.81244803501e-01 -3.68170551775e-01
+ 3148 -1.80508470824e-01 1.86191280280e-01 -3.91547925260e-01
+ 3149 -1.67377319480e-01 1.89046468464e-01 -3.75785606938e-01
+ 3150 -1.74173115710e-01 1.86700546673e-01 -3.54946585173e-01
+ 3151 -1.45383305341e-01 1.77022713959e-01 -3.78358729127e-01
+ 3152 -1.44579992617e-01 1.67491954019e-01 -3.48386757575e-01
+ 3153 -1.75237532752e-01 1.49517676700e-02 -2.86291313743e-01
+ 3154 -1.53783568962e-01 9.94321887717e-03 -2.78717733681e-01
+ 3155 -2.01322914459e-01 2.83896490421e-02 -3.11172438749e-01
+ 3156 -2.04275393211e-01 4.20808444475e-02 -3.35942216184e-01
+ 3157 -2.21050312581e-01 9.74175672618e-02 -2.71741025515e-01
+ 3158 -2.10176013007e-01 7.93578325877e-02 -2.63916960703e-01
+ 3159 -8.13400681909e-02 -2.87761646014e-02 -3.19224679488e-01
+ 3160 -9.57502846502e-02 -2.06437469030e-03 -3.16254829682e-01
+ 3161 -8.97869116983e-02 2.13999665195e-02 -3.08706076380e-01
+ 3162 -1.49920464722e-01 9.65772979627e-02 -4.04976684654e-01
+ 3163 -1.22737676095e-01 1.24779065927e-01 -3.39687326734e-01
+ 3164 -1.42713639754e-01 1.37684967694e-01 -3.34706265137e-01
+ 3165 -1.24049223433e-01 1.42987307699e-01 -3.36890158043e-01
+ 3166 -1.19071986568e-01 1.64626078585e-01 -3.46738450636e-01
+ 3167 -1.93067585673e-01 1.80673687593e-01 -4.26900414753e-01
+ 3168 -2.06498177748e-01 1.95488369056e-01 -4.07289023292e-01
+ 3169 -2.36252301227e-01 1.95190436664e-01 -3.91782198823e-01
+ 3170 -1.82437097044e-01 1.66239750069e-01 -4.07358564229e-01
+ 3171 -1.95167663258e-01 1.80959245547e-01 -3.97535483264e-01
+ 3172 -2.11226907413e-01 1.75917582783e-01 -3.83946420275e-01
+ 3173 -8.58172951817e-02 1.11777469268e-01 -2.85079347674e-01
+ 3174 -8.24041126363e-02 1.06046564854e-01 -3.06102720627e-01
+ 3175 3.39897769393e-01 -1.44326321225e-01 -5.20210324266e-01
+ 3176 3.31764152016e-01 -1.15123335583e-01 -5.46078889927e-01
+ 3177 3.53903855823e-01 -5.61270232753e-02 -1.62975040243e-01
+ 3178 3.05205141098e-01 -1.05656677558e-01 -2.05418986597e-01
+ 3179 1.63450235324e-01 -7.94173916721e-02 -3.45400632354e-01
+ 3180 1.51017530722e-01 -7.37115947027e-02 -3.77269915911e-01
+ 3181 1.33919323307e-01 -7.51236457648e-02 -3.53556671311e-01
+ 3182 1.36508390570e-01 -7.93981940985e-02 -3.24406067406e-01
+ 3183 4.66442680161e-02 -5.54266039722e-02 -3.65956646277e-01
+ 3184 5.86377456984e-02 -6.34043356319e-02 -3.38110076687e-01
+ 3185 7.31468858505e-02 -5.77177362360e-02 -3.90973925193e-01
+ 3186 7.55163396536e-02 -6.31282519149e-02 -3.63834678272e-01
+ 3187 6.49086429506e-02 -4.54879811106e-02 -4.06389625628e-01
+ 3188 4.44941500945e-02 -3.98839745596e-02 -3.94850006495e-01
+ 3189 6.32467026187e-02 -1.50083870575e-01 -3.01246007757e-01
+ 3190 5.35577033966e-02 -1.85445906387e-01 -3.10660542881e-01
+ 3191 1.21483981613e-01 -2.14188337872e-01 -3.35429998852e-01
+ 3192 1.08530888096e-01 -1.69245491565e-01 -3.17758978404e-01
+ 3193 9.03958146341e-02 -1.70558086308e-01 -2.96483855326e-01
+ 3194 9.29861858244e-02 -2.00957515426e-01 -3.01172827931e-01
+ 3195 -6.52862956685e-03 -5.07532758823e-02 -3.72383947175e-01
+ 3196 9.04555170584e-03 -3.67684224997e-02 -3.99134873760e-01
+ 3197 2.31310817015e-02 -3.21101479154e-02 -3.86831493718e-01
+ 3198 1.74434708516e-02 -3.98806253091e-02 -3.64896415979e-01
+ 3199 6.89726554541e-03 -6.68004564541e-02 -2.68714100413e-01
+ 3200 7.41108531253e-03 -8.78682579809e-02 -2.69942715419e-01
+ 3201 -6.78414394055e-02 -9.63419982199e-02 -4.25367111014e-01
+ 3202 -1.10946295271e-01 -7.04161556881e-02 -4.25382184802e-01
+ 3203 -9.58371257482e-02 -6.44153515054e-02 -4.82106381914e-01
+ 3204 -6.67301130538e-02 -7.43778706799e-02 -5.10460943577e-01
+ 3205 -1.01071285005e-01 -1.32589551023e-01 -4.61688474576e-01
+ 3206 -1.18731240383e-01 -1.03223138401e-01 -4.49591402580e-01
+ 3207 -1.05453126962e-01 -9.05207895857e-02 -4.86082245970e-01
+ 3208 -8.92537855709e-02 -1.05864281729e-01 -5.06310575097e-01
+ 3209 1.30216854580e-01 -9.32529862342e-02 -5.02525205222e-01
+ 3210 1.29856382591e-01 -7.64919092560e-02 -5.08142076262e-01
+ 3211 1.31571765600e-01 -1.03570648058e-01 -5.23030779287e-01
+ 3212 -2.21562041656e-02 -3.55327609309e-02 -3.13935330700e-01
+ 3213 -3.59122093703e-02 -5.15006154595e-02 -3.38388868354e-01
+ 3214 -2.70235202073e-04 -3.11834017389e-02 -3.22931836422e-01
+ 3215 -2.14558235077e-03 -4.03788516939e-02 -3.42233030099e-01
+ 3216 5.00000000000e-01 2.96230969786e-01 2.32178399410e-01
+ 3217 5.00000000000e-01 3.64153979857e-01 6.53934488879e-02
+ 3218 4.26653101242e-01 2.47969862971e-01 2.12645099740e-01
+ 3219 4.44989825931e-01 3.10977397228e-01 9.24397117662e-02
+ 3220 5.00000000000e-01 5.00000000000e-01 1.15911773922e-01
+ 3221 4.26653101242e-01 3.83815883114e-01 1.35134016082e-01
+ 3222 3.89979651863e-01 3.25723824671e-01 3.36789250201e-01
+ 3223 3.22671475302e-02 1.15220140920e-01 -6.78173627725e-02
+ 3224 3.45713633824e-02 1.54149420035e-01 -5.99813090013e-02
+ 3225 5.48534013313e-02 1.39589773211e-01 -9.39023088192e-02
+ 3226 2.74659073983e-02 1.34251348240e-01 -9.25434462756e-02
+ 3227 2.74016379225e-02 1.66547936758e-01 -9.55614382625e-02
+ 3228 -7.03162592992e-02 1.73089730628e-01 -9.74059848006e-02
+ 3229 -8.57408210200e-02 1.65786828756e-01 -1.16727623240e-01
+ 3230 -6.10400690144e-02 1.72176364118e-01 -1.29226141626e-01
+ 3231 -4.25234438653e-02 1.79174810486e-01 -1.20511222129e-01
+ 3232 -5.21743750641e-02 7.67727802034e-02 7.07229400368e-02
+ 3233 -5.62137410724e-02 3.67123645592e-02 4.81434907098e-02
+ 3234 1.08240706041e-02 6.99456779048e-02 5.73399097406e-02
+ 3235 -9.79918501687e-03 5.61177151650e-02 7.73539280222e-02
+ 3236 -2.34225070349e-02 3.12361696914e-02 5.87615940306e-02
+ 3237 -1.42147772936e-02 3.21609630268e-02 3.92214705124e-02
+ 3238 -1.34623247567e-02 -4.63639852251e-05 7.03274868781e-02
+ 3239 -1.03233241146e-01 1.51026208884e-01 -1.04614856439e-01
+ 3240 -9.87810067081e-02 1.50974603507e-01 -8.76961752131e-02
+ 3241 1.64356190113e-02 5.90843128325e-02 1.03967830554e-02
+ 3242 -3.74640401379e-03 3.34611179421e-02 8.54373530554e-03
+ 3243 1.44717491927e-01 -8.20266881677e-02 -6.08886764066e-01
+ 3244 1.74219548496e-01 -1.09976439266e-01 -6.00907243461e-01
+ 3245 1.88820608283e-01 -1.44366703514e-01 -5.86486794508e-01
+ 3246 1.63899363006e-01 -1.16536230474e-01 -6.54154711445e-01
+ 3247 1.57605384977e-01 -9.14227905726e-02 -6.46019188086e-01
+ 3248 1.76509954141e-01 -1.10036078295e-01 -6.30751441627e-01
+ 3249 1.87007462548e-01 -1.32982800804e-01 -6.31085875047e-01
+ 3250 2.05648566748e-01 -1.00480804422e-01 -4.36636448462e-01
+ 3251 1.87060992697e-01 -1.11244657609e-01 -4.48895984373e-01
+ 3252 -6.96194990335e-02 1.76513579323e-01 -4.11405977341e-02
+ 3253 -9.83164998642e-02 1.53257169304e-01 -5.01859171687e-02
+ 3254 -6.46451908226e-02 1.57087743992e-01 -5.69160180377e-02
+ 3255 -8.74115184984e-02 1.44501895311e-01 -5.97561525377e-02
+ 3256 3.61024452921e-02 3.24488353970e-01 -1.78869968536e-01
+ 3257 7.14615855076e-03 4.62623456806e-01 -3.00372372269e-01
+ 3258 2.40214372464e-02 5.00000000000e-01 -3.12654048520e-01
+ 3259 -6.76578607541e-02 2.47044924549e-01 -1.95395401967e-01
+ 3260 1.27682422967e-01 -1.62896881472e-01 -1.84667527917e-01
+ 3261 1.00932570526e-01 -1.87346264545e-01 -1.89117499604e-01
+ 3262 2.96967151494e-02 -1.14629360514e-01 -2.42828283675e-01
+ 3263 3.23272219263e-03 -1.32264141295e-01 -2.23033956758e-01
+ 3264 4.05626756446e-02 -9.75251561920e-02 -2.22327850157e-01
+ 3265 2.65420005051e-02 -1.03580275272e-01 -2.02298154374e-01
+ 3266 -8.68080311459e-03 -1.10093303718e-01 -1.89006016083e-01
+ 3267 1.17795369466e-02 -9.41231135953e-02 -1.81961149464e-01
+ 3268 -5.37486987767e-02 -3.60278861401e-02 -3.10924910067e-01
+ 3269 -3.89725725215e-02 -2.79201775735e-02 -2.99450746399e-01
+ 3270 2.65530900479e-02 -8.87634152230e-02 -3.26136885932e-01
+ 3271 -1.48271545967e-03 -9.34652233588e-02 -3.47996860144e-01
+ 3272 3.62617354580e-02 -7.11063924579e-02 -3.32083002846e-01
+ 3273 2.08074135897e-02 -6.83552569601e-02 -3.48638357959e-01
+ 3274 -4.93538673343e-02 -9.52772805779e-02 -3.69684446169e-01
+ 3275 -2.36022901083e-02 -9.44241483125e-02 -3.73786943767e-01
+ 3276 -1.99702875308e-02 -9.45299410007e-02 -4.03679524989e-01
+ 3277 -5.43997814415e-02 -5.25653331014e-02 -3.94071533199e-01
+ 3278 -4.65552860487e-02 -6.64477430463e-02 -3.67381615907e-01
+ 3279 -2.79412484506e-02 -7.30152782301e-02 -3.71034196672e-01
+ 3280 -2.69662328464e-02 -6.59495166615e-02 -3.90045001788e-01
+ 3281 -1.46411847990e-02 -6.52397049002e-02 -3.52923225224e-01
+ 3282 -1.31952010403e-01 -2.17179746931e-01 -4.13357381539e-01
+ 3283 -1.12517610638e-01 -2.44918150259e-01 -4.15754619589e-01
+ 3284 -1.41176642173e-01 -2.36100424600e-01 -4.56923253157e-01
+ 3285 -1.51058031426e-01 -2.11301263158e-01 -4.40803137252e-01
+ 3286 -1.32539290453e-01 -2.05094086155e-01 -4.34520495689e-01
+ 3287 -1.19778783960e-01 -2.19557801448e-01 -4.43173025772e-01
+ 3288 -1.23901938734e-01 -1.74087747710e-01 -4.12117738221e-01
+ 3289 -1.27368336024e-01 -1.72337533082e-01 -4.40748438194e-01
+ 3290 -1.05642099070e-01 -1.77654829486e-01 -4.56841204570e-01
+ 3291 1.09416517989e-01 -2.74974914120e-01 -3.13158565555e-01
+ 3292 8.49412100754e-02 -2.41481899591e-01 -2.86325205734e-01
+ 3293 5.41997646587e-02 -3.06111424694e-01 -2.22015172241e-01
+ 3294 6.02694881291e-02 -3.49983276080e-01 -2.18467400957e-01
+ 3295 5.66030577787e-02 -3.02158868013e-01 -1.81313651962e-01
+ 3296 6.69092895443e-02 -3.65990366752e-01 -1.55641234898e-01
+ 3297 2.92496666824e-02 -1.16022744141e-01 -2.76359068308e-01
+ 3298 2.89124660978e-02 -1.10196529051e-01 -3.02767285972e-01
+ 3299 4.88387198847e-02 -1.15524517756e-01 -2.99022454188e-01
+ 3300 1.10083877760e-02 -1.20475439084e-01 -3.09550735460e-01
+ 3301 3.19457292956e-02 -1.33606877158e-01 -3.07325212528e-01
+ 3302 2.56214949214e-03 -1.34354216735e-01 -2.73330133707e-01
+ 3303 1.53736029500e-01 -3.23645697741e-01 -4.38566129251e-01
+ 3304 7.80964370130e-02 -3.02028591532e-01 -4.32001678168e-01
+ 3305 5.84970514241e-02 -2.77259765859e-01 -4.67876811657e-01
+ 3306 8.65171548730e-02 -2.75683906127e-01 -4.89096603943e-01
+ 3307 8.36753881329e-02 -4.11822848871e-01 -4.65230986218e-01
+ 3308 5.66025402641e-02 -3.68019061022e-01 -4.51966399840e-01
+ 3309 4.72764752596e-02 -3.32944824395e-01 -4.73881569539e-01
+ 3310 6.22163521707e-02 -3.50455937418e-01 -4.90029683690e-01
+ 3311 -1.67340583525e-01 2.28391828267e-01 -3.71313819101e-01
+ 3312 -1.53130401028e-01 2.10785718302e-01 -5.92162042112e-01
+ 3313 -1.32714920471e-01 1.98035551757e-01 -5.79564830416e-01
+ 3314 -1.42764343250e-01 1.56812135909e-01 -5.87218442654e-01
+ 3315 -6.60352249145e-02 -1.26694618754e-01 -2.53740562964e-03
+ 3316 -7.43644157339e-02 -1.04741001658e-01 -5.35325550915e-02
+ 3317 -1.07603353340e-01 -1.29366940114e-01 -1.06047289122e-02
+ 3318 -1.27012190028e-01 -1.15621969169e-01 -4.72906029810e-02
+ 3319 -5.68346581824e-02 -1.07005159838e-01 5.12187426751e-02
+ 3320 -1.15325684994e-01 -1.17131407956e-01 2.25435955301e-02
+ 3321 -1.29060404290e-02 -6.64009115294e-02 6.43511297810e-02
+ 3322 2.27935616873e-02 -1.63082021271e-01 2.34781393030e-02
+ 3323 -6.23511657144e-03 -1.23190836424e-01 1.66469568873e-02
+ 3324 1.40614613408e-02 -8.86912310458e-02 3.51391936637e-02
+ 3325 4.01794394841e-02 -1.03785485818e-01 4.58573941997e-02
+ 3326 -3.40463814269e-01 -1.53376680062e-01 -1.84463257876e-01
+ 3327 -2.60695721404e-01 -1.28081368408e-01 -2.05608085553e-01
+ 3328 -3.13424795356e-01 -1.49378486094e-01 -1.47049118097e-01
+ 3329 -2.51233060475e-01 -1.31182213670e-01 -1.48674289955e-01
+ 3330 -3.18626688842e-01 -1.84961836496e-01 -1.32279616413e-01
+ 3331 -2.27940033263e-01 -1.75459103060e-01 -1.27332623358e-01
+ 3332 3.52681236482e-02 1.57573268731e-01 -3.71592193486e-03
+ 3333 2.33126576672e-02 1.85595902996e-01 6.28234809555e-02
+ 3334 6.16205134355e-02 2.15851969133e-01 8.22032636892e-02
+ 3335 4.45743317746e-03 2.12294573035e-01 -8.09965938080e-03
+ 3336 -1.47960625048e-02 1.83224305597e-01 2.62153224220e-03
+ 3337 -1.12466154523e-02 1.97828522079e-01 5.09417208657e-02
+ 3338 2.77219735340e-03 2.22076772532e-01 5.99009893249e-02
+ 3339 -2.69506640821e-02 1.83362471124e-01 1.09983101112e-01
+ 3340 -5.62752543250e-02 2.00417107192e-01 7.84208809403e-02
+ 3341 -5.77613545528e-02 2.38083775428e-01 1.05599363666e-01
+ 3342 -8.41137443401e-02 1.79805075026e-01 1.96801780423e-02
+ 3343 -5.59773914424e-03 1.78747409332e-01 -7.54359096531e-02
+ 3344 -9.32757607540e-04 1.81896799550e-01 -9.82573564360e-02
+ 3345 1.69885146569e-02 2.03117041623e-01 -1.01520855700e-01
+ 3346 1.89516784841e-02 2.09003077333e-01 -6.89204351572e-02
+ 3347 4.32865395499e-02 9.18289263096e-02 -7.63525479303e-05
+ 3348 4.84958141246e-02 1.09984707517e-01 2.77280200411e-02
+ 3349 3.27316543740e-02 1.17502706717e-01 -3.03071047282e-02
+ 3350 -3.57141743062e-02 3.67263189665e-01 7.20260774123e-03
+ 3351 -2.40088743024e-02 3.25389183619e-01 7.01025007396e-02
+ 3352 1.74703175178e-02 3.08196382024e-01 -5.69684795849e-03
+ 3353 1.29531695646e-02 2.91557579399e-01 4.47029357152e-02
+ 3354 2.14489059518e-02 3.70820585763e-01 9.75055308112e-02
+ 3355 5.55790376898e-02 3.10567979422e-01 5.45051007549e-02
+ 3356 2.36154075423e-02 2.77337781217e-01 -7.63634480533e-02
+ 3357 2.71331477222e-02 3.06002051555e-01 -4.62440318094e-02
+ 3358 1.08745971803e-02 1.17686048370e-01 -4.48470432074e-02
+ 3359 5.27989096513e-03 1.44460870264e-01 -3.19662341715e-02
+ 3360 -4.41648149870e-01 -5.94283382397e-02 -6.17142818116e-01
+ 3361 -4.56236112403e-01 -1.90738509632e-03 -5.82843062151e-01
+ 3362 -5.00000000000e-01 -8.76632360015e-03 -6.09149865117e-01
+ 3363 -3.31760710405e-01 -9.37593266963e-02 -4.95484558735e-01
+ 3364 -3.63526348330e-01 -8.95472692825e-02 -4.79865193615e-01
+ 3365 -3.19206423363e-01 -5.60889220342e-03 -3.52611117424e-01
+ 3366 -3.21119098779e-01 2.48388200278e-03 -4.03048296034e-01
+ 3367 -3.19151150619e-01 3.73821207016e-02 -3.60890209214e-01
+ 3368 -3.20599475367e-01 3.27039481300e-02 -3.96648320224e-01
+ 3369 -3.67781491907e-01 -7.22201352409e-02 -4.38000095625e-01
+ 3370 -3.23708655876e-01 -3.06420319431e-02 -4.11498193801e-01
+ 3371 -1.26429589833e-01 5.81946857147e-02 -7.27038803332e-01
+ 3372 -2.19822192375e-01 4.36460142860e-02 -7.52779102499e-01
+ 3373 -2.29236889466e-01 2.42956559158e-03 -7.75178254255e-01
+ 3374 -3.05485884865e-01 4.58050573489e-02 -7.27038803332e-01
+ 3375 -1.78440317689e-01 2.56462229155e-02 -5.30402095353e-01
+ 3376 -2.01416805389e-01 5.63376996715e-02 -5.28034073259e-01
+ 3377 -2.12724483890e-01 7.49990352270e-02 -5.49663732624e-01
+ 3378 -2.27275028330e-01 2.33206254154e-02 -5.21575614653e-01
+ 3379 -2.32298716444e-01 4.69206323574e-02 -5.22006218258e-01
+ 3380 -2.50131139130e-01 5.62225002897e-02 -5.34416706167e-01
+ 3381 -1.97781477336e-01 -1.83676843689e-02 -5.34382281600e-01
+ 3382 -1.64740804678e-01 -2.68791990617e-02 -5.49675405235e-01
+ 3383 -1.60053923441e-01 -4.21772749357e-02 -5.71308955471e-01
+ 3384 -1.40833140693e-01 -3.73765769648e-04 -5.52119655615e-01
+ 3385 -1.48515902879e-01 3.57936917095e-02 -5.25011650088e-01
+ 3386 -7.71429299805e-02 1.83744307893e-03 -5.54892767848e-01
+ 3387 -1.11029102783e-01 7.56330490607e-03 -5.31520096742e-01
+ 3388 -1.27791623835e-01 1.37418329972e-02 -5.42647431601e-01
+ 3389 -1.10788348984e-01 1.19841011428e-02 -5.61938323958e-01
+ 3390 -7.68572658986e-02 2.25579701054e-02 -5.75291014485e-01
+ 3391 -1.02162746172e-01 2.49878318967e-02 -5.75475619908e-01
+ 3392 -1.28201671636e-01 6.38832557944e-02 -4.81893438147e-01
+ 3393 -1.37462866190e-01 8.37514406540e-02 -4.94995199960e-01
+ 3394 -1.44238323833e-01 7.28198843637e-02 -5.11101999829e-01
+ 3395 -1.52698539622e-01 6.26842675904e-02 -5.27333858916e-01
+ 3396 -1.74042361743e-01 6.48828136879e-02 -5.31701558702e-01
+ 3397 -1.23210357820e-01 6.02216360058e-02 -4.60096460259e-01
+ 3398 -3.15459309689e-02 -3.20285360095e-02 -5.69913604716e-01
+ 3399 -5.05863117322e-02 -2.65614757376e-03 -5.51352656329e-01
+ 3400 -4.30700742473e-02 2.22226502093e-02 -5.29251596424e-01
+ 3401 -3.68795064853e-02 2.61778476396e-02 -5.80179970525e-01
+ 3402 -4.64592665576e-02 -1.93492868679e-05 -5.85304905730e-01
+ 3403 -5.70112182329e-02 1.40076453593e-02 -5.67536369187e-01
+ 3404 -5.41420287432e-02 3.61481081923e-02 -5.58196900202e-01
+ 3405 1.66080041452e-01 -6.41208427517e-02 -2.52166764925e-01
+ 3406 1.62028814448e-01 -3.29902478128e-02 -2.29681793546e-01
+ 3407 1.46727759166e-01 -1.41374196655e-02 -2.49136520442e-01
+ 3408 2.67198120248e-01 1.28347841857e-02 -9.79770603425e-02
+ 3409 1.89597493664e-01 -1.37076009429e-02 -1.18755013397e-01
+ 3410 1.64025968229e-01 -4.92456276865e-02 -1.18288236796e-01
+ 3411 1.60488259530e-01 -2.18338365139e-02 -1.29272897449e-01
+ 3412 1.25853937946e-01 3.97288941982e-03 -2.46166053990e-01
+ 3413 -1.94214163554e-02 2.12205232137e-02 -3.91934248071e-01
+ 3414 -4.51758370376e-03 1.37157134767e-02 -4.07109867786e-01
+ 3415 -4.19488182189e-02 -5.01571574115e-03 -4.10094173274e-01
+ 3416 -1.45679073955e-02 -6.27671573890e-03 -4.24275024493e-01
+ 3417 -4.11870508259e-02 3.80470365935e-02 -3.71031959882e-01
+ 3418 -6.56355216264e-02 4.80530262058e-02 -3.55110289977e-01
+ 3419 -7.73840411261e-02 3.63435678406e-02 -2.98409818500e-01
+ 3420 -6.18216074155e-02 -5.84862097463e-02 -3.38559608765e-01
+ 3421 -6.87216249590e-02 -4.51352641850e-02 -3.17918954947e-01
+ 3422 -2.40502879888e-03 6.75328065524e-02 -4.27756586727e-01
+ 3423 -5.53947376343e-02 9.79581739215e-02 -3.18480639886e-01
+ 3424 3.26994037165e-01 1.55487137571e-01 -4.22664080842e-01
+ 3425 3.08195591749e-01 1.39791470069e-01 -4.57019951718e-01
+ 3426 -7.10552097063e-02 2.96388061409e-01 -3.28989829200e-01
+ 3427 -7.86044056806e-02 3.11819040269e-01 -3.39116753865e-01
+ 3428 -2.89924992101e-01 9.43233830865e-02 -4.41721327277e-01
+ 3429 -2.80219787759e-01 8.46431286114e-02 -4.63145638771e-01
+ 3430 -2.08349968231e-01 1.58950220722e-02 -4.09488746758e-01
+ 3431 -2.07478713805e-01 6.82533997202e-04 -3.89473969956e-01
+ 3432 -3.20334890731e-01 1.59070745976e-02 -3.04573599044e-01
+ 3433 -2.99511901850e-01 1.36116993014e-02 -3.33988210428e-01
+ 3434 -2.75850164019e-01 -1.02995808089e-03 -3.32848567708e-01
+ 3435 -2.81844910663e-01 -4.38026034425e-03 -3.12858945879e-01
+ 3436 -2.81092599084e-01 -1.87242382116e-02 -3.44883958132e-01
+ 3437 -2.46602895808e-01 7.05456187225e-03 -2.36733013668e-01
+ 3438 -2.20994786264e-01 3.18960602530e-02 -2.59420708926e-01
+ 3439 -2.36168409488e-01 -5.94781115277e-03 -2.59907170138e-01
+ 3440 -2.15618174351e-01 6.27906342608e-03 -2.82757019134e-01
+ 3441 -2.78970986861e-01 4.71222371091e-03 -2.44050009793e-01
+ 3442 -2.54268974749e-01 -1.18434942687e-02 -2.72509886378e-01
+ 3443 -1.55487341005e-01 1.04996932653e-01 -2.39005904830e-01
+ 3444 -1.55185007825e-01 1.33347077700e-01 -2.40501292775e-01
+ 3445 -1.70006685344e-01 6.68418300640e-02 -1.70117577202e-01
+ 3446 -1.45356737835e-01 8.75512808786e-02 -1.87414794407e-01
+ 3447 -1.73960028130e-01 4.84742994410e-02 -1.87444725274e-01
+ 3448 -1.54484231802e-01 6.85982702077e-02 -1.96085851159e-01
+ 3449 -1.69782600897e-01 8.28863470373e-02 -2.10590485215e-01
+ 3450 -2.06645479936e-01 5.98444293020e-02 -2.04881113414e-01
+ 3451 -1.93656835518e-01 4.72877051830e-02 -2.75395566039e-01
+ 3452 -1.96458864270e-01 2.42270463303e-02 -2.88904084416e-01
+ 3453 -2.16600067315e-01 3.70634693112e-02 -4.29281245404e-01
+ 3454 -2.00962838270e-01 1.66750236943e-02 -4.28310248701e-01
+ 3455 -2.41117514196e-01 -1.64814726368e-01 -2.91545230724e-01
+ 3456 -2.45488474254e-01 -1.58017378633e-01 -2.71423427757e-01
+ 3457 -2.43686162889e-01 3.24649595872e-02 -4.47941597367e-01
+ 3458 -2.62540554378e-01 6.68981020490e-02 -3.69314942728e-01
+ 3459 -2.79009796014e-01 6.14793258440e-02 -3.55669407475e-01
+ 3460 -1.95491225243e-01 -1.23513368612e-01 -3.20606730451e-01
+ 3461 -1.95132577508e-01 -1.32242851972e-01 -3.37954356804e-01
+ 3462 -3.12829632120e-01 -3.60476189807e-03 -2.66834940413e-01
+ 3463 -2.85838461722e-01 -1.39423039805e-02 -2.82483615197e-01
+ 3464 -7.26796122765e-02 4.06719714597e-02 4.59780050608e-02
+ 3465 -7.54753253390e-02 6.86987841893e-02 6.03091427291e-02
+ 3466 -1.52201105050e-01 9.49548950475e-02 -1.65202018174e-01
+ 3467 -1.38165039492e-01 1.03458716913e-01 -1.79403820835e-01
+ 3468 -2.24471272899e-01 5.72472469717e-02 -2.35501541088e-01
+ 3469 -2.03098688181e-01 6.24531839895e-02 -2.53462475882e-01
+ 3470 -1.84090631300e-01 6.59199512157e-02 -2.39035835697e-01
+ 3471 -1.62082184179e-01 8.16825090387e-02 -2.34779183977e-01
+ 3472 -1.51123550017e-01 -5.49549186448e-02 -2.98222893505e-01
+ 3473 -1.33209749847e-01 -5.82882481170e-02 -2.87820644823e-01
+ 3474 -9.75046373073e-02 -2.66394905697e-02 -3.94086606987e-01
+ 3475 -7.93162625249e-02 -1.81739148796e-02 -4.15195201712e-01
+ 3476 -8.65463009866e-02 -1.32124199964e-03 -4.10072782933e-01
+ 3477 -1.01081896995e-01 -1.34740149975e-03 -3.94292913523e-01
+ 3478 -6.40446842699e-02 1.30684483860e-02 -4.04964624381e-01
+ 3479 -1.55323408554e-01 -9.30668344776e-02 -2.39145543205e-01
+ 3480 -1.33356164899e-01 -6.37386988189e-02 -2.44762693301e-01
+ 3481 -1.41429073538e-01 -8.61970224250e-02 -2.72397391999e-01
+ 3482 -1.28427224551e-01 -6.59183736941e-02 -2.68297292373e-01
+ 3483 -2.45997533518e-02 -1.57889106911e-01 -2.77261098450e-01
+ 3484 -5.48949271514e-02 -1.49585725100e-01 -2.99562404630e-01
+ 3485 -5.42243544509e-02 -1.47495649659e-01 -2.49266227681e-01
+ 3486 -2.41527048848e-02 -1.56495723284e-01 -2.43730313818e-01
+ 3487 -2.58311024794e-02 -1.40924933197e-01 -2.61298180694e-01
+ 3488 -4.64383347216e-02 -1.29734620752e-01 -2.70844745562e-01
+ 3489 -8.13361695931e-03 -1.19580281842e-01 -2.53356564946e-01
+ 3490 -1.45198230385e-01 -2.81664662660e-02 -3.72108378580e-01
+ 3491 -1.25309323672e-01 -2.25703116120e-02 -3.86334624924e-01
+ 3492 -1.74219014569e-01 -1.32047037196e-01 -6.80564110472e-01
+ 3493 -1.57332168261e-01 -1.66102653488e-01 -6.85573893042e-01
+ 3494 2.47737761033e-01 -3.36832993388e-01 -4.53677216271e-01
+ 3495 1.69696756277e-01 -3.91221995592e-01 -4.66416758576e-01
+ 3496 1.91424148783e-01 -3.90446099728e-01 -4.28169740583e-01
+ 3497 2.50693949455e-01 -3.53928132971e-01 -4.06927706382e-01
+ 3498 1.41319034189e-01 -4.03921369959e-01 -4.14630219680e-01
+ 3499 2.05171177900e-01 -3.55882054939e-01 -3.75997407928e-01
+ 3500 2.93175531227e-01 -1.53134011308e-01 -2.42378914988e-01
+ 3501 2.71864643493e-01 -1.37237691544e-01 -2.24613589456e-01
+ 3502 1.95819524658e-01 -1.14994487603e-01 -2.52093585100e-01
+ 3503 2.16251925158e-01 1.36620571641e-01 -5.70911428611e-01
+ 3504 1.99998651017e-01 1.54030625638e-01 -5.30492401598e-01
+ 3505 1.80318873281e-01 1.31390801970e-01 -5.61328542748e-01
+ 3506 1.77112180644e-01 1.45755784885e-01 -5.33409993954e-01
+ 3507 1.80930488679e-01 1.68955038632e-01 -3.63009647126e-01
+ 3508 -1.47890432525e-01 2.21852495945e-01 -1.66415228751e-01
+ 3509 -5.13323230041e-03 1.81029975129e-01 -3.79256516087e-02
+ 3510 -3.25810329280e-02 1.94404076179e-01 -2.46201285575e-02
+ 3511 -2.56736926142e-02 2.17510844665e-01 -4.08481432394e-02
+ 3512 -8.47211442926e-02 1.95851179325e-01 -2.23282516240e-02
+ 3513 -1.00430189504e-01 2.31234883627e-01 -4.55243351801e-02
+ 3514 -1.75240678255e-02 1.65331499679e-01 -5.05609533677e-02
+ 3515 -9.23992303844e-02 3.39277148642e-01 -8.87312611294e-02
+ 3516 -1.02062060589e-01 3.41471479110e-01 -4.81840772784e-02
+ 3517 -9.80305314910e-02 3.13089456314e-01 -6.27243356979e-02
+ 3518 -5.24547642700e-02 3.20823255752e-01 -3.06466318247e-02
+ 3519 -1.45206070721e-01 2.50785941752e-01 -8.33353725593e-02
+ 3520 -1.10363593761e-01 9.47929707161e-02 -1.57703081198e-03
+ 3521 -1.12518804598e-01 7.74555519191e-02 -1.57837567178e-02
+ 3522 -1.40781889559e-01 1.06577705594e-01 -5.76795810321e-03
+ 3523 -1.33317583575e-01 1.06494383758e-01 2.54863408642e-02
+ 3524 -1.36105723641e-01 9.30709772357e-02 5.54441845105e-03
+ 3525 -1.29570797680e-01 8.85131865591e-02 3.01514099474e-02
+ 3526 -1.88039357414e-01 -4.32498501938e-03 -8.13373600545e-02
+ 3527 -2.11057664183e-01 -1.42477452019e-02 -8.89818352609e-02
+ 3528 -1.74767460939e-01 -1.97895434250e-02 -7.33362789966e-02
+ 3529 -2.02658972854e-01 -4.24059629016e-02 -8.08024512774e-02
+ 3530 -1.35799901979e-01 -3.62388758916e-03 6.80005912197e-03
+ 3531 -1.31596035762e-01 3.64290819019e-03 -9.50093926730e-03
+ 3532 -1.34768972386e-01 -1.26597198001e-02 -2.58284350610e-02
+ 3533 -1.54030556652e-01 1.93266998300e-02 -1.36627830417e-02
+ 3534 -1.76574983667e-01 -1.19571170262e-01 1.25163046126e-01
+ 3535 -1.30391512975e-01 -2.46380780174e-01 7.37470068303e-02
+ 3536 -1.95152568650e-01 -1.25508748238e-01 7.18397978309e-02
+ 3537 -1.55870569385e-01 -2.19131561179e-01 4.66085804327e-02
+ 3538 1.59583266656e-01 1.18772667057e-01 7.75662150121e-02
+ 3539 1.72433791809e-01 8.60855983982e-02 5.24945242780e-02
+ 3540 2.04927990719e-01 1.09844936168e-01 3.97873977064e-02
+ 3541 -5.49050042078e-02 -6.18495099970e-02 7.32731499785e-02
+ 3542 -5.02112697673e-02 -7.10700316310e-02 1.08417428940e-01
+ 3543 -2.24409543865e-02 -4.26852362257e-02 7.76088384821e-02
+ 3544 -8.49044815231e-03 -4.24441593912e-02 1.02483587291e-01
+ 3545 -5.51571105856e-02 -4.87136965530e-02 1.71743051190e-01
+ 3546 -2.26300341698e-02 -3.28333761427e-02 1.51461264391e-01
+ 3547 7.52608576249e-02 -1.75076296545e-01 7.08992677426e-02
+ 3548 7.51834419880e-02 -1.27605326137e-01 7.58284268052e-02
+ 3549 -1.92579636265e-01 2.14740301185e-01 -5.90815440774e-01
+ 3550 -3.27909273594e-01 5.00000000000e-01 -6.43553015262e-01
+ 3551 -2.52795066440e-01 4.40568599767e-01 -6.14570008075e-01
+ 3552 -2.18606182396e-01 5.00000000000e-01 -7.05702010175e-01
+ 3553 -1.89596299830e-01 4.55426449826e-01 -6.68427506057e-01
+ 3554 -5.41399918170e-02 1.48902671616e-01 -7.21744520781e-01
+ 3555 1.45790628248e-02 1.39706327240e-01 -7.39825957556e-01
+ 3556 -4.06049938627e-02 2.36677003712e-01 -7.48808390586e-01
+ 3557 9.71937521655e-03 2.59804218160e-01 -7.69883971704e-01
+ 3558 -3.09358611994e-01 2.01801246147e-01 -4.99493814988e-01
+ 3559 -3.08574247004e-01 1.89399844302e-01 -4.55852904102e-01
+ 3560 -2.57805138771e-01 1.98951567447e-01 -4.72633816349e-01
+ 3561 -2.75512539839e-01 2.08169061577e-01 -5.10681089819e-01
+ 3562 -2.85276007332e-01 2.12800337145e-01 -4.92121590772e-01
+ 3563 -2.76725562451e-01 2.08199099581e-01 -4.60570242109e-01
+ 3564 -3.12746875893e-01 2.26649106843e-01 -5.11609365196e-01
+ 3565 -2.79507315044e-01 2.33031941275e-01 -4.97741216172e-01
+ 3566 -2.63797301578e-01 2.36245886993e-01 -4.53224005877e-01
+ 3567 -3.75164583929e-01 2.07984562673e-01 -5.01054174883e-01
+ 3568 -3.77158786110e-01 2.47826311546e-01 -4.59844530287e-01
+ 3569 -3.60600925076e-01 2.42520746119e-01 -4.91577306906e-01
+ 3570 -3.75945763498e-01 2.47796273542e-01 -5.09955377998e-01
+ 3571 -3.14134566768e-01 2.66475836714e-01 -4.95455144455e-01
+ 3572 -2.18719998614e-01 3.57804783386e-01 -3.64824610163e-01
+ 3573 -2.50170724327e-01 2.86707175080e-01 -3.18683899983e-01
+ 3574 -2.43267486090e-01 3.54885911654e-01 -3.89405133366e-01
+ 3575 -2.72417132391e-01 3.06514548871e-01 -3.66838167647e-01
+ 3576 -4.23211388469e-01 1.66655849361e-01 -2.66792595677e-01
+ 3577 -4.14055555301e-01 3.23861451678e-01 -3.74561759380e-01
+ 3578 -3.85407407068e-01 2.65148602238e-01 -4.10023528455e-01
+ 3579 5.26380413578e-03 -1.60817863091e-01 -8.12731584636e-02
+ 3580 -1.79216216058e-02 -1.21681397637e-01 -5.31872416237e-02
+ 3581 -7.32674848582e-03 -1.29129118249e-01 -9.44988172201e-02
+ 3582 -2.15681796366e-02 -1.07698955369e-01 -7.01279649011e-02
+ 3583 -6.04122283989e-02 -9.17445439600e-02 -7.60050816387e-02
+ 3584 -2.69845392868e-02 -1.35440345228e-01 -1.54552774354e-01
+ 3585 -2.42228820657e-02 -1.70284703560e-01 -1.71354094165e-01
+ 3586 -2.76196919307e-02 -1.24088361935e-01 -1.69266937622e-01
+ 3587 -2.59903046645e-02 -1.43533939725e-01 -1.85372538585e-01
+ 3588 1.55060675063e-02 -1.65377198905e-01 -1.31734934339e-01
+ 3589 -9.16565443996e-03 -2.73878575394e-01 -6.38771295630e-02
+ 3590 2.12340773189e-03 -2.49032899179e-01 -1.06072468695e-01
+ 3591 3.09766631021e-02 -2.76686020043e-01 -1.04746724180e-01
+ 3592 -2.88234452409e-02 -2.80189802374e-01 -1.23931086697e-01
+ 3593 -5.79615312268e-03 -2.92983980745e-01 -6.90102355802e-01
+ 3594 -8.69422968402e-03 -1.89475971118e-01 -6.20153533702e-01
+ 3595 -3.10506114733e-02 -2.81480671645e-01 -6.80207285933e-01
+ 3596 -4.14008152978e-02 -2.08640895527e-01 -6.30276381245e-01
+ 3597 -4.22754872891e-02 -8.52994932160e-02 -4.99956692175e-01
+ 3598 -2.94925112309e-02 -7.97782407140e-02 -5.37251482756e-01
+ 3599 -5.42791498312e-02 -2.68282533196e-02 -5.26483583652e-01
+ 3600 -5.87999130226e-02 -4.99995016197e-02 -4.92778092772e-01
+ 3601 -4.24414937069e-02 -6.42853107868e-02 -4.89320616922e-01
+ 3602 -3.39748451407e-02 -5.35997483091e-02 -5.10638452225e-01
+ 3603 -3.06038375826e-02 -1.01742368254e-01 -4.52157650193e-01
+ 3604 -3.47157293752e-02 -6.82425000025e-02 -4.53909230516e-01
+ 3605 -5.53904761829e-02 -4.87923808596e-02 -4.41389751089e-01
+ 3606 4.84999942099e-02 1.95777933805e-02 -5.05957215444e-01
+ 3607 6.97545945972e-02 2.44317811900e-02 -4.94087731009e-01
+ 3608 1.67520818759e-01 -1.06085815440e-01 -2.59674423202e-01
+ 3609 1.54050431582e-01 -1.11598176502e-01 -2.89126693317e-01
+ 3610 3.36919564736e-01 -1.52013881914e-01 -2.72205970632e-01
+ 3611 3.24307085188e-01 -1.31547555705e-01 -3.18698720337e-01
+ 3612 2.65742780251e-01 -1.07407639817e-01 -3.77540426275e-01
+ 3613 3.31384363182e-01 -9.91899591655e-02 -3.01038772128e-01
+ 3614 -8.33617213629e-02 -5.68436448999e-02 1.01583227139e-01
+ 3615 -7.87834890778e-02 -4.36329902742e-02 1.50785994276e-01
+ 3616 -8.85857043451e-02 -1.31003604986e-03 1.67897027937e-01
+ 3617 -8.80294200174e-02 -6.76645835941e-02 1.61920670840e-01
+ 3618 -1.07355708388e-01 -1.61959489175e-02 1.93154559613e-01
+ 3619 -9.95197339150e-02 -9.94963621926e-02 9.36838584151e-02
+ 3620 -9.57865826832e-02 -1.15471593596e-02 -5.12580640611e-01
+ 3621 -9.40067053272e-02 5.36178780473e-03 -5.12993170347e-01
+ 3622 -6.57417909738e-02 8.10707552858e-04 -5.22399308953e-01
+ 3623 -4.16251663595e-02 2.82245865703e-02 -3.92627067702e-01
+ 3624 -1.10352724797e-01 -1.97829478088e-02 -4.90784795105e-01
+ 3625 -8.75364835998e-02 -3.27156065985e-02 -4.92788141964e-01
+ 3626 -3.91176951262e-02 4.23450507779e-02 -4.98378147441e-01
+ 3627 -3.79392853720e-02 5.91395009144e-02 -4.85253373490e-01
+ 3628 -7.41466554629e-02 -5.91960215076e-02 -3.75681385328e-01
+ 3629 -9.07409214556e-02 -8.43996982698e-02 -3.82134100300e-01
+ 3630 -6.33265654130e-02 -6.79501568647e-02 -3.60261484327e-01
+ 3631 -7.07827127248e-02 -8.76706531586e-02 -3.59423327308e-01
+ 3632 -1.11844331349e-01 -7.10965698987e-02 -3.96555153063e-01
+ 3633 -9.41227793815e-02 -5.55195944198e-02 -3.88110353644e-01
+ 3634 -8.76169046733e-02 -4.98736597864e-02 -4.04513441663e-01
+ 3635 -1.02883226040e-01 -4.19121264864e-02 -3.75691434520e-01
+ 3636 -8.96664689846e-03 -6.93616455987e-02 -6.09175978367e-01
+ 3637 -5.13545634420e-03 -5.01222066922e-02 -5.87541463342e-01
+ 3638 -3.76650985223e-03 -8.19553431619e-02 -5.65766715368e-01
+ 3639 -2.19315119809e-03 -6.43773395912e-02 -5.60393144849e-01
+ 3640 -1.88193658992e-02 -5.70666034357e-02 -5.39591799601e-01
+ 3641 2.51062088347e-02 -4.89764384684e-02 -5.83534806942e-01
+ 3642 1.89487273032e-02 -6.83652050750e-02 -5.48672601085e-01
+ 3643 2.71596285727e-02 -9.67261431729e-02 -5.50872684983e-01
+ 3644 3.83220452807e-02 3.23409481113e-01 -7.10348390781e-01
+ 3645 3.80337552348e-02 2.51849332109e-01 -7.40261293086e-01
+ 3646 5.07116736464e-02 1.69132442813e-01 -7.10348390781e-01
+ 3647 -1.26144741871e-01 1.33608857971e-01 -5.94435708931e-01
+ 3648 -1.04333622128e-01 1.22380023838e-01 -5.64053729497e-01
+ 3649 -1.13110839211e-01 1.30359812217e-01 -6.14480783441e-01
+ 3650 -4.70261616010e-02 1.13408542819e-01 -7.14281634564e-01
+ 3651 1.41629522834e-02 1.38391345824e-01 -7.02305057190e-01
+ 3652 -3.72723110626e-02 1.45617349460e-01 -6.98124204701e-01
+ 3653 5.51667826204e-03 4.57396022130e-02 -6.88125534079e-01
+ 3654 -1.03094251555e-02 5.00249607708e-02 -6.17188301119e-01
+ 3655 3.53889012405e-02 6.96603884908e-02 -6.91850783646e-01
+ 3656 7.47019149663e-03 6.82450474077e-02 -6.72909964674e-01
+ 3657 -2.42937303689e-03 7.86037681778e-02 -6.20546619566e-01
+ 3658 -1.95585263189e-02 5.05839546278e-02 -7.23043753880e-01
+ 3659 -8.59544047911e-03 7.89764307491e-02 -6.91116921406e-01
+ 3660 -3.14776032673e-02 9.98802035751e-02 -6.21675382109e-01
+ 3661 6.81985367919e-02 7.47140097005e-02 -6.81752621399e-01
+ 3662 7.85417540234e-02 8.72290512349e-02 -6.32336828532e-01
+ 3663 -3.04441619613e-01 6.25540811136e-02 -6.85188567600e-01
+ 3664 -3.42062792451e-01 2.76403213617e-02 -6.85057541056e-01
+ 3665 -2.02816769535e-01 1.76574319638e-01 1.14289304362e-01
+ 3666 -1.56894110431e-01 1.16382537626e-01 1.75657634805e-01
+ 3667 -1.03601722416e-01 4.80906921527e-02 2.14483756211e-01
+ 3668 -7.13764634520e-02 1.70911791114e-01 1.63237751734e-01
+ 3669 -1.35410604455e-01 1.98263270267e-01 1.41493631820e-01
+ 3670 -1.17820151397e-01 1.47697196101e-01 1.80718797788e-01
+ 3671 -6.92672397088e-02 1.12607518610e-01 2.08289933053e-01
+ 3672 -1.64263839342e-01 1.24482601088e-01 1.98199843842e-01
+ 3673 -1.09708650993e-01 1.63535457900e-01 1.97433991473e-01
+ 3674 -1.32038580378e-01 2.47303700049e-01 1.46953839365e-01
+ 3675 -6.03064184892e-03 2.94688642208e-02 -5.92883011843e-01
+ 3676 2.90970060941e-02 1.22037842521e-02 -5.81280763885e-01
+ 3677 -2.09276780622e-02 8.99821238066e-03 -5.93550952917e-01
+ 3678 -2.47492483795e-03 -9.33539154524e-03 -5.86038767970e-01
+ 3679 -2.87458790044e-02 1.58787261339e-02 -6.09977126126e-01
+ 3680 -4.97584963909e-03 -8.18142287830e-03 -6.06921935309e-01
+ 3681 1.07270013128e-01 4.20411531851e-02 -5.64963211575e-01
+ 3682 1.12675828325e-01 5.76072677999e-02 -5.72703072834e-01
+ 3683 -8.15004466083e-02 1.31710204911e-01 -6.17676401695e-01
+ 3684 -4.48078951109e-02 1.19848486425e-01 -5.95041319849e-01
+ 3685 -8.48444358784e-02 1.22351922507e-01 -6.42977470484e-01
+ 3686 -8.71969578511e-03 1.97677313856e-02 -5.08392038686e-01
+ 3687 8.39021280250e-03 3.02729788281e-02 -5.33881862447e-01
+ 3688 -4.30265538183e-02 1.44008456398e-02 -5.05305194670e-01
+ 3689 -2.87065401536e-02 2.88479558636e-02 -5.09851718903e-01
+ 3690 -2.39622158846e-02 3.88781956513e-02 -5.27331494817e-01
+ 3691 -1.64247864110e-01 6.71380654017e-02 -6.55734639252e-01
+ 3692 -8.79988687109e-02 2.37625736444e-02 -7.03874090175e-01
+ 3693 -1.13893676808e-01 5.96457703256e-02 -6.99300979439e-01
+ 3694 -7.68983845794e-02 8.94877565416e-02 -7.10556384997e-01
+ 3695 -1.26051472624e-01 1.72490617398e-01 -3.69629506035e-01
+ 3696 -1.19112361165e-01 1.05893493605e-01 -3.53441876699e-01
+ 3697 -1.91740773646e-01 1.12548518003e-01 -3.45271227970e-01
+ 3698 -1.84610088372e-01 1.22346547116e-01 -3.23611121131e-01
+ 3699 -1.99756000272e-01 1.48167268617e-01 -4.21350792665e-01
+ 3700 -1.90111030150e-01 1.45468420218e-01 -4.08081810293e-01
+ 3701 -1.90828538374e-01 1.74604402150e-01 -3.11855935960e-01
+ 3702 -1.73546003592e-01 1.42426599781e-01 -3.10352384061e-01
+ 3703 -1.70453532641e-01 1.41162918591e-01 -3.24833003841e-01
+ 3704 -1.80944398845e-01 1.62193559774e-01 -3.30662245033e-01
+ 3705 -2.44566936850e-01 2.66177360713e-01 -3.35144680112e-01
+ 3706 -2.21994704709e-01 2.54232398745e-01 -3.12605374237e-01
+ 3707 -2.18206485647e-01 2.63937287667e-01 -2.94118418859e-01
+ 3708 -2.02497513682e-01 1.32319772562e-01 -4.57284083263e-01
+ 3709 -1.93184747725e-01 1.35078828230e-01 -4.76538183798e-01
+ 3710 -3.72382831336e-01 1.83151720979e-01 -4.63883200821e-01
+ 3711 -3.59047274784e-01 1.68204827362e-01 -4.42274498814e-01
+ 3712 -3.12063033046e-01 1.67387945038e-01 -4.29718066999e-01
+ 3713 7.14468871882e-02 -3.80538264159e-01 -4.24860568504e-01
+ 3714 1.00362957399e-01 -3.20807396238e-01 -3.91342931164e-01
+ 3715 1.17736746966e-01 -3.82433301153e-01 -3.97002598029e-01
+ 3716 1.52444080366e-01 -3.43244401537e-01 -3.65371516311e-01
+ 3717 -1.85812240825e-01 -2.58449023650e-01 -3.17847608066e-01
+ 3718 -1.36549684414e-01 -3.38966015767e-01 -2.21593429298e-01
+ 3719 -1.78732793350e-01 -3.43922422933e-01 -2.62615475074e-01
+ 3720 -2.25635533936e-01 -2.91896563910e-01 -3.40458942844e-01
+ 3721 -7.44767526029e-02 -1.23876282840e-01 -3.12675299616e-01
+ 3722 -9.62819812727e-02 -1.38708142791e-01 -3.12012058762e-01
+ 3723 -9.65016038514e-02 -1.46883818844e-01 -2.47425131479e-01
+ 3724 -7.46231676553e-02 -1.29326733541e-01 -2.69617348094e-01
+ 3725 -8.43774766179e-02 -1.15109399736e-01 -2.86938283467e-01
+ 3726 -1.02214537070e-01 -1.22075012003e-01 -2.77917117515e-01
+ 3727 -7.79533132871e-02 -1.95715721204e-01 -3.50397799469e-01
+ 3728 -6.22576406124e-02 -1.61881335115e-01 -3.38265793421e-01
+ 3729 -4.12411620571e-02 -1.93110565028e-01 -3.33856438185e-01
+ 3730 -5.31551305496e-02 -1.90897895067e-01 -3.61128482457e-01
+ 3731 -4.75829217280e-02 -1.66726562035e-01 -3.49346807174e-01
+ 3732 -3.77828731258e-02 -1.60144564331e-01 -3.27238219231e-01
+ 3733 -5.39246813989e-02 -1.40342559041e-01 -3.64837176162e-01
+ 3734 -3.71360426242e-02 -1.53982453625e-01 -3.70754733586e-01
+ 3735 -1.72125301689e-02 -1.37737402865e-01 -3.48295814878e-01
+ 3736 -4.02709163047e-02 -1.83867398970e-01 -3.99131209718e-01
+ 3737 -3.55876507473e-03 -1.81262242794e-01 -3.82589848434e-01
+ 3738 1.45559625463e-02 -1.09525161119e-01 -2.60621658087e-01
+ 3739 3.50258719749e-03 -1.40470806320e-01 -1.29038734438e-01
+ 3740 5.70846933275e-02 3.63818877621e-01 -5.17117569884e-01
+ 3741 -6.56634637293e-03 2.95728316431e-01 -5.35693909864e-01
+ 3742 6.79554450646e-02 3.61363551035e-01 -5.38706925926e-01
+ 3743 2.91450025100e-02 3.15151401380e-01 -5.58287604593e-01
+ 3744 -6.71281630033e-02 -2.90344141283e-01 -1.41419267313e-01
+ 3745 -4.13484736906e-02 -2.61382073596e-01 -1.64229072007e-01
+ 3746 -4.24564410570e-02 -1.81842764795e-01 -2.09277072089e-01
+ 3747 -8.16799587092e-02 -1.85516211925e-01 -1.97586365088e-01
+ 3748 -1.29856792049e-01 -1.30364185406e-01 -2.54471371449e-01
+ 3749 -1.25802694913e-01 -1.15887488635e-01 -2.75578800983e-01
+ 3750 -1.29710376997e-01 -1.24913734704e-01 -2.97529322971e-01
+ 3751 -1.37745363742e-01 -1.51141902897e-01 -2.76843439663e-01
+ 3752 1.89914466187e-02 1.72490806406e-02 -5.06800150608e-01
+ 3753 3.50870672397e-03 1.26261196056e-02 -4.94453210747e-01
+ 3754 1.45652442849e-01 -2.81607736567e-01 -4.44706442726e-01
+ 3755 1.84183280160e-01 -2.68266167395e-01 -4.58756636058e-01
+ 3756 2.07490492140e-01 -2.82614363396e-01 -4.62711575986e-01
+ 3757 1.70910609528e-01 -3.24981026877e-01 -5.10898134233e-01
+ 3758 1.59796691752e-01 -2.96510609715e-01 -4.90881008223e-01
+ 3759 1.85158757509e-01 -2.82778714549e-01 -4.89875011847e-01
+ 3760 2.01022057946e-01 -2.97181694268e-01 -5.02884430396e-01
+ 3761 1.99406905489e-01 -2.40576402221e-01 -4.68851889462e-01
+ 3762 1.95633000179e-01 -2.69156386818e-01 -5.06977972713e-01
+ 3763 1.62827022878e-01 -2.82943065703e-01 -5.17038447709e-01
+ 3764 1.37568856198e-01 -2.39569775393e-01 -4.50846756202e-01
+ 3765 -1.19331124669e-01 -1.29022469247e-01 -4.16965008227e-01
+ 3766 -1.30904466825e-01 -1.00845083883e-01 -4.19775758348e-01
+ 3767 -1.31753632770e-01 -1.17843088869e-01 -4.39334278296e-01
+ 3768 -1.24321126648e-01 -1.42294014107e-01 -4.43979951531e-01
+ 3769 -2.27112969307e-01 -2.82454053126e-01 -3.84476306733e-01
+ 3770 -1.99876371890e-01 -2.34034938958e-01 -3.29201951918e-01
+ 3771 -2.26227808957e-01 -2.65224115326e-01 -3.43321867039e-01
+ 3772 -1.79505969702e-01 -2.26969701769e-01 -4.54316530949e-01
+ 3773 -1.77334679760e-01 -2.10653011395e-01 -4.42878124572e-01
+ 3774 -2.05005479548e-01 1.91442178760e-01 -3.30592704097e-01
+ 3775 -1.92323611733e-01 1.98181012280e-01 -3.09191392225e-01
+ 3776 -1.78645028344e-01 1.89202105714e-01 -2.89566442843e-01
+ 3777 -1.67908230719e-01 1.21958331563e-01 -1.37103553855e-01
+ 3778 -1.53078454169e-01 9.79022586020e-02 -1.40970652640e-01
+ 3779 -1.93567373847e-01 1.07346984837e-01 -1.27969880724e-01
+ 3780 -1.65241290738e-01 8.01426697978e-02 -1.36170570147e-01
+ 3781 -7.24122534700e-02 -1.41407276683e-01 -4.20519841008e-01
+ 3782 -4.94610906716e-02 -1.54692265386e-01 -4.07876510150e-01
+ 3783 -3.57001022401e-02 -1.38802120507e-01 -4.03978479724e-01
+ 3784 -5.85636007344e-02 -1.25675705434e-01 -3.85013821113e-01
+ 3785 -4.48123918195e-02 -1.39572339774e-01 -3.84407827943e-01
+ 3786 -3.40888332478e-02 -1.23938934650e-01 -3.73986246924e-01
+ 3787 -2.63122073297e-01 3.91246892770e-02 -2.25254408332e-01
+ 3788 -3.03825084970e-01 4.47564650123e-02 -2.50901106242e-01
+ 3789 -2.85724875270e-01 6.05547538615e-02 -2.35091631034e-01
+ 3790 -2.72007286016e-01 9.29125097544e-02 -4.78183736346e-01
+ 3791 2.29592570851e-01 -2.75528052427e-01 -3.99310141236e-01
+ 3792 1.83580713525e-01 -2.57548913910e-01 -4.25078448719e-01
+ 3793 1.90495119743e-01 -2.28030554415e-01 -4.20293596782e-01
+ 3794 2.16958251515e-01 -2.22260943926e-01 -4.05017017073e-01
+ 3795 2.45418762816e-01 -2.58555540739e-01 -4.43083581979e-01
+ 3796 2.09468793943e-01 -2.52226952290e-01 -4.45671306720e-01
+ 3797 2.08182578502e-01 -2.31418673074e-01 -4.36934453267e-01
+ 3798 2.31720485937e-01 -2.28701638967e-01 -4.32297018956e-01
+ 3799 1.70946394189e-01 -2.04281805409e-01 -4.30785324556e-01
+ 3800 2.01045914386e-01 -2.16715546623e-01 -4.49475890611e-01
+ 3801 1.79386498900e-01 -8.49159444126e-02 -3.84832706782e-01
+ 3802 2.06157285811e-01 -8.12241025791e-02 -4.03168772449e-01
+ 3803 2.32825673909e-01 -8.75321365175e-02 -3.90555535590e-01
+ 3804 1.97389995665e-01 2.09854749591e-01 -5.26314346555e-01
+ 3805 1.70400986595e-01 2.24828770583e-01 -5.23431716422e-01
+ 3806 1.71370614549e-01 2.36821449567e-01 -5.48024172706e-01
+ 3807 2.12338942131e-01 2.20356757570e-01 -5.64644346046e-01
+ 3808 2.16271369890e-01 -7.75205493446e-02 -5.95721611658e-01
+ 3809 1.85907393226e-01 -9.41892729069e-02 -5.86400619907e-01
+ 3810 1.25161406306e-01 -1.06460669668e-01 -6.43702201161e-01
+ 3811 1.49493952355e-01 -1.45061278882e-01 -6.40467556574e-01
+ 3812 1.24041837493e-01 -1.30373346176e-01 -6.36049962579e-01
+ 3813 1.17249931679e-01 -1.32878639713e-01 -6.52058154517e-01
+ 3814 9.60515239194e-02 -1.04583506811e-01 -6.05411283679e-01
+ 3815 1.04262059631e-01 -1.37092796440e-01 -6.07971938064e-01
+ 3816 8.41843119793e-02 -1.44210461878e-01 -6.17945213713e-01
+ 3817 1.32550342994e-01 -1.62484420632e-01 -6.00559316799e-01
+ 3818 -1.22924667870e-01 2.40214496230e-01 -3.05620718905e-01
+ 3819 -1.20109133564e-01 3.81749047154e-01 -3.57007028624e-01
+ 3820 -9.79079410574e-02 3.58864280202e-01 -3.68614073029e-01
+ 3821 -1.16050695565e-01 3.61654431193e-01 -4.03642982867e-01
+ 3822 -2.39941743070e-01 -4.97838819704e-02 -7.64435219609e-01
+ 3823 1.47364678402e-01 -2.63773561319e-02 -5.68413659568e-01
+ 3824 1.71204915589e-01 -5.00000000000e-01 -7.17298614395e-01
+ 3825 2.29361729852e-01 -4.42105452004e-01 -7.47743379738e-01
+ 3826 1.75424984081e-01 -4.56579089003e-01 -6.83781495600e-01
+ 3827 6.72333121077e-02 -4.42105452004e-01 -6.35041994133e-01
+ 3828 -3.06152786398e-02 3.88435256331e-02 -1.51439089845e-01
+ 3829 -3.63324176507e-02 5.13603035672e-02 -1.41077641331e-01
+ 3830 -3.01349147368e-01 -3.38581925117e-02 -3.74463120449e-01
+ 3831 -3.07247972929e-01 -2.07262867800e-02 -4.06828003650e-01
+ 3832 -1.86655906980e-02 -3.42497717546e-02 -4.00726761838e-01
+ 3833 -5.05796919478e-02 -3.54578099007e-02 -4.15185152521e-01
+ 3834 -3.09595528749e-02 -4.97728283709e-02 -4.06886849132e-01
+ 3835 -7.51932430824e-03 -4.69803236404e-02 -4.19702165064e-01
+ 3836 -2.76266960073e-02 -6.34342151669e-02 -4.21590480381e-01
+ 3837 -3.24242831902e-01 4.48709765485e-01 -5.83417577833e-01
+ 3838 -2.68823786960e-01 4.16958773939e-01 -5.76714181800e-01
+ 3839 -2.29639646504e-01 7.50091553033e-02 -1.46501904319e-01
+ 3840 -1.89289472509e-01 5.85841167751e-02 -1.48525252544e-01
+ 3841 -2.13715335571e-01 5.39191829338e-02 -1.71700943352e-01
+ 3842 -1.87433782808e-01 4.68728971301e-02 -1.66918694762e-01
+ 3843 -1.84410958140e-01 -3.62707569864e-02 2.24633747324e-01
+ 3844 -1.72828180278e-01 -3.36441284702e-02 1.79060772728e-01
+ 3845 -2.26717874306e-01 -4.84656795068e-02 1.19394011247e-01
+ 3846 -2.22963888333e-01 1.58209615633e-02 1.40723207845e-01
+ 3847 -1.70325522963e-01 9.21363224320e-03 1.93280237127e-01
+ 3848 -1.65159798361e-01 -1.87493677072e-04 1.66938883729e-01
+ 3849 -1.98530133740e-01 1.08368389624e-03 1.23120413075e-01
+ 3850 -1.18955356462e-01 2.25968376225e-02 1.72294111986e-01
+ 3851 -8.61549701486e-02 -1.18423983895e-01 -3.93313590534e-01
+ 3852 -7.23328014273e-02 -1.12371128655e-01 -3.73485638231e-01
+ 3853 -9.53117355202e-02 -1.29464976733e-01 -3.77286830294e-01
+ 3854 -7.38299221012e-02 -1.17714172134e-01 -3.56191813970e-01
+ 3855 2.34926134865e-01 1.50398311067e-01 -6.18812828418e-01
+ 3856 2.26489074548e-01 1.79245232819e-01 -6.48175460456e-01
+ 3857 2.30234084408e-01 1.20177710270e-01 -6.42053775679e-01
+ 3858 2.17851462010e-01 1.35267451632e-01 -6.26974154979e-01
+ 3859 2.06535197514e-01 1.49455112989e-01 -6.49269685190e-01
+ 3860 1.99710431254e-01 1.21038672204e-01 -5.97760330627e-01
+ 3861 1.73665519132e-01 1.35205774525e-01 -6.16596713769e-01
+ 3862 3.25887327068e-01 2.43731511376e-01 -5.91109765518e-01
+ 3863 2.67849769424e-01 2.68090190390e-01 -6.28165089271e-01
+ 3864 -9.82560973814e-03 -2.67779822440e-01 -3.51559996033e-01
+ 3865 2.47233649126e-02 -2.99190290029e-01 -3.84778480081e-01
+ 3866 -5.05311342210e-02 -3.10666420054e-01 -3.79978200627e-01
+ 3867 -5.99952758272e-02 -2.75430575790e-01 -3.48359809730e-01
+ 3868 -4.43822457388e-02 -2.76675803174e-01 -3.67629164069e-01
+ 3869 -3.28684746386e-02 -3.00581441810e-01 -3.95131209446e-01
+ 3870 -3.82333572566e-02 -2.42685186293e-01 -3.55280127511e-01
+ 3871 -7.48396227513e-02 -2.62911372653e-01 -3.75465641066e-01
+ 3872 -7.27976546072e-02 -2.91887615348e-01 -4.20636947630e-01
+ 3873 -1.13487856390e-01 -2.54161316318e-01 -3.50479848056e-01
+ 3874 1.62159145864e-02 -1.77879056664e-01 -3.07624167262e-01
+ 3875 2.01108978389e-02 -1.49491999037e-01 -3.32413424496e-01
+ 3876 1.21710496346e-02 -1.36990063288e-01 -3.82290893699e-01
+ 3877 5.21844636518e-04 -1.49990225421e-01 -3.09750038616e-01
+ 3878 7.36659956335e-03 -1.35672140011e-01 -3.27810513703e-01
+ 3879 -2.17473199802e-03 -1.22730896504e-01 -3.59527856241e-01
+ 3880 -8.98490100267e-02 -1.54629613576e-01 -3.46565562842e-01
+ 3881 -1.15725853509e-01 -1.85762871689e-01 -3.08822909589e-01
+ 3882 -1.15030703508e-01 -1.47994380566e-01 -3.18848969588e-01
+ 3883 -1.05518794514e-01 -1.57613924211e-01 -3.43054869942e-01
+ 3884 -1.02811591517e-01 -1.85999432841e-01 -3.44439463393e-01
+ 3885 -1.14383873006e-01 -1.41832269860e-01 -3.62365483943e-01
+ 3886 -1.14755607756e-01 -1.76519705631e-01 -3.74097681122e-01
+ 3887 5.36602932288e-03 -5.34636097159e-02 -3.52172757315e-01
+ 3888 -6.52818981181e-02 -1.06183895869e-01 -4.99469978666e-01
+ 3889 -6.44287176890e-02 -1.09464528418e-01 -5.24170934550e-01
+ 3890 -6.51696019235e-02 -1.24107280112e-01 -4.67441712841e-01
+ 3891 -6.38336831825e-02 -1.37989921057e-01 -4.88479013755e-01
+ 3892 -1.11022702738e-02 -9.87342067632e-02 -4.28769079784e-01
+ 3893 -1.90615809454e-02 -7.43613459472e-02 -4.35929907628e-01
+ 3894 -2.80162812542e-03 -6.70344618564e-02 -4.39450839833e-01
+ 3895 -1.26588450995e-01 -9.37481624924e-02 -3.99557091158e-01
+ 3896 -1.17434217615e-01 -1.10167445604e-01 -3.90943702014e-01
+ 3897 -1.04221523623e-01 -1.91249007048e-02 -3.80444957539e-01
+ 3898 4.13664380349e-02 1.60789677857e-01 -6.89577107201e-01
+ 3899 4.27656223475e-02 2.01996608777e-01 -6.42769476268e-01
+ 3900 1.87292964338e-01 1.65271112402e-01 -6.72489006642e-01
+ 3901 1.49761944528e-01 1.33245555576e-01 -7.11866754981e-01
+ 3902 1.83475592366e-01 2.44080756690e-01 -5.99473328224e-01
+ 3903 1.55839628336e-01 2.80719694886e-01 -6.00807216833e-01
+ 3904 1.88704837390e-01 3.02074756622e-01 -6.06186972766e-01
+ 3905 2.18083883094e-01 2.84767151736e-01 -6.07090965671e-01
+ 3906 1.70281686705e-01 3.16040729022e-01 -6.25731497283e-01
+ 3907 2.05138679920e-01 2.97062307894e-01 -6.36859748898e-01
+ 3908 1.39238211099e-01 2.77977479554e-01 -5.79301369131e-01
+ 3909 1.52128381373e-01 2.52637448980e-01 -5.71243494157e-01
+ 3910 1.91985014795e-01 1.95491713199e-01 -6.49248059381e-01
+ 3911 2.13075246337e-01 2.22038434433e-01 -6.37854094827e-01
+ 3912 2.04982333457e-01 2.11662994754e-01 -6.23824394340e-01
+ 3913 2.32317479513e-01 2.06222435020e-01 -6.14634773375e-01
+ 3914 1.51840245054e-01 2.04260674839e-01 -6.16564275055e-01
+ 3915 1.82551593184e-01 2.22899396366e-01 -5.93560649775e-01
+ 3916 1.51927935930e-01 1.30447603892e-01 -5.91785399519e-01
+ 3917 1.76896015822e-01 1.21011819810e-01 -5.83860940726e-01
+ 3918 1.37540106486e-01 1.05403067978e-01 -5.96810452840e-01
+ 3919 1.75626822823e-01 1.01170201173e-01 -5.84569490008e-01
+ 3920 -1.76071302812e-01 -1.24408242206e-01 -3.56838445410e-01
+ 3921 -1.89054635614e-01 -1.39607874048e-01 -3.55606493964e-01
+ 3922 -2.01230131493e-01 -1.30621546692e-01 -3.63301061538e-01
+ 3923 -1.83784530644e-01 -1.71158855321e-01 -3.64332112102e-01
+ 3924 -1.61674478955e-01 -1.64134898195e-01 -3.70542848341e-01
+ 3925 -1.60463577986e-01 -1.11420531234e-01 -3.52354106454e-01
+ 3926 -1.45663120472e-01 -1.33575731570e-01 -3.59995595423e-01
+ 3927 -6.42950224269e-02 -1.53688278635e-01 -2.02860719200e-01
+ 3928 -3.92236182583e-02 -1.58890176610e-01 -2.10310160923e-01
+ 3929 -7.51033313358e-02 -1.39525350916e-01 -3.38424617462e-01
+ 3930 -1.45023484777e-01 -2.57087794198e-01 -5.36244827866e-01
+ 3931 -1.14065779557e-01 -3.01521662039e-01 -4.72447261452e-01
+ 3932 -1.20810896573e-01 -2.57293475968e-01 -4.80968120347e-01
+ 3933 -1.45780652018e-01 -2.68656781992e-01 -5.06142787944e-01
+ 3934 -1.49607159156e-01 -3.01930008047e-01 -5.08853771212e-01
+ 3935 -1.67681067566e-01 -2.58315849754e-01 -4.98504432348e-01
+ 3936 -7.41761191883e-02 -1.27933349915e-01 -2.36086563461e-01
+ 3937 -5.81570312629e-02 -9.10179084722e-02 -2.45712814590e-01
+ 3938 -6.33486632070e-02 -1.19503153170e-01 -2.55565367927e-01
+ 3939 7.45148651885e-02 3.60660748412e-01 -6.94956083762e-01
+ 3940 5.38834590295e-02 3.31056503655e-01 -6.83630041599e-01
+ 3941 3.08523136095e-02 3.65413780220e-01 -6.94375636388e-01
+ 3942 8.22463202403e-02 2.29944719076e-01 -5.55969762166e-01
+ 3943 8.87979325617e-02 2.02691354964e-01 -5.52518014380e-01
+ 3944 1.06954541401e-01 2.06222256715e-01 -5.69446618093e-01
+ 3945 1.25391804755e-01 1.99800861466e-01 -5.72518786789e-01
+ 3946 1.31038149832e-01 2.26090727746e-01 -5.82637458712e-01
+ 3947 1.37377753211e-01 1.76484204102e-01 -5.91763773710e-01
+ 3948 2.83959625154e-01 3.96283577877e-01 -3.99265229884e-01
+ 3949 2.73963291226e-01 3.62256893263e-01 -4.36337272217e-01
+ 3950 3.03822130725e-01 3.16342524351e-01 -4.21794732981e-01
+ 3951 -1.45483802100e-01 -4.48692145654e-02 -2.39096775330e-01
+ 3952 -1.64171176937e-01 -5.81314769201e-02 -2.33463369276e-01
+ 3953 1.57730352974e-01 -1.84033275995e-01 -4.49081747072e-01
+ 3954 1.34433563372e-01 -1.91552996281e-01 -4.68260674153e-01
+ 3955 1.28392941922e-01 -1.87475280844e-01 -4.19441138250e-01
+ 3956 1.53703272008e-01 -1.81314799038e-01 -4.16535389803e-01
+ 3957 1.48102021642e-01 -1.71870153570e-01 -4.33820190378e-01
+ 3958 1.29361384797e-01 -1.72828926285e-01 -4.41518956201e-01
+ 3959 1.96560207443e-01 -1.16904539710e-01 -5.02794929830e-01
+ 3960 2.35257589266e-01 -1.64790709915e-01 -4.69645131686e-01
+ 3961 2.18186903506e-01 -1.96338087527e-01 -4.73467852431e-01
+ 3962 -6.59731928445e-02 -6.95340382295e-02 -2.48283859316e-01
+ 3963 -7.67411789860e-02 -1.37468396583e-01 -2.04577348156e-01
+ 3964 -9.24798553605e-02 -1.53280391425e-01 -2.01633321732e-01
+ 3965 -2.35226460518e-01 -1.06986891473e-01 -1.83585036952e-01
+ 3966 -2.03930133328e-01 -1.39166119765e-01 -1.79698743853e-01
+ 3967 -2.39319537084e-01 -1.17829218449e-01 -2.26593340832e-01
+ 3968 -2.25561637500e-01 -1.04571398238e-01 -2.04829740562e-01
+ 3969 -2.01475811701e-01 -1.25219052687e-01 -2.09320446365e-01
+ 3970 -2.41053526823e-01 -5.37131862466e-02 -1.65448281451e-01
+ 3971 -2.26224740697e-01 -6.82504303411e-02 -1.99820138097e-01
+ 3972 -1.90427553597e-01 -8.10614280669e-02 -2.04051395570e-01
+ 3973 -1.27113983808e-01 -9.56843606650e-02 -1.37870902306e-01
+ 3974 -1.27601315263e-01 -1.06560074872e-01 -1.53105292337e-01
+ 3975 -1.64978251952e-01 -8.36438688530e-02 -2.05943342054e-01
+ 3976 -1.69200367390e-01 -5.97980920910e-02 -2.09982261895e-01
+ 3977 -1.87573940299e-01 -5.01278726463e-02 -2.10067270853e-01
+ 3978 -8.82773678343e-02 -4.73583582919e-02 -4.36058920256e-01
+ 3979 -8.26127225512e-02 -4.86222045039e-02 -4.75932884227e-01
+ 3980 -1.20481426991e-01 -1.40210964580e-01 -3.87712188676e-01
+ 3981 -1.07321430095e-01 -1.29243722990e-01 -3.97125919261e-01
+ 3982 -1.05215105624e-01 -1.48172497880e-01 -4.16534195819e-01
+ 3983 -9.30418791818e-02 -1.50550552397e-01 -4.46349840051e-01
+ 3984 -1.12486611870e-01 -1.53338649366e-01 -4.36903106399e-01
+ 3985 1.29660222433e-02 -1.67432426401e-01 -5.09287634003e-01
+ 3986 -1.70170076827e-02 -1.73779135982e-01 -4.78082613003e-01
+ 3987 -3.51746516472e-02 -1.46807646717e-01 -4.47310380187e-01
+ 3988 -3.61230287062e-02 -1.67900652209e-01 -5.05528368715e-01
+ 3989 -4.63380384133e-02 -1.72543627943e-01 -4.83064419287e-01
+ 3990 -6.82168112999e-02 -1.54150799087e-01 -4.64210199504e-01
+ 3991 -6.39953059645e-02 -1.94343924495e-01 -4.84436495925e-01
+ 3992 7.94725746874e-03 -5.24755253259e-02 -4.42747311608e-01
+ 3993 8.38508854491e-03 -3.42531210051e-02 -4.30680352353e-01
+ 3994 -7.64475567451e-02 -3.77159357146e-02 -4.17738179038e-01
+ 3995 1.03252878364e-02 -1.27040954954e-01 -4.14509992257e-01
+ 3996 1.53749958275e-03 -1.44202490541e-01 -4.30769018903e-01
+ 3997 -1.44997800455e-02 -1.23440708265e-01 -3.96649632804e-01
+ 3998 -9.21639397404e-03 -1.19366215771e-01 -4.17224271946e-01
+ 3999 -2.15888134133e-02 -1.28248993101e-01 -4.28968382940e-01
+ 4000 -1.85914088499e-02 -1.16133671933e-01 -3.75987669934e-01
+ 4001 -3.46632751439e-01 -1.93564840246e-01 -2.29293344801e-01
+ 4002 -3.34429342304e-01 -1.55830738907e-01 -2.19809414389e-01
+ 4003 -2.79239123072e-01 -1.39785217419e-01 -2.45688018344e-01
+ 4004 -3.71381680436e-01 -1.36596217900e-01 -2.19793036533e-01
+ 4005 -3.98957616349e-01 -1.29132983975e-01 -2.60142096033e-01
+ 4006 -3.92788679179e-01 -8.89448237914e-02 -2.15312009108e-01
+ 4007 -3.73672990986e-01 -1.07506846704e-01 -2.42945977813e-01
+ 4008 -2.17331247465e-01 -1.20555358301e-01 -3.77017577778e-01
+ 4009 -2.32834726642e-01 -1.06839497643e-01 -3.66502468557e-01
+ 4010 -2.69988385269e-01 -1.46252159381e-01 -3.65308550016e-01
+ 4011 -2.53707526583e-01 -1.20927852093e-01 -3.56338822399e-01
+ 4012 -2.21324589116e-01 -3.18957114327e-02 -1.84331861440e-01
+ 4013 -2.15135233949e-01 -4.82530132071e-02 -2.05389858927e-01
+ 4014 -2.58571134415e-01 -1.29170142697e-01 -2.51406976605e-01
+ 4015 -1.42249508024e-02 -7.62242902132e-03 -7.12777388070e-01
+ 4016 -8.44431516999e-02 -1.50416821217e-02 -6.97029846301e-01
+ 4017 -3.49119464466e-02 1.62513887052e-02 -6.80547427967e-01
+ 4018 -8.24038482087e-02 4.71849444832e-03 -6.76794261666e-01
+ 4019 4.47161182667e-02 -6.32108791511e-02 -5.68660614514e-01
+ 4020 6.58107150179e-02 -8.89946542871e-02 -5.80854705125e-01
+ 4021 4.70883284024e-02 -3.42033558653e-02 -5.69604413894e-01
+ 4022 5.63002305845e-02 -4.85724570281e-02 -5.61931367835e-01
+ 4023 7.42246658579e-02 -6.08821664111e-02 -5.67817679349e-01
+ 4024 4.32314309475e-02 -5.16615446978e-02 -5.41592331474e-01
+ 4025 5.91718098109e-02 -3.59934266850e-02 -5.41642763582e-01
+ 4026 4.67897461511e-02 -8.15025976922e-03 -5.43008030545e-01
+ 4027 -3.22060693108e-01 1.63433205994e-01 -1.27421284636e-01
+ 4028 -2.40488805432e-01 1.36650250896e-01 -1.18895205041e-01
+ 4029 -2.38578481339e-01 1.87729519931e-01 -1.32249285800e-01
+ 4030 -3.03933861005e-01 1.63912624841e-01 -1.08097764645e-01
+ 4031 -3.26992536955e-01 1.21920813788e-01 -9.11445370877e-02
+ 4032 -4.11585944385e-01 2.94116665857e-01 -1.54259033551e-01
+ 4033 -3.74559179904e-01 2.83829056536e-01 -9.11929271653e-02
+ 4034 -1.68855945809e-01 3.64712740712e-02 -3.51989572126e-03
+ 4035 -1.92603304262e-01 1.62594085836e-01 -2.64066594530e-03
+ 4036 -1.64128274046e-01 1.61215688062e-01 2.11026034182e-02
+ 4037 -2.10322199812e-01 1.85187121520e-01 2.25208485393e-02
+ 4038 -1.97245144851e-01 1.91799201566e-01 4.67368662765e-02
+ 4039 -2.42121454812e-01 1.68740702250e-01 2.49289845203e-02
+ 4040 -2.38405499871e-01 1.70435612684e-01 6.24570791166e-02
+ 4041 -1.36263273253e-01 1.04390392740e-01 6.05152994867e-02
+ 4042 -1.77743382945e-01 9.40437037486e-02 7.87409914860e-02
+ 4043 -1.32716761412e-01 9.14304925949e-02 5.52568616435e-02
+ 4044 -1.59187997260e-01 8.02127332194e-02 6.56545103619e-02
+ 4045 -9.77288532393e-02 1.12633090712e-01 7.73185661100e-02
+ 4046 -1.05844977456e-01 9.26056578617e-02 6.47062267780e-02
+ 4047 -2.28251956901e-01 5.00000000000e-01 2.49554387443e-01
+ 4048 -2.39994266754e-01 4.17655409524e-01 1.99038055626e-01
+ 4049 -3.18834637934e-01 5.00000000000e-01 7.69774409101e-02
+ 4050 -3.04995700066e-01 4.38241557143e-01 8.22344286808e-02
+ 4051 -1.84620631328e-01 1.63940763173e-01 -1.42567027221e-01
+ 4052 -2.07297526950e-01 1.68194009225e-01 -1.38299069589e-01
+ 4053 -1.26333865189e-01 2.43044593143e-01 1.03068039775e-01
+ 4054 -7.35270248524e-02 3.31535800033e-01 9.76721512052e-02
+ 4055 -8.38763773420e-02 3.07283444857e-01 7.70782235530e-02
+ 4056 -1.11635745024e-01 3.29164202634e-01 3.74702024918e-02
+ 4057 -2.02631933111e-01 1.36047615324e-01 -5.92018803552e-02
+ 4058 -2.06198659834e-01 1.20000075815e-01 -3.04983314901e-02
+ 4059 -2.11612756585e-01 1.00517229410e-01 -4.92088994245e-02
+ 4060 -2.11039637687e-01 1.04721306949e-01 -7.45814546461e-02
+ 4061 -1.98965887215e-01 7.89060120859e-02 -4.89027976753e-02
+ 4062 2.03433558249e-01 -2.23543231860e-01 -5.63666994376e-01
+ 4063 1.80663994081e-01 -2.31434557724e-01 -5.93757196100e-01
+ 4064 1.82745951450e-01 -2.18185267820e-01 -5.76023557490e-01
+ 4065 1.80966205415e-01 -1.82141571755e-01 -5.73621363582e-01
+ 4066 1.88538506557e-01 -2.52376877059e-01 -5.53026390438e-01
+ 4067 1.65920048056e-01 -2.35621709939e-01 -5.73048675903e-01
+ 4068 1.54837477305e-01 -1.90274386902e-01 -5.67957944247e-01
+ 4069 1.85707435230e-01 -1.21409791172e-01 -5.72493035040e-01
+ 4070 1.56305357659e-01 -7.98497809410e-02 -5.87426348079e-01
+ 4071 1.75534933653e-01 -1.01356321071e-01 -5.86806811622e-01
+ 4072 1.51364169848e-01 -1.67802079790e-01 -5.74647091753e-01
+ 4073 1.66108115873e-01 -1.63614927575e-01 -5.95355611950e-01
+ 4074 1.71829042794e-01 -1.67320545208e-01 -5.77222369377e-01
+ 4075 1.88877680041e-01 -1.55723601711e-01 -5.65265410225e-01
+ 4076 1.19883920870e-01 -1.19357814417e-01 -5.37537402841e-01
+ 4077 1.14176746032e-01 -1.07268613041e-01 -5.63468808211e-01
+ 4078 1.34783212933e-01 -1.08392352435e-01 -5.39279431157e-01
+ 4079 1.35944860396e-01 -9.66777308565e-02 -5.57147710841e-01
+ 4080 1.25990700800e-01 -1.72823796433e-01 -5.49383919468e-01
+ 4081 1.46991075052e-01 -1.74694996991e-01 -5.40530160199e-01
+ 4082 1.32132985511e-01 -1.56168352811e-01 -5.62264408567e-01
+ 4083 1.46347695023e-01 -1.61735614134e-01 -5.52403966841e-01
+ 4084 -2.31602532279e-02 -1.40067928826e-01 -5.67590927388e-01
+ 4085 -2.76690820234e-02 -1.43788561792e-01 -6.11953947848e-01
+ 4086 4.54995483132e-04 -1.22148468570e-01 -5.85993011790e-01
+ 4087 -8.83043829124e-03 -1.29418808358e-01 -6.14664756035e-01
+ 4088 -1.82066778038e-02 -9.66510396402e-02 -6.39677315168e-01
+ 4089 1.00990111790e-02 -1.55087163431e-01 -6.21034749333e-01
+ 4090 5.49937664540e-03 -1.18769687890e-01 -6.61738584681e-01
+ 4091 3.34918865757e-02 -1.57015831285e-01 -5.81212129614e-01
+ 4092 2.45391791306e-02 -1.40391466953e-01 -5.47124149533e-01
+ 4093 1.99968767241e-03 -1.18397036000e-01 -5.59231806185e-01
+ 4094 -1.32289140718e-02 -1.29092865314e-01 -5.38043348049e-01
+ 4095 -4.63622800112e-02 -3.73777613369e-01 -2.63013824338e-01
+ 4096 -5.45025997683e-02 -3.31572931843e-01 -2.68541125238e-01
+ 4097 -8.83334281239e-02 -3.36107544212e-01 -2.43348255958e-01
+ 4098 -1.76194978580e-01 -2.18379123687e-01 -3.66756699680e-01
+ 4099 -1.50290150859e-01 -2.34965300744e-01 -3.74179729709e-01
+ 4100 -1.74851436418e-01 -2.04210077834e-01 -3.77208251120e-01
+ 4101 -1.57133703884e-01 -2.10544513921e-01 -3.85640788286e-01
+ 4102 -1.08801682675e-01 -3.51447506035e-01 -5.04614289205e-01
+ 4103 -7.15056041162e-02 -3.67681108026e-01 -4.78930122030e-01
+ 4104 -1.25854456418e-01 -2.18801052211e-01 -3.88010676806e-01
+ 4105 -1.37096044797e-01 -2.04526524227e-01 -3.93148733965e-01
+ 4106 -1.33444008482e-01 -1.71580783845e-01 -3.85586089228e-01
+ 4107 1.70426379674e-01 -1.50264944527e-01 -6.26587717994e-01
+ 4108 1.86528532312e-01 -1.35666692905e-01 -5.60075436695e-01
+ 4109 1.29125993626e-01 -2.20840575545e-01 -5.31970001518e-01
+ 4110 1.49081270270e-01 -2.06706183065e-01 -5.28920881565e-01
+ 4111 1.29850085932e-01 -1.95072456086e-01 -5.16538198380e-01
+ 4112 1.44635520339e-01 -1.90913691591e-01 -5.18109309200e-01
+ 4113 1.63280339878e-01 -2.09003586749e-01 -4.86834698931e-01
+ 4114 1.52619650100e-01 -1.87181130222e-01 -4.86447996655e-01
+ 4115 1.65545720620e-01 -1.82634306523e-01 -4.67516970719e-01
+ 4116 1.76961537312e-01 -1.95667002974e-01 -4.61464430257e-01
+ 4117 1.95935211512e-01 -2.19863400849e-01 -4.86842140195e-01
+ 4118 1.98032391679e-01 -2.07146009493e-01 -4.67812578373e-01
+ 4119 -7.67221686602e-02 -8.45727124811e-02 -8.00457442823e-02
+ 4120 -9.14602736373e-02 -9.08464071200e-02 -6.64109474654e-02
+ 4121 -1.80105474968e-01 -1.72330580902e-01 -1.21571649652e-01
+ 4122 -1.44585249124e-01 -2.54247935676e-01 -9.84500051791e-02
+ 4123 -1.64634879373e-01 -2.83639402040e-01 -9.45834394925e-02
+ 4124 -1.15344419293e-01 -2.93202612838e-01 -1.19664440652e-01
+ 4125 -1.54004343144e-01 -1.89803919257e-01 -1.64954125097e-01
+ 4126 7.36660721898e-02 -3.51346156842e-01 -5.38251020345e-01
+ 4127 1.18478655274e-01 -3.83320684585e-01 -5.04564037217e-01
+ 4128 9.36835615173e-02 -3.44421042067e-01 -5.13329797572e-01
+ 4129 1.20373166434e-01 -2.92561389422e-01 -5.20474449034e-01
+ 4130 1.71245313019e-01 -2.13514781441e-01 -3.81256015715e-01
+ 4131 1.54706003439e-01 -2.35775254449e-01 -3.66522077118e-01
+ 4132 1.45530089163e-01 -1.83680759900e-01 -3.35116459166e-01
+ 4133 1.65128036835e-01 -1.78785118408e-01 -3.60318937080e-01
+ 4134 1.58238241676e-01 -1.93981282654e-01 -3.82950891861e-01
+ 4135 1.42876344841e-01 -2.02310431731e-01 -3.73693224844e-01
+ 4136 3.80622477390e-01 -2.19268737092e-01 -5.02181411908e-01
+ 4137 3.54773401995e-01 -2.22385939836e-01 -4.58680462926e-01
+ 4138 3.49238200442e-01 -1.69562017088e-01 -4.87513264422e-01
+ 4139 3.37697463133e-01 -1.84326599147e-01 -4.58554589558e-01
+ 4140 1.77074800942e-01 -1.09276206256e-01 -3.67175052539e-01
+ 4141 1.64344131086e-01 -9.75321548832e-02 -3.85633410161e-01
+ 4142 -8.77773136396e-02 -8.08003970381e-02 6.34507696287e-02
+ 4143 -1.23909919884e-01 -9.49462738266e-02 3.88864025316e-02
+ 4144 -1.43782402149e-01 -1.12125542859e-01 5.08536726901e-02
+ 4145 -1.40750733717e-01 -8.12831963219e-02 -4.13299463057e-02
+ 4146 -1.73340998202e-01 -4.15356031220e-02 -5.71168475085e-02
+ 4147 -1.92996578341e-01 -7.34850368120e-02 -4.96801312590e-02
+ 4148 -1.60820552028e-01 -6.59658942913e-02 -3.65139504302e-02
+ 4149 -1.36991489831e-01 -4.21598909910e-02 -3.70830343203e-02
+ 4150 -2.28581162410e-01 -7.81050877352e-02 6.79937745782e-02
+ 4151 -2.26693373547e-01 -6.35823128513e-02 4.54788402327e-02
+ 4152 -2.52370289878e-01 -7.53127933224e-02 3.13335124649e-02
+ 4153 -2.24821918524e-01 -3.89817824044e-02 7.22406865636e-02
+ 4154 -2.62401565509e-01 -4.42772378876e-02 6.44036180773e-02
+ 4155 -3.49823414743e-02 1.31728910644e-01 1.12449388937e-01
+ 4156 -6.53519935911e-02 1.55635784316e-01 1.16846472985e-01
+ 4157 -6.17754192580e-02 1.23842285659e-01 1.16980345885e-01
+ 4158 -6.45995410542e-02 1.23428457304e-01 1.47952489351e-01
+ 4159 -8.21678009125e-02 8.45759903697e-02 9.06730322685e-02
+ 4160 -3.92788679179e-01 9.86492385537e-03 -1.79801875328e-01
+ 4161 -4.19591509384e-01 -4.35931329507e-02 -1.70394807126e-01
+ 4162 -3.16295017933e-01 3.81722138565e-02 -5.43499224042e-02
+ 4163 -2.90554291770e-01 5.06054095911e-02 -3.40352502431e-02
+ 4164 -3.60515003480e-01 3.62239756860e-02 -2.88545819923e-02
+ 4165 -3.11454040080e-01 5.34509827223e-02 -1.02667992481e-02
+ 4166 -2.04996598178e-01 8.55875532907e-02 -1.20426788225e-01
+ 4167 -1.80894729763e-01 7.06241748977e-02 -1.28463078417e-01
+ 4168 -2.13389335091e-01 -1.38572047908e-01 -1.31401395489e-01
+ 4169 -2.38138264088e-01 -8.16034255617e-02 -1.21901087220e-01
+ 4170 -2.34496780043e-01 -1.14586144653e-01 -1.46390452404e-01
+ 4171 -3.10898915047e-01 1.00087325479e-01 -3.12931362789e-01
+ 4172 -2.96592489111e-01 1.12964686930e-01 -3.08501827079e-01
+ 4173 -2.37036691590e-01 2.56868079049e-02 -2.00373283326e-01
+ 4174 -2.42808233398e-01 3.22783265065e-02 -2.24465561603e-01
+ 4175 -3.19903462197e-01 5.17260985689e-02 -3.28865196960e-01
+ 4176 -3.04394077670e-01 4.10498111040e-02 -3.44853256019e-01
+ 4177 -3.43966439575e-01 2.06592598699e-02 -2.56121907980e-01
+ 4178 -3.23005544387e-01 2.85076654802e-02 -2.66277030094e-01
+ 4179 -3.31401020883e-01 5.22196989368e-02 -2.91250165742e-01
+ 4180 -5.43411056345e-02 1.01056163154e-01 -6.89733102863e-01
+ 4181 -1.00416984911e-01 1.05807175203e-01 -5.51597987012e-01
+ 4182 -1.67705694830e-01 5.84229033689e-02 -6.35808338483e-01
+ 4183 -1.51247943474e-01 -2.09246594595e-01 -2.52490787946e-01
+ 4184 -1.51674678309e-01 -1.95020015102e-01 -2.79168122378e-01
+ 4185 -1.62897800843e-01 -1.70596240959e-01 -2.76517054631e-01
+ 4186 -1.66354351798e-01 -1.71939369240e-01 -2.57848475761e-01
+ 4187 -1.42672958488e-01 -1.56283553970e-01 -2.95403223523e-01
+ 4188 -1.50182680230e-01 -2.40618978188e-01 -3.06939414689e-01
+ 4189 -1.50769047167e-01 -2.22105947670e-01 -3.13335258827e-01
+ 4190 -1.74717543209e-01 -2.27821634472e-01 -3.22739335791e-01
+ 4191 -1.26501286919e-01 -2.24963162917e-01 -3.44494162451e-01
+ 4192 -1.35414819742e-01 -1.35327015057e-01 -3.06277690039e-01
+ 4193 -1.14121732073e-01 -2.15340510974e-01 -3.62288764589e-01
+ 4194 -1.01319593438e-01 -2.31598395927e-01 -3.72210755705e-01
+ 4195 8.57163541439e-02 -1.28686580584e-01 -4.50886100591e-01
+ 4196 1.01211541546e-01 -1.69966079704e-01 -4.37168595887e-01
+ 4197 1.07213370246e-01 -1.58437648568e-01 -4.20790904024e-01
+ 4198 8.20684687443e-02 -1.45613920998e-01 -4.35330225361e-01
+ 4199 6.96856157772e-02 -1.49024965899e-01 -4.51095127048e-01
+ 4200 6.56585348106e-02 -1.46306488941e-01 -4.18548769780e-01
+ 4201 3.88792883930e-02 -1.51769340264e-01 -4.33805394521e-01
+ 4202 9.58252959877e-02 -1.12089935629e-01 -4.48416696200e-01
+ 4203 -4.60635809000e-02 -1.29985763885e-01 -4.39995957129e-01
+ 4204 -3.54373769436e-02 -1.42804883612e-01 -4.25644429955e-01
+ 4205 -2.46360227897e-02 -1.58292512076e-01 -4.25736869602e-01
+ 4206 -6.81229683263e-02 -1.39698598870e-01 -4.54499427381e-01
+ 4207 -3.53437916327e-02 -2.17666118394e-02 -5.32413200198e-01
+ 4208 -2.48494026645e-02 -4.31106434516e-02 -5.19046947492e-01
+ 4209 -3.25603666581e-01 1.44444388313e-01 2.97569856842e-02
+ 4210 -3.06591091109e-01 1.49671011581e-01 9.78593809504e-03
+ 4211 5.52495541424e-02 -3.88509617631e-01 -6.11188265259e-01
+ 4212 1.11972446243e-01 -1.45775784461e-01 -5.45893356198e-01
+ 4213 1.02309534092e-01 -1.46895568107e-01 -5.76002738245e-01
+ 4214 1.20083723416e-01 -1.40046204737e-01 -5.56426363839e-01
+ 4215 1.16345541039e-01 -1.38882867260e-01 -5.80010287752e-01
+ 4216 5.31079936570e-02 -2.49234458410e-01 -4.71970353974e-01
+ 4217 7.84335682223e-02 -2.33645944953e-01 -4.95236917419e-01
+ 4218 4.52115463960e-02 -2.12059028376e-01 -4.64144839153e-01
+ 4219 3.09599791062e-02 -2.34843180692e-01 -4.51242301797e-01
+ 4220 5.76121983792e-02 -2.36024829367e-01 -4.51143415398e-01
+ 4221 7.59973163301e-02 -2.21229277382e-01 -4.59712144836e-01
+ 4222 7.00128503623e-02 -2.59990630358e-01 -4.38141991643e-01
+ 4223 7.03835044234e-02 -2.38792400985e-01 -4.21648860986e-01
+ 4224 1.04346834372e-01 -2.17982858816e-01 -4.19754677936e-01
+ 4225 3.67908285361e-02 -2.38403713782e-01 -4.07049913378e-01
+ 4226 1.60558794627e-02 -6.67901635611e-02 -7.17825723121e-01
+ 4227 6.41186376676e-03 -3.38514687001e-02 -6.82783985578e-01
+ 4228 -4.36278707851e-03 -6.31960584558e-02 -6.87257986376e-01
+ 4229 -2.17122137397e-02 -5.54915619219e-02 -7.08744921637e-01
+ 4230 1.36759119946e-01 3.64708205263e-01 -7.01239832599e-01
+ 4231 1.27711265029e-01 3.62030546766e-01 -6.76798622962e-01
+ 4232 -3.33657043478e-03 3.05982379987e-01 -6.03243634289e-01
+ 4233 -2.50242782609e-03 3.54486784990e-01 -6.59932725717e-01
+ 4234 1.59272184734e-01 2.34612255665e-01 -5.73866443837e-01
+ 4235 1.48779058936e-01 -2.55999169034e-01 -5.49056714084e-01
+ 4236 9.25167558327e-02 -2.23134421868e-01 -5.34522360557e-01
+ 4237 1.16408864264e-01 -2.48929905404e-01 -5.46699305222e-01
+ 4238 1.14984108667e-01 -2.64536081973e-01 -5.24567991351e-01
+ 4239 -8.60830470301e-02 4.15477246636e-02 1.82116492336e-01
+ 4240 -1.01977941411e-01 2.40630756382e-02 1.58566075136e-01
+ 4241 4.68404884754e-02 -4.36325519238e-03 -6.90362091691e-01
+ 4242 7.13847235867e-02 -1.35714190868e-02 -6.75208604110e-01
+ 4243 9.07239527301e-03 6.93534644687e-03 -6.81281290206e-01
+ 4244 -1.22671879790e-02 2.12012658748e-02 -6.64982844594e-01
+ 4245 4.97488599087e-02 6.58345928161e-03 -5.68101718523e-01
+ 4246 3.59443310476e-02 1.86295889989e-02 -5.36502450897e-01
+ 4247 4.08750201417e-02 2.29849160950e-02 -5.56949111792e-01
+ 4248 2.41491710096e-02 3.21989516798e-02 -5.62017606457e-01
+ 4249 1.49662613666e-01 7.55485931153e-02 -5.83759419561e-01
+ 4250 1.26163732105e-01 6.56741691823e-02 -5.92391838290e-01
+ 4251 1.10249100132e-01 8.22856777799e-02 -6.03970000053e-01
+ 4252 4.97647472955e-02 2.20775697684e-01 -6.00925791862e-01
+ 4253 4.06562432717e-02 1.99522119011e-01 -6.07510158011e-01
+ 4254 -2.12178315680e-03 5.74130693590e-02 -5.85955964613e-01
+ 4255 1.74134543250e-03 7.70001477672e-02 -5.96282787575e-01
+ 4256 -1.62339018980e-02 9.06498978952e-02 -5.88947351940e-01
+ 4257 -3.00425461230e-02 1.07933686452e-01 -5.77153812788e-01
+ 4258 -1.02251395808e-01 -1.79618160050e-01 -6.58345879927e-01
+ 4259 -1.44702622827e-01 -1.86319676202e-01 -6.76810938863e-01
+ 4260 -7.25040486785e-02 -4.90887185220e-02 -6.97942381918e-01
+ 4261 -1.56957806530e-01 2.26735909628e-01 -4.99803017364e-01
+ 4262 -2.88857973412e-01 2.61306280070e-01 -4.89092587872e-01
+ 4263 -2.81501517225e-01 2.72873690147e-01 -4.56531571576e-01
+ 4264 -2.68691059443e-01 1.66692883258e-01 -3.46909284371e-01
+ 4265 -2.76199983513e-01 1.74240939246e-01 -3.72757316582e-01
+ 4266 -2.86346362754e-01 1.94684921425e-01 -3.31926985311e-01
+ 4267 -2.97237413238e-01 2.09047638138e-01 -3.44164907099e-01
+ 4268 -1.29497450014e-02 -1.64079193043e-01 -2.10311412110e-02
+ 4269 -1.92184516489e-02 -2.48059394782e-01 -2.30446238487e-02
+ 4270 2.52085059440e-03 -2.75388014181e-01 5.95706894810e-03
+ 4271 3.09313448776e-02 -2.89888900014e-01 7.87031153847e-02
+ 4272 4.69395003208e-02 -2.56307222409e-01 4.59031828665e-02
+ 4273 1.75766888377e-01 -1.39952338068e-01 -3.45930638913e-01
+ 4274 1.66247873776e-01 -1.30271838950e-01 -3.24332887580e-01
+ 4275 1.45342080598e-01 -1.17543828950e-01 -3.13853900063e-01
+ 4276 1.24561626463e-01 -1.48907106250e-01 -3.17549951947e-01
+ 4277 3.22407371886e-01 -2.89320317180e-01 -4.20233434128e-01
+ 4278 3.81604914590e-01 -2.58531693165e-01 -4.52657556450e-01
+ 4279 3.81604914590e-01 -3.59546878120e-01 -4.03902606388e-01
+ 4280 4.11203685943e-01 -3.18898769873e-01 -4.32303405065e-01
+ 4281 -9.21451571566e-02 7.65696908176e-02 7.78751612298e-02
+ 4282 5.62191171939e-02 -1.32909337651e-01 -4.09409562076e-01
+ 4283 3.52198137099e-02 -1.32085521436e-01 -4.16534242669e-01
+ 4284 -7.52249048628e-02 -2.94484936467e-01 -4.56777249996e-01
+ 4285 -7.41927922497e-02 -2.56749261947e-01 -4.18982155421e-01
+ 4286 -7.56644455307e-02 -2.67481841137e-01 -4.46501080248e-01
+ 4287 -1.01704875550e-01 -2.63171959741e-01 -4.53522364635e-01
+ 4288 5.90573489223e-02 -2.57182518487e-01 -3.66391166374e-01
+ 4289 5.13684306973e-02 -2.29620302503e-01 -3.21813606280e-01
+ 4290 8.14871106930e-02 -2.30210410253e-01 -3.11909554218e-01
+ 4291 9.66526161749e-02 -2.48781923493e-01 -3.38326576927e-01
+ 4292 7.86975758579e-03 -2.04492178653e-01 -4.61108463534e-01
+ 4293 -2.04145174543e-02 -1.98485637484e-01 -4.45963166023e-01
+ 4294 -1.36524470307e-02 -1.75649912685e-01 -4.54209421861e-01
+ 4295 7.45775980394e-03 -1.72042365198e-01 -4.67055038814e-01
+ 4296 1.11202422984e-01 -1.60779315248e-01 -3.35328113878e-01
+ 4297 1.20728330291e-01 -1.87919154013e-01 -3.52965172667e-01
+ 4298 2.46536195854e-01 -1.42642486909e-01 -1.29123101281e-02
+ 4299 2.97060272255e-01 -1.38335919347e-01 2.82458058514e-04
+ 4300 2.11272859696e-01 -3.11982678958e-01 -1.51152024106e-01
+ 4301 7.62608485797e-02 -2.95847641033e-01 -1.21259694828e-01
+ 4302 1.82195636435e-01 -2.72877556617e-01 -1.26488171751e-01
+ 4303 4.45911355178e-02 -8.36641175761e-03 -5.12884262674e-01
+ 4304 3.70067268485e-02 1.17725128156e-02 -5.15536019906e-01
+ 4305 6.20649256909e-02 -5.02392381255e-02 -4.95774478294e-01
+ 4306 7.17274729732e-02 -3.50452223034e-02 -5.11097528129e-01
+ 4307 5.44273359210e-02 -2.91947489473e-02 -5.19391254419e-01
+ 4308 4.22189253820e-02 -3.73739350434e-02 -5.11940463293e-01
+ 4309 -1.98351707100e-02 4.15149939382e-02 -5.61283744218e-01
+ 4310 -9.59606176520e-04 4.01489697994e-02 -5.75535081783e-01
+ 4311 1.25779312090e-02 -3.42241312714e-02 -6.12213683737e-01
+ 4312 1.00651795978e-02 -2.85789306733e-02 -5.95228371126e-01
+ 4313 3.52931683644e-02 -2.06339931845e-02 -5.95119569454e-01
+ 4314 -4.86746120392e-02 -2.30280155514e-03 -5.27867590038e-01
+ 4315 -3.70431463472e-02 4.51584027781e-02 -5.49520498052e-01
+ 4316 -3.28310916945e-01 7.00058108305e-02 -3.12799722505e-01
+ 4317 -2.69465978393e-01 2.60934700605e-01 -4.34415238775e-01
+ 4318 -2.53651321684e-01 2.32536501989e-01 -4.24838084042e-01
+ 4319 -2.54432501253e-01 2.72348212858e-01 -4.33739287156e-01
+ 4320 -2.90917418499e-01 1.71773817236e-01 -4.09796547900e-01
+ 4321 -2.93833584924e-01 1.66856744116e-01 -4.26163089568e-01
+ 4322 -2.85431244855e-01 1.81354276651e-01 -4.42401321826e-01
+ 4323 -2.76855825184e-01 1.95978652599e-01 -4.25970625453e-01
+ 4324 -2.63848402528e-01 1.71248339947e-01 -3.87004263480e-01
+ 4325 -2.42059271252e-01 1.80659214871e-01 -3.59592539198e-01
+ 4326 -2.61304604721e-01 1.66335447781e-01 -3.64056502597e-01
+ 4327 -2.70619685663e-01 1.46741353048e-01 -3.62719923339e-01
+ 4328 -2.21838483386e-01 1.69837379909e-01 -3.61763120194e-01
+ 4329 -2.16069564329e-01 1.71362126095e-01 -3.43851441166e-01
+ 4330 -2.11659445401e-01 1.40555614759e-01 -4.46837601766e-01
+ 4331 -2.11168317378e-01 1.59689342790e-01 -4.59032952859e-01
+ 4332 -2.26086716951e-01 2.05530375743e-01 -4.42751537700e-01
+ 4333 -1.99721121564e-01 2.02381661775e-01 -4.41268582544e-01
+ 4334 -2.11633286370e-01 1.81216409627e-01 -4.61775944175e-01
+ 4335 -2.33181071564e-01 1.76260468223e-01 -4.69600368157e-01
+ 4336 -1.28493107238e-01 -1.46799937464e-01 -3.73914839318e-01
+ 4337 2.17155601120e-02 -2.49615668764e-01 -3.63354790756e-01
+ 4338 2.64739048238e-02 -2.24575736021e-01 -3.19789355867e-01
+ 4339 3.76366317543e-02 -2.17530787576e-01 -3.37007666818e-01
+ 4340 3.81853109233e-02 -2.31875759923e-01 -3.71790727060e-01
+ 4341 3.45188805728e-02 -1.84051351856e-01 -3.34636978065e-01
+ 4342 3.37830237355e-02 -1.88829092516e-01 -3.85626224052e-01
+ 4343 -1.89801956864e-01 -2.45913951342e-01 -4.86154095895e-01
+ 4344 -4.34969682052e-02 -1.39028924942e-01 -5.28034970571e-01
+ 4345 -6.02072123536e-02 -1.49657653827e-01 -5.44397230971e-01
+ 4346 1.14802241734e-01 -1.78720680274e-01 -4.28304867068e-01
+ 4347 1.13330646430e-01 -1.93167311600e-01 -4.41727982659e-01
+ 4348 1.09303565463e-01 -1.90448834642e-01 -4.09181625390e-01
+ 4349 1.58832250092e-01 -2.36608726302e-01 -5.42498195978e-01
+ 4350 1.71548623104e-01 -2.48107843170e-01 -5.18966512359e-01
+ 4351 -3.01569662381e-01 2.13459269566e-01 -3.67234453732e-01
+ 4352 -2.88988792279e-01 1.91725347447e-01 -3.93985908931e-01
+ 4353 1.30125411959e-01 -9.01444799439e-02 -6.40213686213e-01
+ 4354 1.12373492253e-01 -8.34543081310e-02 -6.13523569575e-01
+ 4355 6.25556347350e-02 -1.72047679423e-01 -5.91839168687e-01
+ 4356 5.16171086884e-02 -1.59700937515e-01 -5.39269654146e-01
+ 4357 7.46391161435e-02 -1.73837750243e-01 -5.63877518375e-01
+ 4358 6.79007103339e-02 -1.51955699696e-01 -5.78607433930e-01
+ 4359 5.03065700940e-02 -1.35237141029e-01 -5.67112162962e-01
+ 4360 8.41015203631e-02 -1.26700228091e-01 -5.91600885694e-01
+ 4361 -2.43296217676e-01 3.56183031308e-01 -3.01014521992e-01
+ 4362 -2.22729457249e-01 3.40825602040e-01 -3.13357819452e-01
+ 4363 -2.45033093936e-01 2.87767469387e-01 -2.65441749095e-01
+ 4364 -1.83868518770e-01 3.61547124079e-01 -3.22150396558e-01
+ 4365 -1.97893504561e-01 2.92320686118e-01 -2.54672579575e-01
+ 4366 -2.55579947904e-01 2.12584971778e-01 -4.40648723010e-01
+ 4367 -2.51585172699e-01 1.87722092081e-01 -4.53588596658e-01
+ 4368 -2.67330481977e-01 1.97465110023e-01 -4.49302220901e-01
+ 4369 -2.77228098158e-01 -3.66323769408e-02 -3.63204750224e-01
+ 4370 -4.09234568382e-02 6.80792460079e-02 -1.27924945660e-01
+ 4371 -2.05675689627e-01 1.05764476941e-01 -5.94969704160e-01
+ 4372 -1.95568379683e-01 1.15162356514e-01 -5.79802399470e-01
+ 4373 -1.96898472544e-01 9.77846885623e-02 -5.44542650216e-01
+ 4374 -1.92374216505e-01 7.80922735618e-02 -5.29600676294e-01
+ 4375 -2.08130681647e-01 2.08065679326e-01 -4.22967997000e-01
+ 4376 -2.28510931933e-01 2.12059494489e-01 -4.17856438590e-01
+ 4377 -2.30322439277e-01 2.95560073610e-01 -4.27846444310e-01
+ 4378 -1.98383492491e-01 3.02096505033e-01 -4.60035831658e-01
+ 4379 -2.50531324722e-01 1.70221732356e-01 -4.71015954761e-01
+ 4380 -2.54326686110e-01 1.71874596026e-01 -4.89521887256e-01
+ 4381 1.38213002527e-01 -8.28072758349e-02 -5.75297818473e-01
+ 4382 1.24456973662e-01 -8.52443789506e-02 -5.85561919263e-01
+ 4383 9.19228566236e-02 -5.59606025009e-02 -5.83300294854e-01
+ 4384 9.22129529855e-02 -7.30617397814e-02 -5.97152517206e-01
+ 4385 4.60850647587e-02 -9.50440156208e-02 -5.46885866540e-01
+ 4386 3.51955297601e-02 -7.41938439354e-02 -5.46232508228e-01
+ 4387 3.10322087117e-02 -7.01552758946e-02 -5.20710950773e-01
+ 4388 4.35878718740e-02 -6.92070715130e-02 -4.90165715320e-01
+ 4389 3.33226350966e-02 -5.48161358546e-02 -5.03692394813e-01
+ 4390 1.93972706023e-01 -2.46476639640e-01 -5.10939139950e-01
+ 4391 2.12773989298e-01 -2.48778927723e-01 -5.30969934532e-01
+ 4392 -1.99424764904e-04 4.13880390509e-01 3.98634095579e-01
+ 4393 -2.50299137147e-01 3.70820585763e-01 3.47951143368e-01
+ 4394 1.44986953995e-02 5.00000000000e-01 3.33036258295e-01
+ 4395 1.07244529759e-02 4.35410292881e-01 2.98752765406e-01
+ 4396 -1.52367396032e-01 4.13880390509e-01 2.31670353874e-01
+ 4397 2.49700862853e-01 3.70820585763e-01 3.47951143368e-01
+ 4398 1.80965937301e-01 4.13880390509e-01 2.31670353874e-01
+ 4399 2.71748043099e-01 5.00000000000e-01 2.49554387443e-01
+ 4400 1.79668192577e-01 -2.49026187108e-01 -3.77451431824e-01
+ 4401 2.00717860766e-01 -2.53754392966e-01 -3.40753769634e-01
+ 4402 1.85832127477e-01 -2.29018099187e-01 -3.85769547095e-01
+ 4403 2.01919884570e-01 -2.25500873786e-01 -3.64077144060e-01
+ 4404 2.50388068233e-01 -1.22804188719e-01 -3.85836292934e-01
+ 4405 3.00473690024e-01 -3.22253015499e-01 -3.84631851620e-01
+ 4406 3.50355267518e-01 -3.66689761624e-01 -3.81284126442e-01
+ 4407 -3.36295093619e-01 -2.34871541292e-01 -2.68390411701e-01
+ 4408 6.23385286745e-02 -2.79316785150e-01 -4.06801238788e-01
+ 4409 9.22793707485e-02 -2.78769435064e-01 -3.97483244640e-01
+ 4410 6.77275864416e-02 -3.07342092600e-01 -4.02707696471e-01
+ 4411 8.51879038808e-02 -2.90399013298e-01 -4.14742461404e-01
+ 4412 1.12764923666e-01 -2.93728189290e-01 -4.11177539510e-01
+ 4413 9.79205767414e-02 -2.81208986153e-01 -4.38283370846e-01
+ 4414 8.52278513476e-02 -2.51311604122e-01 -3.94543029650e-01
+ 4415 1.06881676181e-01 -2.46478886468e-01 -3.66456621746e-01
+ 4416 1.18800630726e-01 -2.63173201211e-01 -3.59054629104e-01
+ 4417 1.26845606475e-01 -2.22648817046e-01 -3.73902251302e-01
+ 4418 2.10204921971e-02 -3.66126860019e-01 -4.20484267782e-01
+ 4419 5.41993765227e-02 -3.55506569450e-01 -4.25004733150e-01
+ 4420 1.24672088875e-01 -2.79313485915e-01 -5.03067525826e-01
+ 4421 1.03534388648e-01 -2.63645862549e-01 -4.76346654696e-01
+ 4422 2.64637592279e-01 -2.48577142267e-01 -4.19281909640e-01
+ 4423 2.66333911028e-01 -2.52074198875e-01 -3.85494353099e-01
+ 4424 2.85666031709e-01 -3.12774170731e-01 -4.34049222264e-01
+ 4425 2.77525672733e-01 -2.89043790171e-01 -4.51651822416e-01
+ 4426 2.83913067351e-01 -2.73937928959e-01 -4.31658508053e-01
+ 4427 2.91469104874e-01 -2.84722895596e-01 -4.13259003164e-01
+ 4428 3.02019899517e-01 -2.73407887803e-01 -4.42441296992e-01
+ 4429 3.01492223673e-01 -2.95801659043e-01 -4.77822663007e-01
+ 4430 2.43099448576e-01 -3.31823232282e-01 -3.56369413920e-01
+ 4431 2.63091382785e-01 -2.97422269962e-01 -3.61472464268e-01
+ 4432 2.82753410231e-01 -3.10571774731e-01 -3.88301424024e-01
+ 4433 2.75979463239e-01 -3.37888917866e-01 -3.93842377044e-01
+ 4434 2.19347349277e-01 -2.98542399356e-01 -3.31645408624e-01
+ 4435 2.14224738490e-01 -3.10049572821e-01 -2.97813042319e-01
+ 4436 2.40279324759e-01 -2.81061885848e-01 -3.41653697709e-01
+ 4437 2.43841576062e-01 -2.82906496988e-01 -3.22434883200e-01
+ 4438 2.34836990912e-01 -2.45376377085e-01 -3.51062034744e-01
+ 4439 2.49559177254e-01 -2.28681315556e-01 -4.17142405458e-01
+ 4440 2.45663918079e-01 -2.24380744392e-01 -3.93904199703e-01
+ 4441 2.27208726229e-01 -2.26280741670e-01 -3.65977499285e-01
+ 4442 9.20129949898e-02 -1.00282258047e-01 -5.83244932338e-01
+ 4443 9.91805290057e-02 -1.25739537459e-01 -5.90707010962e-01
+ 4444 4.92330181578e-02 -1.66397925532e-02 -5.81775584040e-01
+ 4445 1.05264103473e-01 -8.55106712274e-02 -5.94870734595e-01
+ 4446 9.04265606152e-02 -1.91123235793e-01 -5.46131639191e-01
+ 4447 7.52982753960e-02 -1.85629165841e-01 -5.12650835369e-01
+ 4448 8.88039047440e-02 -1.66262366974e-01 -5.44326786807e-01
+ 4449 7.81774959742e-02 -1.54312697399e-01 -5.21404633465e-01
+ 4450 1.87256696810e-02 -1.63758771792e-02 -6.66660262803e-01
+ 4451 -3.82974829681e-01 3.86099297953e-02 -2.01002231280e-01
+ 4452 -1.13506819513e-01 -3.06164396397e-01 -1.78022215885e-01
+ 4453 -1.28977415109e-01 -1.94855575259e-01 -2.05010426044e-01
+ 4454 -1.06239204230e-01 -2.71141681444e-01 -1.61029087473e-01
+ 4455 -1.38858511871e-01 -1.69100646538e-01 -2.38236270305e-01
+ 4456 -1.53285676014e-01 -1.51156714536e-01 -2.45818165576e-01
+ 4457 -1.78073048339e-01 -1.33222656961e-01 -2.32716544789e-01
+ 4458 -1.68825988286e-01 -1.51171526176e-01 -2.14792891488e-01
+ 4459 -2.48476159529e-01 -2.63721377372e-01 -1.06480980250e-01
+ 4460 -1.25252973498e-01 -1.68343869050e-01 -2.06189628288e-01
+ 4461 -1.40696111650e-01 -1.56138862980e-01 -1.79878495072e-01
+ 4462 -1.83380103578e-01 1.48631651693e-01 -1.90496384685e-02
+ 4463 -1.61322349872e-01 1.43058575130e-01 -8.69044973384e-03
+ 4464 -1.73396100344e-01 1.68873869993e-01 -3.43691067047e-02
+ 4465 -1.35317468168e-01 1.70635364298e-01 -2.64900577208e-02
+ 4466 -1.07979330069e-01 1.55451499772e-01 -9.63873331782e-03
+ 4467 -1.34317525872e-01 1.38564874028e-01 -5.01858428329e-04
+ 4468 -1.27186533987e-01 1.49171715615e-01 2.20897074416e-02
+ 4469 3.28643765156e-02 -1.61217984837e-01 -3.46475718290e-01
+ 4470 3.18223039383e-02 -1.56792022938e-01 -3.84414795690e-01
+ 4471 4.50054237123e-02 -1.54536565519e-01 -3.34437674909e-01
+ 4472 -5.11499273493e-02 -2.23947642577e-01 -3.75410942008e-01
+ 4473 -5.50960274172e-04 -2.30836864059e-01 -4.04013537759e-01
+ 4474 -2.60283293610e-02 -2.16048761088e-01 -4.07899882173e-01
+ 4475 -3.92521367806e-02 -2.13276292631e-01 -3.77205668614e-01
+ 4476 -2.66751598626e-02 -2.22210871793e-01 -3.64383367819e-01
+ 4477 2.55251690138e-02 -1.44379701776e-01 -4.08048144110e-01
+ 4478 2.47332705704e-02 -1.61600307774e-01 -4.16733545825e-01
+ 4479 2.33409639991e-02 -2.19356556786e-01 -3.98896558396e-01
+ 4480 2.23302930609e-02 -2.21447946217e-01 -4.34079188456e-01
+ 4481 2.89547759058e-02 -2.01793433182e-01 -4.36959842246e-01
+ 4482 6.06545323266e-03 -2.29798614210e-01 -4.49218051385e-01
+ 4483 3.23522856774e-02 -1.77086931680e-01 -4.69079289226e-01
+ 4484 7.39071211126e-02 -1.89218091307e-01 -4.71321423470e-01
+ 4485 5.70887818945e-02 -1.68699253052e-01 -4.73228114945e-01
+ 4486 5.24101050107e-02 -1.59467023323e-01 -5.01416620037e-01
+ 4487 1.44690175770e-01 1.54831871409e-01 -6.06687363948e-01
+ 4488 1.56769311185e-01 1.66132074336e-01 -6.28195561590e-01
+ 4489 1.32685702754e-01 1.46263603305e-01 -6.15004720971e-01
+ 4490 -1.28539543710e-01 1.67354395016e-01 7.29348286641e-02
+ 4491 -1.56803733567e-01 1.40871262276e-01 5.75928078561e-02
+ 4492 -1.03460713763e-01 1.53264186918e-01 5.66445242721e-02
+ 4493 -1.30928563643e-01 1.36924389387e-01 4.92105847641e-02
+ 4494 -2.16135789807e-01 1.05528385314e-01 -1.02851892337e-01
+ 4495 -2.12229370797e-01 1.26681617019e-01 -1.02022322040e-01
+ 4496 -2.36277552568e-01 1.05123063997e-01 -1.14377004437e-01
+ 4497 -1.02468483601e-01 1.73574471810e-01 -3.38153277275e-02
+ 4498 -1.18856960178e-01 1.89738038840e-01 -5.31084087994e-02
+ 4499 -3.41601043673e-01 1.30248793209e-03 3.10546783247e-02
+ 4500 -2.58552618669e-01 9.68225460946e-03 8.88909825993e-02
+ 4501 -2.46045081433e-01 -2.16492993497e-04 5.19053341316e-02
+ 4502 -3.09533811075e-01 2.29531151477e-02 3.00182003035e-02
+ 4503 -3.39035079113e-01 3.72754829301e-02 4.73795880060e-02
+ 4504 -2.52366135969e-01 3.57966252391e-02 -1.61453810596e-01
+ 4505 -2.62837080869e-01 -2.79872345938e-04 -1.48349113189e-01
+ 4506 -3.19759764336e-01 8.08267500594e-02 -1.09549003273e-01
+ 4507 -3.14274601977e-01 4.99629538222e-02 -1.30001158242e-01
+ 4508 -3.41891387246e-01 3.06340649599e-02 -1.10780475853e-01
+ 4509 -3.39616373953e-01 9.93983882758e-03 -8.30222623783e-02
+ 4510 -3.12789215119e-01 -2.68910969273e-02 -7.09683714737e-02
+ 4511 -3.17779248526e-01 -2.16453176066e-02 -3.08386209148e-02
+ 4512 -2.59424560929e-01 -3.13212115444e-02 -1.06711792977e-01
+ 4513 -2.50385620159e-01 -6.66754424269e-02 -8.27434282381e-02
+ 4514 -2.36654033495e-01 -2.17858940986e-02 -1.45412388710e-01
+ 4515 -2.22957203547e-01 -1.34046110252e-02 -1.64584046887e-01
+ 4516 -2.35846958480e-01 3.72649783436e-03 -1.72932415932e-01
+ 4517 -2.34741280402e-01 2.97822784780e-02 -1.76615113301e-01
+ 4518 2.17414597643e-01 -2.35820787173e-01 -6.12666794475e-01
+ 4519 1.02846959865e-01 1.43638048227e-01 -6.18069354843e-01
+ 4520 9.61369813907e-02 1.15522506316e-01 -6.06961387380e-01
+ 4521 -4.06959322623e-01 3.10847205157e-01 -5.89966533498e-01
+ 4522 -6.26679310991e-03 1.44205581282e-01 -2.04908061719e-01
+ 4523 -2.87143055369e-02 1.40396731589e-01 -2.09183353493e-01
+ 4524 1.62789590090e-01 -2.77813215623e-01 -3.60381763642e-01
+ 4525 1.85057250344e-01 -2.77051494558e-01 -3.73357889507e-01
+ 4526 1.91664300176e-01 -2.99586875084e-01 -4.18938135243e-01
+ 4527 1.54382678793e-01 -2.65065402213e-01 -3.90536761162e-01
+ 4528 1.73185151807e-01 -2.67681064766e-01 -3.92730106180e-01
+ 4529 1.73632485516e-01 -2.79581175187e-01 -4.29574342230e-01
+ 4530 1.95535602832e-01 -2.70081638653e-01 -4.43895012353e-01
+ 4531 2.14857851711e-01 -2.80252259739e-01 -4.41577764403e-01
+ 4532 2.52240158949e-01 -3.05083005276e-01 -4.64737151755e-01
+ 4533 2.46578261924e-01 -2.97694267063e-01 -4.48380399125e-01
+ 4534 2.41689364306e-01 -3.16398013068e-01 -4.35554857926e-01
+ 4535 2.22606226347e-01 -3.31016612253e-01 -1.91721189730e-01
+ 4536 1.30141635129e-01 -3.73366381880e-01 -2.08237052133e-01
+ 4537 3.09483158993e-01 -2.74688816337e-01 -2.45933229053e-01
+ 4538 3.24972800628e-01 -2.21522794066e-01 -2.65349855173e-01
+ 4539 3.07881182046e-01 -2.63171698584e-01 -2.77369563031e-01
+ 4540 2.95650461222e-01 -1.72005594812e-01 -2.74703827482e-01
+ 4541 -8.58924539049e-02 1.92116653853e-01 1.13923981355e-01
+ 4542 -1.73519324627e-01 1.95891672868e-01 8.12916831071e-02
+ 4543 -1.30289062044e-01 2.07329047533e-01 1.09944334014e-01
+ 4544 -1.88736533547e-01 1.99127416995e-01 -6.55161918579e-02
+ 4545 -1.68464256497e-01 2.10386262199e-01 -7.06458542531e-02
+ 4546 -2.13340566458e-01 1.87327762883e-01 -9.24537360094e-02
+ 4547 -1.42416267057e-01 3.19345166476e-01 -1.16367099606e-02
+ 4548 -1.64098875012e-01 -1.48135258706e-01 -1.56482396649e-01
+ 4549 -1.81151090913e-01 -1.45447420077e-01 -1.26063472176e-01
+ 4550 -3.55750670173e-01 9.22958935229e-02 7.10784632570e-02
+ 4551 -2.83626005259e-01 9.22128704986e-02 1.24439295476e-01
+ 4552 -3.20146030950e-01 9.11981693408e-02 6.00360390028e-02
+ 4553 -2.60194707933e-01 9.07769125973e-02 9.19291190639e-02
+ 4554 -7.77451038961e-02 1.75358433070e-01 9.14589648882e-02
+ 4555 1.20155428828e-01 -5.85332296068e-02 -5.16542464146e-01
+ 4556 1.00380208729e-01 -5.28789839799e-02 -5.07221446827e-01
+ 4557 8.53336351097e-02 -4.18589169185e-02 -4.93575266853e-01
+ 4558 8.34273243003e-02 -5.42594923382e-02 -4.77519146538e-01
+ 4559 6.42289342853e-02 -6.74803038257e-02 -4.77876407246e-01
+ 4560 -1.54972432889e-02 -1.86905666864e-01 -3.00123787487e-01
+ 4561 -1.93395062825e-02 -1.63732390882e-01 -3.03593285946e-01
+ 4562 -7.53754839472e-02 -2.43801668276e-01 -3.85517373550e-01
+ 4563 -1.46966769592e-02 -2.18967099444e-01 -4.40831681289e-01
+ 4564 2.63689878968e-01 -3.05973224699e-01 -5.12958488410e-01
+ 4565 2.36201416601e-01 -3.10391342960e-01 -4.94360398620e-01
+ 4566 2.27853570541e-01 -3.33327447596e-01 -4.96861523919e-01
+ 4567 4.56916602083e-01 -2.36483480163e-01 -7.11725347674e-01
+ 4568 4.42555469443e-01 -3.15311306884e-01 -6.72300463565e-01
+ 4569 5.00000000000e-01 -2.32318148378e-01 -7.25835267031e-01
+ 4570 2.53937899472e-01 -3.93823957882e-01 -7.28156432204e-01
+ 4571 4.19981957196e-02 -1.76670601710e-01 -6.56886617802e-01
+ 4572 2.79987971464e-02 -2.84447067807e-01 -7.14591078534e-01
+ 4573 6.68443906293e-02 -2.40889049701e-01 -7.16014317932e-01
+ 4574 8.91258541724e-02 -1.54518732934e-01 -6.78019090576e-01
+ 4575 7.87657638556e-02 -1.37466436715e-01 -6.64213613080e-01
+ 4576 6.47933081229e-02 -1.15918123721e-01 -6.81253735162e-01
+ 4577 4.38939614481e-02 -1.46550250493e-01 -6.45523472065e-01
+ 4578 -3.57018958996e-01 1.94014803194e-01 -4.94606309806e-01
+ 4579 2.13311642217e-01 -3.29097387435e-01 -3.83768319030e-01
+ 4580 2.02944519333e-01 -3.04818223952e-01 -3.58375588781e-01
+ 4581 1.94061835493e-01 -3.14581614461e-01 -3.44730737963e-01
+ 4582 -2.48901389566e-01 -6.85791096376e-03 -1.06254729727e-01
+ 4583 -2.32748026862e-01 -2.13429176238e-02 -1.14575782233e-01
+ 4584 -2.34379020202e-01 -4.24801202308e-02 -1.17654175235e-01
+ 4585 -2.06321884117e-01 1.47017878690e-01 8.51624583217e-02
+ 4586 -2.19753296649e-01 3.98489733071e-02 1.02785060644e-01
+ 4587 -2.30684694102e-01 9.31282871236e-02 1.01590143481e-01
+ 4588 -2.36468887709e-01 9.48693838999e-02 1.26483935894e-01
+ 4589 -2.76527904349e-01 1.85109795922e-01 -3.99363971017e-01
+ 4590 -2.62357004088e-01 2.05691679059e-01 -4.06669163759e-01
+ 4591 -7.85944092944e-02 -5.34848503573e-02 7.69335683679e-02
+ 4592 -1.68729004765e-01 1.61419328046e-01 -2.94011152198e-01
+ 4593 -2.06802392090e-01 -1.83265369028e-01 -5.82615006504e-01
+ 4594 -1.88677076719e-01 -1.79658302728e-01 -5.61463714412e-01
+ 4595 2.38303503834e-01 -1.17517792352e-01 3.23990932031e-01
+ 4596 2.17475603889e-01 -2.52000513199e-01 3.99197147845e-01
+ 4597 2.23776490251e-01 -1.37904556037e-01 2.84428580178e-01
+ 4598 2.05048885759e-01 -2.34355291164e-01 3.21378606771e-01
+ 4599 3.89979651863e-01 -1.74276175329e-01 3.36789250201e-01
+ 4600 3.20051584409e-01 -1.82539065917e-01 2.79773341674e-01
+ 4601 1.44784311161e-01 2.45880048376e-01 3.31432194142e-01
+ 4602 2.38303503834e-01 2.15815540982e-01 3.23990932031e-01
+ 4603 1.78578059302e-01 2.22271948618e-01 2.91968770707e-01
+ 4604 2.59787009810e-01 2.97696273623e-01 2.89826929046e-01
+ 4605 7.14374124029e-02 1.29695931490e-01 2.22625027609e-01
+ 4606 1.39680514716e-01 1.96544410434e-01 1.84740393569e-01
+ 4607 2.87866643194e-02 -3.00766468373e-01 3.66033955078e-01
+ 4608 6.00651498333e-02 -3.99688282365e-01 3.88580508207e-01
+ 4609 -2.16829307408e-02 -3.34667008799e-01 4.32798098563e-01
+ 4610 0.00000000000e+00 -5.00000000000e-01 5.00000000000e-01
+ 4611 -1.64117666293e-02 3.09410036282e-01 3.73574145607e-01
+ 4612 -1.88549022172e-01 2.45880048376e-01 3.31432194142e-01
+ 4613 -1.26672139882e-01 -1.02480781388e-01 -5.85098852890e-02
+ 4614 2.17886407382e-01 -2.28053181158e-01 -5.44464501462e-01
+ 4615 -1.68383130148e-01 5.32321786864e-02 8.17989355027e-02
+ 4616 -2.02230628625e-01 2.27890121209e-02 9.90675013666e-02
+ 4617 -2.22255953964e-01 -3.00878740633e-03 8.85655962449e-02
+ 4618 -1.55222144504e-01 -1.92093035719e-02 -5.75458764840e-02
+ 4619 -1.62488593065e-01 -3.06064620799e-02 -7.80441423007e-02
+ 4620 -1.76989978384e-01 -4.92897146159e-02 -8.45908782559e-02
+ 4621 -2.21949467213e-01 -7.26008760460e-03 6.09077064827e-02
+ 4622 -1.67604197296e-01 -8.91777373203e-02 1.12746971930e-01
+ 4623 -1.41965346027e-01 -6.78835595895e-02 1.59158802870e-01
+ 4624 -1.39399586518e-01 -8.10477889734e-02 1.82906795981e-01
+ 4625 -2.89607305427e-01 -1.90847171324e-01 3.16422498216e-01
+ 4626 -4.01886562029e-01 2.15729756212e-01 3.25436599479e-01
+ 4627 -4.34591041352e-01 -2.28468291919e-02 3.83624399653e-01
+ 4628 -3.42205479070e-01 -1.81353784932e-02 3.62316873662e-01
+ 4629 -2.89607305427e-01 1.42486162009e-01 3.16422498216e-01
+ 4630 -1.32654804765e-01 -2.41856286273e-01 -5.48735654112e-01
+ 4631 -1.32106029486e-01 -2.66196013756e-01 -5.65644259437e-01
+ 4632 -1.01181375628e-01 -2.21566253421e-01 -6.18365104589e-01
+ 4633 -6.10214903367e-02 -2.23618207118e-01 -5.92119095938e-01
+ 4634 -7.96831636235e-02 -1.98120778188e-01 -6.45803399316e-01
+ 4635 -5.49378026561e-02 -2.05521112270e-01 -6.19259319146e-01
+ 4636 -3.76457413663e-02 -1.91704568245e-01 -6.08838400085e-01
+ 4637 -8.38124791106e-03 2.88133133499e-01 -3.08589137080e-02
+ 4638 3.89164034244e-01 2.86502069322e-01 -3.99258197995e-01
+ 4639 3.52866598044e-01 2.79920761847e-01 -4.36331998300e-01
+ 4640 4.26653101242e-01 5.04825497807e-02 3.91192833467e-01
+ 4641 3.03727627876e-01 3.68616557363e-02 3.67993199023e-01
+ 4642 3.11650402593e-01 -1.33367546567e-03 4.32798098563e-01
+ 4643 5.00000000000e-01 0.00000000000e+00 5.00000000000e-01
+ 4644 -2.84383322444e-01 -2.46380780174e-01 2.50108697418e-01
+ 4645 -2.29549689889e-01 -1.85785841730e-01 2.62180096986e-01
+ 4646 3.66226605390e-02 -1.42181537773e-01 -5.19162499221e-01
+ 4647 3.93883686306e-02 -1.28213540344e-01 -5.45071169564e-01
+ 4648 2.33745229894e-02 -1.78130759459e-01 -4.47456929028e-01
+ 4649 3.67661482449e-01 -2.62852587740e-01 -4.91050375703e-01
+ 4650 3.51514924638e-01 -2.54294527136e-01 -4.61207423018e-01
+ 4651 -1.41017556536e-01 -2.48626402302e-01 -6.06132333303e-01
+ 4652 -1.46576532723e-01 -2.21633278747e-01 -6.10558143649e-01
+ 4653 -1.21872070847e-01 -1.94595471642e-01 -6.20188594621e-01
+ 4654 -6.90426004480e-02 -1.61283680995e-01 -5.54849956441e-01
+ 4655 -4.72897570622e-02 -1.58765873384e-01 -5.73796662542e-01
+ 4656 -1.35861103417e-01 -2.83132341037e-01 -5.87082240596e-01
+ 4657 -1.25783018746e-01 -2.61389696403e-01 -5.86863713660e-01
+ 4658 -9.41473855434e-02 -2.47604028516e-01 -5.88596021302e-01
+ 4659 1.61727694962e-01 3.25723824671e-01 8.63436376437e-02
+ 4660 1.07619038543e-01 2.97696273623e-01 1.22863187341e-01
+ 4661 2.05714278907e-01 3.48272205217e-01 2.17147390506e-01
+ 4662 2.74485129975e-01 3.83815883114e-01 2.24229091762e-01
+ 4663 -2.80599231883e-01 -3.56180162525e-01 2.07262709066e-01
+ 4664 -2.22793634731e-01 -3.09785585131e-01 1.80310255123e-01
+ 4665 -1.95800471622e-01 -3.90200617649e-01 1.90122607177e-01
+ 4666 -1.83472521790e-01 1.68895003850e-01 6.76959538903e-02
+ 4667 -1.01801491342e-01 -3.42416675010e-01 1.84027336539e-01
+ 4668 -1.19276374031e-01 -3.99688282365e-01 2.12218817620e-01
+ 4669 3.31489538805e-01 -2.01471138549e-01 -5.29770342022e-01
+ 4670 3.62970454370e-01 -2.29172316567e-01 -5.57919471139e-01
+ 4671 3.30533756186e-01 -2.13348222791e-01 -5.64676653917e-01
+ 4672 -1.26748571971e-02 -5.00000000000e-01 3.23638309413e-01
+ 4673 3.55427194771e-02 -4.24766211773e-01 2.84164113215e-01
+ 4674 4.17351475224e-01 -3.23988552422e-01 -6.21422423497e-01
+ 4675 3.89801966966e-01 -2.65318069896e-01 -5.51896564662e-01
+ 4676 2.45418604804e-01 -3.34328112835e-01 -4.05023315096e-01
+ 4677 -3.33333333333e-01 3.33333333333e-01 -8.30000000000e-01
+ 4678 -2.97894525275e-01 2.91823840092e-01 -7.93895411808e-01
+ 4679 -1.09167968292e-01 -3.49905814802e-01 -6.87396289020e-01
+ 4680 -1.49890052190e-01 -3.14035417266e-01 -6.98598745683e-01
+ 4681 -2.23115870038e-01 -1.89055082935e-01 -6.20012783795e-01
+ 4682 2.02360859844e-01 3.03780668754e-01 -8.01153907008e-01
+ 4683 2.57424851426e-01 3.92651263306e-01 -7.91538542678e-01
+ 4684 1.79056295032e-01 3.45722961699e-01 -8.30000000000e-01
+ 4685 2.27517304706e-01 2.57359468569e-01 -6.62778375277e-01
+ 4686 1.70637978530e-01 3.18019601426e-01 -7.04583781458e-01
+ 4687 1.86525006276e-01 3.48031243916e-01 -7.22313956199e-01
+ 4688 -1.78970524688e-01 6.55403329465e-02 -5.12780818652e-02
+ 4689 3.10216951892e-01 -2.80194264534e-01 -5.41680305205e-01
+ 4690 3.57662713919e-01 -2.59384309684e-01 -5.35636679177e-01
+ 4691 -3.68182123926e-01 4.61532324114e-01 -5.04607296413e-01
+ 4692 -3.85272849063e-01 5.00000000000e-01 -5.18427494227e-01
+ 4693 -2.62925560312e-01 7.03671633192e-02 -5.40721994726e-01
+ 4694 -2.42252597212e-01 8.75997409539e-02 -5.52988441884e-01
+ 4695 -1.83355005802e-01 2.67679628359e-01 -2.51444205254e-01
+ 4696 -1.48386173736e-01 2.88383178076e-01 -2.54464989819e-01
+ 4697 -1.46422228886e-01 3.11711733154e-01 -2.57624167556e-01
+ 4698 -1.48771308461e-01 3.58783799866e-01 -3.07494633298e-01
+ 4699 -3.07472163257e-01 3.92137273481e-01 -2.92805004533e-01
+ 4700 -3.58023368614e-01 3.56183031308e-01 -2.38037995869e-01
+ 4701 -3.93517526460e-01 2.90252758374e-01 -1.87439297197e-01
+ 4702 3.47795204191e-01 -8.06364546174e-02 -8.69895675127e-03
+ 4703 -2.79375048849e-01 -1.54085988225e-01 -3.97706032319e-01
+ 4704 -2.66532445142e-01 -1.61866183562e-01 -3.86257184145e-01
+ 4705 3.70245527874e-01 2.41615353178e-01 -3.84042173671e-01
+ 4706 2.30475071623e-02 2.11960299708e-01 -2.52625336102e-01
+ 4707 1.11080237392e-02 1.22730140131e-01 -2.12994709947e-01
+ 4708 1.74293864597e-01 -3.74995585697e-01 -4.95620103736e-01
+ 4709 -1.12679684707e-01 3.51667273221e-01 -4.41883235576e-01
+ 4710 2.64893754707e-01 3.86023432937e-01 -7.49235467149e-01
+ 4711 1.80011947962e-01 -1.94037974586e-02 -4.78830520796e-01
+ 4712 1.95509798697e-01 -3.88696448176e-02 -4.85614268493e-01
+ 4713 1.91502621303e-01 -4.80262252351e-02 -5.00337080396e-01
+ 4714 3.26910774577e-01 -4.76536681874e-02 -3.10377604270e-01
+ 4715 3.66653218436e-01 -5.57202252334e-02 -3.12914890890e-01
+ 4716 3.99989913827e-01 8.73699658389e-04 -3.54672116732e-01
+ 4717 2.88126159317e-01 1.08019441431e-01 -2.40285663754e-01
+ 4718 1.46760467834e-01 -7.58247681637e-02 -1.01840331269e-01
+ 4719 -4.24218212262e-01 -1.46088349265e-01 -3.24483022299e-01
+ 4720 -3.34531286637e-01 -1.64803102453e-01 -4.27655974513e-01
+ 4721 1.98560620206e-02 2.96924493380e-01 -5.81128682223e-01
+ 4722 -7.04781739780e-03 2.77900134081e-01 -5.73679911613e-01
+ 4723 5.96820503183e-02 2.33019481653e-01 -5.79390300402e-01
+ 4724 3.85837686613e-02 2.34697750884e-01 -5.55389314793e-01
+ 4725 -8.01693421723e-02 3.42081318288e-01 -1.32430281726e-01
+ 4726 -2.34375883170e-01 -2.64017603871e-01 -4.00633001683e-01
+ 4727 -1.39265582623e-01 -9.81563355134e-03 2.70787502255e-02
+ 4728 -3.45360287558e-01 -3.78208173988e-02 2.68077663393e-02
+ 4729 -3.84020215669e-01 -7.93574388913e-02 -1.54375758761e-02
+ 4730 -1.76260330955e-01 -3.91030032824e-02 -5.94865407294e-01
+ 4731 -3.37783206741e-01 2.53975986251e-02 -6.39773819105e-01
+ 4732 -3.49941334369e-01 -3.73691930243e-03 -6.66485805339e-01
+ 4733 -2.37099495461e-01 2.88666780890e-01 -3.93866885059e-01
+ 4734 -2.31081669932e-01 2.77949488202e-01 -4.12901393325e-01
+ 4735 3.29616346277e-03 2.56449762989e-01 -5.55692984520e-01
+ 4736 7.06513776621e-03 2.61185094191e-01 -5.24373340990e-01
+ 4737 1.75197024124e-01 7.98375617271e-02 -5.77841455757e-01
+ 4738 2.79684011309e-01 -2.91724787404e-01 -5.52067763707e-01
+ 4739 -2.62652689767e-01 2.86165344649e-01 -3.67145185827e-01
+ 4740 -2.50024801403e-01 2.15718161829e-01 -4.22503102350e-01
+ 4741 -2.56247971614e-01 1.30844622452e-01 -3.74602829626e-01
+ 4742 -3.11676042175e-01 1.79720516700e-02 -8.86018475907e-02
+ 4743 -8.66938051185e-02 -4.85809777249e-03 -1.10642006054e-01
+ 4744 -5.81056748825e-02 5.69682234262e-03 -1.03853872119e-01
+ 4745 -8.89163225639e-02 -3.43582689634e-02 -1.21896605313e-01
+ 4746 -9.64333511999e-02 -1.94078778405e-02 -1.06023437594e-01
+ 4747 -9.52071540888e-02 -4.79708893289e-02 -1.43854262740e-01
+ 4748 -2.12541894775e-01 -7.40652766651e-02 -6.54705337716e-02
+ 4749 -1.90819418443e-01 -7.13132620099e-02 -7.21448333819e-02
+ 4750 -2.57854270233e-02 -1.33911511464e-01 -1.50272078943e-02
+ 4751 -3.14277717409e-01 -3.33691100989e-02 1.45893340535e-02
+ 4752 3.20234565740e-01 -1.68640498181e-01 -5.11871998880e-01
+ 4753 5.44102430500e-02 -1.35742373877e-01 -3.21432490559e-01
+ 4754 6.02915630407e-02 -1.42520207622e-01 -5.10790522442e-01
+ 4755 1.83049125369e-01 -4.72029603034e-01 -3.01412638115e-01
+ 4756 1.58530058392e-01 -5.00000000000e-01 -2.97407288619e-01
+ 4757 -3.67697157754e-01 2.55534992640e-01 -4.16628419749e-01
+ 4758 -1.94048139608e-01 1.77924602825e-01 -3.40013243867e-01
+ 4759 1.24938461767e-01 -2.00831809358e-01 -3.77435568551e-01
+ 4760 1.24538857982e-04 -2.19671523831e-01 -3.11122773885e-01
+ 4761 -1.18308129385e-02 -2.34730074930e-01 -3.37277536483e-01
+ 4762 -3.95071446070e-03 -2.78870077496e-02 -4.13704253111e-01
+ 4763 9.60551356634e-02 -2.03609369025e-01 -4.92049475647e-01
+ 4764 1.02212134511e-01 -2.03234870693e-01 -5.22310418444e-01
+ 4765 -1.79626770941e-01 -1.16116477122e-01 -2.09422143529e-01
+ 4766 -1.73979971773e-01 -1.22380329985e-01 -1.89708240909e-01
+ 4767 -3.02208164426e-01 1.01957782890e-01 -9.46935536228e-02
+ 4768 -2.17861486386e-01 1.67483227265e-01 -1.16256103360e-01
+ 4769 -1.83780082626e-01 -1.01229279038e-01 7.58585542572e-02
+ 4770 8.98225548840e-02 -2.01806012328e-01 -4.66202756653e-01
+ 4771 -2.68476850076e-01 1.85556959478e-01 -5.13835324632e-01
+ 4772 -2.29583973184e-01 1.07523645808e-01 -5.86136743221e-01
+ 4773 4.26653101242e-01 -8.53634703621e-02 2.12645099740e-01
+ 4774 4.44989825931e-01 6.09773972284e-02 2.84483824805e-01
+ 4775 5.00000000000e-01 3.08206465238e-02 3.21452266273e-01
+ 4776 -1.93613863837e-01 7.01517813256e-02 1.69461525843e-01
+ 4777 -2.10766934247e-01 6.01415715334e-02 1.82424295547e-01
+ 4778 -2.29572220405e-01 -9.10840567290e-03 -5.26767374514e-01
+ 4779 -2.54692386919e-01 3.31535800033e-01 2.64635892910e-01
+ 4780 -2.07281488245e-01 2.47651593425e-01 2.73075493605e-01
+ 4781 -2.76175892894e-01 2.49655067392e-01 2.98799895894e-01
+ 4782 6.60640739829e-02 1.48837174452e-01 8.50074771238e-02
+ 4783 1.18104074836e-01 1.35965468652e-01 1.53365563710e-01
+ 4784 1.19537881419e-01 1.49489793174e-01 1.07150232943e-01
+ 4785 1.34400110199e-01 1.94383862536e-01 1.12661675927e-01
+ 4786 -1.09853939314e-01 -2.39588245763e-01 -4.64644233011e-01
+ 4787 -9.71212011712e-02 -2.18329745893e-01 -4.80913421289e-01
+ 4788 7.86088343571e-02 1.19792714159e-01 -1.10983451466e-01
+ 4789 9.55922072009e-02 1.47269757983e-01 -1.20148111850e-01
+ 4790 1.04526951777e-01 1.74480973100e-01 -1.61195986070e-01
+ 4791 2.25492713253e-01 1.77805994234e-01 -5.63125418812e-01
+ 4792 2.10992560623e-01 1.80567179084e-01 -5.34757651002e-01
+ 4793 2.31631550890e-01 2.58063811282e-01 -6.33972131261e-01
+ 4794 -4.39935208161e-02 -3.61258410232e-01 -4.44389912815e-01
+ 4795 -5.30149919556e-02 -3.45863702350e-01 -4.65556898294e-01
+ 4796 -6.80163308168e-02 -2.20677838048e-01 -4.95591835626e-01
+ 4797 6.61932849966e-02 -2.65509698409e-01 -1.49109392643e-01
+ 4798 -1.01895827563e-01 -3.37349255778e-01 -6.47811680447e-01
+ 4799 -6.57859690960e-02 -2.42633550015e-01 -5.76353785636e-01
+ 4800 8.60195078990e-02 9.56546040829e-02 -6.09793314155e-01
+ 4801 -1.88039315912e-01 -2.17167918247e-01 -3.30032161749e-01
+ 4802 -1.22143153070e-01 -3.05464233641e-01 -2.37475828957e-01
+ 4803 2.49516388277e-01 8.32546880380e-02 -6.37461478487e-01
+ 4804 -2.95319149583e-01 2.11247703206e-01 -2.51438513635e-01
+ 4805 -4.46390027003e-02 -1.56881861969e-01 -6.05517494099e-01
+ 4806 -1.00575738039e-01 -1.83754060662e-01 -6.40311443158e-01
+ 4807 3.29602719823e-01 -9.66772123893e-02 -7.10841053159e-01
+ 4808 -1.51594068425e-01 -1.33303631636e-01 -1.69793606242e-01
+ 4809 5.78872023665e-02 -7.76463715165e-02 -7.18440301372e-01
+ 4810 3.44315572285e-02 -1.93687772645e-01 -6.17800104746e-01
+ 4811 3.77450411477e-02 -1.66843216498e-01 -6.19049373708e-01
+ 4812 2.45802515241e-01 3.61241338021e-01 -3.70533824595e-01
+ 4813 3.49874291109e-02 3.45416653052e-01 -4.88696978974e-01
+ 4814 -1.48123520949e-02 2.93888870736e-01 -4.91607675324e-01
+ 4815 -2.52723756002e-03 2.68441315479e-01 -4.94138807303e-01
+ 4816 -3.29928840128e-01 1.53786141399e-01 -1.61716788262e-01
+ 4817 -3.55750670173e-01 2.28141913666e-01 2.49626196984e-01
+ 4818 -3.91813002630e-01 1.94221920142e-01 1.78308847443e-01
+ 4819 -4.34591041352e-01 1.74640483999e-01 2.05076665926e-01
+ 4820 1.11674104199e-01 2.70787896902e-01 8.42734506664e-02
+ 4821 1.49098230363e-01 2.80503472028e-01 4.70638386431e-02
+ 4822 3.65038688306e-01 -1.13788814545e-01 2.00919205961e-01
+ 4823 7.01662230448e-03 1.27177509112e-01 1.03527368739e-01
+ 4824 3.62222920198e-02 1.42898823519e-01 6.97715867149e-02
+ 4825 2.78695993039e-01 1.05499187019e-01 2.09297479846e-02
+ 4826 -3.35449423912e-01 -3.18126947736e-01 1.19903631169e-01
+ 4827 -6.47118538463e-02 9.15710863791e-02 1.85562940936e-01
+ 4828 1.66666666667e-01 -1.66666666667e-01 5.00000000000e-01
+ 4829 1.08737801944e-01 -1.26000256599e-01 4.49598573923e-01
+ 4830 -7.49895733633e-03 1.02498579255e-01 1.06991017701e-01
+ 4831 -5.00000000000e-01 3.08206465238e-02 3.21452266273e-01
+ 4832 -4.50943281014e-01 5.98036299893e-03 2.78807499444e-01
+ 4833 7.23158580716e-02 1.00973844890e-01 1.89622746705e-01
+ 4834 2.36823672773e-01 3.35377604021e-01 -3.17462340566e-02
+ 4835 2.74485129975e-01 3.83815883114e-01 -3.18297256228e-02
+ 4836 -1.32489726650e-01 -2.52590943612e-02 -4.24132593490e-02
+ 4837 -3.87456000777e-01 -5.20413007604e-02 -6.29240804278e-01
+ 4838 7.82650026177e-02 -2.67837268243e-01 -4.63619297793e-01
+ 4839 -2.33861199806e-01 -6.62060662211e-02 -9.69423061163e-02
+ 4840 -2.22344322523e-01 2.70424980250e-01 -2.60328175973e-01
+ 4841 4.46825116137e-01 3.84198854041e-01 -5.50111621744e-01
+ 4842 5.00000000000e-01 3.90218491445e-01 -5.26040082138e-01
+ 4843 2.58236679214e-02 -2.70265829484e-01 -6.70850078560e-01
+ 4844 -1.56806654083e-01 5.30618320551e-02 7.12195886555e-02
+ 4845 1.28413940127e-01 1.03716008944e-01 -3.01002634820e-01
+ 4846 -1.47832178422e-01 2.14775543630e-01 -7.95706684290e-02
+ 4847 -1.80145268639e-01 3.73651850025e-01 1.98254113404e-01
+ 4848 3.47832028733e-01 5.00000000000e-01 7.69774409101e-02
+ 4849 3.30863847481e-01 4.12861912336e-01 1.01127705783e-01
+ 4850 -2.83075200685e-01 1.70106178650e-01 2.61818221660e-01
+ 4851 -8.25889857228e-03 -2.46150427529e-01 -3.59317459133e-01
+ 4852 1.52959882501e-02 -2.59880940951e-01 -3.84048936199e-01
+ 4853 -2.91491738920e-02 -3.73777613369e-01 -4.17284081479e-01
+ 4854 -2.12476692874e-02 -3.50436081358e-01 -4.19322367881e-01
+ 4855 1.58479787426e-01 -3.12689413459e-01 -3.13248605905e-01
+ 4856 1.57293847945e-01 -3.15428484529e-01 -3.44577986741e-01
+ 4857 1.24189688493e-01 -2.91198508660e-01 -3.54961086787e-01
+ 4858 1.27534480419e-01 -2.78291325343e-01 -3.78932504141e-01
+ 4859 1.09353697672e-01 -3.59517060094e-01 -2.42207722369e-01
+ 4860 2.92531943240e-02 -2.44009691273e-01 -3.85202352067e-01
+ 4861 4.01905141236e-02 -2.64925507433e-01 -3.86073186611e-01
+ 4862 6.45350996423e-02 -2.58586574423e-01 -4.02266579009e-01
+ 4863 -3.13680233169e-02 -4.05333210027e-01 -3.20234329050e-01
+ 4864 1.85645621958e-01 1.69087503231e-01 -6.49800578201e-01
+ 4865 2.37188173510e-01 1.77842943155e-01 -6.00997971117e-01
+ENDOFSECTION
+ ELEMENTS/CELLS 2.4.6
+ 1 4 8 1 2 4 3 5 6 8
+ 7
+ 2 4 8 4 3 10 9 8 7 12
+ 11
+ 3 4 8 12 11 14 13 8 7 5
+ 6
+ 4 4 8 2 15 3 9 6 13 7
+ 11
+ 5 4 8 1 16 18 17 2 19 21
+ 20
+ 6 4 8 18 17 23 22 21 20 25
+ 24
+ 7 4 8 25 24 15 26 21 20 2
+ 19
+ 8 4 8 16 27 17 22 19 26 20
+ 24
+ 9 4 8 28 29 31 30 32 33 35
+ 34
+ 10 4 8 31 30 37 36 35 34 39
+ 38
+ 11 4 8 39 38 41 40 35 34 32
+ 33
+ 12 4 8 29 15 30 36 33 40 34
+ 38
+ 13 4 8 42 43 45 44 46 47 49
+ 48
+ 14 4 8 45 44 51 50 49 48 53
+ 52
+ 15 4 8 53 52 55 54 49 48 46
+ 47
+ 16 4 8 43 56 44 50 47 54 48
+ 52
+ 17 4 8 57 58 60 59 61 62 64
+ 63
+ 18 4 8 60 59 66 65 64 63 68
+ 67
+ 19 4 8 68 67 70 69 64 63 61
+ 62
+ 20 4 8 58 71 59 65 62 69 63
+ 67
+ 21 4 8 72 73 75 74 76 77 79
+ 78
+ 22 4 8 75 74 81 80 79 78 83
+ 82
+ 23 4 8 83 82 85 84 79 78 76
+ 77
+ 24 4 8 73 86 74 80 77 84 78
+ 82
+ 25 4 8 87 88 90 89 91 92 94
+ 93
+ 26 4 8 90 89 96 95 94 93 98
+ 97
+ 27 4 8 98 97 100 99 94 93 91
+ 92
+ 28 4 8 88 66 89 95 92 99 93
+ 97
+ 29 4 8 101 102 104 103 105 106 108
+ 107
+ 30 4 8 104 103 110 109 108 107 112
+ 111
+ 31 4 8 112 111 114 113 108 107 105
+ 106
+ 32 4 8 102 96 103 109 106 113 107
+ 111
+ 33 4 8 87 88 116 115 90 89 118
+ 117
+ 34 4 8 116 115 110 119 118 117 109
+ 120
+ 35 4 8 109 120 96 95 118 117 90
+ 89
+ 36 4 8 88 66 115 119 89 95 117
+ 120
+ 37 4 8 121 122 124 123 125 126 128
+ 127
+ 38 4 8 124 123 130 129 128 127 132
+ 131
+ 39 4 8 132 131 134 133 128 127 125
+ 126
+ 40 4 8 122 135 123 129 126 133 127
+ 131
+ 41 4 8 136 137 139 138 140 141 143
+ 142
+ 42 4 8 139 138 101 144 143 142 146
+ 145
+ 43 4 8 146 145 148 147 143 142 140
+ 141
+ 44 4 8 137 149 138 144 141 147 142
+ 145
+ 45 4 8 150 151 153 152 154 155 157
+ 156
+ 46 4 8 153 152 159 158 157 156 161
+ 160
+ 47 4 8 161 160 163 162 157 156 154
+ 155
+ 48 4 8 151 110 152 158 155 162 156
+ 160
+ 49 4 8 164 165 167 166 168 169 171
+ 170
+ 50 4 8 167 166 130 172 171 170 174
+ 173
+ 51 4 8 174 173 85 175 171 170 168
+ 169
+ 52 4 8 165 176 166 172 169 175 170
+ 173
+ 53 4 8 134 177 125 178 179 180 182
+ 181
+ 54 4 8 125 178 121 183 182 181 185
+ 184
+ 55 4 8 185 184 148 186 182 181 179
+ 180
+ 56 4 8 177 187 178 183 180 186 181
+ 184
+ 57 4 8 188 189 191 190 192 193 195
+ 194
+ 58 4 8 191 190 176 165 195 194 197
+ 196
+ 59 4 8 197 196 199 198 195 194 192
+ 193
+ 60 4 8 189 164 190 165 193 198 194
+ 196
+ 61 4 8 200 201 203 202 204 205 207
+ 206
+ 62 4 8 203 202 209 208 207 206 211
+ 210
+ 63 4 8 211 210 213 212 207 206 204
+ 205
+ 64 4 8 201 27 202 208 205 212 206
+ 210
+ 65 4 8 214 215 217 216 218 219 221
+ 220
+ 66 4 8 217 216 223 222 221 220 225
+ 224
+ 67 4 8 225 224 85 168 221 220 218
+ 219
+ 68 4 8 215 164 216 222 219 168 220
+ 224
+ 69 4 8 226 227 229 228 230 231 233
+ 232
+ 70 4 8 229 228 164 234 233 232 168
+ 235
+ 71 4 8 168 235 85 236 233 232 230
+ 231
+ 72 4 8 227 237 228 234 231 236 232
+ 235
+ 73 4 8 238 239 241 240 242 243 245
+ 244
+ 74 4 8 241 240 150 246 245 244 248
+ 247
+ 75 4 8 248 247 86 249 245 244 242
+ 243
+ 76 4 8 239 250 240 246 243 249 244
+ 247
+ 77 4 8 223 222 252 251 225 224 254
+ 253
+ 78 4 8 252 251 237 234 254 253 236
+ 235
+ 79 4 8 236 235 85 168 254 253 225
+ 224
+ 80 4 8 222 164 251 234 224 168 253
+ 235
+ 81 4 8 71 65 69 67 255 256 258
+ 257
+ 82 4 8 69 67 70 68 258 257 260
+ 259
+ 83 4 8 260 259 159 261 258 257 255
+ 256
+ 84 4 8 65 66 67 68 256 261 257
+ 259
+ 85 4 8 262 263 265 264 266 267 269
+ 268
+ 86 4 8 265 264 271 270 269 268 273
+ 272
+ 87 4 8 273 272 37 274 269 268 266
+ 267
+ 88 4 8 263 57 264 270 267 274 268
+ 272
+ 89 4 8 136 137 276 275 139 138 278
+ 277
+ 90 4 8 276 275 280 279 278 277 282
+ 281
+ 91 4 8 282 281 101 144 278 277 139
+ 138
+ 92 4 8 137 149 275 279 138 144 277
+ 281
+ 93 4 8 41 283 285 284 286 287 289
+ 288
+ 94 4 8 285 284 149 290 289 288 292
+ 291
+ 95 4 8 292 291 294 293 289 288 286
+ 287
+ 96 4 8 283 295 284 290 287 293 288
+ 291
+ 97 4 8 296 297 299 298 300 301 303
+ 302
+ 98 4 8 299 298 134 133 303 302 132
+ 131
+ 99 4 8 132 131 130 129 303 302 300
+ 301
+ 100 4 8 297 135 298 133 301 129 302
+ 131
+ 101 4 8 41 304 306 305 307 308 310
+ 309
+ 102 4 8 306 305 312 311 310 309 314
+ 313
+ 103 4 8 314 313 316 315 310 309 307
+ 308
+ 104 4 8 304 317 305 311 308 315 309
+ 313
+ 105 4 8 87 90 319 318 320 321 323
+ 322
+ 106 4 8 319 318 101 102 323 322 282
+ 324
+ 107 4 8 282 324 280 325 323 322 320
+ 321
+ 108 4 8 90 96 318 102 321 325 322
+ 324
+ 109 4 8 87 116 319 326 90 118 318
+ 327
+ 110 4 8 319 326 101 104 318 327 102
+ 103
+ 111 4 8 102 103 96 109 318 327 90
+ 118
+ 112 4 8 116 110 326 104 118 109 327
+ 103
+ 113 4 8 328 329 331 330 332 333 335
+ 334
+ 114 4 8 331 330 337 336 335 334 339
+ 338
+ 115 4 8 339 338 341 340 335 334 332
+ 333
+ 116 4 8 329 342 330 336 333 340 334
+ 338
+ 117 4 8 37 343 345 344 31 346 348
+ 347
+ 118 4 8 345 344 350 349 348 347 352
+ 351
+ 119 4 8 352 351 28 353 348 347 31
+ 346
+ 120 4 8 343 100 344 349 346 353 347
+ 351
+ 121 4 8 199 354 356 355 357 358 360
+ 359
+ 122 4 8 356 355 296 300 360 359 299
+ 303
+ 123 4 8 299 303 134 132 360 359 357
+ 358
+ 124 4 8 354 130 355 300 358 132 359
+ 303
+ 125 4 8 159 153 362 361 363 364 366
+ 365
+ 126 4 8 362 361 368 367 366 365 370
+ 369
+ 127 4 8 370 369 372 371 366 365 363
+ 364
+ 128 4 8 153 150 361 367 364 371 365
+ 369
+ 129 4 8 87 90 320 321 91 94 374
+ 373
+ 130 4 8 320 321 280 325 374 373 376
+ 375
+ 131 4 8 376 375 100 98 374 373 91
+ 94
+ 132 4 8 90 96 321 325 94 98 373
+ 375
+ 133 4 8 110 119 116 115 377 378 380
+ 379
+ 134 4 8 116 115 87 88 380 379 382
+ 381
+ 135 4 8 382 381 384 383 380 379 377
+ 378
+ 136 4 8 119 66 115 88 378 383 379
+ 381
+ 137 4 8 385 386 388 387 389 390 392
+ 391
+ 138 4 8 388 387 394 393 392 391 396
+ 395
+ 139 4 8 396 395 398 397 392 391 389
+ 390
+ 140 4 8 386 87 387 393 390 397 391
+ 395
+ 141 4 8 70 69 260 258 399 400 402
+ 401
+ 142 4 8 260 258 159 255 402 401 404
+ 403
+ 143 4 8 404 403 238 405 402 401 399
+ 400
+ 144 4 8 69 71 258 255 400 405 401
+ 403
+ 145 4 8 406 407 409 408 410 411 413
+ 412
+ 146 4 8 409 408 372 414 413 412 416
+ 415
+ 147 4 8 416 415 110 119 413 412 410
+ 411
+ 148 4 8 407 66 408 414 411 119 412
+ 415
+ 149 4 8 368 417 419 418 420 421 423
+ 422
+ 150 4 8 419 418 425 424 423 422 427
+ 426
+ 151 4 8 427 426 250 428 423 422 420
+ 421
+ 152 4 8 417 429 418 424 421 428 422
+ 426
+ 153 4 8 430 431 433 432 434 435 437
+ 436
+ 154 4 8 433 432 149 438 437 436 440
+ 439
+ 155 4 8 440 439 135 441 437 436 434
+ 435
+ 156 4 8 431 312 432 438 435 441 436
+ 439
+ 157 4 8 442 443 445 444 446 447 449
+ 448
+ 158 4 8 445 444 294 450 449 448 452
+ 451
+ 159 4 8 452 451 328 453 449 448 446
+ 447
+ 160 4 8 443 454 444 450 447 453 448
+ 451
+ 161 4 8 134 455 457 456 458 459 461
+ 460
+ 162 4 8 457 456 463 462 461 460 465
+ 464
+ 163 4 8 465 464 467 466 461 460 458
+ 459
+ 164 4 8 455 468 456 462 459 466 460
+ 464
+ 165 4 8 159 255 261 256 363 469 471
+ 470
+ 166 4 8 261 256 66 65 471 470 414
+ 472
+ 167 4 8 414 472 372 473 471 470 363
+ 469
+ 168 4 8 255 71 256 65 469 473 470
+ 472
+ 169 4 8 159 153 404 474 362 361 476
+ 475
+ 170 4 8 404 474 238 241 476 475 478
+ 477
+ 171 4 8 478 477 368 367 476 475 362
+ 361
+ 172 4 8 153 150 474 241 361 367 475
+ 477
+ 173 4 8 135 479 122 480 481 482 484
+ 483
+ 174 4 8 122 480 121 185 484 483 486
+ 485
+ 175 4 8 486 485 488 487 484 483 481
+ 482
+ 176 4 8 479 148 480 185 482 487 483
+ 485
+ 177 4 8 385 489 491 490 388 492 494
+ 493
+ 178 4 8 491 490 496 495 494 493 498
+ 497
+ 179 4 8 498 497 394 499 494 493 388
+ 492
+ 180 4 8 489 500 490 495 492 499 493
+ 497
+ 181 4 8 296 501 297 502 503 504 506
+ 505
+ 182 4 8 297 502 135 507 506 505 434
+ 508
+ 183 4 8 434 508 430 509 506 505 503
+ 504
+ 184 4 8 501 510 502 507 504 509 505
+ 508
+ 185 4 8 199 356 197 511 192 512 195
+ 513
+ 186 4 8 197 511 176 514 195 513 191
+ 515
+ 187 4 8 191 515 188 516 195 513 192
+ 512
+ 188 4 8 356 296 511 514 512 516 513
+ 515
+ 189 4 8 496 517 498 518 519 520 522
+ 521
+ 190 4 8 498 518 394 523 522 521 525
+ 524
+ 191 4 8 525 524 136 526 522 521 519
+ 520
+ 192 4 8 517 527 518 523 520 526 521
+ 524
+ 193 4 8 528 529 531 530 532 533 535
+ 534
+ 194 4 8 531 530 537 536 535 534 539
+ 538
+ 195 4 8 539 538 541 540 535 534 532
+ 533
+ 196 4 8 529 542 530 536 533 540 534
+ 538
+ 197 4 8 543 544 546 545 547 548 550
+ 549
+ 198 4 8 546 545 552 551 550 549 554
+ 553
+ 199 4 8 554 553 556 555 550 549 547
+ 548
+ 200 4 8 544 557 545 551 548 555 549
+ 553
+ 201 4 8 214 558 215 559 560 561 563
+ 562
+ 202 4 8 215 559 164 564 563 562 566
+ 565
+ 203 4 8 566 565 568 567 563 562 560
+ 561
+ 204 4 8 558 569 559 564 561 567 562
+ 565
+ 205 4 8 237 570 572 571 573 574 576
+ 575
+ 206 4 8 572 571 163 154 576 575 578
+ 577
+ 207 4 8 578 577 580 579 576 575 573
+ 574
+ 208 4 8 570 150 571 154 574 579 575
+ 577
+ 209 4 8 581 582 584 583 585 586 588
+ 587
+ 210 4 8 584 583 590 589 588 587 592
+ 591
+ 211 4 8 592 591 557 555 588 587 585
+ 586
+ 212 4 8 582 556 583 589 586 555 587
+ 591
+ 213 4 8 593 594 596 595 597 598 600
+ 599
+ 214 4 8 596 595 602 601 600 599 604
+ 603
+ 215 4 8 604 603 199 605 600 599 597
+ 598
+ 216 4 8 594 606 595 601 598 605 599
+ 603
+ 217 4 8 607 608 610 609 611 612 614
+ 613
+ 218 4 8 610 609 342 336 614 613 616
+ 615
+ 219 4 8 616 615 618 617 614 613 611
+ 612
+ 220 4 8 608 337 609 336 612 617 613
+ 615
+ 221 4 8 188 619 189 620 192 621 193
+ 622
+ 222 4 8 189 620 164 623 193 622 198
+ 624
+ 223 4 8 198 624 199 604 193 622 192
+ 621
+ 224 4 8 619 602 620 623 621 604 622
+ 624
+ 225 4 8 85 84 236 625 225 626 254
+ 627
+ 226 4 8 236 625 237 628 254 627 252
+ 629
+ 227 4 8 252 629 223 630 254 627 225
+ 626
+ 228 4 8 84 86 625 628 626 630 627
+ 629
+ 229 4 8 85 174 168 171 230 631 233
+ 632
+ 230 4 8 168 171 164 167 233 632 229
+ 633
+ 231 4 8 229 633 226 634 233 632 230
+ 631
+ 232 4 8 174 130 171 167 631 634 632
+ 633
+ 233 4 8 635 636 638 637 639 640 642
+ 641
+ 234 4 8 638 637 226 643 642 641 645
+ 644
+ 235 4 8 645 644 647 646 642 641 639
+ 640
+ 236 4 8 636 648 637 643 640 646 641
+ 644
+ 237 4 8 164 165 215 649 650 651 653
+ 652
+ 238 4 8 215 649 214 654 653 652 656
+ 655
+ 239 4 8 656 655 209 657 653 652 650
+ 651
+ 240 4 8 165 176 649 654 651 657 652
+ 655
+ 241 4 8 150 658 570 659 660 661 663
+ 662
+ 242 4 8 570 659 237 664 663 662 252
+ 665
+ 243 4 8 252 665 223 666 663 662 660
+ 661
+ 244 4 8 658 667 659 664 661 666 662
+ 665
+ 245 4 8 668 669 671 670 672 673 675
+ 674
+ 246 4 8 671 670 677 676 675 674 679
+ 678
+ 247 4 8 679 678 648 680 675 674 672
+ 673
+ 248 4 8 669 681 670 676 673 680 674
+ 678
+ 249 4 8 542 682 684 683 685 686 688
+ 687
+ 250 4 8 684 683 188 689 688 687 691
+ 690
+ 251 4 8 691 690 693 692 688 687 685
+ 686
+ 252 4 8 682 342 683 689 686 692 687
+ 690
+ 253 4 8 694 695 697 696 698 699 701
+ 700
+ 254 4 8 697 696 556 702 701 700 704
+ 703
+ 255 4 8 704 703 681 705 701 700 698
+ 699
+ 256 4 8 695 706 696 702 699 705 700
+ 703
+ 257 4 8 590 707 589 708 709 710 712
+ 711
+ 258 4 8 589 708 556 704 712 711 702
+ 703
+ 259 4 8 702 703 706 705 712 711 709
+ 710
+ 260 4 8 707 681 708 704 710 705 711
+ 703
+ 261 4 8 648 680 714 713 715 716 718
+ 717
+ 262 4 8 714 713 164 719 718 717 721
+ 720
+ 263 4 8 721 720 667 722 718 717 715
+ 716
+ 264 4 8 680 681 713 719 716 722 717
+ 720
+ 265 4 8 15 13 724 723 36 725 727
+ 726
+ 266 4 8 724 723 55 728 727 726 730
+ 729
+ 267 4 8 730 729 37 731 727 726 36
+ 725
+ 268 4 8 13 14 723 728 725 731 726
+ 729
+ 269 4 8 732 733 735 734 736 737 739
+ 738
+ 270 4 8 735 734 429 428 739 738 741
+ 740
+ 271 4 8 741 740 743 742 739 738 736
+ 737
+ 272 4 8 733 250 734 428 737 742 738
+ 740
+ 273 4 8 1 4 745 744 5 8 747
+ 746
+ 274 4 8 745 744 86 748 747 746 750
+ 749
+ 275 4 8 750 749 14 12 747 746 5
+ 8
+ 276 4 8 4 10 744 748 8 12 746
+ 749
+ 277 4 8 10 751 753 752 754 755 757
+ 756
+ 278 4 8 753 752 23 758 757 756 760
+ 759
+ 279 4 8 760 759 81 761 757 756 754
+ 755
+ 280 4 8 751 176 752 758 755 761 756
+ 759
+ 281 4 8 528 762 764 763 529 765 767
+ 766
+ 282 4 8 764 763 342 692 767 766 682
+ 686
+ 283 4 8 682 686 542 685 767 766 529
+ 765
+ 284 4 8 762 693 763 692 765 685 766
+ 686
+ 285 4 8 593 768 770 769 771 772 774
+ 773
+ 286 4 8 770 769 618 775 774 773 616
+ 776
+ 287 4 8 616 776 342 340 774 773 771
+ 772
+ 288 4 8 768 341 769 775 772 340 773
+ 776
+ 289 4 8 694 777 779 778 780 781 783
+ 782
+ 290 4 8 779 778 785 784 783 782 787
+ 786
+ 291 4 8 787 786 667 788 783 782 780
+ 781
+ 292 4 8 777 789 778 784 781 788 782
+ 786
+ 293 4 8 790 791 793 792 794 795 797
+ 796
+ 294 4 8 793 792 537 798 797 796 800
+ 799
+ 295 4 8 800 799 454 801 797 796 794
+ 795
+ 296 4 8 791 802 792 798 795 801 796
+ 799
+ 297 4 8 803 804 806 805 807 808 810
+ 809
+ 298 4 8 806 805 121 183 810 809 125
+ 178
+ 299 4 8 125 178 134 177 810 809 807
+ 808
+ 300 4 8 804 187 805 183 808 177 809
+ 178
+ 301 4 8 811 812 814 813 815 816 818
+ 817
+ 302 4 8 814 813 820 819 818 817 822
+ 821
+ 303 4 8 822 821 824 823 818 817 815
+ 816
+ 304 4 8 812 557 813 819 816 823 817
+ 821
+ 305 4 8 606 605 826 825 827 828 830
+ 829
+ 306 4 8 826 825 134 357 830 829 832
+ 831
+ 307 4 8 832 831 834 833 830 829 827
+ 828
+ 308 4 8 605 199 825 357 828 833 829
+ 831
+ 309 4 8 15 835 29 836 837 838 840
+ 839
+ 310 4 8 29 836 28 841 840 839 843
+ 842
+ 311 4 8 843 842 845 844 840 839 837
+ 838
+ 312 4 8 835 846 836 841 838 844 839
+ 842
+ 313 4 8 847 848 850 849 851 852 854
+ 853
+ 314 4 8 850 849 856 855 854 853 858
+ 857
+ 315 4 8 858 857 860 859 854 853 851
+ 852
+ 316 4 8 848 442 849 855 852 859 853
+ 857
+ 317 4 8 861 862 864 863 865 866 868
+ 867
+ 318 4 8 864 863 870 869 868 867 872
+ 871
+ 319 4 8 872 871 527 873 868 867 865
+ 866
+ 320 4 8 862 802 863 869 866 873 867
+ 871
+ 321 4 8 134 826 457 874 455 875 456
+ 876
+ 322 4 8 457 874 463 877 456 876 462
+ 878
+ 323 4 8 462 878 468 879 456 876 455
+ 875
+ 324 4 8 826 606 874 877 875 879 876
+ 878
+ 325 4 8 41 304 307 308 283 880 882
+ 881
+ 326 4 8 307 308 316 315 882 881 884
+ 883
+ 327 4 8 884 883 295 885 882 881 283
+ 880
+ 328 4 8 304 317 308 315 880 885 881
+ 883
+ 329 4 8 618 886 888 887 889 890 892
+ 891
+ 330 4 8 888 887 296 514 892 891 516
+ 515
+ 331 4 8 516 515 188 191 892 891 889
+ 890
+ 332 4 8 886 176 887 514 890 191 891
+ 515
+ 333 4 8 541 893 895 894 896 897 899
+ 898
+ 334 4 8 895 894 901 900 899 898 903
+ 902
+ 335 4 8 903 902 568 904 899 898 896
+ 897
+ 336 4 8 893 693 894 900 897 904 898
+ 902
+ 337 4 8 607 905 611 906 907 908 910
+ 909
+ 338 4 8 611 906 618 911 910 909 913
+ 912
+ 339 4 8 913 912 693 904 910 909 907
+ 908
+ 340 4 8 905 568 906 911 908 904 909
+ 912
+ 341 4 8 607 907 915 914 905 908 917
+ 916
+ 342 4 8 915 914 541 893 917 916 896
+ 897
+ 343 4 8 896 897 568 904 917 916 905
+ 908
+ 344 4 8 907 693 914 893 908 904 916
+ 897
+ 345 4 8 209 918 656 919 650 920 653
+ 921
+ 346 4 8 656 919 214 560 653 921 215
+ 563
+ 347 4 8 215 563 164 566 653 921 650
+ 920
+ 348 4 8 918 568 919 560 920 566 921
+ 563
+ 349 4 8 922 923 925 924 926 927 929
+ 928
+ 350 4 8 925 924 811 930 929 928 932
+ 931
+ 351 4 8 932 931 934 933 929 928 926
+ 927
+ 352 4 8 923 935 924 930 927 933 928
+ 931
+ 353 4 8 164 936 229 937 167 938 633
+ 939
+ 354 4 8 229 937 226 940 633 939 634
+ 941
+ 355 4 8 634 941 130 942 633 939 167
+ 938
+ 356 4 8 936 943 937 940 938 942 939
+ 941
+ 357 4 8 569 944 567 945 946 947 949
+ 948
+ 358 4 8 567 945 568 950 949 948 952
+ 951
+ 359 4 8 952 951 954 953 949 948 946
+ 947
+ 360 4 8 944 955 945 950 947 953 948
+ 951
+ 361 4 8 223 630 252 629 660 956 663
+ 957
+ 362 4 8 252 629 237 628 663 957 570
+ 958
+ 363 4 8 570 958 150 248 663 957 660
+ 956
+ 364 4 8 630 86 629 628 956 248 957
+ 958
+ 365 4 8 789 959 961 960 962 963 965
+ 964
+ 366 4 8 961 960 967 966 965 964 969
+ 968
+ 367 4 8 969 968 971 970 965 964 962
+ 963
+ 368 4 8 959 425 960 966 963 970 964
+ 968
+ 369 4 8 972 973 975 974 976 977 979
+ 978
+ 370 4 8 975 974 981 980 979 978 983
+ 982
+ 371 4 8 983 982 954 952 979 978 976
+ 977
+ 372 4 8 973 568 974 980 977 952 978
+ 982
+ 373 4 8 984 985 987 986 988 989 991
+ 990
+ 374 4 8 987 986 993 992 991 990 995
+ 994
+ 375 4 8 995 994 802 801 991 990 988
+ 989
+ 376 4 8 985 454 986 992 989 801 990
+ 994
+ 377 4 8 861 996 998 997 999 1000 1002
+ 1001
+ 378 4 8 998 997 385 1003 1002 1001 389
+ 1004
+ 379 4 8 389 1004 398 1005 1002 1001 999
+ 1000
+ 380 4 8 996 384 997 1003 1000 1005 1001
+ 1004
+ 381 4 8 350 1006 1008 1007 1009 1010 1012
+ 1011
+ 382 4 8 1008 1007 870 1013 1012 1011 1015
+ 1014
+ 383 4 8 1015 1014 993 1016 1012 1011 1009
+ 1010
+ 384 4 8 1006 398 1007 1013 1010 1016 1011
+ 1014
+ 385 4 8 442 443 1018 1017 1019 1020 1022
+ 1021
+ 386 4 8 1018 1017 537 800 1022 1021 798
+ 799
+ 387 4 8 798 799 802 801 1022 1021 1019
+ 1020
+ 388 4 8 443 454 1017 800 1020 801 1021
+ 799
+ 389 4 8 41 1023 39 1024 32 1025 35
+ 1026
+ 390 4 8 39 1024 37 343 35 1026 31
+ 346
+ 391 4 8 31 346 28 353 35 1026 32
+ 1025
+ 392 4 8 1023 100 1024 343 1025 353 1026
+ 346
+ 393 4 8 85 175 83 1027 76 1028 79
+ 1029
+ 394 4 8 83 1027 81 761 79 1029 75
+ 1030
+ 395 4 8 75 1030 72 1031 79 1029 76
+ 1028
+ 396 4 8 175 176 1027 761 1028 1031 1029
+ 1030
+ 397 4 8 618 1032 775 1033 1034 1035 1037
+ 1036
+ 398 4 8 775 1033 341 1038 1037 1036 1040
+ 1039
+ 399 4 8 1040 1039 430 1041 1037 1036 1034
+ 1035
+ 400 4 8 1032 316 1033 1038 1035 1041 1036
+ 1039
+ 401 4 8 188 689 1043 1042 889 1044 1046
+ 1045
+ 402 4 8 1043 1042 593 771 1046 1045 770
+ 774
+ 403 4 8 770 774 618 616 1046 1045 889
+ 1044
+ 404 4 8 689 342 1042 771 1044 616 1045
+ 774
+ 405 4 8 1 745 1048 1047 1049 1050 1052
+ 1051
+ 406 4 8 1048 1047 72 73 1052 1051 1054
+ 1053
+ 407 4 8 1054 1053 1056 1055 1052 1051 1049
+ 1050
+ 408 4 8 745 86 1047 73 1050 1055 1051
+ 1053
+ 409 4 8 85 175 1058 1057 83 1027 1060
+ 1059
+ 410 4 8 1058 1057 10 751 1060 1059 754
+ 755
+ 411 4 8 754 755 81 761 1060 1059 83
+ 1027
+ 412 4 8 175 176 1057 751 1027 761 1059
+ 755
+ 413 4 8 238 1061 1063 1062 1064 1065 1067
+ 1066
+ 414 4 8 1063 1062 262 1068 1067 1066 1070
+ 1069
+ 415 4 8 1070 1069 51 1071 1067 1066 1064
+ 1065
+ 416 4 8 1061 14 1062 1068 1065 1071 1066
+ 1069
+ 417 4 8 732 1072 1074 1073 1075 1076 1078
+ 1077
+ 418 4 8 1074 1073 1080 1079 1078 1077 1082
+ 1081
+ 419 4 8 1082 1081 971 1083 1078 1077 1075
+ 1076
+ 420 4 8 1072 1084 1073 1079 1076 1083 1077
+ 1081
+ 421 4 8 1085 1086 1088 1087 1089 1090 1092
+ 1091
+ 422 4 8 1088 1087 1094 1093 1092 1091 1096
+ 1095
+ 423 4 8 1096 1095 1098 1097 1092 1091 1089
+ 1090
+ 424 4 8 1086 66 1087 1093 1090 1097 1091
+ 1095
+ 425 4 8 1056 1099 1101 1100 1102 1103 1105
+ 1104
+ 426 4 8 1101 1100 250 1106 1105 1104 1108
+ 1107
+ 427 4 8 1108 1107 1110 1109 1105 1104 1102
+ 1103
+ 428 4 8 1099 51 1100 1106 1103 1109 1104
+ 1107
+ 429 4 8 51 1109 45 1111 1112 1113 1115
+ 1114
+ 430 4 8 45 1111 42 1116 1115 1114 1118
+ 1117
+ 431 4 8 1118 1117 1084 1119 1115 1114 1112
+ 1113
+ 432 4 8 1109 1110 1111 1116 1113 1119 1114
+ 1117
+ 433 4 8 1120 1121 1123 1122 1124 1125 1127
+ 1126
+ 434 4 8 1123 1122 150 1128 1127 1126 1130
+ 1129
+ 435 4 8 1130 1129 1132 1131 1127 1126 1124
+ 1125
+ 436 4 8 1121 1133 1122 1128 1125 1131 1126
+ 1129
+ 437 4 8 1134 1135 1137 1136 1138 1139 1141
+ 1140
+ 438 4 8 1137 1136 1143 1142 1141 1140 1145
+ 1144
+ 439 4 8 1145 1144 496 495 1141 1140 1138
+ 1139
+ 440 4 8 1135 500 1136 1142 1139 495 1140
+ 1144
+ 441 4 8 316 884 1147 1146 1148 1149 1151
+ 1150
+ 442 4 8 1147 1146 860 1152 1151 1150 1154
+ 1153
+ 443 4 8 1154 1153 149 290 1151 1150 1148
+ 1149
+ 444 4 8 884 295 1146 1152 1149 290 1150
+ 1153
+ 445 4 8 394 1155 525 1156 523 1157 524
+ 1158
+ 446 4 8 525 1156 136 276 524 1158 526
+ 1159
+ 447 4 8 526 1159 527 1160 524 1158 523
+ 1157
+ 448 4 8 1155 280 1156 276 1157 1160 1158
+ 1159
+ 449 4 8 223 666 1162 1161 1163 1164 1166
+ 1165
+ 450 4 8 1162 1161 785 787 1166 1165 1168
+ 1167
+ 451 4 8 1168 1167 250 1169 1166 1165 1163
+ 1164
+ 452 4 8 666 667 1161 787 1164 1169 1165
+ 1167
+ 453 4 8 42 1170 1116 1171 1172 1173 1175
+ 1174
+ 454 4 8 1116 1171 1110 1176 1175 1174 1178
+ 1177
+ 455 4 8 1178 1177 1180 1179 1175 1174 1172
+ 1173
+ 456 4 8 1170 1181 1171 1176 1173 1179 1174
+ 1177
+ 457 4 8 789 1182 1184 1183 1185 1186 1188
+ 1187
+ 458 4 8 1184 1183 1181 1189 1188 1187 1176
+ 1190
+ 459 4 8 1176 1190 1110 1119 1188 1187 1185
+ 1186
+ 460 4 8 1182 1084 1183 1189 1186 1119 1187
+ 1190
+ 461 4 8 648 680 636 1191 1192 1193 1195
+ 1194
+ 462 4 8 636 1191 635 1196 1195 1194 1198
+ 1197
+ 463 4 8 1198 1197 943 1199 1195 1194 1192
+ 1193
+ 464 4 8 680 681 1191 1196 1193 1199 1194
+ 1197
+ 465 4 8 226 643 227 1200 645 644 1202
+ 1201
+ 466 4 8 227 1200 237 1203 1202 1201 1205
+ 1204
+ 467 4 8 1205 1204 647 646 1202 1201 645
+ 644
+ 468 4 8 643 648 1200 1203 644 646 1201
+ 1204
+ 469 4 8 1206 1207 1209 1208 1210 1211 1213
+ 1212
+ 470 4 8 1209 1208 635 1214 1213 1212 639
+ 1215
+ 471 4 8 639 1215 647 1216 1213 1212 1210
+ 1211
+ 472 4 8 1207 1120 1208 1214 1211 1216 1212
+ 1215
+ 473 4 8 569 564 1218 1217 1219 1220 1222
+ 1221
+ 474 4 8 1218 1217 901 1223 1222 1221 1225
+ 1224
+ 475 4 8 1225 1224 1227 1226 1222 1221 1219
+ 1220
+ 476 4 8 564 164 1217 1223 1220 1226 1221
+ 1224
+ 477 4 8 602 601 1229 1228 1230 1231 1233
+ 1232
+ 478 4 8 1229 1228 824 1234 1233 1232 1236
+ 1235
+ 479 4 8 1236 1235 943 1237 1233 1232 1230
+ 1231
+ 480 4 8 601 606 1228 1234 1231 1237 1232
+ 1235
+ 481 4 8 150 570 1128 1238 1239 1240 1242
+ 1241
+ 482 4 8 1128 1238 1133 1243 1242 1241 1245
+ 1244
+ 483 4 8 1245 1244 647 1205 1242 1241 1239
+ 1240
+ 484 4 8 570 237 1238 1243 1240 1205 1241
+ 1244
+ 485 4 8 1227 1246 1225 1247 1219 1248 1222
+ 1249
+ 486 4 8 1225 1247 901 1250 1222 1249 1218
+ 1251
+ 487 4 8 1218 1251 569 1252 1222 1249 1219
+ 1248
+ 488 4 8 1246 706 1247 1250 1248 1252 1249
+ 1251
+ 489 4 8 593 1043 1254 1253 771 1042 1256
+ 1255
+ 490 4 8 1254 1253 1258 1257 1256 1255 1260
+ 1259
+ 491 4 8 1260 1259 342 689 1256 1255 771
+ 1042
+ 492 4 8 1043 188 1253 1257 1042 689 1255
+ 1259
+ 493 4 8 164 623 1223 1261 1226 1262 1224
+ 1263
+ 494 4 8 1223 1261 901 1264 1224 1263 1225
+ 1265
+ 495 4 8 1225 1265 1227 1266 1224 1263 1226
+ 1262
+ 496 4 8 623 602 1261 1264 1262 1266 1263
+ 1265
+ 497 4 8 901 903 1268 1267 1223 1269 1271
+ 1270
+ 498 4 8 1268 1267 188 1272 1271 1270 189
+ 1273
+ 499 4 8 189 1273 164 566 1271 1270 1223
+ 1269
+ 500 4 8 903 568 1267 1272 1269 566 1270
+ 1273
+ 501 4 8 188 191 189 190 1274 1275 1277
+ 1276
+ 502 4 8 189 190 164 165 1277 1276 650
+ 651
+ 503 4 8 650 651 209 657 1277 1276 1274
+ 1275
+ 504 4 8 191 176 190 165 1275 657 1276
+ 651
+ 505 4 8 667 1278 722 1279 1280 1281 1283
+ 1282
+ 506 4 8 722 1279 681 705 1283 1282 1285
+ 1284
+ 507 4 8 1285 1284 569 1252 1283 1282 1280
+ 1281
+ 508 4 8 1278 706 1279 705 1281 1252 1282
+ 1284
+ 509 4 8 1110 1102 1287 1286 1108 1105 1289
+ 1288
+ 510 4 8 1287 1286 785 1290 1289 1288 1168
+ 1291
+ 511 4 8 1168 1291 250 1101 1289 1288 1108
+ 1105
+ 512 4 8 1102 1056 1286 1290 1105 1101 1288
+ 1291
+ 513 4 8 901 900 1268 1292 903 902 1267
+ 1293
+ 514 4 8 1268 1292 188 691 1267 1293 1272
+ 1294
+ 515 4 8 1272 1294 568 904 1267 1293 903
+ 902
+ 516 4 8 900 693 1292 691 902 904 1293
+ 1294
+ 517 4 8 1258 1257 1296 1295 1260 1259 1298
+ 1297
+ 518 4 8 1296 1295 542 684 1298 1297 682
+ 683
+ 519 4 8 682 683 342 689 1298 1297 1260
+ 1259
+ 520 4 8 1257 188 1295 684 1259 689 1297
+ 683
+ 521 4 8 1258 1257 1300 1299 1296 1295 1302
+ 1301
+ 522 4 8 1300 1299 602 619 1302 1301 1304
+ 1303
+ 523 4 8 1304 1303 542 684 1302 1301 1296
+ 1295
+ 524 4 8 1257 188 1299 619 1295 684 1301
+ 1303
+ 525 4 8 1305 1306 1308 1307 1309 1310 1312
+ 1311
+ 526 4 8 1308 1307 1314 1313 1312 1311 1316
+ 1315
+ 527 4 8 1316 1315 635 1196 1312 1311 1309
+ 1310
+ 528 4 8 1306 681 1307 1313 1310 1196 1311
+ 1315
+ 529 4 8 820 819 1318 1317 822 821 1320
+ 1319
+ 530 4 8 1318 1317 590 592 1320 1319 1322
+ 1321
+ 531 4 8 1322 1321 824 823 1320 1319 822
+ 821
+ 532 4 8 819 557 1317 592 821 823 1319
+ 1321
+ 533 4 8 164 719 936 1323 1226 1324 1326
+ 1325
+ 534 4 8 936 1323 943 1199 1326 1325 1328
+ 1327
+ 535 4 8 1328 1327 1227 1329 1326 1325 1226
+ 1324
+ 536 4 8 719 681 1323 1199 1324 1329 1325
+ 1327
+ 537 4 8 1314 1316 1313 1315 1330 1331 1333
+ 1332
+ 538 4 8 1313 1315 681 1196 1333 1332 1199
+ 1197
+ 539 4 8 1199 1197 943 1198 1333 1332 1330
+ 1331
+ 540 4 8 1316 635 1315 1196 1331 1198 1332
+ 1197
+ 541 4 8 541 1334 895 1335 540 1336 1338
+ 1337
+ 542 4 8 895 1335 901 1250 1338 1337 1340
+ 1339
+ 543 4 8 1340 1339 542 1341 1338 1337 540
+ 1336
+ 544 4 8 1334 706 1335 1250 1336 1341 1337
+ 1339
+ 545 4 8 1342 1343 1345 1344 1346 1347 1349
+ 1348
+ 546 4 8 1345 1344 528 1350 1349 1348 532
+ 1351
+ 547 4 8 532 1351 541 915 1349 1348 1346
+ 1347
+ 548 4 8 1343 607 1344 1350 1347 915 1348
+ 1351
+ 549 4 8 1258 1296 1300 1302 1352 1353 1355
+ 1354
+ 550 4 8 1300 1302 602 1304 1355 1354 1229
+ 1356
+ 551 4 8 1229 1356 824 1357 1355 1354 1352
+ 1353
+ 552 4 8 1296 542 1302 1304 1353 1357 1354
+ 1356
+ 553 4 8 1227 1358 1266 1359 1360 1361 1363
+ 1362
+ 554 4 8 1266 1359 602 1229 1363 1362 1304
+ 1356
+ 555 4 8 1304 1356 542 1357 1363 1362 1360
+ 1361
+ 556 4 8 1358 824 1359 1229 1361 1357 1362
+ 1356
+ 557 4 8 496 1364 1145 1365 1366 1367 1369
+ 1368
+ 558 4 8 1145 1365 1143 1370 1369 1368 1372
+ 1371
+ 559 4 8 1372 1371 820 819 1369 1368 1366
+ 1367
+ 560 4 8 1364 557 1365 1370 1367 819 1368
+ 1371
+ 561 4 8 398 1373 1016 1374 1375 1376 1378
+ 1377
+ 562 4 8 1016 1374 993 1379 1378 1377 1381
+ 1380
+ 563 4 8 1381 1380 280 1160 1378 1377 1375
+ 1376
+ 564 4 8 1373 527 1374 1379 1376 1160 1377
+ 1380
+ 565 4 8 1382 1383 1385 1384 1386 1387 1389
+ 1388
+ 566 4 8 1385 1384 1391 1390 1389 1388 1393
+ 1392
+ 567 4 8 1393 1392 1120 1394 1389 1388 1386
+ 1387
+ 568 4 8 1383 677 1384 1390 1387 1394 1388
+ 1392
+ 569 4 8 488 1395 1397 1396 1398 1399 1401
+ 1400
+ 570 4 8 1397 1396 114 1402 1401 1400 1404
+ 1403
+ 571 4 8 1404 1403 1406 1405 1401 1400 1398
+ 1399
+ 572 4 8 1395 1407 1396 1402 1399 1405 1400
+ 1403
+ 573 4 8 213 1408 1410 1409 1411 1412 1414
+ 1413
+ 574 4 8 1410 1409 618 1415 1414 1413 1417
+ 1416
+ 575 4 8 1417 1416 23 1418 1414 1413 1411
+ 1412
+ 576 4 8 1408 317 1409 1415 1412 1418 1413
+ 1416
+ 577 4 8 618 911 889 1419 913 912 1421
+ 1420
+ 578 4 8 889 1419 188 1272 1421 1420 691
+ 1294
+ 579 4 8 691 1294 693 904 1421 1420 913
+ 912
+ 580 4 8 911 568 1419 1272 912 904 1420
+ 1294
+ 581 4 8 209 918 650 920 1274 1422 1277
+ 1423
+ 582 4 8 650 920 164 566 1277 1423 189
+ 1273
+ 583 4 8 189 1273 188 1272 1277 1423 1274
+ 1422
+ 584 4 8 918 568 920 566 1422 1272 1423
+ 1273
+ 585 4 8 262 266 1425 1424 1068 1426 1428
+ 1427
+ 586 4 8 1425 1424 55 730 1428 1427 728
+ 729
+ 587 4 8 728 729 14 731 1428 1427 1068
+ 1426
+ 588 4 8 266 37 1424 730 1426 731 1427
+ 729
+ 589 4 8 1 5 745 747 1429 1430 1432
+ 1431
+ 590 4 8 745 747 86 750 1432 1431 1434
+ 1433
+ 591 4 8 1434 1433 51 1071 1432 1431 1429
+ 1430
+ 592 4 8 5 14 747 750 1430 1071 1431
+ 1433
+ 593 4 8 110 151 158 152 416 1435 1437
+ 1436
+ 594 4 8 158 152 159 153 1437 1436 363
+ 364
+ 595 4 8 363 364 372 371 1437 1436 416
+ 1435
+ 596 4 8 151 150 152 153 1435 371 1436
+ 364
+ 597 4 8 1132 1438 1440 1439 1131 1441 1443
+ 1442
+ 598 4 8 1440 1439 1382 1444 1443 1442 1446
+ 1445
+ 599 4 8 1446 1445 1133 1447 1443 1442 1131
+ 1441
+ 600 4 8 1438 668 1439 1444 1441 1447 1442
+ 1445
+ 601 4 8 238 239 242 243 1064 1448 1450
+ 1449
+ 602 4 8 242 243 86 249 1450 1449 1434
+ 1451
+ 603 4 8 1434 1451 51 1106 1450 1449 1064
+ 1448
+ 604 4 8 239 250 243 249 1448 1106 1449
+ 1451
+ 605 4 8 856 1452 1454 1453 1455 1456 1458
+ 1457
+ 606 4 8 1454 1453 149 137 1458 1457 292
+ 1459
+ 607 4 8 292 1459 294 1460 1458 1457 1455
+ 1456
+ 608 4 8 1452 136 1453 137 1456 1460 1457
+ 1459
+ 609 4 8 295 1461 884 1462 1152 1463 1146
+ 1464
+ 610 4 8 884 1462 316 1465 1146 1464 1147
+ 1466
+ 611 4 8 1147 1466 860 1467 1146 1464 1152
+ 1463
+ 612 4 8 1461 328 1462 1465 1463 1467 1464
+ 1466
+ 613 4 8 993 1468 1470 1469 1471 1472 1474
+ 1473
+ 614 4 8 1470 1469 28 1475 1474 1473 841
+ 1476
+ 615 4 8 841 1476 846 1477 1474 1473 1471
+ 1472
+ 616 4 8 1468 1478 1469 1475 1472 1477 1473
+ 1476
+ 617 4 8 668 669 1480 1479 671 670 1482
+ 1481
+ 618 4 8 1480 1479 556 704 1482 1481 1484
+ 1483
+ 619 4 8 1484 1483 677 676 1482 1481 671
+ 670
+ 620 4 8 669 681 1479 704 670 676 1481
+ 1483
+ 621 4 8 110 162 151 155 1485 1486 1488
+ 1487
+ 622 4 8 151 155 150 154 1488 1487 579
+ 577
+ 623 4 8 579 577 580 578 1488 1487 1485
+ 1486
+ 624 4 8 162 163 155 154 1486 578 1487
+ 577
+ 625 4 8 590 592 589 591 1489 1490 1492
+ 1491
+ 626 4 8 589 591 556 555 1492 1491 1494
+ 1493
+ 627 4 8 1494 1493 1314 1495 1492 1491 1489
+ 1490
+ 628 4 8 592 557 591 555 1490 1495 1491
+ 1493
+ 629 4 8 935 1496 1498 1497 1499 1500 1502
+ 1501
+ 630 4 8 1498 1497 635 1503 1502 1501 1505
+ 1504
+ 631 4 8 1505 1504 1507 1506 1502 1501 1499
+ 1500
+ 632 4 8 1496 1508 1497 1503 1500 1506 1501
+ 1504
+ 633 4 8 677 1390 1394 1392 1509 1510 1512
+ 1511
+ 634 4 8 1394 1392 1120 1393 1512 1511 1214
+ 1513
+ 635 4 8 1214 1513 635 1514 1512 1511 1509
+ 1510
+ 636 4 8 1390 1391 1392 1393 1510 1514 1511
+ 1513
+ 637 4 8 500 495 1516 1515 1517 1518 1520
+ 1519
+ 638 4 8 1516 1515 811 1521 1520 1519 812
+ 1522
+ 639 4 8 812 1522 557 1364 1520 1519 1517
+ 1518
+ 640 4 8 495 496 1515 1521 1518 1364 1519
+ 1522
+ 641 4 8 1523 1524 1526 1525 1527 1528 1530
+ 1529
+ 642 4 8 1526 1525 1507 1506 1530 1529 1505
+ 1504
+ 643 4 8 1505 1504 635 1503 1530 1529 1527
+ 1528
+ 644 4 8 1524 1508 1525 1506 1528 1503 1529
+ 1504
+ 645 4 8 901 900 1340 1531 1268 1292 1533
+ 1532
+ 646 4 8 1340 1531 542 685 1533 1532 684
+ 688
+ 647 4 8 684 688 188 691 1533 1532 1268
+ 1292
+ 648 4 8 900 693 1531 685 1292 691 1532
+ 688
+ 649 4 8 955 944 950 945 1534 1535 1537
+ 1536
+ 650 4 8 950 945 568 567 1537 1536 903
+ 1538
+ 651 4 8 903 1538 901 1218 1537 1536 1534
+ 1535
+ 652 4 8 944 569 945 567 1535 1218 1536
+ 1538
+ 653 4 8 602 623 1264 1261 619 620 1540
+ 1539
+ 654 4 8 1264 1261 901 1223 1540 1539 1268
+ 1271
+ 655 4 8 1268 1271 188 189 1540 1539 619
+ 620
+ 656 4 8 623 164 1261 1223 620 189 1539
+ 1271
+ 657 4 8 901 1223 1218 1217 903 1269 1538
+ 1541
+ 658 4 8 1218 1217 569 564 1538 1541 567
+ 565
+ 659 4 8 567 565 568 566 1538 1541 903
+ 1269
+ 660 4 8 1223 164 1217 564 1269 566 1541
+ 565
+ 661 4 8 618 913 889 1421 616 1542 1044
+ 1543
+ 662 4 8 889 1421 188 691 1044 1543 689
+ 690
+ 663 4 8 689 690 342 692 1044 1543 616
+ 1542
+ 664 4 8 913 693 1421 691 1542 692 1543
+ 690
+ 665 4 8 607 611 905 906 1544 1545 1547
+ 1546
+ 666 4 8 905 906 568 911 1547 1546 1549
+ 1548
+ 667 4 8 1549 1548 213 1410 1547 1546 1544
+ 1545
+ 668 4 8 611 618 906 911 1545 1410 1546
+ 1548
+ 669 4 8 785 787 1551 1550 1552 1553 1555
+ 1554
+ 670 4 8 1551 1550 569 1280 1555 1554 1252
+ 1281
+ 671 4 8 1252 1281 706 1278 1555 1554 1552
+ 1553
+ 672 4 8 787 667 1550 1280 1553 1278 1554
+ 1281
+ 673 4 8 223 1556 1162 1557 666 1558 1161
+ 1559
+ 674 4 8 1162 1557 785 1551 1161 1559 787
+ 1550
+ 675 4 8 787 1550 667 1280 1161 1559 666
+ 1558
+ 676 4 8 1556 569 1557 1551 1558 1280 1559
+ 1550
+ 677 4 8 569 944 946 947 1551 1560 1562
+ 1561
+ 678 4 8 946 947 954 953 1562 1561 1564
+ 1563
+ 679 4 8 1564 1563 785 1565 1562 1561 1551
+ 1560
+ 680 4 8 944 955 947 953 1560 1565 1561
+ 1563
+ 681 4 8 398 397 1375 1566 1006 1567 1569
+ 1568
+ 682 4 8 1375 1566 280 320 1569 1568 1571
+ 1570
+ 683 4 8 1571 1570 350 1572 1569 1568 1006
+ 1567
+ 684 4 8 397 87 1566 320 1567 1572 1568
+ 1570
+ 685 4 8 100 91 99 92 349 1573 1575
+ 1574
+ 686 4 8 99 92 66 88 1575 1574 1577
+ 1576
+ 687 4 8 1577 1576 350 1572 1575 1574 349
+ 1573
+ 688 4 8 91 87 92 88 1573 1572 1574
+ 1576
+ 689 4 8 394 393 1155 1578 396 395 1580
+ 1579
+ 690 4 8 1155 1578 280 320 1580 1579 1375
+ 1566
+ 691 4 8 1375 1566 398 397 1580 1579 396
+ 395
+ 692 4 8 393 87 1578 320 395 397 1579
+ 1566
+ 693 4 8 743 1581 1583 1582 742 1584 1586
+ 1585
+ 694 4 8 1583 1582 1084 1112 1586 1585 1588
+ 1587
+ 695 4 8 1588 1587 250 1106 1586 1585 742
+ 1584
+ 696 4 8 1581 51 1582 1112 1584 1106 1585
+ 1587
+ 697 4 8 86 750 242 1589 1434 1433 1450
+ 1590
+ 698 4 8 242 1589 238 1061 1450 1590 1064
+ 1065
+ 699 4 8 1064 1065 51 1071 1450 1590 1434
+ 1433
+ 700 4 8 750 14 1589 1061 1433 1071 1590
+ 1065
+ 701 4 8 280 320 1155 1578 282 323 1592
+ 1591
+ 702 4 8 1155 1578 394 393 1592 1591 1594
+ 1593
+ 703 4 8 1594 1593 101 319 1592 1591 282
+ 323
+ 704 4 8 320 87 1578 393 323 319 1591
+ 1593
+ 705 4 8 280 376 1596 1595 1571 1597 1599
+ 1598
+ 706 4 8 1596 1595 28 353 1599 1598 352
+ 351
+ 707 4 8 352 351 350 349 1599 1598 1571
+ 1597
+ 708 4 8 376 100 1595 353 1597 349 1598
+ 351
+ 709 4 8 28 32 353 1025 1596 1600 1595
+ 1601
+ 710 4 8 353 1025 100 1023 1595 1601 376
+ 1602
+ 711 4 8 376 1602 280 1603 1595 1601 1596
+ 1600
+ 712 4 8 32 41 1025 1023 1600 1603 1601
+ 1602
+ 713 4 8 337 1604 336 1605 1606 1607 1609
+ 1608
+ 714 4 8 336 1605 342 764 1609 1608 1611
+ 1610
+ 715 4 8 1611 1610 442 1612 1609 1608 1606
+ 1607
+ 716 4 8 1604 528 1605 764 1607 1612 1608
+ 1610
+ 717 4 8 200 1613 1615 1614 1616 1617 1619
+ 1618
+ 718 4 8 1615 1614 81 761 1619 1618 760
+ 759
+ 719 4 8 760 759 23 758 1619 1618 1616
+ 1617
+ 720 4 8 1613 176 1614 761 1617 758 1618
+ 759
+ 721 4 8 295 885 1621 1620 1622 1623 1625
+ 1624
+ 722 4 8 1621 1620 1627 1626 1625 1624 1629
+ 1628
+ 723 4 8 1629 1628 846 1630 1625 1624 1622
+ 1623
+ 724 4 8 885 317 1620 1626 1623 1630 1624
+ 1628
+ 725 4 8 1631 1632 1634 1633 1635 1636 1638
+ 1637
+ 726 4 8 1634 1633 1206 1639 1638 1637 1641
+ 1640
+ 727 4 8 1641 1640 1406 1642 1638 1637 1635
+ 1636
+ 728 4 8 1632 580 1633 1639 1636 1642 1637
+ 1640
+ 729 4 8 1643 1644 1646 1645 1647 1648 1650
+ 1649
+ 730 4 8 1646 1645 1627 1626 1650 1649 1652
+ 1651
+ 731 4 8 1652 1651 337 1653 1650 1649 1647
+ 1648
+ 732 4 8 1644 317 1645 1626 1648 1653 1649
+ 1651
+ 733 4 8 1654 1655 1657 1656 1658 1659 1661
+ 1660
+ 734 4 8 1657 1656 706 1662 1661 1660 1552
+ 1663
+ 735 4 8 1552 1663 785 1565 1661 1660 1658
+ 1659
+ 736 4 8 1655 955 1656 1662 1659 1565 1660
+ 1663
+ 737 4 8 706 1334 1250 1335 1662 1664 1666
+ 1665
+ 738 4 8 1250 1335 901 895 1666 1665 1534
+ 1667
+ 739 4 8 1534 1667 955 1668 1666 1665 1662
+ 1664
+ 740 4 8 1334 541 1335 895 1664 1668 1665
+ 1667
+ 741 4 8 541 540 895 1338 893 1669 894
+ 1670
+ 742 4 8 895 1338 901 1340 894 1670 900
+ 1531
+ 743 4 8 900 1531 693 685 894 1670 893
+ 1669
+ 744 4 8 540 542 1338 1340 1669 685 1670
+ 1531
+ 745 4 8 955 944 1662 1671 1565 1560 1663
+ 1672
+ 746 4 8 1662 1671 706 1252 1663 1672 1552
+ 1555
+ 747 4 8 1552 1555 785 1551 1663 1672 1565
+ 1560
+ 748 4 8 944 569 1671 1252 1560 1551 1672
+ 1555
+ 749 4 8 954 983 1674 1673 1564 1675 1677
+ 1676
+ 750 4 8 1674 1673 1181 1678 1677 1676 1680
+ 1679
+ 751 4 8 1680 1679 785 1681 1677 1676 1564
+ 1675
+ 752 4 8 983 981 1673 1678 1675 1681 1676
+ 1679
+ 753 4 8 820 1682 1684 1683 1685 1686 1688
+ 1687
+ 754 4 8 1684 1683 706 1341 1688 1687 1690
+ 1689
+ 755 4 8 1690 1689 537 536 1688 1687 1685
+ 1686
+ 756 4 8 1682 542 1683 1341 1686 536 1687
+ 1689
+ 757 4 8 176 165 172 166 197 196 1692
+ 1691
+ 758 4 8 172 166 130 167 1692 1691 354
+ 1693
+ 759 4 8 354 1693 199 198 1692 1691 197
+ 196
+ 760 4 8 165 164 166 167 196 198 1691
+ 1693
+ 761 4 8 602 619 1264 1540 1304 1303 1695
+ 1694
+ 762 4 8 1264 1540 901 1268 1695 1694 1340
+ 1533
+ 763 4 8 1340 1533 542 684 1695 1694 1304
+ 1303
+ 764 4 8 619 188 1540 1268 1303 684 1694
+ 1533
+ 765 4 8 1227 1246 1360 1696 1225 1247 1698
+ 1697
+ 766 4 8 1360 1696 542 1341 1698 1697 1340
+ 1339
+ 767 4 8 1340 1339 901 1250 1698 1697 1225
+ 1247
+ 768 4 8 1246 706 1696 1341 1247 1250 1697
+ 1339
+ 769 4 8 1227 1329 1700 1699 1246 1701 1703
+ 1702
+ 770 4 8 1700 1699 590 707 1703 1702 709
+ 710
+ 771 4 8 709 710 706 705 1703 1702 1246
+ 1701
+ 772 4 8 1329 681 1699 707 1701 705 1702
+ 710
+ 773 4 8 834 1704 827 1705 1706 1707 1709
+ 1708
+ 774 4 8 827 1705 606 1710 1709 1708 1237
+ 1711
+ 775 4 8 1237 1711 943 1712 1709 1708 1706
+ 1707
+ 776 4 8 1704 1713 1705 1710 1707 1712 1708
+ 1711
+ 777 4 8 1227 1714 1700 1715 1329 1716 1699
+ 1717
+ 778 4 8 1700 1715 590 1489 1699 1717 707
+ 1718
+ 779 4 8 707 1718 681 1313 1699 1717 1329
+ 1716
+ 780 4 8 1714 1314 1715 1489 1716 1313 1717
+ 1718
+ 781 4 8 1143 1719 1721 1720 1145 1722 1724
+ 1723
+ 782 4 8 1721 1720 861 862 1724 1723 1726
+ 1725
+ 783 4 8 1726 1725 496 1727 1724 1723 1145
+ 1722
+ 784 4 8 1719 802 1720 862 1722 1727 1723
+ 1725
+ 785 4 8 1728 1729 1731 1730 1732 1733 1735
+ 1734
+ 786 4 8 1731 1730 101 104 1735 1734 319
+ 326
+ 787 4 8 319 326 87 116 1735 1734 1732
+ 1733
+ 788 4 8 1729 110 1730 104 1733 116 1734
+ 326
+ 789 4 8 398 1373 999 1736 1013 1737 1739
+ 1738
+ 790 4 8 999 1736 861 865 1739 1738 864
+ 868
+ 791 4 8 864 868 870 872 1739 1738 1013
+ 1737
+ 792 4 8 1373 527 1736 865 1737 872 1738
+ 868
+ 793 4 8 328 1465 331 1740 1741 1742 1744
+ 1743
+ 794 4 8 331 1740 337 1745 1744 1743 1653
+ 1746
+ 795 4 8 1653 1746 317 315 1744 1743 1741
+ 1742
+ 796 4 8 1465 316 1740 1745 1742 315 1743
+ 1746
+ 797 4 8 1094 1747 1749 1748 1096 1750 1752
+ 1751
+ 798 4 8 1749 1748 1754 1753 1752 1751 1756
+ 1755
+ 799 4 8 1756 1755 1098 1757 1752 1751 1096
+ 1750
+ 800 4 8 1747 37 1748 1753 1750 1757 1751
+ 1755
+ 801 4 8 1094 1088 1096 1092 1758 1759 1761
+ 1760
+ 802 4 8 1096 1092 1098 1089 1761 1760 1763
+ 1762
+ 803 4 8 1763 1762 1765 1764 1761 1760 1758
+ 1759
+ 804 4 8 1088 1085 1092 1089 1759 1764 1760
+ 1762
+ 805 4 8 350 345 1577 1766 349 344 1575
+ 1767
+ 806 4 8 1577 1766 66 1768 1575 1767 99
+ 1769
+ 807 4 8 99 1769 100 343 1575 1767 349
+ 344
+ 808 4 8 345 37 1766 1768 344 343 1767
+ 1769
+ 809 4 8 789 1770 784 1771 1184 1772 1774
+ 1773
+ 810 4 8 784 1771 785 1658 1774 1773 1680
+ 1775
+ 811 4 8 1680 1775 1181 1776 1774 1773 1184
+ 1772
+ 812 4 8 1770 1654 1771 1658 1772 1776 1773
+ 1775
+ 813 4 8 37 730 273 1777 266 1424 269
+ 1778
+ 814 4 8 273 1777 271 1779 269 1778 265
+ 1780
+ 815 4 8 265 1780 262 1425 269 1778 266
+ 1424
+ 816 4 8 730 55 1777 1779 1424 1425 1778
+ 1780
+ 817 4 8 607 608 1350 1781 610 609 1783
+ 1782
+ 818 4 8 1350 1781 528 1604 1783 1782 764
+ 1605
+ 819 4 8 764 1605 342 336 1783 1782 610
+ 609
+ 820 4 8 608 337 1781 1604 609 336 1782
+ 1605
+ 821 4 8 568 905 973 1784 980 1785 974
+ 1786
+ 822 4 8 973 1784 972 1787 974 1786 975
+ 1788
+ 823 4 8 975 1788 981 1789 974 1786 980
+ 1785
+ 824 4 8 905 607 1784 1787 1785 1789 1786
+ 1788
+ 825 4 8 1342 1346 1791 1790 1343 1347 1793
+ 1792
+ 826 4 8 1791 1790 981 1794 1793 1792 1789
+ 1795
+ 827 4 8 1789 1795 607 915 1793 1792 1343
+ 1347
+ 828 4 8 1346 541 1790 1794 1347 915 1792
+ 1795
+ 829 4 8 250 1588 1797 1796 1798 1799 1801
+ 1800
+ 830 4 8 1797 1796 971 1083 1801 1800 962
+ 1802
+ 831 4 8 962 1802 789 1182 1801 1800 1798
+ 1799
+ 832 4 8 1588 1084 1796 1083 1799 1182 1800
+ 1802
+ 833 4 8 312 314 1804 1803 431 1805 1807
+ 1806
+ 834 4 8 1804 1803 618 1032 1807 1806 1034
+ 1035
+ 835 4 8 1034 1035 430 1041 1807 1806 431
+ 1805
+ 836 4 8 314 316 1803 1032 1805 1041 1806
+ 1035
+ 837 4 8 23 1418 1417 1416 1808 1809 1811
+ 1810
+ 838 4 8 1417 1416 618 1415 1811 1810 1804
+ 1812
+ 839 4 8 1804 1812 312 311 1811 1810 1808
+ 1809
+ 840 4 8 1418 317 1416 1415 1809 311 1810
+ 1812
+ 841 4 8 23 758 1417 1813 1616 1617 1815
+ 1814
+ 842 4 8 1417 1813 618 886 1815 1814 1817
+ 1816
+ 843 4 8 1817 1816 200 1613 1815 1814 1616
+ 1617
+ 844 4 8 758 176 1813 886 1617 1613 1814
+ 1816
+ 845 4 8 41 1818 304 1819 40 1820 1822
+ 1821
+ 846 4 8 304 1819 317 1418 1822 1821 1824
+ 1823
+ 847 4 8 1824 1823 15 25 1822 1821 40
+ 1820
+ 848 4 8 1818 23 1819 1418 1820 25 1821
+ 1823
+ 849 4 8 1206 1641 1639 1640 1825 1826 1828
+ 1827
+ 850 4 8 1639 1640 580 1642 1828 1827 1830
+ 1829
+ 851 4 8 1830 1829 1832 1831 1828 1827 1825
+ 1826
+ 852 4 8 1641 1406 1640 1642 1826 1831 1827
+ 1829
+ 853 4 8 580 1639 1830 1828 1833 1834 1836
+ 1835
+ 854 4 8 1830 1828 1832 1825 1836 1835 1838
+ 1837
+ 855 4 8 1838 1837 647 1210 1836 1835 1833
+ 1834
+ 856 4 8 1639 1206 1828 1825 1834 1210 1835
+ 1837
+ 857 4 8 647 1205 1838 1839 1833 1840 1836
+ 1841
+ 858 4 8 1838 1839 1832 1842 1836 1841 1830
+ 1843
+ 859 4 8 1830 1843 580 573 1836 1841 1833
+ 1840
+ 860 4 8 1205 237 1839 1842 1840 573 1841
+ 1843
+ 861 4 8 1110 1844 1287 1845 1102 1846 1286
+ 1847
+ 862 4 8 1287 1845 785 1564 1286 1847 1290
+ 1848
+ 863 4 8 1290 1848 1056 1849 1286 1847 1102
+ 1846
+ 864 4 8 1844 954 1845 1564 1846 1849 1847
+ 1848
+ 865 4 8 954 1850 983 1851 976 1852 979
+ 1853
+ 866 4 8 983 1851 981 1854 979 1853 975
+ 1855
+ 867 4 8 975 1855 972 1856 979 1853 976
+ 1852
+ 868 4 8 1850 1180 1851 1854 1852 1856 1853
+ 1855
+ 869 4 8 41 1603 32 1600 1857 1858 1860
+ 1859
+ 870 4 8 32 1600 28 1596 1860 1859 841
+ 1861
+ 871 4 8 841 1861 846 1862 1860 1859 1857
+ 1858
+ 872 4 8 1603 280 1600 1596 1858 1862 1859
+ 1861
+ 873 4 8 406 1863 1865 1864 410 1866 1868
+ 1867
+ 874 4 8 1865 1864 1870 1869 1868 1867 1872
+ 1871
+ 875 4 8 1872 1871 110 1873 1868 1867 410
+ 1866
+ 876 4 8 1863 1382 1864 1869 1866 1873 1867
+ 1871
+ 877 4 8 398 1373 389 1874 999 1736 1002
+ 1875
+ 878 4 8 389 1874 385 1876 1002 1875 998
+ 1877
+ 879 4 8 998 1877 861 865 1002 1875 999
+ 1736
+ 880 4 8 1373 527 1874 1876 1736 865 1875
+ 1877
+ 881 4 8 136 1878 525 1879 519 1880 522
+ 1881
+ 882 4 8 525 1879 394 1882 522 1881 498
+ 1883
+ 883 4 8 498 1883 496 1884 522 1881 519
+ 1880
+ 884 4 8 1878 1885 1879 1882 1880 1884 1881
+ 1883
+ 885 4 8 811 1886 1521 1887 1516 1888 1515
+ 1889
+ 886 4 8 1521 1887 496 1884 1515 1889 495
+ 1890
+ 887 4 8 495 1890 500 1891 1515 1889 1516
+ 1888
+ 888 4 8 1886 1885 1887 1884 1888 1891 1889
+ 1890
+ 889 4 8 1382 1383 1386 1387 1446 1892 1894
+ 1893
+ 890 4 8 1386 1387 1120 1394 1894 1893 1121
+ 1895
+ 891 4 8 1121 1895 1133 1896 1894 1893 1446
+ 1892
+ 892 4 8 1383 677 1387 1394 1892 1896 1893
+ 1895
+ 893 4 8 1897 1898 1900 1899 1901 1902 1904
+ 1903
+ 894 4 8 1900 1899 635 1214 1904 1903 1209
+ 1208
+ 895 4 8 1209 1208 1206 1207 1904 1903 1901
+ 1902
+ 896 4 8 1898 1120 1899 1214 1902 1207 1903
+ 1208
+ 897 4 8 824 823 1906 1905 1907 1908 1910
+ 1909
+ 898 4 8 1906 1905 1314 1495 1910 1909 1912
+ 1911
+ 899 4 8 1912 1911 935 1913 1910 1909 1907
+ 1908
+ 900 4 8 823 557 1905 1495 1908 1913 1909
+ 1911
+ 901 4 8 1914 1915 1917 1916 1918 1919 1921
+ 1920
+ 902 4 8 1917 1916 1923 1922 1921 1920 1925
+ 1924
+ 903 4 8 1925 1924 1927 1926 1921 1920 1918
+ 1919
+ 904 4 8 1915 1928 1916 1922 1919 1926 1920
+ 1924
+ 905 4 8 984 1929 1931 1930 1932 1933 1935
+ 1934
+ 906 4 8 1931 1930 845 1936 1935 1934 1938
+ 1937
+ 907 4 8 1938 1937 1940 1939 1935 1934 1932
+ 1933
+ 908 4 8 1929 1478 1930 1936 1933 1939 1934
+ 1937
+ 909 4 8 845 1936 1931 1930 844 1941 1943
+ 1942
+ 910 4 8 1931 1930 984 1929 1943 1942 1945
+ 1944
+ 911 4 8 1945 1944 846 1477 1943 1942 844
+ 1941
+ 912 4 8 1936 1478 1930 1929 1941 1477 1942
+ 1944
+ 913 4 8 57 270 274 272 1946 1947 1949
+ 1948
+ 914 4 8 274 272 37 273 1949 1948 1757
+ 1950
+ 915 4 8 1757 1950 1098 1951 1949 1948 1946
+ 1947
+ 916 4 8 270 271 272 273 1947 1951 1948
+ 1950
+ 917 4 8 1143 1952 1370 1953 1954 1955 1957
+ 1956
+ 918 4 8 1370 1953 557 544 1957 1956 1959
+ 1958
+ 919 4 8 1959 1958 922 1960 1957 1956 1954
+ 1955
+ 920 4 8 1952 543 1953 544 1955 1960 1956
+ 1958
+ 921 4 8 732 1961 733 1962 1075 1963 1965
+ 1964
+ 922 4 8 733 1962 250 427 1965 1964 1797
+ 1966
+ 923 4 8 1797 1966 971 970 1965 1964 1075
+ 1963
+ 924 4 8 1961 425 1962 427 1963 970 1964
+ 1966
+ 925 4 8 70 1967 1969 1968 1970 1971 1973
+ 1972
+ 926 4 8 1969 1968 37 731 1973 1972 266
+ 1426
+ 927 4 8 266 1426 262 1068 1973 1972 1970
+ 1971
+ 928 4 8 1967 14 1968 731 1971 1068 1972
+ 1426
+ 929 4 8 1305 1308 1975 1974 1976 1977 1979
+ 1978
+ 930 4 8 1975 1974 556 1494 1979 1978 555
+ 1493
+ 931 4 8 555 1493 557 1495 1979 1978 1976
+ 1977
+ 932 4 8 1308 1314 1974 1494 1977 1495 1978
+ 1493
+ 933 4 8 1305 1306 1975 1980 1308 1307 1974
+ 1981
+ 934 4 8 1975 1980 556 704 1974 1981 1494
+ 1982
+ 935 4 8 1494 1982 1314 1313 1974 1981 1308
+ 1307
+ 936 4 8 1306 681 1980 704 1307 1313 1981
+ 1982
+ 937 4 8 820 1685 1984 1983 1372 1985 1987
+ 1986
+ 938 4 8 1984 1983 581 1988 1987 1986 1990
+ 1989
+ 939 4 8 1990 1989 1143 1991 1987 1986 1372
+ 1985
+ 940 4 8 1685 537 1983 1988 1985 1991 1986
+ 1989
+ 941 4 8 442 1019 1018 1022 1992 1993 1995
+ 1994
+ 942 4 8 1018 1022 537 798 1995 1994 1997
+ 1996
+ 943 4 8 1997 1996 496 1727 1995 1994 1992
+ 1993
+ 944 4 8 1019 802 1022 798 1993 1727 1994
+ 1996
+ 945 4 8 1654 1658 1999 1998 1770 1771 2001
+ 2000
+ 946 4 8 1999 1998 694 779 2001 2000 777
+ 778
+ 947 4 8 777 778 789 784 2001 2000 1770
+ 1771
+ 948 4 8 1658 785 1998 779 1771 784 2000
+ 778
+ 949 4 8 955 1668 2003 2002 2004 2005 2007
+ 2006
+ 950 4 8 2003 2002 981 1794 2007 2006 2009
+ 2008
+ 951 4 8 2009 2008 790 2010 2007 2006 2004
+ 2005
+ 952 4 8 1668 541 2002 1794 2005 2010 2006
+ 2008
+ 953 4 8 537 1690 539 2011 536 1689 538
+ 2012
+ 954 4 8 539 2011 541 1334 538 2012 540
+ 1336
+ 955 4 8 540 1336 542 1341 538 2012 536
+ 1689
+ 956 4 8 1690 706 2011 1334 1689 1341 2012
+ 1336
+ 957 4 8 790 2010 793 2013 2014 2015 2017
+ 2016
+ 958 4 8 793 2013 537 539 2017 2016 1690
+ 2011
+ 959 4 8 1690 2011 706 1334 2017 2016 2014
+ 2015
+ 960 4 8 2010 541 2013 539 2015 1334 2016
+ 2011
+ 961 4 8 820 2018 822 2019 2020 2021 2023
+ 2022
+ 962 4 8 822 2019 824 1234 2023 2022 1352
+ 2024
+ 963 4 8 1352 2024 1258 2025 2023 2022 2020
+ 2021
+ 964 4 8 2018 606 2019 1234 2021 2025 2022
+ 2024
+ 965 4 8 1258 1296 1352 1353 2020 2026 2023
+ 2027
+ 966 4 8 1352 1353 824 1357 2023 2027 822
+ 2028
+ 967 4 8 822 2028 820 1682 2023 2027 2020
+ 2026
+ 968 4 8 1296 542 1353 1357 2026 1682 2027
+ 2028
+ 969 4 8 668 2029 2031 2030 669 2032 2034
+ 2033
+ 970 4 8 2031 2030 694 780 2034 2033 698
+ 2035
+ 971 4 8 698 2035 681 722 2034 2033 669
+ 2032
+ 972 4 8 2029 667 2030 780 2032 722 2033
+ 2035
+ 973 4 8 368 2036 2038 2037 419 2039 2041
+ 2040
+ 974 4 8 2038 2037 667 2042 2041 2040 2044
+ 2043
+ 975 4 8 2044 2043 425 2045 2041 2040 419
+ 2039
+ 976 4 8 2036 1132 2037 2042 2039 2045 2040
+ 2043
+ 977 4 8 1728 2046 2048 2047 2049 2050 2052
+ 2051
+ 978 4 8 2048 2047 1134 1135 2052 2051 2054
+ 2053
+ 979 4 8 2054 2053 385 489 2052 2051 2049
+ 2050
+ 980 4 8 2046 500 2047 1135 2050 489 2051
+ 2053
+ 981 4 8 1382 1446 1444 1445 1383 1892 2056
+ 2055
+ 982 4 8 1444 1445 668 1447 2056 2055 671
+ 2057
+ 983 4 8 671 2057 677 1896 2056 2055 1383
+ 1892
+ 984 4 8 1446 1133 1445 1447 1892 1896 2055
+ 2057
+ 985 4 8 250 246 420 2058 239 240 2060
+ 2059
+ 986 4 8 420 2058 368 367 2060 2059 478
+ 477
+ 987 4 8 478 477 238 241 2060 2059 239
+ 240
+ 988 4 8 246 150 2058 367 240 241 2059
+ 477
+ 989 4 8 2061 2062 2064 2063 2065 2066 2068
+ 2067
+ 990 4 8 2064 2063 1181 1170 2068 2067 1189
+ 2069
+ 991 4 8 1189 2069 1084 1118 2068 2067 2065
+ 2066
+ 992 4 8 2062 42 2063 1170 2066 1118 2067
+ 2069
+ 993 4 8 668 2070 2072 2071 2073 2074 2076
+ 2075
+ 994 4 8 2072 2071 789 2077 2076 2075 961
+ 2078
+ 995 4 8 961 2078 967 2079 2076 2075 2073
+ 2074
+ 996 4 8 2070 2080 2071 2077 2074 2079 2075
+ 2078
+ 997 4 8 732 736 1072 2081 733 737 2083
+ 2082
+ 998 4 8 1072 2081 1084 1583 2083 2082 1588
+ 1586
+ 999 4 8 1588 1586 250 742 2083 2082 733
+ 737
+ 1000 4 8 736 743 2081 1583 737 742 2082
+ 1586
+ 1001 4 8 1056 1099 1055 2084 1101 1100 2086
+ 2085
+ 1002 4 8 1055 2084 86 1434 2086 2085 249
+ 1451
+ 1003 4 8 249 1451 250 1106 2086 2085 1101
+ 1100
+ 1004 4 8 1099 51 2084 1434 1100 1106 2085
+ 1451
+ 1005 4 8 56 43 50 44 2087 2088 2090
+ 2089
+ 1006 4 8 50 44 51 45 2090 2089 1109
+ 1111
+ 1007 4 8 1109 1111 1110 1116 2090 2089 2087
+ 2088
+ 1008 4 8 43 42 44 45 2088 1116 2089
+ 1111
+ 1009 4 8 1832 2091 2093 2092 1842 2094 2096
+ 2095
+ 1010 4 8 2093 2092 85 230 2096 2095 236
+ 231
+ 1011 4 8 236 231 237 227 2096 2095 1842
+ 2094
+ 1012 4 8 2091 226 2092 230 2094 227 2095
+ 231
+ 1013 4 8 943 942 2098 2097 1706 2099 2101
+ 2100
+ 1014 4 8 2098 2097 199 354 2101 2100 833
+ 2102
+ 1015 4 8 833 2102 834 2103 2101 2100 1706
+ 2099
+ 1016 4 8 942 130 2097 354 2099 2103 2100
+ 2102
+ 1017 4 8 1507 2104 2106 2105 1505 2107 2109
+ 2108
+ 1018 4 8 2106 2105 943 1330 2109 2108 1198
+ 1331
+ 1019 4 8 1198 1331 635 1316 2109 2108 1505
+ 2107
+ 1020 4 8 2104 1314 2105 1330 2107 1316 2108
+ 1331
+ 1021 4 8 602 623 604 624 1230 2110 2112
+ 2111
+ 1022 4 8 604 624 199 198 2112 2111 2098
+ 2113
+ 1023 4 8 2098 2113 943 936 2112 2111 1230
+ 2110
+ 1024 4 8 623 164 624 198 2110 936 2111
+ 2113
+ 1025 4 8 552 551 2115 2114 554 553 2117
+ 2116
+ 1026 4 8 2115 2114 1305 1976 2117 2116 1975
+ 1979
+ 1027 4 8 1975 1979 556 555 2117 2116 554
+ 553
+ 1028 4 8 551 557 2114 1976 553 555 2116
+ 1979
+ 1029 4 8 1391 1390 2119 2118 1514 1510 2121
+ 2120
+ 1030 4 8 2119 2118 1305 2122 2121 2120 1309
+ 2123
+ 1031 4 8 1309 2123 635 1509 2121 2120 1514
+ 1510
+ 1032 4 8 1390 677 2118 2122 1510 1509 2120
+ 2123
+ 1033 4 8 552 551 2125 2124 2115 2114 2127
+ 2126
+ 1034 4 8 2125 2124 935 1913 2127 2126 2129
+ 2128
+ 1035 4 8 2129 2128 1305 1976 2127 2126 2115
+ 2114
+ 1036 4 8 551 557 2124 1913 2114 1976 2126
+ 2128
+ 1037 4 8 1305 1309 2122 2123 1306 1310 2131
+ 2130
+ 1038 4 8 2122 2123 677 1509 2131 2130 676
+ 2132
+ 1039 4 8 676 2132 681 1196 2131 2130 1306
+ 1310
+ 1040 4 8 1309 635 2123 1509 1310 1196 2130
+ 2132
+ 1041 4 8 677 2122 676 2131 1484 2133 1483
+ 2134
+ 1042 4 8 676 2131 681 1306 1483 2134 704
+ 1980
+ 1043 4 8 704 1980 556 1975 1483 2134 1484
+ 2133
+ 1044 4 8 2122 1305 2131 1306 2133 1975 2134
+ 1980
+ 1045 4 8 294 293 2136 2135 452 2137 2139
+ 2138
+ 1046 4 8 2136 2135 860 1152 2139 2138 1467
+ 1463
+ 1047 4 8 1467 1463 328 1461 2139 2138 452
+ 2137
+ 1048 4 8 293 295 2135 1152 2137 1461 2138
+ 1463
+ 1049 4 8 294 292 2141 2140 1460 1459 2143
+ 2142
+ 1050 4 8 2141 2140 280 279 2143 2142 276
+ 275
+ 1051 4 8 276 275 136 137 2143 2142 1460
+ 1459
+ 1052 4 8 292 149 2140 279 1459 137 2142
+ 275
+ 1053 4 8 467 2144 2146 2145 2147 2148 2150
+ 2149
+ 1054 4 8 2146 2145 510 2151 2150 2149 2153
+ 2152
+ 1055 4 8 2153 2152 856 1454 2150 2149 2147
+ 2148
+ 1056 4 8 2144 149 2145 2151 2148 1454 2149
+ 2152
+ 1057 4 8 2154 2155 2157 2156 2158 2159 2161
+ 2160
+ 1058 4 8 2157 2156 442 855 2161 2160 445
+ 2162
+ 1059 4 8 445 2162 294 1455 2161 2160 2158
+ 2159
+ 1060 4 8 2155 856 2156 855 2159 1455 2160
+ 2162
+ 1061 4 8 2154 2163 2165 2164 2166 2167 2169
+ 2168
+ 1062 4 8 2165 2164 802 801 2169 2168 873
+ 2170
+ 1063 4 8 873 2170 527 2171 2169 2168 2166
+ 2167
+ 1064 4 8 2163 454 2164 801 2167 2171 2168
+ 2170
+ 1065 4 8 350 1009 1571 2172 1006 1010 1569
+ 2173
+ 1066 4 8 1571 2172 280 1381 1569 2173 1375
+ 1378
+ 1067 4 8 1375 1378 398 1016 1569 2173 1006
+ 1010
+ 1068 4 8 1009 993 2172 1381 1010 1016 2173
+ 1378
+ 1069 4 8 294 450 2175 2174 2176 2177 2179
+ 2178
+ 1070 4 8 2175 2174 527 2171 2179 2178 1379
+ 2180
+ 1071 4 8 1379 2180 993 992 2179 2178 2176
+ 2177
+ 1072 4 8 450 454 2174 2171 2177 992 2178
+ 2180
+ 1073 4 8 2181 2182 2184 2183 2185 2186 2188
+ 2187
+ 1074 4 8 2184 2183 42 1170 2188 2187 1172
+ 1173
+ 1075 4 8 1172 1173 1180 1179 2188 2187 2185
+ 2186
+ 1076 4 8 2182 1181 2183 1170 2186 1179 2187
+ 1173
+ 1077 4 8 667 787 1169 1167 788 786 2190
+ 2189
+ 1078 4 8 1169 1167 250 1168 2190 2189 1798
+ 2191
+ 1079 4 8 1798 2191 789 784 2190 2189 788
+ 786
+ 1080 4 8 787 785 1167 1168 786 784 2189
+ 2191
+ 1081 4 8 1728 2049 1732 2192 2193 2194 2196
+ 2195
+ 1082 4 8 1732 2192 87 386 2196 2195 393
+ 387
+ 1083 4 8 393 387 394 388 2196 2195 2193
+ 2194
+ 1084 4 8 2049 385 2192 386 2194 388 2195
+ 387
+ 1085 4 8 934 2197 2199 2198 2200 2201 2203
+ 2202
+ 1086 4 8 2199 2198 2205 2204 2203 2202 2207
+ 2206
+ 1087 4 8 2207 2206 2209 2208 2203 2202 2200
+ 2201
+ 1088 4 8 2197 2210 2198 2204 2201 2208 2202
+ 2206
+ 1089 4 8 238 2211 1064 2212 1063 2213 1067
+ 2214
+ 1090 4 8 1064 2212 51 1581 1067 2214 1070
+ 2215
+ 1091 4 8 1070 2215 262 2216 1067 2214 1063
+ 2213
+ 1092 4 8 2211 743 2212 1581 2213 2216 2214
+ 2215
+ 1093 4 8 1 2217 2219 2218 1429 2220 2222
+ 2221
+ 1094 4 8 2219 2218 55 54 2222 2221 53
+ 52
+ 1095 4 8 53 52 51 50 2222 2221 1429
+ 2220
+ 1096 4 8 2217 56 2218 54 2220 50 2221
+ 52
+ 1097 4 8 1305 2119 2129 2223 2115 2224 2127
+ 2225
+ 1098 4 8 2129 2223 935 2226 2127 2225 2125
+ 2227
+ 1099 4 8 2125 2227 552 2228 2127 2225 2115
+ 2224
+ 1100 4 8 2119 1391 2223 2226 2224 2228 2225
+ 2227
+ 1101 4 8 134 832 2230 2229 2231 2232 2234
+ 2233
+ 1102 4 8 2230 2229 2236 2235 2234 2233 2238
+ 2237
+ 1103 4 8 2238 2237 1713 1704 2234 2233 2231
+ 2232
+ 1104 4 8 832 834 2229 2235 2232 1704 2233
+ 2237
+ 1105 4 8 2154 2157 2240 2239 2241 2242 2244
+ 2243
+ 1106 4 8 2240 2239 2246 2245 2244 2243 2248
+ 2247
+ 1107 4 8 2248 2247 496 1992 2244 2243 2241
+ 2242
+ 1108 4 8 2157 442 2239 2245 2242 1992 2243
+ 2247
+ 1109 4 8 317 1415 311 1812 315 2249 313
+ 2250
+ 1110 4 8 311 1812 312 1804 313 2250 314
+ 1803
+ 1111 4 8 314 1803 316 1032 313 2250 315
+ 2249
+ 1112 4 8 1415 618 1812 1804 2249 1032 2250
+ 1803
+ 1113 4 8 593 2251 770 2252 2253 2254 2256
+ 2255
+ 1114 4 8 770 2252 618 888 2256 2255 1034
+ 2257
+ 1115 4 8 1034 2257 430 503 2256 2255 2253
+ 2254
+ 1116 4 8 2251 296 2252 888 2254 503 2255
+ 2257
+ 1117 4 8 2258 2259 2261 2260 2262 2263 2265
+ 2264
+ 1118 4 8 2261 2260 2267 2266 2265 2264 2269
+ 2268
+ 1119 4 8 2269 2268 430 509 2265 2264 2262
+ 2263
+ 1120 4 8 2259 510 2260 2266 2263 509 2264
+ 2268
+ 1121 4 8 296 888 2271 2270 514 887 2273
+ 2272
+ 1122 4 8 2271 2270 23 1417 2273 2272 758
+ 1813
+ 1123 4 8 758 1813 176 886 2273 2272 514
+ 887
+ 1124 4 8 888 618 2270 1417 887 886 2272
+ 1813
+ 1125 4 8 618 913 616 1542 611 910 614
+ 2274
+ 1126 4 8 616 1542 342 692 614 2274 610
+ 2275
+ 1127 4 8 610 2275 607 907 614 2274 611
+ 910
+ 1128 4 8 913 693 1542 692 910 907 2274
+ 2275
+ 1129 4 8 114 2276 1404 2277 2278 2279 2281
+ 2280
+ 1130 4 8 1404 2277 1406 1635 2281 2280 1642
+ 1636
+ 1131 4 8 1642 1636 580 1632 2281 2280 2278
+ 2279
+ 1132 4 8 2276 1631 2277 1635 2279 1632 2280
+ 1636
+ 1133 4 8 135 479 440 2282 507 2283 2285
+ 2284
+ 1134 4 8 440 2282 149 147 2285 2284 2151
+ 2286
+ 1135 4 8 2151 2286 510 2287 2285 2284 507
+ 2283
+ 1136 4 8 479 148 2282 147 2283 2287 2284
+ 2286
+ 1137 4 8 2288 2289 2291 2290 2292 2293 2295
+ 2294
+ 1138 4 8 2291 2290 114 105 2295 2294 2297
+ 2296
+ 1139 4 8 2297 2296 148 146 2295 2294 2292
+ 2293
+ 1140 4 8 2289 101 2290 105 2293 146 2294
+ 2296
+ 1141 4 8 295 290 884 1149 283 284 882
+ 2298
+ 1142 4 8 884 1149 316 1148 882 2298 307
+ 2299
+ 1143 4 8 307 2299 41 285 882 2298 283
+ 284
+ 1144 4 8 290 149 1149 1148 284 285 2298
+ 2299
+ 1145 4 8 1 5 2219 2300 2 6 2302
+ 2301
+ 1146 4 8 2219 2300 55 728 2302 2301 724
+ 723
+ 1147 4 8 724 723 15 13 2302 2301 2
+ 6
+ 1148 4 8 5 14 2300 728 6 13 2301
+ 723
+ 1149 4 8 15 2303 2305 2304 724 2306 2308
+ 2307
+ 1150 4 8 2305 2304 42 43 2308 2307 46
+ 47
+ 1151 4 8 46 47 55 54 2308 2307 724
+ 2306
+ 1152 4 8 2303 56 2304 43 2306 54 2307
+ 47
+ 1153 4 8 214 2309 2311 2310 2312 2313 2315
+ 2314
+ 1154 4 8 2311 2310 1056 1055 2315 2314 1054
+ 1053
+ 1155 4 8 1054 1053 72 73 2315 2314 2312
+ 2313
+ 1156 4 8 2309 86 2310 1055 2313 73 2314
+ 1053
+ 1157 4 8 72 1031 2317 2316 2312 2318 2320
+ 2319
+ 1158 4 8 2317 2316 209 657 2320 2319 656
+ 655
+ 1159 4 8 656 655 214 654 2320 2319 2312
+ 2318
+ 1160 4 8 1031 176 2316 657 2318 654 2319
+ 655
+ 1161 4 8 27 2321 2323 2322 2324 2325 2327
+ 2326
+ 1162 4 8 2323 2322 972 973 2327 2326 976
+ 977
+ 1163 4 8 976 977 954 952 2327 2326 2324
+ 2325
+ 1164 4 8 2321 568 2322 973 2325 952 2326
+ 977
+ 1165 4 8 1 2217 2 2328 2219 2218 2302
+ 2329
+ 1166 4 8 2 2328 15 2303 2302 2329 724
+ 2306
+ 1167 4 8 724 2306 55 54 2302 2329 2219
+ 2218
+ 1168 4 8 2217 56 2328 2303 2218 54 2329
+ 2306
+ 1169 4 8 56 2303 43 2304 2330 2331 2333
+ 2332
+ 1170 4 8 43 2304 42 2305 2333 2332 1172
+ 2334
+ 1171 4 8 1172 2334 1180 2335 2333 2332 2330
+ 2331
+ 1172 4 8 2303 15 2304 2305 2331 2335 2332
+ 2334
+ 1173 4 8 1180 1178 1172 1175 2330 2336 2333
+ 2337
+ 1174 4 8 1172 1175 42 1116 2333 2337 43
+ 2088
+ 1175 4 8 43 2088 56 2087 2333 2337 2330
+ 2336
+ 1176 4 8 1178 1110 1175 1116 2336 2087 2337
+ 2088
+ 1177 4 8 271 1779 2339 2338 265 1780 2341
+ 2340
+ 1178 4 8 2339 2338 743 2342 2341 2340 2216
+ 2343
+ 1179 4 8 2216 2343 262 1425 2341 2340 265
+ 1780
+ 1180 4 8 1779 55 2338 2342 1780 1425 2340
+ 2343
+ 1181 4 8 262 2344 263 2345 1970 2346 2348
+ 2347
+ 1182 4 8 263 2345 57 58 2348 2347 61
+ 62
+ 1183 4 8 61 62 70 69 2348 2347 1970
+ 2346
+ 1184 4 8 2344 71 2345 58 2346 69 2347
+ 62
+ 1185 4 8 845 2349 837 2350 2351 2352 2354
+ 2353
+ 1186 4 8 837 2350 15 36 2354 2353 724
+ 727
+ 1187 4 8 724 727 55 730 2354 2353 2351
+ 2352
+ 1188 4 8 2349 37 2350 36 2352 730 2353
+ 727
+ 1189 4 8 569 1280 1556 1558 564 2355 2357
+ 2356
+ 1190 4 8 1556 1558 223 666 2357 2356 222
+ 2358
+ 1191 4 8 222 2358 164 721 2357 2356 564
+ 2355
+ 1192 4 8 1280 667 1558 666 2355 721 2356
+ 2358
+ 1193 4 8 681 705 1329 1701 1285 1284 2360
+ 2359
+ 1194 4 8 1329 1701 1227 1246 2360 2359 1219
+ 1248
+ 1195 4 8 1219 1248 569 1252 2360 2359 1285
+ 1284
+ 1196 4 8 705 706 1701 1246 1284 1252 2359
+ 1248
+ 1197 4 8 581 582 2362 2361 2363 2364 2366
+ 2365
+ 1198 4 8 2362 2361 694 697 2366 2365 695
+ 696
+ 1199 4 8 695 696 706 702 2366 2365 2363
+ 2364
+ 1200 4 8 582 556 2361 697 2364 702 2365
+ 696
+ 1201 4 8 694 780 779 783 695 2367 2369
+ 2368
+ 1202 4 8 779 783 785 787 2369 2368 1552
+ 1553
+ 1203 4 8 1552 1553 706 1278 2369 2368 695
+ 2367
+ 1204 4 8 780 667 783 787 2367 1278 2368
+ 1553
+ 1205 4 8 569 564 1219 1220 1285 2370 2360
+ 2371
+ 1206 4 8 1219 1220 1227 1226 2360 2371 1329
+ 1324
+ 1207 4 8 1329 1324 681 719 2360 2371 1285
+ 2370
+ 1208 4 8 564 164 1220 1226 2370 719 2371
+ 1324
+ 1209 4 8 681 698 705 699 722 2035 1279
+ 2372
+ 1210 4 8 705 699 706 695 1279 2372 1278
+ 2367
+ 1211 4 8 1278 2367 667 780 1279 2372 722
+ 2035
+ 1212 4 8 698 694 699 695 2035 780 2372
+ 2367
+ 1213 4 8 668 669 2031 2034 1480 1479 2374
+ 2373
+ 1214 4 8 2031 2034 694 698 2374 2373 697
+ 701
+ 1215 4 8 697 701 556 704 2374 2373 1480
+ 1479
+ 1216 4 8 669 681 2034 698 1479 704 2373
+ 701
+ 1217 4 8 590 1489 589 1492 707 1718 708
+ 2375
+ 1218 4 8 589 1492 556 1494 708 2375 704
+ 1982
+ 1219 4 8 704 1982 681 1313 708 2375 707
+ 1718
+ 1220 4 8 1489 1314 1492 1494 1718 1313 2375
+ 1982
+ 1221 4 8 590 592 1489 1490 1322 1321 2377
+ 2376
+ 1222 4 8 1489 1490 1314 1495 2377 2376 1906
+ 1905
+ 1223 4 8 1906 1905 824 823 2377 2376 1322
+ 1321
+ 1224 4 8 592 557 1490 1495 1321 823 2376
+ 1905
+ 1225 4 8 901 1264 1340 1695 1225 1265 1698
+ 2378
+ 1226 4 8 1340 1695 542 1304 1698 2378 1360
+ 1363
+ 1227 4 8 1360 1363 1227 1266 1698 2378 1225
+ 1265
+ 1228 4 8 1264 602 1695 1304 1265 1266 2378
+ 1363
+ 1229 4 8 706 2363 709 2379 1684 2380 2382
+ 2381
+ 1230 4 8 709 2379 590 584 2382 2381 1318
+ 2383
+ 1231 4 8 1318 2383 820 1984 2382 2381 1684
+ 2380
+ 1232 4 8 2363 581 2379 584 2380 1984 2381
+ 2383
+ 1233 4 8 943 1237 2098 2384 1230 1231 2112
+ 2385
+ 1234 4 8 2098 2384 199 605 2112 2385 604
+ 603
+ 1235 4 8 604 603 602 601 2112 2385 1230
+ 1231
+ 1236 4 8 1237 606 2384 605 1231 601 2385
+ 603
+ 1237 4 8 581 2363 584 2379 582 2364 583
+ 2386
+ 1238 4 8 584 2379 590 709 583 2386 589
+ 712
+ 1239 4 8 589 712 556 702 583 2386 582
+ 2364
+ 1240 4 8 2363 706 2379 709 2364 702 2386
+ 712
+ 1241 4 8 668 2072 2031 2387 2029 2388 2030
+ 2389
+ 1242 4 8 2031 2387 694 777 2030 2389 780
+ 781
+ 1243 4 8 780 781 667 788 2030 2389 2029
+ 2388
+ 1244 4 8 2072 789 2387 777 2388 788 2389
+ 781
+ 1245 4 8 2390 2391 2393 2392 2394 2395 2397
+ 2396
+ 1246 4 8 2393 2392 668 2070 2397 2396 2073
+ 2074
+ 1247 4 8 2073 2074 967 2079 2397 2396 2394
+ 2395
+ 1248 4 8 2391 2080 2392 2070 2395 2079 2396
+ 2074
+ 1249 4 8 552 554 2115 2117 2398 2399 2401
+ 2400
+ 1250 4 8 2115 2117 1305 1975 2401 2400 2122
+ 2133
+ 1251 4 8 2122 2133 677 1484 2401 2400 2398
+ 2399
+ 1252 4 8 554 556 2117 1975 2399 1484 2400
+ 2133
+ 1253 4 8 552 2398 2403 2402 554 2399 2405
+ 2404
+ 1254 4 8 2403 2402 668 671 2405 2404 1480
+ 1482
+ 1255 4 8 1480 1482 556 1484 2405 2404 554
+ 2399
+ 1256 4 8 2398 677 2402 671 2399 1484 2404
+ 1482
+ 1257 4 8 543 547 2407 2406 2408 2409 2411
+ 2410
+ 1258 4 8 2407 2406 668 1480 2411 2410 2031
+ 2374
+ 1259 4 8 2031 2374 694 697 2411 2410 2408
+ 2409
+ 1260 4 8 547 556 2406 1480 2409 697 2410
+ 2374
+ 1261 4 8 341 340 768 772 2412 2413 2415
+ 2414
+ 1262 4 8 768 772 593 771 2415 2414 2417
+ 2416
+ 1263 4 8 2417 2416 2267 2418 2415 2414 2412
+ 2413
+ 1264 4 8 340 342 772 771 2413 2418 2414
+ 2416
+ 1265 4 8 593 1254 1043 1253 596 2419 2421
+ 2420
+ 1266 4 8 1043 1253 188 1257 2421 2420 619
+ 1299
+ 1267 4 8 619 1299 602 1300 2421 2420 596
+ 2419
+ 1268 4 8 1254 1258 1253 1257 2419 1300 2420
+ 1299
+ 1269 4 8 2267 2422 2424 2423 2266 2425 2427
+ 2426
+ 1270 4 8 2424 2423 606 879 2427 2426 2429
+ 2428
+ 1271 4 8 2429 2428 510 2430 2427 2426 2266
+ 2425
+ 1272 4 8 2422 468 2423 879 2425 2430 2426
+ 2428
+ 1273 4 8 149 137 1454 1453 2144 2431 2148
+ 2432
+ 1274 4 8 1454 1453 856 1452 2148 2432 2147
+ 2433
+ 1275 4 8 2147 2433 467 2434 2148 2432 2144
+ 2431
+ 1276 4 8 137 136 1453 1452 2431 2434 2432
+ 2433
+ 1277 4 8 2210 2435 2437 2436 2438 2439 2441
+ 2440
+ 1278 4 8 2437 2436 1391 2442 2441 2440 2444
+ 2443
+ 1279 4 8 2444 2443 1508 2445 2441 2440 2438
+ 2439
+ 1280 4 8 2435 1897 2436 2442 2439 2445 2440
+ 2443
+ 1281 4 8 164 714 936 2446 719 713 1323
+ 2447
+ 1282 4 8 936 2446 943 1192 1323 2447 1199
+ 1193
+ 1283 4 8 1199 1193 681 680 1323 2447 719
+ 713
+ 1284 4 8 714 648 2446 1192 713 680 2447
+ 1193
+ 1285 4 8 648 680 679 678 636 1191 2449
+ 2448
+ 1286 4 8 679 678 677 676 2449 2448 1509
+ 2132
+ 1287 4 8 1509 2132 635 1196 2449 2448 636
+ 1191
+ 1288 4 8 680 681 678 676 1191 1196 2448
+ 2132
+ 1289 4 8 1133 2450 1243 2451 2452 2453 2455
+ 2454
+ 1290 4 8 1243 2451 237 1203 2455 2454 664
+ 2456
+ 1291 4 8 664 2456 667 715 2455 2454 2452
+ 2453
+ 1292 4 8 2450 648 2451 1203 2453 715 2454
+ 2456
+ 1293 4 8 667 664 721 2457 715 2456 718
+ 2458
+ 1294 4 8 721 2457 164 234 718 2458 714
+ 2459
+ 1295 4 8 714 2459 648 1203 718 2458 715
+ 2456
+ 1296 4 8 664 237 2457 234 2456 1203 2458
+ 2459
+ 1297 4 8 648 2450 679 2460 672 2461 675
+ 2462
+ 1298 4 8 679 2460 677 1896 675 2462 671
+ 2057
+ 1299 4 8 671 2057 668 1447 675 2462 672
+ 2461
+ 1300 4 8 2450 1133 2460 1896 2461 1447 2462
+ 2057
+ 1301 4 8 226 227 643 1200 229 228 2464
+ 2463
+ 1302 4 8 643 1200 648 1203 2464 2463 714
+ 2459
+ 1303 4 8 714 2459 164 234 2464 2463 229
+ 228
+ 1304 4 8 227 237 1200 1203 228 234 2463
+ 2459
+ 1305 4 8 647 1210 645 2465 639 1213 642
+ 2466
+ 1306 4 8 645 2465 226 2467 642 2466 638
+ 2468
+ 1307 4 8 638 2468 635 1209 642 2466 639
+ 1213
+ 1308 4 8 1210 1206 2465 2467 1213 1209 2466
+ 2468
+ 1309 4 8 647 639 646 640 2469 2470 2472
+ 2471
+ 1310 4 8 646 640 648 636 2472 2471 679
+ 2449
+ 1311 4 8 679 2449 677 1509 2472 2471 2469
+ 2470
+ 1312 4 8 639 635 640 636 2470 1509 2471
+ 2449
+ 1313 4 8 647 1216 1245 2473 1239 2474 1242
+ 2475
+ 1314 4 8 1245 2473 1133 1121 1242 2475 1128
+ 1122
+ 1315 4 8 1128 1122 150 1123 1242 2475 1239
+ 2474
+ 1316 4 8 1216 1120 2473 1121 2474 1123 2475
+ 1122
+ 1317 4 8 467 2476 2478 2477 465 2479 2481
+ 2480
+ 1318 4 8 2478 2477 1885 2482 2481 2480 2484
+ 2483
+ 1319 4 8 2484 2483 463 2485 2481 2480 465
+ 2479
+ 1320 4 8 2476 148 2477 2482 2479 2485 2480
+ 2483
+ 1321 4 8 148 140 147 141 2476 2486 2488
+ 2487
+ 1322 4 8 147 141 149 137 2488 2487 2144
+ 2431
+ 1323 4 8 2144 2431 467 2434 2488 2487 2476
+ 2486
+ 1324 4 8 140 136 141 137 2486 2434 2487
+ 2431
+ 1325 4 8 820 1685 1372 1985 1366 2489 1369
+ 2490
+ 1326 4 8 1372 1985 1143 1991 1369 2490 1145
+ 2491
+ 1327 4 8 1145 2491 496 1997 1369 2490 1366
+ 2489
+ 1328 4 8 1685 537 1985 1991 2489 1997 2490
+ 2491
+ 1329 4 8 2492 2493 2495 2494 2496 2497 2499
+ 2498
+ 1330 4 8 2495 2494 542 682 2499 2498 529
+ 767
+ 1331 4 8 529 767 528 764 2499 2498 2496
+ 2497
+ 1332 4 8 2493 342 2494 682 2497 764 2498
+ 767
+ 1333 4 8 2500 2501 2503 2502 2504 2505 2507
+ 2506
+ 1334 4 8 2503 2502 1508 2508 2507 2506 1496
+ 2509
+ 1335 4 8 1496 2509 935 2510 2507 2506 2504
+ 2505
+ 1336 4 8 2501 2236 2502 2508 2505 2510 2506
+ 2509
+ 1337 4 8 2258 2511 2513 2512 2259 2514 2516
+ 2515
+ 1338 4 8 2513 2512 856 1454 2516 2515 2153
+ 2152
+ 1339 4 8 2153 2152 510 2151 2516 2515 2259
+ 2514
+ 1340 4 8 2511 149 2512 1454 2514 2151 2515
+ 2152
+ 1341 4 8 820 2517 2519 2518 1685 2520 2522
+ 2521
+ 1342 4 8 2519 2518 2492 2523 2522 2521 2525
+ 2524
+ 1343 4 8 2525 2524 537 1018 2522 2521 1685
+ 2520
+ 1344 4 8 2517 442 2518 2523 2520 1018 2521
+ 2524
+ 1345 4 8 341 1038 339 2526 332 2527 335
+ 2528
+ 1346 4 8 339 2526 337 1745 335 2528 331
+ 1740
+ 1347 4 8 331 1740 328 1465 335 2528 332
+ 2527
+ 1348 4 8 1038 316 2526 1745 2527 1465 2528
+ 1740
+ 1349 4 8 1342 1346 1345 1349 2529 2530 2532
+ 2531
+ 1350 4 8 1345 1349 528 532 2532 2531 531
+ 535
+ 1351 4 8 531 535 537 539 2532 2531 2529
+ 2530
+ 1352 4 8 1346 541 1349 532 2530 539 2531
+ 535
+ 1353 4 8 2154 2166 2158 2533 2163 2167 2535
+ 2534
+ 1354 4 8 2158 2533 294 2175 2535 2534 450
+ 2174
+ 1355 4 8 450 2174 454 2171 2535 2534 2163
+ 2167
+ 1356 4 8 2166 527 2533 2175 2167 2171 2534
+ 2174
+ 1357 4 8 846 1622 2537 2536 1629 1625 2539
+ 2538
+ 1358 4 8 2537 2536 294 293 2539 2538 2541
+ 2540
+ 1359 4 8 2541 2540 1627 1621 2539 2538 1629
+ 1625
+ 1360 4 8 1622 295 2536 293 1625 1621 2538
+ 2540
+ 1361 4 8 984 2542 987 2543 1929 2544 2546
+ 2545
+ 1362 4 8 987 2543 993 1015 2546 2545 1468
+ 2547
+ 1363 4 8 1468 2547 1478 2548 2546 2545 1929
+ 2544
+ 1364 4 8 2542 870 2543 1015 2544 2548 2545
+ 2547
+ 1365 4 8 1643 2549 2551 2550 2552 2553 2555
+ 2554
+ 1366 4 8 2551 2550 1342 1343 2555 2554 1791
+ 1793
+ 1367 4 8 1791 1793 981 1789 2555 2554 2552
+ 2553
+ 1368 4 8 2549 607 2550 1343 2553 1789 2554
+ 1793
+ 1369 4 8 846 1471 1477 1472 1945 2556 1944
+ 2557
+ 1370 4 8 1477 1472 1478 1468 1944 2557 1929
+ 2546
+ 1371 4 8 1929 2546 984 987 1944 2557 1945
+ 2556
+ 1372 4 8 1471 993 1472 1468 2556 987 2557
+ 2546
+ 1373 4 8 635 639 1214 1215 1509 2470 1512
+ 2558
+ 1374 4 8 1214 1215 1120 1216 1512 2558 1394
+ 2559
+ 1375 4 8 1394 2559 677 2469 1512 2558 1509
+ 2470
+ 1376 4 8 639 647 1215 1216 2470 2469 2558
+ 2559
+ 1377 4 8 1391 1390 2228 2560 2119 2118 2224
+ 2561
+ 1378 4 8 2228 2560 552 2398 2224 2561 2115
+ 2401
+ 1379 4 8 2115 2401 1305 2122 2224 2561 2119
+ 2118
+ 1380 4 8 1390 677 2560 2398 2118 2122 2561
+ 2401
+ 1381 4 8 922 2562 923 2563 2564 2565 2567
+ 2566
+ 1382 4 8 923 2563 935 2125 2567 2566 2226
+ 2227
+ 1383 4 8 2226 2227 1391 2228 2567 2566 2564
+ 2565
+ 1384 4 8 2562 552 2563 2125 2565 2228 2566
+ 2227
+ 1385 4 8 922 923 2562 2563 1959 2568 2570
+ 2569
+ 1386 4 8 2562 2563 552 2125 2570 2569 551
+ 2124
+ 1387 4 8 551 2124 557 1913 2570 2569 1959
+ 2568
+ 1388 4 8 923 935 2563 2125 2568 1913 2569
+ 2124
+ 1389 4 8 922 926 2572 2571 923 927 2574
+ 2573
+ 1390 4 8 2572 2571 2210 2197 2574 2573 2576
+ 2575
+ 1391 4 8 2576 2575 935 933 2574 2573 923
+ 927
+ 1392 4 8 926 934 2571 2197 927 933 2573
+ 2575
+ 1393 4 8 935 2129 1498 2577 2226 2223 2579
+ 2578
+ 1394 4 8 1498 2577 635 1309 2579 2578 1514
+ 2121
+ 1395 4 8 1514 2121 1391 2119 2579 2578 2226
+ 2223
+ 1396 4 8 2129 1305 2577 1309 2223 2119 2578
+ 2121
+ 1397 4 8 1507 2580 2582 2581 1499 2583 2585
+ 2584
+ 1398 4 8 2582 2581 1713 2238 2585 2584 2587
+ 2586
+ 1399 4 8 2587 2586 935 2510 2585 2584 1499
+ 2583
+ 1400 4 8 2580 2236 2581 2238 2583 2510 2584
+ 2586
+ 1401 4 8 1508 2508 1506 2588 1496 2509 1500
+ 2589
+ 1402 4 8 1506 2588 1507 2580 1500 2589 1499
+ 2583
+ 1403 4 8 1499 2583 935 2510 1500 2589 1496
+ 2509
+ 1404 4 8 2508 2236 2588 2580 2509 2510 2589
+ 2583
+ 1405 4 8 1314 2104 1330 2105 2590 2591 2593
+ 2592
+ 1406 4 8 1330 2105 943 2106 2593 2592 1712
+ 2594
+ 1407 4 8 1712 2594 1713 2582 2593 2592 2590
+ 2591
+ 1408 4 8 2104 1507 2105 2106 2591 2582 2592
+ 2594
+ 1409 4 8 935 2129 1913 2128 1912 2595 1911
+ 2596
+ 1410 4 8 1913 2128 557 1976 1911 2596 1495
+ 1977
+ 1411 4 8 1495 1977 1314 1308 1911 2596 1912
+ 2595
+ 1412 4 8 2129 1305 2128 1976 2595 1308 2596
+ 1977
+ 1413 4 8 2597 2598 2600 2599 2601 2602 2604
+ 2603
+ 1414 4 8 2600 2599 1406 1641 2604 2603 2606
+ 2605
+ 1415 4 8 2606 2605 2608 2607 2604 2603 2601
+ 2602
+ 1416 4 8 2598 1206 2599 1641 2602 2607 2603
+ 2605
+ 1417 4 8 1914 2609 2611 2610 1918 2612 2614
+ 2613
+ 1418 4 8 2611 2610 1508 2508 2614 2613 2616
+ 2615
+ 1419 4 8 2616 2615 1927 2617 2614 2613 1918
+ 2612
+ 1420 4 8 2609 2236 2610 2508 2612 2617 2613
+ 2615
+ 1421 4 8 2618 2619 2621 2620 2622 2623 2625
+ 2624
+ 1422 4 8 2621 2620 1923 2626 2625 2624 1917
+ 2627
+ 1423 4 8 1917 2627 1914 2628 2625 2624 2622
+ 2623
+ 1424 4 8 2619 2608 2620 2626 2623 2628 2624
+ 2627
+ 1425 4 8 935 933 1496 2629 2504 2630 2507
+ 2631
+ 1426 4 8 1496 2629 1508 2632 2507 2631 2503
+ 2633
+ 1427 4 8 2503 2633 2500 2634 2507 2631 2504
+ 2630
+ 1428 4 8 933 934 2629 2632 2630 2634 2631
+ 2633
+ 1429 4 8 1897 2445 2636 2635 2637 2638 2640
+ 2639
+ 1430 4 8 2636 2635 1914 2611 2640 2639 2642
+ 2641
+ 1431 4 8 2642 2641 1523 1524 2640 2639 2637
+ 2638
+ 1432 4 8 2445 1508 2635 2611 2638 1524 2639
+ 2641
+ 1433 4 8 606 2025 2424 2643 594 2644 2646
+ 2645
+ 1434 4 8 2424 2643 2267 2647 2646 2645 2417
+ 2648
+ 1435 4 8 2417 2648 593 1254 2646 2645 594
+ 2644
+ 1436 4 8 2025 1258 2643 2647 2644 1254 2645
+ 2648
+ 1437 4 8 2492 2523 2650 2649 2651 2652 2654
+ 2653
+ 1438 4 8 2650 2649 468 2655 2654 2653 2657
+ 2656
+ 1439 4 8 2657 2656 847 848 2654 2653 2651
+ 2652
+ 1440 4 8 2523 442 2649 2655 2652 848 2653
+ 2656
+ 1441 4 8 856 2658 855 2659 2660 2661 2663
+ 2662
+ 1442 4 8 855 2659 442 2245 2663 2662 2655
+ 2664
+ 1443 4 8 2655 2664 468 2665 2663 2662 2660
+ 2661
+ 1444 4 8 2658 2246 2659 2245 2661 2665 2662
+ 2664
+ 1445 4 8 972 2666 1787 2667 973 2668 1784
+ 2669
+ 1446 4 8 1787 2667 607 1544 1784 2669 905
+ 1547
+ 1447 4 8 905 1547 568 1549 1784 2669 973
+ 2668
+ 1448 4 8 2666 213 2667 1544 2668 1549 2669
+ 1547
+ 1449 4 8 1342 1343 2671 2670 1345 1344 2673
+ 2672
+ 1450 4 8 2671 2670 337 608 2673 2672 1604
+ 1781
+ 1451 4 8 1604 1781 528 1350 2673 2672 1345
+ 1344
+ 1452 4 8 1343 607 2670 608 1344 1350 2672
+ 1781
+ 1453 4 8 528 532 1350 1351 762 2674 2676
+ 2675
+ 1454 4 8 1350 1351 607 915 2676 2675 907
+ 914
+ 1455 4 8 907 914 693 893 2676 2675 762
+ 2674
+ 1456 4 8 532 541 1351 915 2674 893 2675
+ 914
+ 1457 4 8 537 536 531 530 2525 2677 2679
+ 2678
+ 1458 4 8 531 530 528 529 2679 2678 2496
+ 2499
+ 1459 4 8 2496 2499 2492 2495 2679 2678 2525
+ 2677
+ 1460 4 8 536 542 530 529 2677 2495 2678
+ 2499
+ 1461 4 8 528 531 1612 2680 2681 2682 2684
+ 2683
+ 1462 4 8 1612 2680 442 1018 2684 2683 443
+ 1017
+ 1463 4 8 443 1017 454 800 2684 2683 2681
+ 2682
+ 1464 4 8 531 537 2680 1018 2682 800 2683
+ 1017
+ 1465 4 8 528 529 532 533 762 765 2674
+ 2685
+ 1466 4 8 532 533 541 540 2674 2685 893
+ 1669
+ 1467 4 8 893 1669 693 685 2674 2685 762
+ 765
+ 1468 4 8 529 542 533 540 765 685 2685
+ 1669
+ 1469 4 8 972 2323 2687 2686 2688 2689 2691
+ 2690
+ 1470 4 8 2687 2686 56 2692 2691 2690 2303
+ 2693
+ 1471 4 8 2303 2693 15 26 2691 2690 2688
+ 2689
+ 1472 4 8 2323 27 2686 2692 2689 26 2690
+ 2693
+ 1473 4 8 2694 2695 2697 2696 2698 2699 2701
+ 2700
+ 1474 4 8 2697 2696 2703 2702 2701 2700 2705
+ 2704
+ 1475 4 8 2705 2704 1654 2706 2701 2700 2698
+ 2699
+ 1476 4 8 2695 790 2696 2702 2699 2706 2700
+ 2704
+ 1477 4 8 790 793 2708 2707 794 797 2710
+ 2709
+ 1478 4 8 2708 2707 1342 2529 2710 2709 2712
+ 2711
+ 1479 4 8 2712 2711 454 800 2710 2709 794
+ 797
+ 1480 4 8 793 537 2707 2529 797 800 2709
+ 2711
+ 1481 4 8 981 980 1789 1785 1794 2713 1795
+ 2714
+ 1482 4 8 1789 1785 607 905 1795 2714 915
+ 917
+ 1483 4 8 915 917 541 896 1795 2714 1794
+ 2713
+ 1484 4 8 980 568 1785 905 2713 896 2714
+ 917
+ 1485 4 8 901 895 903 899 1534 1667 1537
+ 2715
+ 1486 4 8 903 899 568 896 1537 2715 950
+ 2716
+ 1487 4 8 950 2716 955 1668 1537 2715 1534
+ 1667
+ 1488 4 8 895 541 899 896 1667 1668 2715
+ 2716
+ 1489 4 8 706 695 2363 2366 1657 2717 2719
+ 2718
+ 1490 4 8 2363 2366 581 2362 2719 2718 2721
+ 2720
+ 1491 4 8 2721 2720 1654 1999 2719 2718 1657
+ 2717
+ 1492 4 8 695 694 2366 2362 2717 1999 2718
+ 2720
+ 1493 4 8 280 320 376 374 1571 1570 1597
+ 2722
+ 1494 4 8 376 374 100 91 1597 2722 349
+ 1573
+ 1495 4 8 349 1573 350 1572 1597 2722 1571
+ 1570
+ 1496 4 8 320 87 374 91 1570 1572 2722
+ 1573
+ 1497 4 8 51 1581 53 2723 1070 2215 2725
+ 2724
+ 1498 4 8 53 2723 55 2342 2725 2724 1425
+ 2343
+ 1499 4 8 1425 2343 262 2216 2725 2724 1070
+ 2215
+ 1500 4 8 1581 743 2723 2342 2215 2216 2724
+ 2343
+ 1501 4 8 57 2726 2728 2727 263 2729 2731
+ 2730
+ 1502 4 8 2728 2727 429 741 2731 2730 2733
+ 2732
+ 1503 4 8 2733 2732 262 2216 2731 2730 263
+ 2729
+ 1504 4 8 2726 743 2727 741 2729 2216 2730
+ 2732
+ 1505 4 8 294 292 2136 2734 293 291 2135
+ 2735
+ 1506 4 8 2136 2734 860 1154 2135 2735 1152
+ 1153
+ 1507 4 8 1152 1153 295 290 2135 2735 293
+ 291
+ 1508 4 8 292 149 2734 1154 291 290 2735
+ 1153
+ 1509 4 8 342 2493 1611 2736 764 2497 1610
+ 2737
+ 1510 4 8 1611 2736 442 2523 1610 2737 1612
+ 2738
+ 1511 4 8 1612 2738 528 2496 1610 2737 764
+ 2497
+ 1512 4 8 2493 2492 2736 2523 2497 2496 2737
+ 2738
+ 1513 4 8 847 851 2740 2739 848 852 2742
+ 2741
+ 1514 4 8 2740 2739 328 1467 2742 2741 446
+ 2743
+ 1515 4 8 446 2743 442 859 2742 2741 848
+ 852
+ 1516 4 8 851 860 2739 1467 852 859 2741
+ 2743
+ 1517 4 8 467 466 465 464 2744 2745 2747
+ 2746
+ 1518 4 8 465 464 463 462 2747 2746 2749
+ 2748
+ 1519 4 8 2749 2748 2246 2665 2747 2746 2744
+ 2745
+ 1520 4 8 466 468 464 462 2745 2665 2746
+ 2748
+ 1521 4 8 856 2660 2153 2750 2147 2751 2150
+ 2752
+ 1522 4 8 2153 2750 510 2430 2150 2752 2146
+ 2753
+ 1523 4 8 2146 2753 467 466 2150 2752 2147
+ 2751
+ 1524 4 8 2660 468 2750 2430 2751 466 2752
+ 2753
+ 1525 4 8 510 2287 2146 2754 2755 2756 2758
+ 2757
+ 1526 4 8 2146 2754 467 2476 2758 2757 458
+ 2759
+ 1527 4 8 458 2759 134 179 2758 2757 2755
+ 2756
+ 1528 4 8 2287 148 2754 2476 2756 179 2757
+ 2759
+ 1529 4 8 463 2760 877 2761 457 2762 874
+ 2763
+ 1530 4 8 877 2761 606 1710 874 2763 826
+ 2764
+ 1531 4 8 826 2764 134 2231 874 2763 457
+ 2762
+ 1532 4 8 2760 1713 2761 1710 2762 2231 2763
+ 2764
+ 1533 4 8 1927 1926 2766 2765 2616 2767 2769
+ 2768
+ 1534 4 8 2766 2765 2500 2770 2769 2768 2503
+ 2771
+ 1535 4 8 2503 2771 1508 2772 2769 2768 2616
+ 2767
+ 1536 4 8 1926 1928 2765 2770 2767 2772 2768
+ 2771
+ 1537 4 8 496 2241 1727 2773 517 2774 2776
+ 2775
+ 1538 4 8 1727 2773 802 2165 2776 2775 873
+ 2169
+ 1539 4 8 873 2169 527 2166 2776 2775 517
+ 2774
+ 1540 4 8 2241 2154 2773 2165 2774 2166 2775
+ 2169
+ 1541 4 8 394 498 1882 1883 499 497 2778
+ 2777
+ 1542 4 8 1882 1883 1885 1884 2778 2777 1891
+ 1890
+ 1543 4 8 1891 1890 500 495 2778 2777 499
+ 497
+ 1544 4 8 498 496 1883 1884 497 495 2777
+ 1890
+ 1545 4 8 342 692 764 763 610 2275 1783
+ 2779
+ 1546 4 8 764 763 528 762 1783 2779 1350
+ 2676
+ 1547 4 8 1350 2676 607 907 1783 2779 610
+ 2275
+ 1548 4 8 692 693 763 762 2275 907 2779
+ 2676
+ 1549 4 8 316 1148 314 2780 307 2299 310
+ 2781
+ 1550 4 8 314 2780 312 438 310 2781 306
+ 2782
+ 1551 4 8 306 2782 41 285 310 2781 307
+ 2299
+ 1552 4 8 1148 149 2780 438 2299 285 2781
+ 2782
+ 1553 4 8 341 1038 775 1033 339 2526 2784
+ 2783
+ 1554 4 8 775 1033 618 1032 2784 2783 617
+ 2785
+ 1555 4 8 617 2785 337 1745 2784 2783 339
+ 2526
+ 1556 4 8 1038 316 1033 1032 2526 1745 2783
+ 2785
+ 1557 4 8 454 2681 2787 2786 443 2684 2789
+ 2788
+ 1558 4 8 2787 2786 337 1604 2789 2788 1606
+ 1607
+ 1559 4 8 1606 1607 442 1612 2789 2788 443
+ 2684
+ 1560 4 8 2681 528 2786 1604 2684 1612 2788
+ 1607
+ 1561 4 8 442 446 1606 2790 443 447 2789
+ 2791
+ 1562 4 8 1606 2790 337 331 2789 2791 2787
+ 2792
+ 1563 4 8 2787 2792 454 453 2789 2791 443
+ 447
+ 1564 4 8 446 328 2790 331 447 453 2791
+ 2792
+ 1565 4 8 972 2666 2794 2793 1787 2667 2796
+ 2795
+ 1566 4 8 2794 2793 317 1408 2796 2795 2798
+ 2797
+ 1567 4 8 2798 2797 607 1544 2796 2795 1787
+ 2667
+ 1568 4 8 2666 213 2793 1408 2667 1544 2795
+ 2797
+ 1569 4 8 317 1415 2798 2799 1408 1409 2797
+ 2800
+ 1570 4 8 2798 2799 607 611 2797 2800 1544
+ 1545
+ 1571 4 8 1544 1545 213 1410 2797 2800 1408
+ 1409
+ 1572 4 8 1415 618 2799 611 1409 1410 2800
+ 1545
+ 1573 4 8 295 884 1461 1462 885 883 2802
+ 2801
+ 1574 4 8 1461 1462 328 1465 2802 2801 1741
+ 1742
+ 1575 4 8 1741 1742 317 315 2802 2801 885
+ 883
+ 1576 4 8 884 316 1462 1465 883 315 2801
+ 1742
+ 1577 4 8 1643 1647 1646 1650 2551 2803 2805
+ 2804
+ 1578 4 8 1646 1650 1627 1652 2805 2804 2807
+ 2806
+ 1579 4 8 2807 2806 1342 2671 2805 2804 2551
+ 2803
+ 1580 4 8 1647 337 1650 1652 2803 2671 2804
+ 2806
+ 1581 4 8 802 873 862 866 1727 2776 1725
+ 2808
+ 1582 4 8 862 866 861 865 1725 2808 1726
+ 2809
+ 1583 4 8 1726 2809 496 517 1725 2808 1727
+ 2776
+ 1584 4 8 873 527 866 865 2776 517 2808
+ 2809
+ 1585 4 8 1923 2810 2812 2811 1922 2813 2815
+ 2814
+ 1586 4 8 2812 2811 2205 2816 2815 2814 2818
+ 2817
+ 1587 4 8 2818 2817 1928 2819 2815 2814 1922
+ 2813
+ 1588 4 8 2810 1897 2811 2816 2813 2819 2814
+ 2817
+ 1589 4 8 2210 2197 2438 2820 2576 2575 2822
+ 2821
+ 1590 4 8 2438 2820 1508 2632 2822 2821 1496
+ 2629
+ 1591 4 8 1496 2629 935 933 2822 2821 2576
+ 2575
+ 1592 4 8 2197 934 2820 2632 2575 933 2821
+ 2629
+ 1593 4 8 993 1381 2176 2823 1471 2824 2826
+ 2825
+ 1594 4 8 2176 2823 294 2141 2826 2825 2537
+ 2827
+ 1595 4 8 2537 2827 846 1862 2826 2825 1471
+ 2824
+ 1596 4 8 1381 280 2823 2141 2824 1862 2825
+ 2827
+ 1597 4 8 398 1373 1013 1737 1016 1374 1014
+ 2828
+ 1598 4 8 1013 1737 870 872 1014 2828 1015
+ 2829
+ 1599 4 8 1015 2829 993 1379 1014 2828 1016
+ 1374
+ 1600 4 8 1373 527 1737 872 1374 1379 2828
+ 2829
+ 1601 4 8 294 2537 2541 2539 2176 2826 2831
+ 2830
+ 1602 4 8 2541 2539 1627 1629 2831 2830 2833
+ 2832
+ 1603 4 8 2833 2832 993 1471 2831 2830 2176
+ 2826
+ 1604 4 8 2537 846 2539 1629 2826 1471 2830
+ 2832
+ 1605 4 8 984 2834 1945 2835 2836 2837 2839
+ 2838
+ 1606 4 8 1945 2835 846 2840 2839 2838 1629
+ 2841
+ 1607 4 8 1629 2841 1627 1646 2839 2838 2836
+ 2837
+ 1608 4 8 2834 1643 2835 2840 2837 1646 2838
+ 2841
+ 1609 4 8 993 992 1379 2180 995 994 2843
+ 2842
+ 1610 4 8 1379 2180 527 2171 2843 2842 873
+ 2170
+ 1611 4 8 873 2170 802 801 2843 2842 995
+ 994
+ 1612 4 8 992 454 2180 2171 994 801 2842
+ 2170
+ 1613 4 8 993 995 1379 2843 1015 2844 2829
+ 2845
+ 1614 4 8 1379 2843 527 873 2829 2845 872
+ 871
+ 1615 4 8 872 871 870 869 2829 2845 1015
+ 2844
+ 1616 4 8 995 802 2843 873 2844 869 2845
+ 871
+ 1617 4 8 820 1366 2517 2846 1685 2489 2520
+ 2847
+ 1618 4 8 2517 2846 442 1992 2520 2847 1018
+ 1995
+ 1619 4 8 1018 1995 537 1997 2520 2847 1685
+ 2489
+ 1620 4 8 1366 496 2846 1992 2489 1997 2847
+ 1995
+ 1621 4 8 820 2848 2517 2849 2850 2851 2853
+ 2852
+ 1622 4 8 2517 2849 442 2655 2853 2852 2245
+ 2664
+ 1623 4 8 2245 2664 2246 2665 2853 2852 2850
+ 2851
+ 1624 4 8 2848 468 2849 2655 2851 2665 2852
+ 2664
+ 1625 4 8 820 2854 2018 2855 2848 2856 2858
+ 2857
+ 1626 4 8 2018 2855 606 877 2858 2857 879
+ 878
+ 1627 4 8 879 878 468 462 2858 2857 2848
+ 2856
+ 1628 4 8 2854 463 2855 877 2856 462 2857
+ 878
+ 1629 4 8 463 2760 2860 2859 877 2761 2862
+ 2861
+ 1630 4 8 2860 2859 824 2863 2862 2861 1234
+ 2864
+ 1631 4 8 1234 2864 606 1710 2862 2861 877
+ 2761
+ 1632 4 8 2760 1713 2859 2863 2761 1710 2861
+ 2864
+ 1633 4 8 510 2429 2755 2865 2430 2428 2867
+ 2866
+ 1634 4 8 2755 2865 134 826 2867 2866 455
+ 875
+ 1635 4 8 455 875 468 879 2867 2866 2430
+ 2428
+ 1636 4 8 2429 606 2865 826 2428 879 2866
+ 875
+ 1637 4 8 811 812 815 816 930 2868 2870
+ 2869
+ 1638 4 8 815 816 824 823 2870 2869 1907
+ 1908
+ 1639 4 8 1907 1908 935 1913 2870 2869 930
+ 2868
+ 1640 4 8 812 557 816 823 2868 1913 2869
+ 1908
+ 1641 4 8 1508 1506 2508 2588 1524 1525 2872
+ 2871
+ 1642 4 8 2508 2588 2236 2580 2872 2871 2874
+ 2873
+ 1643 4 8 2874 2873 1523 1526 2872 2871 1524
+ 1525
+ 1644 4 8 1506 1507 2588 2580 1525 1526 2871
+ 2873
+ 1645 4 8 635 1900 1503 2875 1514 2876 2878
+ 2877
+ 1646 4 8 1503 2875 1508 2445 2878 2877 2444
+ 2443
+ 1647 4 8 2444 2443 1391 2442 2878 2877 1514
+ 2876
+ 1648 4 8 1900 1897 2875 2445 2876 2442 2877
+ 2443
+ 1649 4 8 935 1912 2587 2879 1499 2880 2585
+ 2881
+ 1650 4 8 2587 2879 1713 2590 2585 2881 2582
+ 2591
+ 1651 4 8 2582 2591 1507 2104 2585 2881 1499
+ 2880
+ 1652 4 8 1912 1314 2879 2590 2880 2104 2881
+ 2591
+ 1653 4 8 935 2587 1912 2879 1907 2882 1910
+ 2883
+ 1654 4 8 1912 2879 1314 2590 1910 2883 1906
+ 2884
+ 1655 4 8 1906 2884 824 2863 1910 2883 1907
+ 2882
+ 1656 4 8 2587 1713 2879 2590 2882 2863 2883
+ 2884
+ 1657 4 8 1897 1898 2442 2885 1900 1899 2876
+ 2886
+ 1658 4 8 2442 2885 1391 1393 2876 2886 1514
+ 1513
+ 1659 4 8 1514 1513 635 1214 2876 2886 1900
+ 1899
+ 1660 4 8 1898 1120 2885 1393 1899 1214 2886
+ 1513
+ 1661 4 8 1523 1527 2637 2887 1524 1528 2638
+ 2888
+ 1662 4 8 2637 2887 1897 1900 2638 2888 2445
+ 2875
+ 1663 4 8 2445 2875 1508 1503 2638 2888 1524
+ 1528
+ 1664 4 8 1527 635 2887 1900 1528 1503 2888
+ 2875
+ 1665 4 8 1120 1123 2890 2889 2891 2892 2894
+ 2893
+ 1666 4 8 2890 2889 580 579 2894 2893 1485
+ 1488
+ 1667 4 8 1485 1488 110 151 2894 2893 2891
+ 2892
+ 1668 4 8 1123 150 2889 579 2892 151 2893
+ 1488
+ 1669 4 8 580 2890 1639 2895 1833 2896 1834
+ 2897
+ 1670 4 8 1639 2895 1206 1207 1834 2897 1210
+ 1211
+ 1671 4 8 1210 1211 647 1216 1834 2897 1833
+ 2896
+ 1672 4 8 2890 1120 2895 1207 2896 1216 2897
+ 1211
+ 1673 4 8 1110 1287 1176 2898 1185 2899 1188
+ 2900
+ 1674 4 8 1176 2898 1181 1680 1188 2900 1184
+ 1774
+ 1675 4 8 1184 1774 789 784 1188 2900 1185
+ 2899
+ 1676 4 8 1287 785 2898 1680 2899 784 2900
+ 1774
+ 1677 4 8 2181 2901 2184 2902 2903 2904 2906
+ 2905
+ 1678 4 8 2184 2902 42 2305 2906 2905 46
+ 2308
+ 1679 4 8 46 2308 55 724 2906 2905 2903
+ 2904
+ 1680 4 8 2901 15 2902 2305 2904 724 2905
+ 2308
+ 1681 4 8 42 45 2908 2907 46 49 2910
+ 2909
+ 1682 4 8 2908 2907 743 1581 2910 2909 2342
+ 2723
+ 1683 4 8 2342 2723 55 53 2910 2909 46
+ 49
+ 1684 4 8 45 51 2907 1581 49 53 2909
+ 2723
+ 1685 4 8 223 1163 2912 2911 630 2913 2915
+ 2914
+ 1686 4 8 2912 2911 1056 1101 2915 2914 1055
+ 2086
+ 1687 4 8 1055 2086 86 249 2915 2914 630
+ 2913
+ 1688 4 8 1163 250 2911 1101 2913 249 2914
+ 2086
+ 1689 4 8 223 1163 1162 1166 2912 2911 2917
+ 2916
+ 1690 4 8 1162 1166 785 1168 2917 2916 1290
+ 1291
+ 1691 4 8 1290 1291 1056 1101 2917 2916 2912
+ 2911
+ 1692 4 8 1163 250 1166 1168 2911 1101 2916
+ 1291
+ 1693 4 8 214 2311 2919 2918 2920 2921 2923
+ 2922
+ 1694 4 8 2919 2918 785 1290 2923 2922 1564
+ 1848
+ 1695 4 8 1564 1848 954 1849 2923 2922 2920
+ 2921
+ 1696 4 8 2311 1056 2918 1290 2921 1849 2922
+ 1848
+ 1697 4 8 214 2919 217 2924 558 2925 2927
+ 2926
+ 1698 4 8 217 2924 223 1162 2927 2926 1556
+ 1557
+ 1699 4 8 1556 1557 569 1551 2927 2926 558
+ 2925
+ 1700 4 8 2919 785 2924 1162 2925 1551 2926
+ 1557
+ 1701 4 8 955 953 2003 2928 950 951 2930
+ 2929
+ 1702 4 8 2003 2928 981 983 2930 2929 980
+ 982
+ 1703 4 8 980 982 568 952 2930 2929 950
+ 951
+ 1704 4 8 953 954 2928 983 951 952 2929
+ 982
+ 1705 4 8 955 950 2003 2930 1668 2716 2002
+ 2931
+ 1706 4 8 2003 2930 981 980 2002 2931 1794
+ 2713
+ 1707 4 8 1794 2713 541 896 2002 2931 1668
+ 2716
+ 1708 4 8 950 568 2930 980 2716 896 2931
+ 2713
+ 1709 4 8 955 1565 2003 2932 953 1563 2928
+ 2933
+ 1710 4 8 2003 2932 981 1681 2928 2933 983
+ 1675
+ 1711 4 8 983 1675 954 1564 2928 2933 953
+ 1563
+ 1712 4 8 1565 785 2932 1681 1563 1564 2933
+ 1675
+ 1713 4 8 955 944 1534 1535 1662 1671 1666
+ 2934
+ 1714 4 8 1534 1535 901 1218 1666 2934 1250
+ 1251
+ 1715 4 8 1250 1251 706 1252 1666 2934 1662
+ 1671
+ 1716 4 8 944 569 1535 1218 1671 1252 2934
+ 1251
+ 1717 4 8 984 1929 1932 1933 2542 2544 2936
+ 2935
+ 1718 4 8 1932 1933 1940 1939 2936 2935 2938
+ 2937
+ 1719 4 8 2938 2937 870 2548 2936 2935 2542
+ 2544
+ 1720 4 8 1929 1478 1933 1939 2544 2548 2935
+ 2937
+ 1721 4 8 1094 2939 1096 2940 2941 2942 2944
+ 2943
+ 1722 4 8 1096 2940 1098 2945 2944 2943 2947
+ 2946
+ 1723 4 8 2947 2946 1940 2938 2944 2943 2941
+ 2942
+ 1724 4 8 2939 870 2940 2945 2942 2938 2943
+ 2946
+ 1725 4 8 845 843 837 840 2349 2948 2350
+ 2949
+ 1726 4 8 837 840 15 29 2350 2949 36
+ 30
+ 1727 4 8 36 30 37 31 2350 2949 2349
+ 2948
+ 1728 4 8 843 28 840 29 2948 31 2949
+ 30
+ 1729 4 8 1754 2950 2952 2951 2953 2954 2956
+ 2955
+ 1730 4 8 2952 2951 28 1475 2956 2955 352
+ 2957
+ 1731 4 8 352 2957 350 2958 2956 2955 2953
+ 2954
+ 1732 4 8 2950 1478 2951 1475 2954 2958 2955
+ 2957
+ 1733 4 8 28 1596 352 1599 1470 2959 2961
+ 2960
+ 1734 4 8 352 1599 350 1571 2961 2960 1009
+ 2172
+ 1735 4 8 1009 2172 993 1381 2961 2960 1470
+ 2959
+ 1736 4 8 1596 280 1599 1571 2959 1381 2960
+ 2172
+ 1737 4 8 846 1862 841 1861 1471 2824 1474
+ 2962
+ 1738 4 8 841 1861 28 1596 1474 2962 1470
+ 2959
+ 1739 4 8 1470 2959 993 1381 1474 2962 1471
+ 2824
+ 1740 4 8 1862 280 1861 1596 2824 1381 2962
+ 2959
+ 1741 4 8 606 2025 601 2963 1234 2024 1228
+ 2964
+ 1742 4 8 601 2963 602 1300 1228 2964 1229
+ 1355
+ 1743 4 8 1229 1355 824 1352 1228 2964 1234
+ 2024
+ 1744 4 8 2025 1258 2963 1300 2024 1352 2964
+ 1355
+ 1745 4 8 1227 1246 1700 1703 1360 1696 2966
+ 2965
+ 1746 4 8 1700 1703 590 709 2966 2965 2968
+ 2967
+ 1747 4 8 2968 2967 542 1341 2966 2965 1360
+ 1696
+ 1748 4 8 1246 706 1703 709 1696 1341 2965
+ 2967
+ 1749 4 8 1227 1358 1700 2969 1714 2970 1715
+ 2971
+ 1750 4 8 1700 2969 590 1322 1715 2971 1489
+ 2377
+ 1751 4 8 1489 2377 1314 1906 1715 2971 1714
+ 2970
+ 1752 4 8 1358 824 2969 1322 2970 1906 2971
+ 2377
+ 1753 4 8 1227 1360 1700 2966 1358 1361 2969
+ 2972
+ 1754 4 8 1700 2966 590 2968 2969 2972 1322
+ 2973
+ 1755 4 8 1322 2973 824 1357 2969 2972 1358
+ 1361
+ 1756 4 8 1360 542 2966 2968 1361 1357 2972
+ 2973
+ 1757 4 8 51 1109 1112 1113 1106 1107 1587
+ 2974
+ 1758 4 8 1112 1113 1084 1119 1587 2974 1588
+ 2975
+ 1759 4 8 1588 2975 250 1108 1587 2974 1106
+ 1107
+ 1760 4 8 1109 1110 1113 1119 1107 1108 2974
+ 2975
+ 1761 4 8 101 2976 146 2977 2978 2979 2981
+ 2980
+ 1762 4 8 146 2977 148 2482 2981 2980 2983
+ 2982
+ 1763 4 8 2983 2982 2205 2984 2981 2980 2978
+ 2979
+ 1764 4 8 2976 1885 2977 2482 2979 2984 2980
+ 2982
+ 1765 4 8 2500 2985 2766 2986 2987 2988 2990
+ 2989
+ 1766 4 8 2766 2986 1927 2991 2990 2989 2993
+ 2992
+ 1767 4 8 2993 2992 187 186 2990 2989 2987
+ 2988
+ 1768 4 8 2985 148 2986 2991 2988 186 2989
+ 2992
+ 1769 4 8 294 2136 292 2734 1455 2994 1458
+ 2995
+ 1770 4 8 292 2734 149 1154 1458 2995 1454
+ 2996
+ 1771 4 8 1454 2996 856 858 1458 2995 1455
+ 2994
+ 1772 4 8 2136 860 2734 1154 2994 858 2995
+ 2996
+ 1773 4 8 922 923 1959 2568 925 924 2998
+ 2997
+ 1774 4 8 1959 2568 557 1913 2998 2997 812
+ 2868
+ 1775 4 8 812 2868 811 930 2998 2997 925
+ 924
+ 1776 4 8 923 935 2568 1913 924 930 2997
+ 2868
+ 1777 4 8 811 932 930 931 2999 3000 3002
+ 3001
+ 1778 4 8 930 931 935 933 3002 3001 2504
+ 2630
+ 1779 4 8 2504 2630 2500 2634 3002 3001 2999
+ 3000
+ 1780 4 8 932 934 931 933 3000 2634 3001
+ 2630
+ 1781 4 8 2608 2626 2628 2627 3003 3004 3006
+ 3005
+ 1782 4 8 2628 2627 1914 1917 3006 3005 2636
+ 3007
+ 1783 4 8 2636 3007 1897 2810 3006 3005 3003
+ 3004
+ 1784 4 8 2626 1923 2627 1917 3004 2810 3005
+ 3007
+ 1785 4 8 1110 2087 1102 3008 1109 2090 1103
+ 3009
+ 1786 4 8 1102 3008 1056 3010 1103 3009 1099
+ 3011
+ 1787 4 8 1099 3011 51 50 1103 3009 1109
+ 2090
+ 1788 4 8 2087 56 3008 3010 2090 50 3009
+ 3011
+ 1789 4 8 943 1328 1236 3012 1230 3013 1233
+ 3014
+ 1790 4 8 1236 3012 824 1358 1233 3014 1229
+ 1359
+ 1791 4 8 1229 1359 602 1266 1233 3014 1230
+ 3013
+ 1792 4 8 1328 1227 3012 1358 3013 1266 3014
+ 1359
+ 1793 4 8 1713 2590 2863 2884 1712 2593 3016
+ 3015
+ 1794 4 8 2863 2884 824 1906 3016 3015 1236
+ 3017
+ 1795 4 8 1236 3017 943 1330 3016 3015 1712
+ 2593
+ 1796 4 8 2590 1314 2884 1906 2593 1330 3015
+ 3017
+ 1797 4 8 943 1712 1237 1711 1236 3016 1235
+ 3018
+ 1798 4 8 1237 1711 606 1710 1235 3018 1234
+ 2864
+ 1799 4 8 1234 2864 824 2863 1235 3018 1236
+ 3016
+ 1800 4 8 1712 1713 1711 1710 3016 2863 3018
+ 2864
+ 1801 4 8 72 3019 1031 3020 75 3021 1030
+ 3022
+ 1802 4 8 1031 3020 176 1613 1030 3022 761
+ 1614
+ 1803 4 8 761 1614 81 1615 1030 3022 75
+ 3021
+ 1804 4 8 3019 200 3020 1613 3021 1615 3022
+ 1614
+ 1805 4 8 1 3023 745 3024 4 3025 744
+ 3026
+ 1806 4 8 745 3024 86 80 744 3026 748
+ 3027
+ 1807 4 8 748 3027 10 754 744 3026 4
+ 3025
+ 1808 4 8 3023 81 3024 80 3025 754 3026
+ 3027
+ 1809 4 8 2061 3028 3030 3029 3031 3032 3034
+ 3033
+ 1810 4 8 3030 3029 789 962 3034 3033 3036
+ 3035
+ 1811 4 8 3036 3035 2703 3037 3034 3033 3031
+ 3032
+ 1812 4 8 3028 971 3029 962 3032 3037 3033
+ 3035
+ 1813 4 8 1654 3038 1655 3039 1658 3040 1659
+ 3041
+ 1814 4 8 1655 3039 955 2003 1659 3041 1565
+ 2932
+ 1815 4 8 1565 2932 785 1681 1659 3041 1658
+ 3040
+ 1816 4 8 3038 981 3039 2003 3040 1681 3041
+ 2932
+ 1817 4 8 2703 3042 3044 3043 3036 3045 3047
+ 3046
+ 1818 4 8 3044 3043 967 2079 3047 3046 961
+ 2078
+ 1819 4 8 961 2078 789 2077 3047 3046 3036
+ 3045
+ 1820 4 8 3042 2080 3043 2079 3045 2077 3046
+ 2078
+ 1821 4 8 785 1287 1680 2898 1564 1845 1677
+ 3048
+ 1822 4 8 1680 2898 1181 1176 1677 3048 1674
+ 3049
+ 1823 4 8 1674 3049 954 1844 1677 3048 1564
+ 1845
+ 1824 4 8 1287 1110 2898 1176 1845 1844 3048
+ 3049
+ 1825 4 8 790 2010 2708 3050 793 2013 2707
+ 3051
+ 1826 4 8 2708 3050 1342 1346 2707 3051 2529
+ 2530
+ 1827 4 8 2529 2530 537 539 2707 3051 793
+ 2013
+ 1828 4 8 2010 541 3050 1346 2013 539 3051
+ 2530
+ 1829 4 8 790 2706 2009 3052 2004 3053 2007
+ 3054
+ 1830 4 8 2009 3052 981 3038 2007 3054 2003
+ 3039
+ 1831 4 8 2003 3039 955 1655 2007 3054 2004
+ 3053
+ 1832 4 8 2706 1654 3052 3038 3053 1655 3054
+ 3039
+ 1833 4 8 785 779 1552 2369 1658 1998 1661
+ 3055
+ 1834 4 8 1552 2369 706 695 1661 3055 1657
+ 2717
+ 1835 4 8 1657 2717 1654 1999 1661 3055 1658
+ 1998
+ 1836 4 8 779 694 2369 695 1998 1999 3055
+ 2717
+ 1837 4 8 200 203 3019 3056 1613 3057 3020
+ 3058
+ 1838 4 8 3019 3056 72 2317 3020 3058 1031
+ 2316
+ 1839 4 8 1031 2316 176 657 3020 3058 1613
+ 3057
+ 1840 4 8 203 209 3056 2317 3057 657 3058
+ 2316
+ 1841 4 8 954 3059 3061 3060 2920 3062 3064
+ 3063
+ 1842 4 8 3061 3060 209 3065 3064 3063 656
+ 3066
+ 1843 4 8 656 3066 214 3067 3064 3063 2920
+ 3062
+ 1844 4 8 3059 3068 3060 3065 3062 3067 3063
+ 3066
+ 1845 4 8 214 560 656 919 2920 3069 3064
+ 3070
+ 1846 4 8 656 919 209 918 3064 3070 3061
+ 3071
+ 1847 4 8 3061 3071 954 952 3064 3070 2920
+ 3069
+ 1848 4 8 560 568 919 918 3069 952 3070
+ 3071
+ 1849 4 8 214 2311 217 3072 2919 2918 2924
+ 3073
+ 1850 4 8 217 3072 223 2912 2924 3073 1162
+ 2917
+ 1851 4 8 1162 2917 785 1290 2924 3073 2919
+ 2918
+ 1852 4 8 2311 1056 3072 2912 2918 1290 3073
+ 2917
+ 1853 4 8 785 2919 1564 2923 1551 2925 1562
+ 3074
+ 1854 4 8 1564 2923 954 2920 1562 3074 946
+ 3075
+ 1855 4 8 946 3075 569 558 1562 3074 1551
+ 2925
+ 1856 4 8 2919 214 2923 2920 2925 558 3074
+ 3075
+ 1857 4 8 954 2920 952 3069 946 3075 949
+ 3076
+ 1858 4 8 952 3069 568 560 949 3076 567
+ 561
+ 1859 4 8 567 561 569 558 949 3076 946
+ 3075
+ 1860 4 8 2920 214 3069 560 3075 558 3076
+ 561
+ 1861 4 8 1 5 1429 1430 2219 2300 2222
+ 3077
+ 1862 4 8 1429 1430 51 1071 2222 3077 53
+ 3078
+ 1863 4 8 53 3078 55 728 2222 3077 2219
+ 2300
+ 1864 4 8 5 14 1430 1071 2300 728 3077
+ 3078
+ 1865 4 8 1 1049 1429 3079 745 1050 1432
+ 3080
+ 1866 4 8 1429 3079 51 1099 1432 3080 1434
+ 2084
+ 1867 4 8 1434 2084 86 1055 1432 3080 745
+ 1050
+ 1868 4 8 1049 1056 3079 1099 1050 1055 3080
+ 2084
+ 1869 4 8 922 2564 2572 3081 3082 3083 3085
+ 3084
+ 1870 4 8 2572 3081 2210 2437 3085 3084 2208
+ 3086
+ 1871 4 8 2208 3086 2209 3087 3085 3084 3082
+ 3083
+ 1872 4 8 2564 1391 3081 2437 3083 3087 3084
+ 3086
+ 1873 4 8 1631 3088 3090 3089 3091 3092 3094
+ 3093
+ 1874 4 8 3090 3089 2205 3095 3094 3093 2207
+ 3096
+ 1875 4 8 2207 3096 2209 3097 3094 3093 3091
+ 3092
+ 1876 4 8 3088 110 3089 3095 3092 3097 3093
+ 3096
+ 1877 4 8 2205 2978 3095 3098 3099 3100 3102
+ 3101
+ 1878 4 8 3095 3098 110 104 3102 3101 3104
+ 3103
+ 1879 4 8 3104 3103 2288 2289 3102 3101 3099
+ 3100
+ 1880 4 8 2978 101 3098 104 3100 2289 3101
+ 3103
+ 1881 4 8 922 2564 3082 3083 2562 2565 3106
+ 3105
+ 1882 4 8 3082 3083 2209 3087 3106 3105 3108
+ 3107
+ 1883 4 8 3108 3107 552 2228 3106 3105 2562
+ 2565
+ 1884 4 8 2564 1391 3083 3087 2565 2228 3105
+ 3107
+ 1885 4 8 984 988 987 991 2542 3109 2543
+ 3110
+ 1886 4 8 987 991 993 995 2543 3110 1015
+ 2844
+ 1887 4 8 1015 2844 870 869 2543 3110 2542
+ 3109
+ 1888 4 8 988 802 991 995 3109 869 3110
+ 2844
+ 1889 4 8 706 1657 2014 3111 1662 1656 3113
+ 3112
+ 1890 4 8 2014 3111 790 2706 3113 3112 2004
+ 3053
+ 1891 4 8 2004 3053 955 1655 3113 3112 1662
+ 1656
+ 1892 4 8 1657 1654 3111 2706 1656 1655 3112
+ 3053
+ 1893 4 8 2703 3042 3036 3045 2705 3114 3116
+ 3115
+ 1894 4 8 3036 3045 789 2077 3116 3115 1770
+ 3117
+ 1895 4 8 1770 3117 1654 3118 3116 3115 2705
+ 3114
+ 1896 4 8 3042 2080 3045 2077 3114 3118 3115
+ 3117
+ 1897 4 8 954 983 1850 1851 1674 1673 3120
+ 3119
+ 1898 4 8 1850 1851 1180 1854 3120 3119 1179
+ 3121
+ 1899 4 8 1179 3121 1181 1678 3120 3119 1674
+ 1673
+ 1900 4 8 983 981 1851 1854 1673 1678 3119
+ 3121
+ 1901 4 8 37 1768 1757 3122 1747 3123 1750
+ 3124
+ 1902 4 8 1757 3122 1098 1097 1750 3124 1096
+ 1095
+ 1903 4 8 1096 1095 1094 1093 1750 3124 1747
+ 3123
+ 1904 4 8 1768 66 3122 1097 3123 1093 3124
+ 1095
+ 1905 4 8 1940 2938 1939 2937 3125 3126 3128
+ 3127
+ 1906 4 8 1939 2937 1478 2548 3128 3127 2958
+ 3129
+ 1907 4 8 2958 3129 350 1008 3128 3127 3125
+ 3126
+ 1908 4 8 2938 870 2937 2548 3126 1008 3127
+ 3129
+ 1909 4 8 1094 3130 1747 3131 1093 3132 3123
+ 3133
+ 1910 4 8 1747 3131 37 345 3123 3133 1768
+ 1766
+ 1911 4 8 1768 1766 66 1577 3123 3133 1093
+ 3132
+ 1912 4 8 3130 350 3131 345 3132 1577 3133
+ 1766
+ 1913 4 8 28 31 843 2948 2952 3134 3136
+ 3135
+ 1914 4 8 843 2948 845 2349 3136 3135 3138
+ 3137
+ 1915 4 8 3138 3137 1754 1753 3136 3135 2952
+ 3134
+ 1916 4 8 31 37 2948 2349 3134 1753 3135
+ 3137
+ 1917 4 8 87 1572 382 3139 88 1576 381
+ 3140
+ 1918 4 8 382 3139 384 3141 381 3140 383
+ 3142
+ 1919 4 8 383 3142 66 1577 381 3140 88
+ 1576
+ 1920 4 8 1572 350 3139 3141 1576 1577 3140
+ 3142
+ 1921 4 8 350 1006 1572 1567 3141 3143 3139
+ 3144
+ 1922 4 8 1572 1567 87 397 3139 3144 382
+ 3145
+ 1923 4 8 382 3145 384 1005 3139 3144 3141
+ 3143
+ 1924 4 8 1006 398 1567 397 3143 1005 3144
+ 3145
+ 1925 4 8 2267 2418 2647 3146 3147 3148 3150
+ 3149
+ 1926 4 8 2647 3146 1258 1260 3150 3149 3152
+ 3151
+ 1927 4 8 3152 3151 2492 2493 3150 3149 3147
+ 3148
+ 1928 4 8 2418 342 3146 1260 3148 2493 3149
+ 3151
+ 1929 4 8 811 1521 814 3153 812 1522 813
+ 3154
+ 1930 4 8 814 3153 820 1366 813 3154 819
+ 1367
+ 1931 4 8 819 1367 557 1364 813 3154 812
+ 1522
+ 1932 4 8 1521 496 3153 1366 1522 1364 3154
+ 1367
+ 1933 4 8 820 1366 2850 3155 2517 2846 2853
+ 3156
+ 1934 4 8 2850 3155 2246 2248 2853 3156 2245
+ 2247
+ 1935 4 8 2245 2247 442 1992 2853 3156 2517
+ 2846
+ 1936 4 8 1366 496 3155 2248 2846 1992 3156
+ 2247
+ 1937 4 8 463 462 2854 2856 2749 2748 3158
+ 3157
+ 1938 4 8 2854 2856 820 2848 3158 3157 2850
+ 2851
+ 1939 4 8 2850 2851 2246 2665 3158 3157 2749
+ 2748
+ 1940 4 8 462 468 2856 2848 2748 2665 3157
+ 2851
+ 1941 4 8 1143 1370 1990 3159 1372 1371 1987
+ 3160
+ 1942 4 8 1990 3159 581 585 1987 3160 1984
+ 3161
+ 1943 4 8 1984 3161 820 819 1987 3160 1372
+ 1371
+ 1944 4 8 1370 557 3159 585 1371 819 3160
+ 3161
+ 1945 4 8 2492 2523 2496 2738 2525 2524 2679
+ 3162
+ 1946 4 8 2496 2738 528 1612 2679 3162 531
+ 2680
+ 1947 4 8 531 2680 537 1018 2679 3162 2525
+ 2524
+ 1948 4 8 2523 442 2738 1612 2524 1018 3162
+ 2680
+ 1949 4 8 2492 2519 2495 3163 3152 3164 3166
+ 3165
+ 1950 4 8 2495 3163 542 1682 3166 3165 1296
+ 2026
+ 1951 4 8 1296 2026 1258 2020 3166 3165 3152
+ 3164
+ 1952 4 8 2519 820 3163 1682 3164 2020 3165
+ 2026
+ 1953 4 8 847 3167 3169 3168 2651 3170 3172
+ 3171
+ 1954 4 8 3169 3168 2267 2418 3172 3171 3147
+ 3148
+ 1955 4 8 3147 3148 2492 2493 3172 3171 2651
+ 3170
+ 1956 4 8 3167 342 3168 2418 3170 2493 3171
+ 3148
+ 1957 4 8 820 822 1318 1320 1682 2028 3174
+ 3173
+ 1958 4 8 1318 1320 590 1322 3174 3173 2968
+ 2973
+ 1959 4 8 2968 2973 542 1357 3174 3173 1682
+ 2028
+ 1960 4 8 822 824 1320 1322 2028 1357 3173
+ 2973
+ 1961 4 8 238 239 1064 1448 2211 3175 2212
+ 3176
+ 1962 4 8 1064 1448 51 1106 2212 3176 1581
+ 1584
+ 1963 4 8 1581 1584 743 742 2212 3176 2211
+ 3175
+ 1964 4 8 239 250 1448 1106 3175 742 3176
+ 1584
+ 1965 4 8 150 570 658 659 1128 1238 3178
+ 3177
+ 1966 4 8 658 659 667 664 3178 3177 2452
+ 2455
+ 1967 4 8 2452 2455 1133 1243 3178 3177 1128
+ 1238
+ 1968 4 8 570 237 659 664 1238 1243 3177
+ 2455
+ 1969 4 8 967 961 2073 2076 3179 3180 3182
+ 3181
+ 1970 4 8 2073 2076 668 2072 3182 3181 2029
+ 2388
+ 1971 4 8 2029 2388 667 788 3182 3181 3179
+ 3180
+ 1972 4 8 961 789 2076 2072 3180 788 3181
+ 2388
+ 1973 4 8 2080 3183 2070 3184 2077 3185 2071
+ 3186
+ 1974 4 8 2070 3184 668 2031 2071 3186 2072
+ 2387
+ 1975 4 8 2072 2387 789 777 2071 3186 2077
+ 3185
+ 1976 4 8 3183 694 3184 2031 3185 777 3186
+ 2387
+ 1977 4 8 2080 2077 3118 3117 3183 3185 3188
+ 3187
+ 1978 4 8 3118 3117 1654 1770 3188 3187 1999
+ 2001
+ 1979 4 8 1999 2001 694 777 3188 3187 3183
+ 3185
+ 1980 4 8 2077 789 3117 1770 3185 777 3187
+ 2001
+ 1981 4 8 2390 2393 3190 3189 3191 3192 3194
+ 3193
+ 1982 4 8 3190 3189 1382 1444 3194 3193 1440
+ 1439
+ 1983 4 8 1440 1439 1132 1438 3194 3193 3191
+ 3192
+ 1984 4 8 2393 668 3189 1444 3192 1438 3193
+ 1439
+ 1985 4 8 581 2721 2362 2720 3195 3196 3198
+ 3197
+ 1986 4 8 2362 2720 694 1999 3198 3197 3183
+ 3188
+ 1987 4 8 3183 3188 2080 3118 3198 3197 3195
+ 3196
+ 1988 4 8 2721 1654 2720 1999 3196 3118 3197
+ 3188
+ 1989 4 8 543 547 546 550 2407 2406 3200
+ 3199
+ 1990 4 8 546 550 552 554 3200 3199 2403
+ 2405
+ 1991 4 8 2403 2405 668 1480 3200 3199 2407
+ 2406
+ 1992 4 8 547 556 550 554 2406 1480 3199
+ 2405
+ 1993 4 8 3201 3202 3204 3203 3205 3206 3208
+ 3207
+ 1994 4 8 3204 3203 984 988 3208 3207 2542
+ 3109
+ 1995 4 8 2542 3109 870 869 3208 3207 3205
+ 3206
+ 1996 4 8 3202 802 3203 988 3206 869 3207
+ 3109
+ 1997 4 8 789 962 3030 3029 1182 1802 3210
+ 3209
+ 1998 4 8 3030 3029 2061 3028 3210 3209 2065
+ 3211
+ 1999 4 8 2065 3211 1084 1083 3210 3209 1182
+ 1802
+ 2000 4 8 962 971 3029 3028 1802 1083 3209
+ 3211
+ 2001 4 8 581 582 3213 3212 2362 2361 3215
+ 3214
+ 2002 4 8 3213 3212 543 547 3215 3214 2408
+ 2409
+ 2003 4 8 2408 2409 694 697 3215 3214 2362
+ 2361
+ 2004 4 8 582 556 3212 547 2361 697 3214
+ 2409
+ 2005 4 8 237 3216 236 3217 1842 3218 2096
+ 3219
+ 2006 4 8 236 3217 85 3220 2096 3219 2093
+ 3221
+ 2007 4 8 2093 3221 1832 3222 2096 3219 1842
+ 3218
+ 2008 4 8 3216 1407 3217 3220 3218 3222 3219
+ 3221
+ 2009 4 8 226 638 3224 3223 940 3225 3227
+ 3226
+ 2010 4 8 3224 3223 1507 1505 3227 3226 2106
+ 2109
+ 2011 4 8 2106 2109 943 1198 3227 3226 940
+ 3225
+ 2012 4 8 638 635 3223 1505 3225 1198 3226
+ 2109
+ 2013 4 8 834 1704 1706 1707 3228 3229 3231
+ 3230
+ 2014 4 8 1706 1707 943 1712 3231 3230 2106
+ 2594
+ 2015 4 8 2106 2594 1507 2582 3231 3230 3228
+ 3229
+ 2016 4 8 1704 1713 1707 1712 3229 2582 3230
+ 2594
+ 2017 4 8 1523 3232 2637 3233 3234 3235 3237
+ 3236
+ 2018 4 8 2637 3233 1897 3003 3237 3236 1901
+ 3238
+ 2019 4 8 1901 3238 1206 2607 3237 3236 3234
+ 3235
+ 2020 4 8 3232 2608 3233 3003 3235 2607 3236
+ 3238
+ 2021 4 8 1507 2582 2580 2581 3228 3229 3240
+ 3239
+ 2022 4 8 2580 2581 2236 2238 3240 3239 2235
+ 2237
+ 2023 4 8 2235 2237 834 1704 3240 3239 3228
+ 3229
+ 2024 4 8 2582 1713 2581 2238 3229 1704 3239
+ 2237
+ 2025 4 8 1523 3234 2637 3237 1527 3241 2887
+ 3242
+ 2026 4 8 2637 3237 1897 1901 2887 3242 1900
+ 1904
+ 2027 4 8 1900 1904 635 1209 2887 3242 1527
+ 3241
+ 2028 4 8 3234 1206 3237 1901 3241 1209 3242
+ 1904
+ 2029 4 8 1080 3243 3245 3244 3246 3247 3249
+ 3248
+ 2030 4 8 3245 3244 743 2908 3249 3248 2342
+ 2910
+ 2031 4 8 2342 2910 55 46 3249 3248 3246
+ 3247
+ 2032 4 8 3243 42 3244 2908 3247 46 3248
+ 2910
+ 2033 4 8 789 959 962 963 1798 3250 1801
+ 3251
+ 2034 4 8 962 963 971 970 1801 3251 1797
+ 1966
+ 2035 4 8 1797 1966 250 427 1801 3251 1798
+ 3250
+ 2036 4 8 959 425 963 970 3250 427 3251
+ 1966
+ 2037 4 8 834 3252 2235 3253 3228 3254 3240
+ 3255
+ 2038 4 8 2235 3253 2236 2874 3240 3255 2580
+ 2873
+ 2039 4 8 2580 2873 1507 1526 3240 3255 3228
+ 3254
+ 2040 4 8 3252 1523 3253 2874 3254 1526 3255
+ 2873
+ 2041 4 8 199 198 354 1693 2098 2113 2097
+ 3256
+ 2042 4 8 354 1693 130 167 2097 3256 942
+ 938
+ 2043 4 8 942 938 943 936 2097 3256 2098
+ 2113
+ 2044 4 8 198 164 1693 167 2113 936 3256
+ 938
+ 2045 4 8 199 356 354 355 197 511 1692
+ 3257
+ 2046 4 8 354 355 130 300 1692 3257 172
+ 3258
+ 2047 4 8 172 3258 176 514 1692 3257 197
+ 511
+ 2048 4 8 356 296 355 300 511 514 3257
+ 3258
+ 2049 4 8 943 2098 1237 2384 1706 2101 1709
+ 3259
+ 2050 4 8 1237 2384 606 605 1709 3259 827
+ 828
+ 2051 4 8 827 828 834 833 1709 3259 1706
+ 2101
+ 2052 4 8 2098 199 2384 605 2101 833 3259
+ 828
+ 2053 4 8 1382 1446 1386 1894 1440 1443 3261
+ 3260
+ 2054 4 8 1386 1894 1120 1121 3261 3260 1124
+ 1125
+ 2055 4 8 1124 1125 1132 1131 3261 3260 1440
+ 1443
+ 2056 4 8 1446 1133 1894 1121 1443 1131 3260
+ 1125
+ 2057 4 8 1382 1444 3263 3262 1383 2056 3265
+ 3264
+ 2058 4 8 3263 3262 552 2403 3265 3264 2398
+ 2402
+ 2059 4 8 2398 2402 677 671 3265 3264 1383
+ 2056
+ 2060 4 8 1444 668 3262 2403 2056 671 3264
+ 2402
+ 2061 4 8 1382 3263 1385 3266 1383 3265 1384
+ 3267
+ 2062 4 8 1385 3266 1391 2228 1384 3267 1390
+ 2560
+ 2063 4 8 1390 2560 677 2398 1384 3267 1383
+ 3265
+ 2064 4 8 3263 552 3266 2228 3265 2398 3267
+ 2560
+ 2065 4 8 581 585 3213 3268 582 586 3212
+ 3269
+ 2066 4 8 3213 3268 543 544 3212 3269 547
+ 548
+ 2067 4 8 547 548 556 555 3212 3269 582
+ 586
+ 2068 4 8 585 557 3268 544 586 555 3269
+ 548
+ 2069 4 8 543 2407 3271 3270 2408 2411 3273
+ 3272
+ 2070 4 8 3271 3270 2080 2070 3273 3272 3183
+ 3184
+ 2071 4 8 3183 3184 694 2031 3273 3272 2408
+ 2411
+ 2072 4 8 2407 668 3270 2070 2411 2031 3272
+ 3184
+ 2073 4 8 3201 3274 3276 3275 3277 3278 3280
+ 3279
+ 2074 4 8 3276 3275 2080 3271 3280 3279 3195
+ 3281
+ 2075 4 8 3195 3281 581 3213 3280 3279 3277
+ 3278
+ 2076 4 8 3274 543 3275 3271 3278 3213 3279
+ 3281
+ 2077 4 8 384 996 3283 3282 3284 3285 3287
+ 3286
+ 2078 4 8 3283 3282 1765 3288 3287 3286 3290
+ 3289
+ 2079 4 8 3290 3289 870 864 3287 3286 3284
+ 3285
+ 2080 4 8 996 861 3282 3288 3285 864 3286
+ 3289
+ 2081 4 8 406 1863 410 1866 3291 3292 3294
+ 3293
+ 2082 4 8 410 1866 110 1873 3294 3293 3296
+ 3295
+ 2083 4 8 3296 3295 1132 1440 3294 3293 3291
+ 3292
+ 2084 4 8 1863 1382 1866 1873 3292 1440 3293
+ 3295
+ 2085 4 8 668 2407 2070 3270 1444 3297 3299
+ 3298
+ 2086 4 8 2070 3270 2080 3271 3299 3298 3301
+ 3300
+ 2087 4 8 3301 3300 1382 3302 3299 3298 1444
+ 3297
+ 2088 4 8 2407 543 3270 3271 3297 3302 3298
+ 3300
+ 2089 4 8 3303 3304 3306 3305 3307 3308 3310
+ 3309
+ 2090 4 8 3306 3305 1098 1089 3310 3309 1097
+ 1090
+ 2091 4 8 1097 1090 66 1086 3310 3309 3307
+ 3308
+ 2092 4 8 3304 1085 3305 1089 3308 1086 3309
+ 1090
+ 2093 4 8 2267 2418 2417 2416 2647 3146 2648
+ 3311
+ 2094 4 8 2417 2416 593 771 2648 3311 1254
+ 1256
+ 2095 4 8 1254 1256 1258 1260 2648 3311 2647
+ 3146
+ 2096 4 8 2418 342 2416 771 3146 1260 3311
+ 1256
+ 2097 4 8 317 1415 1653 3312 2798 2799 3314
+ 3313
+ 2098 4 8 1653 3312 337 617 3314 3313 608
+ 612
+ 2099 4 8 608 612 607 611 3314 3313 2798
+ 2799
+ 2100 4 8 1415 618 3312 617 2799 611 3313
+ 612
+ 2101 4 8 2209 3091 3316 3315 2207 3094 3318
+ 3317
+ 2102 4 8 3316 3315 1897 3319 3318 3317 2816
+ 3320
+ 2103 4 8 2816 3320 2205 3090 3318 3317 2207
+ 3094
+ 2104 4 8 3091 1631 3315 3319 3094 3090 3317
+ 3320
+ 2105 4 8 1631 3319 1634 3321 3322 3323 3325
+ 3324
+ 2106 4 8 1634 3321 1206 1901 3325 3324 1207
+ 1902
+ 2107 4 8 1207 1902 1120 1898 3325 3324 3322
+ 3323
+ 2108 4 8 3319 1897 3321 1901 3323 1898 3324
+ 1902
+ 2109 4 8 1885 2976 3327 3326 2984 2979 3329
+ 3328
+ 2110 4 8 3327 3326 1728 1731 3329 3328 3331
+ 3330
+ 2111 4 8 3331 3330 2205 2978 3329 3328 2984
+ 2979
+ 2112 4 8 2976 101 3326 1731 2979 2978 3328
+ 3330
+ 2113 4 8 226 3332 3334 3333 3335 3336 3338
+ 3337
+ 2114 4 8 3334 3333 2597 3339 3338 3337 3341
+ 3340
+ 2115 4 8 3341 3340 803 3342 3338 3337 3335
+ 3336
+ 2116 4 8 3332 1523 3333 3339 3336 3342 3337
+ 3340
+ 2117 4 8 1507 3224 2106 3227 3228 3343 3231
+ 3344
+ 2118 4 8 2106 3227 943 940 3231 3344 1706
+ 3345
+ 2119 4 8 1706 3345 834 3346 3231 3344 3228
+ 3343
+ 2120 4 8 3224 226 3227 940 3343 3346 3344
+ 3345
+ 2121 4 8 1206 1209 3234 3241 2467 2468 3348
+ 3347
+ 2122 4 8 3234 3241 1523 1527 3348 3347 3332
+ 3349
+ 2123 4 8 3332 3349 226 638 3348 3347 2467
+ 2468
+ 2124 4 8 1209 635 3241 1527 2468 638 3347
+ 3349
+ 2125 4 8 803 3350 3341 3351 3335 3352 3338
+ 3353
+ 2126 4 8 3341 3351 2597 3354 3338 3353 3334
+ 3355
+ 2127 4 8 3334 3355 226 634 3338 3353 3335
+ 3352
+ 2128 4 8 3350 130 3351 3354 3352 634 3353
+ 3355
+ 2129 4 8 226 940 3346 3345 634 941 3357
+ 3356
+ 2130 4 8 3346 3345 834 1706 3357 3356 2103
+ 2099
+ 2131 4 8 2103 2099 130 942 3357 3356 634
+ 941
+ 2132 4 8 940 943 3345 1706 941 942 3356
+ 2099
+ 2133 4 8 226 638 3332 3349 3224 3223 3359
+ 3358
+ 2134 4 8 3332 3349 1523 1527 3359 3358 1526
+ 1530
+ 2135 4 8 1526 1530 1507 1505 3359 3358 3224
+ 3223
+ 2136 4 8 638 635 3349 1527 3223 1505 3358
+ 1530
+ 2137 4 8 294 2141 292 2140 286 3360 289
+ 3361
+ 2138 4 8 292 2140 149 279 289 3361 285
+ 3362
+ 2139 4 8 285 3362 41 1603 289 3361 286
+ 3360
+ 2140 4 8 2141 280 2140 279 3360 1603 3361
+ 3362
+ 2141 4 8 993 1381 1379 1380 2176 2823 2179
+ 3363
+ 2142 4 8 1379 1380 527 1160 2179 3363 2175
+ 3364
+ 2143 4 8 2175 3364 294 2141 2179 3363 2176
+ 2823
+ 2144 4 8 1381 280 1380 1160 2823 2141 3363
+ 3364
+ 2145 4 8 136 3365 1460 3366 1452 3367 1456
+ 3368
+ 2146 4 8 1460 3366 294 2158 1456 3368 1455
+ 2159
+ 2147 4 8 1455 2159 856 2155 1456 3368 1452
+ 3367
+ 2148 4 8 3365 2154 3366 2158 3367 2155 3368
+ 2159
+ 2149 4 8 136 276 1460 2143 526 1159 3370
+ 3369
+ 2150 4 8 1460 2143 294 2141 3370 3369 2175
+ 3364
+ 2151 4 8 2175 3364 527 1160 3370 3369 526
+ 1159
+ 2152 4 8 276 280 2143 2141 1159 1160 3369
+ 3364
+ 2153 4 8 15 1824 40 1822 835 3371 3373
+ 3372
+ 2154 4 8 40 1822 41 304 3373 3372 1857
+ 3374
+ 2155 4 8 1857 3374 846 1630 3373 3372 835
+ 3371
+ 2156 4 8 1824 317 1822 304 3371 1630 3372
+ 3374
+ 2157 4 8 1627 3375 3377 3376 2541 3378 3380
+ 3379
+ 2158 4 8 3377 3376 328 453 3380 3379 452
+ 451
+ 2159 4 8 452 451 294 450 3380 3379 2541
+ 3378
+ 2160 4 8 3375 454 3376 453 3378 450 3379
+ 451
+ 2161 4 8 993 992 987 986 2833 3381 3383
+ 3382
+ 2162 4 8 987 986 984 985 3383 3382 2836
+ 3384
+ 2163 4 8 2836 3384 1627 3375 3383 3382 2833
+ 3381
+ 2164 4 8 992 454 986 985 3381 3375 3382
+ 3384
+ 2165 4 8 1342 2712 2807 3385 3386 3387 3389
+ 3388
+ 2166 4 8 2807 3385 1627 3375 3389 3388 2836
+ 3384
+ 2167 4 8 2836 3384 984 985 3389 3388 3386
+ 3387
+ 2168 4 8 2712 454 3385 3375 3387 985 3388
+ 3384
+ 2169 4 8 1643 2834 2551 3390 1646 2837 2805
+ 3391
+ 2170 4 8 2551 3390 1342 3386 2805 3391 2807
+ 3389
+ 2171 4 8 2807 3389 1627 2836 2805 3391 1646
+ 2837
+ 2172 4 8 2834 984 3390 3386 2837 2836 3391
+ 3389
+ 2173 4 8 1342 1345 2671 2673 2712 3392 3394
+ 3393
+ 2174 4 8 2671 2673 337 1604 3394 3393 2787
+ 2786
+ 2175 4 8 2787 2786 454 2681 3394 3393 2712
+ 3392
+ 2176 4 8 1345 528 2673 1604 3392 2681 3393
+ 2786
+ 2177 4 8 337 2671 2787 3394 1652 2806 3396
+ 3395
+ 2178 4 8 2787 3394 454 2712 3396 3395 3375
+ 3385
+ 2179 4 8 3375 3385 1627 2807 3396 3395 1652
+ 2806
+ 2180 4 8 2671 1342 3394 2712 2806 2807 3395
+ 3385
+ 2181 4 8 1342 2529 1345 2532 2712 2711 3392
+ 3397
+ 2182 4 8 1345 2532 528 531 3392 3397 2681
+ 2682
+ 2183 4 8 2681 2682 454 800 3392 3397 2712
+ 2711
+ 2184 4 8 2529 537 2532 531 2711 800 3397
+ 2682
+ 2185 4 8 2694 3398 3400 3399 3401 3402 3404
+ 3403
+ 2186 4 8 3400 3399 1342 3386 3404 3403 2551
+ 3390
+ 2187 4 8 2551 3390 1643 2834 3404 3403 3401
+ 3402
+ 2188 4 8 3398 984 3399 3386 3402 2834 3403
+ 3390
+ 2189 4 8 667 2452 715 2453 2029 3405 3407
+ 3406
+ 2190 4 8 715 2453 648 2450 3407 3406 672
+ 2461
+ 2191 4 8 672 2461 668 1447 3407 3406 2029
+ 3405
+ 2192 4 8 2452 1133 2453 2450 3405 1447 3406
+ 2461
+ 2193 4 8 1133 1243 2450 2451 1245 1244 3409
+ 3408
+ 2194 4 8 2450 2451 648 1203 3409 3408 646
+ 1204
+ 2195 4 8 646 1204 647 1205 3409 3408 1245
+ 1244
+ 2196 4 8 1243 237 2451 1203 1244 1205 3408
+ 1204
+ 2197 4 8 1133 1245 2450 3409 1896 3410 2460
+ 3411
+ 2198 4 8 2450 3409 648 646 2460 3411 679
+ 2472
+ 2199 4 8 679 2472 677 2469 2460 3411 1896
+ 3410
+ 2200 4 8 1245 647 3409 646 3410 2469 3411
+ 2472
+ 2201 4 8 668 669 672 673 2029 2032 3407
+ 3412
+ 2202 4 8 672 673 648 680 3407 3412 715
+ 716
+ 2203 4 8 715 716 667 722 3407 3412 2029
+ 2032
+ 2204 4 8 669 681 673 680 2032 722 3412
+ 716
+ 2205 4 8 706 2363 2014 3413 1657 2719 3111
+ 3414
+ 2206 4 8 2014 3413 790 3415 3111 3414 2706
+ 3416
+ 2207 4 8 2706 3416 1654 2721 3111 3414 1657
+ 2719
+ 2208 4 8 2363 581 3413 3415 2719 2721 3414
+ 3416
+ 2209 4 8 537 1988 1690 3417 1685 1983 1688
+ 3418
+ 2210 4 8 1690 3417 706 2363 1688 3418 1684
+ 2380
+ 2211 4 8 1684 2380 820 1984 1688 3418 1685
+ 1983
+ 2212 4 8 1988 581 3417 2363 1983 1984 3418
+ 2380
+ 2213 4 8 581 584 1984 2383 585 588 3161
+ 3419
+ 2214 4 8 1984 2383 820 1318 3161 3419 819
+ 1317
+ 2215 4 8 819 1317 557 592 3161 3419 585
+ 588
+ 2216 4 8 584 590 2383 1318 588 592 3419
+ 1317
+ 2217 4 8 1143 1952 1990 3420 1370 1953 3159
+ 3421
+ 2218 4 8 1990 3420 581 3213 3159 3421 585
+ 3268
+ 2219 4 8 585 3268 557 544 3159 3421 1370
+ 1953
+ 2220 4 8 1952 543 3420 3213 1953 544 3421
+ 3268
+ 2221 4 8 955 1668 2004 2005 1662 1664 3113
+ 3422
+ 2222 4 8 2004 2005 790 2010 3113 3422 2014
+ 2015
+ 2223 4 8 2014 2015 706 1334 3113 3422 1662
+ 1664
+ 2224 4 8 1668 541 2005 2010 1664 1334 3422
+ 2015
+ 2225 4 8 820 1682 1318 3174 1684 1683 2382
+ 3423
+ 2226 4 8 1318 3174 590 2968 2382 3423 709
+ 2967
+ 2227 4 8 709 2967 706 1341 2382 3423 1684
+ 1683
+ 2228 4 8 1682 542 3174 2968 1683 1341 3423
+ 2967
+ 2229 4 8 86 630 2309 3424 1055 2915 2310
+ 3425
+ 2230 4 8 2309 3424 214 217 2310 3425 2311
+ 3072
+ 2231 4 8 2311 3072 1056 2912 2310 3425 1055
+ 2915
+ 2232 4 8 630 223 3424 217 2915 2912 3425
+ 3072
+ 2233 4 8 593 596 1043 2421 597 600 3427
+ 3426
+ 2234 4 8 1043 2421 188 619 3427 3426 192
+ 621
+ 2235 4 8 192 621 199 604 3427 3426 597
+ 600
+ 2236 4 8 596 602 2421 619 600 604 3426
+ 621
+ 2237 4 8 442 855 859 857 445 2162 3429
+ 3428
+ 2238 4 8 859 857 860 858 3429 3428 2136
+ 2994
+ 2239 4 8 2136 2994 294 1455 3429 3428 445
+ 2162
+ 2240 4 8 855 856 857 858 2162 1455 3428
+ 2994
+ 2241 4 8 2154 2165 2157 3430 2241 2773 2242
+ 3431
+ 2242 4 8 2157 3430 442 1019 2242 3431 1992
+ 1993
+ 2243 4 8 1992 1993 496 1727 2242 3431 2241
+ 2773
+ 2244 4 8 2165 802 3430 1019 2773 1727 3431
+ 1993
+ 2245 4 8 2246 2240 2248 2244 3432 3433 3435
+ 3434
+ 2246 4 8 2248 2244 496 2241 3435 3434 519
+ 3436
+ 2247 4 8 519 3436 136 3365 3435 3434 3432
+ 3433
+ 2248 4 8 2240 2154 2244 2241 3433 3365 3434
+ 3436
+ 2249 4 8 811 1886 3438 3437 1521 1887 3440
+ 3439
+ 2250 4 8 3438 3437 2246 3441 3440 3439 2248
+ 3442
+ 2251 4 8 2248 3442 496 1884 3440 3439 1521
+ 1887
+ 2252 4 8 1886 1885 3437 3441 1887 1884 3439
+ 3442
+ 2253 4 8 463 2860 2854 3443 877 2862 2855
+ 3444
+ 2254 4 8 2854 3443 820 822 2855 3444 2018
+ 2019
+ 2255 4 8 2018 2019 606 1234 2855 3444 877
+ 2862
+ 2256 4 8 2860 824 3443 822 2862 1234 3444
+ 2019
+ 2257 4 8 935 3445 1907 3446 930 3447 2870
+ 3448
+ 2258 4 8 1907 3446 824 2860 2870 3448 815
+ 3449
+ 2259 4 8 815 3449 811 3450 2870 3448 930
+ 3447
+ 2260 4 8 3445 463 3446 2860 3447 3450 3448
+ 3449
+ 2261 4 8 811 3438 814 3451 1521 3440 3153
+ 3452
+ 2262 4 8 814 3451 820 2850 3153 3452 1366
+ 3155
+ 2263 4 8 1366 3155 496 2248 3153 3452 1521
+ 3440
+ 2264 4 8 3438 2246 3451 2850 3440 2248 3452
+ 3155
+ 2265 4 8 2154 2163 2157 3453 2165 2164 3430
+ 3454
+ 2266 4 8 2157 3453 442 443 3430 3454 1019
+ 1020
+ 2267 4 8 1019 1020 802 801 3430 3454 2165
+ 2164
+ 2268 4 8 2163 454 3453 443 2164 801 3454
+ 1020
+ 2269 4 8 1728 2049 2193 2194 2046 2050 3456
+ 3455
+ 2270 4 8 2193 2194 394 388 3456 3455 499
+ 492
+ 2271 4 8 499 492 500 489 3456 3455 2046
+ 2050
+ 2272 4 8 2049 385 2194 388 2050 489 3455
+ 492
+ 2273 4 8 294 450 445 444 2158 2535 2161
+ 3457
+ 2274 4 8 445 444 442 443 2161 3457 2157
+ 3453
+ 2275 4 8 2157 3453 2154 2163 2161 3457 2158
+ 2535
+ 2276 4 8 450 454 444 443 2535 2163 3457
+ 3453
+ 2277 4 8 2154 2157 2155 2156 2240 2239 3459
+ 3458
+ 2278 4 8 2155 2156 856 855 3459 3458 2658
+ 2659
+ 2279 4 8 2658 2659 2246 2245 3459 3458 2240
+ 2239
+ 2280 4 8 2157 442 2156 855 2239 2245 3458
+ 2659
+ 2281 4 8 385 489 2054 2053 491 490 3461
+ 3460
+ 2282 4 8 2054 2053 1134 1135 3461 3460 1138
+ 1139
+ 2283 4 8 1138 1139 496 495 3461 3460 491
+ 490
+ 2284 4 8 489 500 2053 1135 490 495 3460
+ 1139
+ 2285 4 8 136 1878 519 1880 3432 3462 3435
+ 3463
+ 2286 4 8 519 1880 496 1884 3435 3463 2248
+ 3442
+ 2287 4 8 2248 3442 2246 3441 3435 3463 3432
+ 3462
+ 2288 4 8 1878 1885 1880 1884 3462 3441 3463
+ 3442
+ 2289 4 8 1897 2637 2636 2640 3003 3233 3006
+ 3464
+ 2290 4 8 2636 2640 1914 2642 3006 3464 2628
+ 3465
+ 2291 4 8 2628 3465 2608 3232 3006 3464 3003
+ 3233
+ 2292 4 8 2637 1523 2640 2642 3233 3232 3464
+ 3465
+ 2293 4 8 463 2760 3445 3466 2860 2859 3446
+ 3467
+ 2294 4 8 3445 3466 935 2587 3446 3467 1907
+ 2882
+ 2295 4 8 1907 2882 824 2863 3446 3467 2860
+ 2859
+ 2296 4 8 2760 1713 3466 2587 2859 2863 3467
+ 2882
+ 2297 4 8 811 3438 3450 3468 814 3451 3470
+ 3469
+ 2298 4 8 3450 3468 463 2749 3470 3469 2854
+ 3158
+ 2299 4 8 2854 3158 820 2850 3470 3469 814
+ 3451
+ 2300 4 8 3438 2246 3468 2749 3451 2850 3469
+ 3158
+ 2301 4 8 824 2860 822 3443 815 3449 818
+ 3471
+ 2302 4 8 822 3443 820 2854 818 3471 814
+ 3470
+ 2303 4 8 814 3470 811 3450 818 3471 815
+ 3449
+ 2304 4 8 2860 463 3443 2854 3449 3450 3471
+ 3470
+ 2305 4 8 1143 1145 1142 1144 1370 1365 3473
+ 3472
+ 2306 4 8 1142 1144 500 495 3473 3472 1517
+ 1518
+ 2307 4 8 1517 1518 557 1364 3473 3472 1370
+ 1365
+ 2308 4 8 1145 496 1144 495 1365 1364 3472
+ 1518
+ 2309 4 8 802 791 798 792 3474 3475 3477
+ 3476
+ 2310 4 8 798 792 537 793 3477 3476 1988
+ 3478
+ 2311 4 8 1988 3478 581 3415 3477 3476 3474
+ 3475
+ 2312 4 8 791 790 792 793 3475 3415 3476
+ 3478
+ 2313 4 8 922 3479 1959 3480 1954 3481 1957
+ 3482
+ 2314 4 8 1959 3480 557 1517 1957 3482 1370
+ 3473
+ 2315 4 8 1370 3473 1143 1142 1957 3482 1954
+ 3481
+ 2316 4 8 3479 500 3480 1517 3481 1142 3482
+ 3473
+ 2317 4 8 1870 1869 3484 3483 3485 3486 3488
+ 3487
+ 2318 4 8 3484 3483 543 3302 3488 3487 546
+ 3489
+ 2319 4 8 546 3489 552 3263 3488 3487 3485
+ 3486
+ 2320 4 8 1869 1382 3483 3302 3486 3263 3487
+ 3489
+ 2321 4 8 1143 1145 1991 2491 1719 1722 3491
+ 3490
+ 2322 4 8 1991 2491 537 1997 3491 3490 798
+ 1996
+ 2323 4 8 798 1996 802 1727 3491 3490 1719
+ 1722
+ 2324 4 8 1145 496 2491 1997 1722 1727 3490
+ 1996
+ 2325 4 8 28 841 1475 1476 843 842 3493
+ 3492
+ 2326 4 8 1475 1476 1478 1477 3493 3492 1936
+ 1941
+ 2327 4 8 1936 1941 845 844 3493 3492 843
+ 842
+ 2328 4 8 841 846 1476 1477 842 844 3492
+ 1941
+ 2329 4 8 71 65 473 472 3494 3495 3497
+ 3496
+ 2330 4 8 473 472 372 414 3497 3496 3499
+ 3498
+ 2331 4 8 3499 3498 3303 3307 3497 3496 3494
+ 3495
+ 2332 4 8 65 66 472 414 3495 3307 3496
+ 3498
+ 2333 4 8 150 1130 1128 1129 658 3500 3178
+ 3501
+ 2334 4 8 1128 1129 1133 1131 3178 3501 2452
+ 3502
+ 2335 4 8 2452 3502 667 2042 3178 3501 658
+ 3500
+ 2336 4 8 1130 1132 1129 1131 3500 2042 3501
+ 3502
+ 2337 4 8 3068 3503 3067 3504 3059 3505 3062
+ 3506
+ 2338 4 8 3067 3504 214 2311 3062 3506 2920
+ 2921
+ 2339 4 8 2920 2921 954 1849 3062 3506 3059
+ 3505
+ 2340 4 8 3503 1056 3504 2311 3505 1849 3506
+ 2921
+ 2341 4 8 214 558 217 2927 215 559 216
+ 3507
+ 2342 4 8 217 2927 223 1556 216 3507 222
+ 2357
+ 2343 4 8 222 2357 164 564 216 3507 215
+ 559
+ 2344 4 8 558 569 2927 1556 559 564 3507
+ 2357
+ 2345 4 8 834 1704 832 2232 827 1705 830
+ 3508
+ 2346 4 8 832 2232 134 2231 830 3508 826
+ 2764
+ 2347 4 8 826 2764 606 1710 830 3508 827
+ 1705
+ 2348 4 8 1704 1713 2232 2231 1705 1710 3508
+ 2764
+ 2349 4 8 226 3332 3335 3336 3346 3509 3511
+ 3510
+ 2350 4 8 3335 3336 803 3342 3511 3510 3513
+ 3512
+ 2351 4 8 3513 3512 834 3252 3511 3510 3346
+ 3509
+ 2352 4 8 3332 1523 3336 3342 3509 3252 3510
+ 3512
+ 2353 4 8 1507 3224 3228 3343 1526 3359 3254
+ 3514
+ 2354 4 8 3228 3343 834 3346 3254 3514 3252
+ 3509
+ 2355 4 8 3252 3509 1523 3332 3254 3514 1526
+ 3359
+ 2356 4 8 3224 226 3343 3346 3359 3332 3514
+ 3509
+ 2357 4 8 130 132 2103 3515 3350 3516 3518
+ 3517
+ 2358 4 8 2103 3515 834 832 3518 3517 3513
+ 3519
+ 2359 4 8 3513 3519 803 807 3518 3517 3350
+ 3516
+ 2360 4 8 132 134 3515 832 3516 807 3517
+ 3519
+ 2361 4 8 1523 2642 2874 3520 1524 2641 2872
+ 3521
+ 2362 4 8 2874 3520 2236 2609 2872 3521 2508
+ 2610
+ 2363 4 8 2508 2610 1508 2611 2872 3521 1524
+ 2641
+ 2364 4 8 2642 1914 3520 2609 2641 2611 3521
+ 2610
+ 2365 4 8 1927 2617 3523 3522 1918 2612 3525
+ 3524
+ 2366 4 8 3523 3522 1523 2874 3525 3524 2642
+ 3520
+ 2367 4 8 2642 3520 1914 2609 3525 3524 1918
+ 2612
+ 2368 4 8 2617 2236 3522 2874 2612 2609 3524
+ 3520
+ 2369 4 8 2500 2503 2770 2771 2634 2633 3527
+ 3526
+ 2370 4 8 2770 2771 1928 2772 3527 3526 3529
+ 3528
+ 2371 4 8 3529 3528 934 2632 3527 3526 2634
+ 2633
+ 2372 4 8 2503 1508 2771 2772 2633 2632 3526
+ 3528
+ 2373 4 8 1897 2636 2445 2635 2819 3530 3532
+ 3531
+ 2374 4 8 2445 2635 1508 2611 3532 3531 2772
+ 3533
+ 2375 4 8 2772 3533 1928 1915 3532 3531 2819
+ 3530
+ 2376 4 8 2636 1914 2635 2611 3530 1915 3531
+ 3533
+ 2377 4 8 2288 3534 3104 3535 3099 3536 3102
+ 3537
+ 2378 4 8 3104 3535 110 3088 3102 3537 3095
+ 3089
+ 2379 4 8 3095 3089 2205 3090 3102 3537 3099
+ 3536
+ 2380 4 8 3534 1631 3535 3088 3536 3090 3537
+ 3089
+ 2381 4 8 1832 1825 2091 3538 1838 1837 3540
+ 3539
+ 2382 4 8 2091 3538 226 2467 3540 3539 645
+ 2465
+ 2383 4 8 645 2465 647 1210 3540 3539 1838
+ 1837
+ 2384 4 8 1825 1206 3538 2467 1837 1210 3539
+ 2465
+ 2385 4 8 1631 3319 3542 3541 1634 3321 3544
+ 3543
+ 2386 4 8 3542 3541 2608 3003 3544 3543 2607
+ 3238
+ 2387 4 8 2607 3238 1206 1901 3544 3543 1634
+ 3321
+ 2388 4 8 3319 1897 3541 3003 3321 1901 3543
+ 3238
+ 2389 4 8 1406 2606 1641 2605 1635 3545 1638
+ 3546
+ 2390 4 8 1641 2605 1206 2607 1638 3546 1634
+ 3544
+ 2391 4 8 1634 3544 1631 3542 1638 3546 1635
+ 3545
+ 2392 4 8 2606 2608 2605 2607 3545 3542 3546
+ 3544
+ 2393 4 8 1120 2890 1207 2895 3322 3547 3325
+ 3548
+ 2394 4 8 1207 2895 1206 1639 3325 3548 1634
+ 1633
+ 2395 4 8 1634 1633 1631 1632 3325 3548 3322
+ 3547
+ 2396 4 8 2890 580 2895 1639 3547 1632 3548
+ 1633
+ 2397 4 8 337 617 1653 3312 1745 2785 1746
+ 3549
+ 2398 4 8 1653 3312 317 1415 1746 3549 315
+ 2249
+ 2399 4 8 315 2249 316 1032 1746 3549 1745
+ 2785
+ 2400 4 8 617 618 3312 1415 2785 1032 3549
+ 2249
+ 2401 4 8 312 3550 1804 3551 1808 3552 1811
+ 3553
+ 2402 4 8 1804 3551 618 888 1811 3553 1417
+ 2270
+ 2403 4 8 1417 2270 23 2271 1811 3553 1808
+ 3552
+ 2404 4 8 3550 296 3551 888 3552 2271 3553
+ 2270
+ 2405 4 8 15 1824 3555 3554 25 1823 3557
+ 3556
+ 2406 4 8 3555 3554 213 1408 3557 3556 1411
+ 1412
+ 2407 4 8 1411 1412 23 1418 3557 3556 25
+ 1823
+ 2408 4 8 1824 317 3554 1408 1823 1418 3556
+ 1412
+ 2409 4 8 860 1147 3559 3558 3560 3561 3563
+ 3562
+ 2410 4 8 3559 3558 2258 3564 3563 3562 3566
+ 3565
+ 2411 4 8 3566 3565 341 1038 3563 3562 3560
+ 3561
+ 2412 4 8 1147 316 3558 3564 3561 1038 3562
+ 3565
+ 2413 4 8 149 2511 1148 3567 433 3568 3570
+ 3569
+ 2414 4 8 1148 3567 316 3564 3570 3569 1041
+ 3571
+ 2415 4 8 1041 3571 430 2262 3570 3569 433
+ 3568
+ 2416 4 8 2511 2258 3567 3564 3568 2262 3569
+ 3571
+ 2417 4 8 510 501 3573 3572 509 504 3575
+ 3574
+ 2418 4 8 3573 3572 593 2251 3575 3574 2253
+ 2254
+ 2419 4 8 2253 2254 430 503 3575 3574 509
+ 504
+ 2420 4 8 501 296 3572 2251 504 503 3574
+ 2254
+ 2421 4 8 467 2144 2476 2488 2146 2145 2754
+ 3576
+ 2422 4 8 2476 2488 148 147 2754 3576 2287
+ 2286
+ 2423 4 8 2287 2286 510 2151 2754 3576 2146
+ 2145
+ 2424 4 8 2144 149 2488 147 2145 2151 3576
+ 2286
+ 2425 4 8 135 507 440 2285 434 508 437
+ 3577
+ 2426 4 8 440 2285 149 2151 437 3577 433
+ 3578
+ 2427 4 8 433 3578 430 509 437 3577 434
+ 508
+ 2428 4 8 507 510 2285 2151 508 509 3577
+ 3578
+ 2429 4 8 1120 3579 1898 3580 1393 3581 2885
+ 3582
+ 2430 4 8 1898 3580 1897 3316 2885 3582 2442
+ 3583
+ 2431 4 8 2442 3583 1391 3087 2885 3582 1393
+ 3581
+ 2432 4 8 3579 2209 3580 3316 3581 3087 3582
+ 3583
+ 2433 4 8 2209 3087 3585 3584 3108 3107 3587
+ 3586
+ 2434 4 8 3585 3584 1382 1385 3587 3586 3263
+ 3266
+ 2435 4 8 3263 3266 552 2228 3587 3586 3108
+ 3107
+ 2436 4 8 3087 1391 3584 1385 3107 2228 3586
+ 3266
+ 2437 4 8 1120 3579 1386 3588 2891 3589 3591
+ 3590
+ 2438 4 8 1386 3588 1382 3585 3591 3590 1873
+ 3592
+ 2439 4 8 1873 3592 110 3097 3591 3590 2891
+ 3589
+ 2440 4 8 3579 2209 3588 3585 3589 3097 3590
+ 3592
+ 2441 4 8 845 2349 3594 3593 3138 3137 3596
+ 3595
+ 2442 4 8 3594 3593 1098 1757 3596 3595 1756
+ 1755
+ 2443 4 8 1756 1755 1754 1753 3596 3595 3138
+ 3137
+ 2444 4 8 2349 37 3593 1757 3137 1753 3595
+ 1755
+ 2445 4 8 984 3204 3598 3597 3599 3600 3602
+ 3601
+ 2446 4 8 3598 3597 2703 3603 3602 3601 2702
+ 3604
+ 2447 4 8 2702 3604 790 3605 3602 3601 3599
+ 3600
+ 2448 4 8 3204 3201 3597 3603 3600 3605 3601
+ 3604
+ 2449 4 8 1181 1678 1776 3606 1680 1679 1775
+ 3607
+ 2450 4 8 1776 3606 1654 3038 1775 3607 1658
+ 3040
+ 2451 4 8 1658 3040 785 1681 1775 3607 1680
+ 1679
+ 2452 4 8 1678 981 3606 3038 1679 1681 3607
+ 3040
+ 2453 4 8 1133 1131 1447 1441 2452 3502 3405
+ 3608
+ 2454 4 8 1447 1441 668 1438 3405 3608 2029
+ 3609
+ 2455 4 8 2029 3609 667 2042 3405 3608 2452
+ 3502
+ 2456 4 8 1131 1132 1441 1438 3502 2042 3608
+ 3609
+ 2457 4 8 368 367 420 2058 2038 3610 3612
+ 3611
+ 2458 4 8 420 2058 250 246 3612 3611 1169
+ 3613
+ 2459 4 8 1169 3613 667 658 3612 3611 2038
+ 3610
+ 2460 4 8 367 150 2058 246 3610 658 3611
+ 3613
+ 2461 4 8 2608 3542 2606 3545 2626 3614 3616
+ 3615
+ 2462 4 8 2606 3545 1406 1635 3616 3615 3618
+ 3617
+ 2463 4 8 3618 3617 1923 3619 3616 3615 2626
+ 3614
+ 2464 4 8 3542 1631 3545 1635 3614 3619 3615
+ 3617
+ 2465 4 8 790 794 2708 2710 3599 3620 3622
+ 3621
+ 2466 4 8 2708 2710 1342 2712 3622 3621 3386
+ 3387
+ 2467 4 8 3386 3387 984 985 3622 3621 3599
+ 3620
+ 2468 4 8 794 454 2710 2712 3620 985 3621
+ 3387
+ 2469 4 8 706 2363 1690 3417 2014 3413 2017
+ 3623
+ 2470 4 8 1690 3417 537 1988 2017 3623 793
+ 3478
+ 2471 4 8 793 3478 790 3415 2017 3623 2014
+ 3413
+ 2472 4 8 2363 581 3417 1988 3413 3415 3623
+ 3478
+ 2473 4 8 790 794 3599 3620 791 795 3625
+ 3624
+ 2474 4 8 3599 3620 984 985 3625 3624 988
+ 989
+ 2475 4 8 988 989 802 801 3625 3624 791
+ 795
+ 2476 4 8 794 454 3620 985 795 801 3624
+ 989
+ 2477 4 8 790 2009 2708 3626 2010 2008 3050
+ 3627
+ 2478 4 8 2708 3626 1342 1791 3050 3627 1346
+ 1790
+ 2479 4 8 1346 1790 541 1794 3050 3627 2010
+ 2008
+ 2480 4 8 2009 981 3626 1791 2008 1794 3627
+ 1790
+ 2481 4 8 3201 3277 3629 3628 3274 3278 3631
+ 3630
+ 2482 4 8 3629 3628 1143 1990 3631 3630 1952
+ 3420
+ 2483 4 8 1952 3420 543 3213 3631 3630 3274
+ 3278
+ 2484 4 8 3277 581 3628 1990 3278 3213 3630
+ 3420
+ 2485 4 8 3201 3629 3277 3628 3202 3632 3634
+ 3633
+ 2486 4 8 3277 3628 581 1990 3634 3633 3474
+ 3635
+ 2487 4 8 3474 3635 802 1719 3634 3633 3202
+ 3632
+ 2488 4 8 3629 1143 3628 1990 3632 1719 3633
+ 3635
+ 2489 4 8 984 3636 3398 3637 3598 3638 3640
+ 3639
+ 2490 4 8 3398 3637 2694 3641 3640 3639 2697
+ 3642
+ 2491 4 8 2697 3642 2703 3643 3640 3639 3598
+ 3638
+ 2492 4 8 3636 2181 3637 3641 3638 3643 3639
+ 3642
+ 2493 4 8 23 1411 25 3557 22 3644 24
+ 3645
+ 2494 4 8 25 3557 15 3555 24 3645 26
+ 3646
+ 2495 4 8 26 3646 27 212 24 3645 22
+ 3644
+ 2496 4 8 1411 213 3557 3555 3644 212 3645
+ 3646
+ 2497 4 8 337 1653 608 3314 1647 1648 3648
+ 3647
+ 2498 4 8 608 3314 607 2798 3648 3647 2549
+ 3649
+ 2499 4 8 2549 3649 1643 1644 3648 3647 1647
+ 1648
+ 2500 4 8 1653 317 3314 2798 1648 1644 3647
+ 3649
+ 2501 4 8 972 2688 2794 3650 2666 3651 2793
+ 3652
+ 2502 4 8 2794 3650 317 1824 2793 3652 1408
+ 3554
+ 2503 4 8 1408 3554 213 3555 2793 3652 2666
+ 3651
+ 2504 4 8 2688 15 3650 1824 3651 3555 3652
+ 3554
+ 2505 4 8 1180 2335 3654 3653 1856 3655 3657
+ 3656
+ 2506 4 8 3654 3653 1643 3658 3657 3656 3660
+ 3659
+ 2507 4 8 3660 3659 972 2688 3657 3656 1856
+ 3655
+ 2508 4 8 2335 15 3653 3658 3655 2688 3656
+ 3659
+ 2509 4 8 15 2335 2303 2331 2688 3655 2691
+ 3661
+ 2510 4 8 2303 2331 56 2330 2691 3661 2687
+ 3662
+ 2511 4 8 2687 3662 972 1856 2691 3661 2688
+ 3655
+ 2512 4 8 2335 1180 2331 2330 3655 1856 3661
+ 3662
+ 2513 4 8 295 885 1622 1623 283 880 3664
+ 3663
+ 2514 4 8 1622 1623 846 1630 3664 3663 1857
+ 3374
+ 2515 4 8 1857 3374 41 304 3664 3663 283
+ 880
+ 2516 4 8 885 317 1623 1630 880 304 3663
+ 3374
+ 2517 4 8 2618 3665 3667 3666 3668 3669 3671
+ 3670
+ 2518 4 8 3667 3666 1406 3672 3671 3670 2600
+ 3673
+ 2519 4 8 2600 3673 2597 3674 3671 3670 3668
+ 3669
+ 2520 4 8 3665 121 3666 3672 3669 3674 3670
+ 3673
+ 2521 4 8 2694 3401 3676 3675 3398 3402 3678
+ 3677
+ 2522 4 8 3676 3675 1180 3654 3678 3677 3680
+ 3679
+ 2523 4 8 3680 3679 984 2834 3678 3677 3398
+ 3402
+ 2524 4 8 3401 1643 3675 3654 3402 2834 3677
+ 3679
+ 2525 4 8 1181 1176 1179 1177 1674 3049 3120
+ 3681
+ 2526 4 8 1179 1177 1180 1178 3120 3681 1850
+ 3682
+ 2527 4 8 1850 3682 954 1844 3120 3681 1674
+ 3049
+ 2528 4 8 1176 1110 1177 1178 3049 1844 3681
+ 3682
+ 2529 4 8 607 2798 1787 2796 2549 3649 3684
+ 3683
+ 2530 4 8 1787 2796 972 2794 3684 3683 3660
+ 3685
+ 2531 4 8 3660 3685 1643 1644 3684 3683 2549
+ 3649
+ 2532 4 8 2798 317 2796 2794 3649 1644 3683
+ 3685
+ 2533 4 8 2694 2695 3687 3686 3400 3688 3690
+ 3689
+ 2534 4 8 3687 3686 981 2009 3690 3689 1791
+ 3626
+ 2535 4 8 1791 3626 1342 2708 3690 3689 3400
+ 3688
+ 2536 4 8 2695 790 3686 2009 3688 2708 3689
+ 3626
+ 2537 4 8 1643 2840 1644 3691 3658 3692 3694
+ 3693
+ 2538 4 8 1644 3691 317 1630 3694 3693 1824
+ 3371
+ 2539 4 8 1824 3371 15 835 3694 3693 3658
+ 3692
+ 2540 4 8 2840 846 3691 1630 3692 835 3693
+ 3371
+ 2541 4 8 1258 1260 1296 1298 3152 3151 3166
+ 3695
+ 2542 4 8 1296 1298 542 682 3166 3695 2495
+ 2494
+ 2543 4 8 2495 2494 2492 2493 3166 3695 3152
+ 3151
+ 2544 4 8 1260 342 1298 682 3151 2493 3695
+ 2494
+ 2545 4 8 537 536 2525 2677 1685 1686 2522
+ 3696
+ 2546 4 8 2525 2677 2492 2495 2522 3696 2519
+ 3163
+ 2547 4 8 2519 3163 820 1682 2522 3696 1685
+ 1686
+ 2548 4 8 536 542 2677 2495 1686 1682 3696
+ 3163
+ 2549 4 8 2492 2523 2519 2518 2650 2649 3698
+ 3697
+ 2550 4 8 2519 2518 820 2517 3698 3697 2848
+ 2849
+ 2551 4 8 2848 2849 468 2655 3698 3697 2650
+ 2649
+ 2552 4 8 2523 442 2518 2517 2649 2655 3697
+ 2849
+ 2553 4 8 442 1611 848 3699 2523 2736 2652
+ 3700
+ 2554 4 8 848 3699 847 3167 2652 3700 2651
+ 3170
+ 2555 4 8 2651 3170 2492 2493 2652 3700 2523
+ 2736
+ 2556 4 8 1611 342 3699 3167 2736 2493 3700
+ 3170
+ 2557 4 8 468 2848 2650 3698 3701 3702 3704
+ 3703
+ 2558 4 8 2650 3698 2492 2519 3704 3703 3152
+ 3164
+ 2559 4 8 3152 3164 1258 2020 3704 3703 3701
+ 3702
+ 2560 4 8 2848 820 3698 2519 3702 2020 3703
+ 3164
+ 2561 4 8 593 2417 594 2646 3573 3705 3707
+ 3706
+ 2562 4 8 594 2646 606 2424 3707 3706 2429
+ 2427
+ 2563 4 8 2429 2427 510 2266 3707 3706 3573
+ 3705
+ 2564 4 8 2417 2267 2646 2424 3705 2266 3706
+ 2427
+ 2565 4 8 442 446 1611 3708 1606 2790 1609
+ 3709
+ 2566 4 8 1611 3708 342 329 1609 3709 336
+ 330
+ 2567 4 8 336 330 337 331 1609 3709 1606
+ 2790
+ 2568 4 8 446 328 3708 329 2790 331 3709
+ 330
+ 2569 4 8 2258 2511 3559 3710 2513 2512 3712
+ 3711
+ 2570 4 8 3559 3710 860 1154 3712 3711 858
+ 2996
+ 2571 4 8 858 2996 856 1454 3712 3711 2513
+ 2512
+ 2572 4 8 2511 149 3710 1154 2512 1454 3711
+ 2996
+ 2573 4 8 406 407 3714 3713 409 408 3716
+ 3715
+ 2574 4 8 3714 3713 3303 3307 3716 3715 3499
+ 3498
+ 2575 4 8 3499 3498 372 414 3716 3715 409
+ 408
+ 2576 4 8 407 66 3713 3307 408 414 3715
+ 3498
+ 2577 4 8 1728 1729 1732 1733 3717 3718 3720
+ 3719
+ 2578 4 8 1732 1733 87 116 3720 3719 382
+ 380
+ 2579 4 8 382 380 384 377 3720 3719 3717
+ 3718
+ 2580 4 8 1729 110 1733 116 3718 377 3719
+ 380
+ 2581 4 8 1870 3484 3722 3721 3723 3724 3726
+ 3725
+ 2582 4 8 3722 3721 1143 1952 3726 3725 1954
+ 1955
+ 2583 4 8 1954 1955 922 1960 3726 3725 3723
+ 3724
+ 2584 4 8 3484 543 3721 1952 3724 1960 3725
+ 1955
+ 2585 4 8 1870 3727 3484 3728 3729 3730 3732
+ 3731
+ 2586 4 8 3484 3728 543 3733 3732 3731 3735
+ 3734
+ 2587 4 8 3735 3734 3737 3736 3732 3731 3729
+ 3730
+ 2588 4 8 3727 1765 3728 3733 3730 3736 3731
+ 3734
+ 2589 4 8 1382 1444 3302 3297 3263 3262 3489
+ 3738
+ 2590 4 8 3302 3297 543 2407 3489 3738 546
+ 3200
+ 2591 4 8 546 3200 552 2403 3489 3738 3263
+ 3262
+ 2592 4 8 1444 668 3297 2407 3262 2403 3738
+ 3200
+ 2593 4 8 2209 3087 3579 3581 3585 3584 3588
+ 3739
+ 2594 4 8 3579 3581 1120 1393 3588 3739 1386
+ 1389
+ 2595 4 8 1386 1389 1382 1385 3588 3739 3585
+ 3584
+ 2596 4 8 3087 1391 3581 1393 3584 1385 3739
+ 1389
+ 2597 4 8 618 886 3741 3740 1817 1816 3743
+ 3742
+ 2598 4 8 3741 3740 209 657 3743 3742 203
+ 3057
+ 2599 4 8 203 3057 200 1613 3743 3742 1817
+ 1816
+ 2600 4 8 886 176 3740 657 1816 1613 3742
+ 3057
+ 2601 4 8 110 3097 1873 3592 1872 3744 1871
+ 3745
+ 2602 4 8 1873 3592 1382 3585 1871 3745 1869
+ 3746
+ 2603 4 8 1869 3746 1870 3747 1871 3745 1872
+ 3744
+ 2604 4 8 3097 2209 3592 3585 3744 3747 3745
+ 3746
+ 2605 4 8 922 3479 1954 3481 3723 3748 3726
+ 3749
+ 2606 4 8 1954 3481 1143 1142 3726 3749 3722
+ 3750
+ 2607 4 8 3722 3750 1870 3751 3726 3749 3723
+ 3748
+ 2608 4 8 3479 500 3481 1142 3748 3751 3749
+ 3750
+ 2609 4 8 2694 2698 3687 3752 2695 2699 3686
+ 3753
+ 2610 4 8 3687 3752 981 3038 3686 3753 2009
+ 3052
+ 2611 4 8 2009 3052 790 2706 3686 3753 2695
+ 2699
+ 2612 4 8 2698 1654 3752 3038 2699 2706 3753
+ 3052
+ 2613 4 8 3303 3754 3756 3755 3757 3758 3760
+ 3759
+ 2614 4 8 3756 3755 429 3761 3760 3759 2728
+ 3762
+ 2615 4 8 2728 3762 57 3763 3760 3759 3757
+ 3758
+ 2616 4 8 3754 3764 3755 3761 3758 3763 3759
+ 3762
+ 2617 4 8 3201 3202 3205 3206 3765 3766 3768
+ 3767
+ 2618 4 8 3205 3206 870 869 3768 3767 864
+ 863
+ 2619 4 8 864 863 861 862 3768 3767 3765
+ 3766
+ 2620 4 8 3202 802 3206 869 3766 862 3767
+ 863
+ 2621 4 8 384 1003 382 3769 3717 3770 3720
+ 3771
+ 2622 4 8 382 3769 87 386 3720 3771 1732
+ 2192
+ 2623 4 8 1732 2192 1728 2049 3720 3771 3717
+ 3770
+ 2624 4 8 1003 385 3769 386 3770 2049 3771
+ 2192
+ 2625 4 8 870 3284 864 3285 1013 3772 1739
+ 3773
+ 2626 4 8 864 3285 861 996 1739 3773 999
+ 1000
+ 2627 4 8 999 1000 398 1005 1739 3773 1013
+ 3772
+ 2628 4 8 3284 384 3285 996 3772 1005 3773
+ 1000
+ 2629 4 8 1258 2647 3701 3774 2025 2643 3776
+ 3775
+ 2630 4 8 3701 3774 468 2422 3776 3775 879
+ 2423
+ 2631 4 8 879 2423 606 2424 3776 3775 2025
+ 2643
+ 2632 4 8 2647 2267 3774 2422 2643 2424 3775
+ 2423
+ 2633 4 8 1713 2238 2760 3777 2587 2586 3466
+ 3778
+ 2634 4 8 2760 3777 463 3779 3466 3778 3445
+ 3780
+ 2635 4 8 3445 3780 935 2510 3466 3778 2587
+ 2586
+ 2636 4 8 2238 2236 3777 3779 2586 2510 3778
+ 3780
+ 2637 4 8 3201 3781 3783 3782 3274 3784 3786
+ 3785
+ 2638 4 8 3783 3782 3737 3736 3786 3785 3735
+ 3734
+ 2639 4 8 3735 3734 543 3733 3786 3785 3274
+ 3784
+ 2640 4 8 3781 1765 3782 3736 3784 3733 3785
+ 3734
+ 2641 4 8 2246 3441 2749 3787 2744 3788 2747
+ 3789
+ 2642 4 8 2749 3787 463 2484 2747 3789 465
+ 2481
+ 2643 4 8 465 2481 467 2478 2747 3789 2744
+ 3788
+ 2644 4 8 3441 1885 3787 2484 3788 2478 3789
+ 2481
+ 2645 4 8 328 1467 452 2139 446 2743 449
+ 3790
+ 2646 4 8 452 2139 294 2136 449 3790 445
+ 3429
+ 2647 4 8 445 3429 442 859 449 3790 446
+ 2743
+ 2648 4 8 1467 860 2139 2136 2743 859 3790
+ 3429
+ 2649 4 8 3791 3792 3794 3793 3795 3796 3798
+ 3797
+ 2650 4 8 3794 3793 425 3799 3798 3797 424
+ 3800
+ 2651 4 8 424 3800 429 3761 3798 3797 3795
+ 3796
+ 2652 4 8 3792 3764 3793 3799 3796 3761 3797
+ 3800
+ 2653 4 8 789 959 1798 3250 788 3801 2190
+ 3802
+ 2654 4 8 1798 3250 250 427 2190 3802 1169
+ 3803
+ 2655 4 8 1169 3803 667 2044 2190 3802 788
+ 3801
+ 2656 4 8 959 425 3250 427 3801 2044 3802
+ 3803
+ 2657 4 8 214 3067 656 3066 2312 3804 2320
+ 3805
+ 2658 4 8 656 3066 209 3065 2320 3805 2317
+ 3806
+ 2659 4 8 2317 3806 72 3807 2320 3805 2312
+ 3804
+ 2660 4 8 3067 3068 3066 3065 3804 3807 3805
+ 3806
+ 2661 4 8 42 45 1118 1115 2908 2907 3809
+ 3808
+ 2662 4 8 1118 1115 1084 1112 3809 3808 1583
+ 1582
+ 2663 4 8 1583 1582 743 1581 3809 3808 2908
+ 2907
+ 2664 4 8 45 51 1115 1112 2907 1581 3808
+ 1582
+ 2665 4 8 55 3246 2903 3810 1779 3811 3813
+ 3812
+ 2666 4 8 2903 3810 2181 3814 3813 3812 3816
+ 3815
+ 2667 4 8 3816 3815 271 3817 3813 3812 1779
+ 3811
+ 2668 4 8 3246 1080 3810 3814 3811 3817 3812
+ 3815
+ 2669 4 8 606 2025 594 2644 601 2963 595
+ 3818
+ 2670 4 8 594 2644 593 1254 595 3818 596
+ 2419
+ 2671 4 8 596 2419 602 1300 595 3818 601
+ 2963
+ 2672 4 8 2025 1258 2644 1254 2963 1300 3818
+ 2419
+ 2673 4 8 199 356 192 512 597 3819 3427
+ 3820
+ 2674 4 8 192 512 188 516 3427 3820 1043
+ 3821
+ 2675 4 8 1043 3821 593 2251 3427 3820 597
+ 3819
+ 2676 4 8 356 296 512 516 3819 2251 3820
+ 3821
+ 2677 4 8 846 841 1857 1860 835 836 3373
+ 3822
+ 2678 4 8 1857 1860 41 32 3373 3822 40
+ 33
+ 2679 4 8 40 33 15 29 3373 3822 835
+ 836
+ 2680 4 8 841 28 1860 32 836 29 3822
+ 33
+ 2681 4 8 1084 1118 1189 2069 1119 1117 1190
+ 3823
+ 2682 4 8 1189 2069 1181 1170 1190 3823 1176
+ 1171
+ 2683 4 8 1176 1171 1110 1116 1190 3823 1119
+ 1117
+ 2684 4 8 1118 42 2069 1170 1117 1116 3823
+ 1171
+ 2685 4 8 70 1969 68 3824 61 3825 64
+ 3826
+ 2686 4 8 68 3824 66 1768 64 3826 60
+ 3827
+ 2687 4 8 60 3827 57 274 64 3826 61
+ 3825
+ 2688 4 8 1969 37 3824 1768 3825 274 3826
+ 3827
+ 2689 4 8 1305 2129 1309 2577 1308 2595 1312
+ 3828
+ 2690 4 8 1309 2577 635 1498 1312 3828 1316
+ 3829
+ 2691 4 8 1316 3829 1314 1912 1312 3828 1308
+ 2595
+ 2692 4 8 2129 935 2577 1498 2595 1912 3828
+ 3829
+ 2693 4 8 527 2166 2175 2533 526 3830 3370
+ 3831
+ 2694 4 8 2175 2533 294 2158 3370 3831 1460
+ 3366
+ 2695 4 8 1460 3366 136 3365 3370 3831 526
+ 3830
+ 2696 4 8 2166 2154 2533 2158 3830 3365 3831
+ 3366
+ 2697 4 8 581 3415 3195 3832 3277 3833 3280
+ 3834
+ 2698 4 8 3195 3832 2080 3835 3280 3834 3276
+ 3836
+ 2699 4 8 3276 3836 3201 3605 3280 3834 3277
+ 3833
+ 2700 4 8 3415 790 3832 3835 3833 3605 3834
+ 3836
+ 2701 4 8 430 503 1034 2257 431 3837 1807
+ 3838
+ 2702 4 8 1034 2257 618 888 1807 3838 1804
+ 3551
+ 2703 4 8 1804 3551 312 3550 1807 3838 431
+ 3837
+ 2704 4 8 503 296 2257 888 3837 3550 3838
+ 3551
+ 2705 4 8 2500 3839 2504 3840 2999 3841 3002
+ 3842
+ 2706 4 8 2504 3840 935 3445 3002 3842 930
+ 3447
+ 2707 4 8 930 3447 811 3450 3002 3842 2999
+ 3841
+ 2708 4 8 3839 463 3840 3445 3841 3450 3842
+ 3447
+ 2709 4 8 2288 3843 3845 3844 3846 3847 3849
+ 3848
+ 2710 4 8 3845 3844 1923 3618 3849 3848 2621
+ 3850
+ 2711 4 8 2621 3850 2618 3667 3849 3848 3846
+ 3847
+ 2712 4 8 3843 1406 3844 3618 3847 3667 3848
+ 3850
+ 2713 4 8 3201 3629 3781 3851 3274 3631 3784
+ 3852
+ 2714 4 8 3781 3851 1765 3853 3784 3852 3733
+ 3854
+ 2715 4 8 3733 3854 543 1952 3784 3852 3274
+ 3631
+ 2716 4 8 3629 1143 3851 3853 3631 1952 3852
+ 3854
+ 2717 4 8 1 1049 3856 3855 2217 3857 3859
+ 3858
+ 2718 4 8 3856 3855 3068 3503 3859 3858 3861
+ 3860
+ 2719 4 8 3861 3860 56 3010 3859 3858 2217
+ 3857
+ 2720 4 8 1049 1056 3855 3503 3857 3010 3858
+ 3860
+ 2721 4 8 1 745 3023 3024 1048 1047 3863
+ 3862
+ 2722 4 8 3023 3024 81 80 3863 3862 75
+ 74
+ 2723 4 8 75 74 72 73 3863 3862 1048
+ 1047
+ 2724 4 8 745 86 3024 80 1047 73 3862
+ 74
+ 2725 4 8 406 1865 3865 3864 3866 3867 3869
+ 3868
+ 2726 4 8 3865 3864 1085 3870 3869 3868 3872
+ 3871
+ 2727 4 8 3872 3871 384 3873 3869 3868 3866
+ 3867
+ 2728 4 8 1865 1870 3864 3870 3867 3873 3868
+ 3871
+ 2729 4 8 3737 3874 3876 3875 3735 3877 3879
+ 3878
+ 2730 4 8 3876 3875 2080 3301 3879 3878 3271
+ 3300
+ 2731 4 8 3271 3300 543 3302 3879 3878 3735
+ 3877
+ 2732 4 8 3874 1382 3875 3301 3877 3302 3878
+ 3300
+ 2733 4 8 1870 3722 3727 3880 3881 3882 3884
+ 3883
+ 2734 4 8 3727 3880 1765 3853 3884 3883 3886
+ 3885
+ 2735 4 8 3886 3885 1134 1137 3884 3883 3881
+ 3882
+ 2736 4 8 3722 1143 3880 3853 3882 1137 3883
+ 3885
+ 2737 4 8 2080 3271 3183 3273 3195 3281 3198
+ 3887
+ 2738 4 8 3183 3273 694 2408 3198 3887 2362
+ 3215
+ 2739 4 8 2362 3215 581 3213 3198 3887 3195
+ 3281
+ 2740 4 8 3271 543 3273 2408 3281 3213 3887
+ 3215
+ 2741 4 8 984 3204 2542 3208 3598 3597 3889
+ 3888
+ 2742 4 8 2542 3208 870 3205 3889 3888 3891
+ 3890
+ 2743 4 8 3891 3890 2703 3603 3889 3888 3598
+ 3597
+ 2744 4 8 3204 3201 3208 3205 3597 3603 3888
+ 3890
+ 2745 4 8 2080 3276 3835 3836 3042 3892 3894
+ 3893
+ 2746 4 8 3835 3836 790 3605 3894 3893 2702
+ 3604
+ 2747 4 8 2702 3604 2703 3603 3894 3893 3042
+ 3892
+ 2748 4 8 3276 3201 3836 3605 3892 3603 3893
+ 3604
+ 2749 4 8 3201 3202 3765 3766 3629 3632 3896
+ 3895
+ 2750 4 8 3765 3766 861 862 3896 3895 1721
+ 1720
+ 2751 4 8 1721 1720 1143 1719 3896 3895 3629
+ 3632
+ 2752 4 8 3202 802 3766 862 3632 1719 3895
+ 1720
+ 2753 4 8 581 1990 1988 1989 3474 3635 3477
+ 3897
+ 2754 4 8 1988 1989 537 1991 3477 3897 798
+ 3491
+ 2755 4 8 798 3491 802 1719 3477 3897 3474
+ 3635
+ 2756 4 8 1990 1143 1989 1991 3635 1719 3897
+ 3491
+ 2757 4 8 15 3555 2688 3651 26 3646 2689
+ 3898
+ 2758 4 8 2688 3651 972 2666 2689 3898 2323
+ 3899
+ 2759 4 8 2323 3899 27 212 2689 3898 26
+ 3646
+ 2760 4 8 3555 213 3651 2666 3646 212 3898
+ 3899
+ 2761 4 8 1 2217 16 3900 2 2328 19
+ 3901
+ 2762 4 8 16 3900 27 2692 19 3901 26
+ 2693
+ 2763 4 8 26 2693 15 2303 19 3901 2
+ 2328
+ 2764 4 8 2217 56 3900 2692 2328 2303 3901
+ 2693
+ 2765 4 8 72 3019 75 3021 3902 3903 3905
+ 3904
+ 2766 4 8 75 3021 81 1615 3905 3904 3907
+ 3906
+ 2767 4 8 3907 3906 27 201 3905 3904 3902
+ 3903
+ 2768 4 8 3019 200 3021 1615 3903 201 3904
+ 3906
+ 2769 4 8 209 203 2317 3056 208 202 3909
+ 3908
+ 2770 4 8 2317 3056 72 3019 3909 3908 3902
+ 3903
+ 2771 4 8 3902 3903 27 201 3909 3908 208
+ 202
+ 2772 4 8 203 200 3056 3019 202 201 3908
+ 3903
+ 2773 4 8 1 16 3856 3910 1048 3911 3913
+ 3912
+ 2774 4 8 3856 3910 3068 3914 3913 3912 3807
+ 3915
+ 2775 4 8 3807 3915 72 3902 3913 3912 1048
+ 3911
+ 2776 4 8 16 27 3910 3914 3911 3902 3912
+ 3915
+ 2777 4 8 3068 3059 3861 3916 3503 3505 3860
+ 3917
+ 2778 4 8 3861 3916 56 3918 3860 3917 3010
+ 3919
+ 2779 4 8 3010 3919 1056 1849 3860 3917 3503
+ 3505
+ 2780 4 8 3059 954 3916 3918 3505 1849 3917
+ 3919
+ 2781 4 8 496 1138 491 3461 1726 3920 3922
+ 3921
+ 2782 4 8 491 3461 385 2054 3922 3921 998
+ 3923
+ 2783 4 8 998 3923 861 3924 3922 3921 1726
+ 3920
+ 2784 4 8 1138 1134 3461 2054 3920 3924 3921
+ 3923
+ 2785 4 8 496 1138 1726 3920 1145 1141 1724
+ 3925
+ 2786 4 8 1726 3920 861 3924 1724 3925 1721
+ 3926
+ 2787 4 8 1721 3926 1143 1137 1724 3925 1145
+ 1141
+ 2788 4 8 1138 1134 3920 3924 1141 1137 3925
+ 3926
+ 2789 4 8 1870 3485 3747 3927 1869 3486 3746
+ 3928
+ 2790 4 8 3747 3927 2209 3108 3746 3928 3585
+ 3587
+ 2791 4 8 3585 3587 1382 3263 3746 3928 1869
+ 3486
+ 2792 4 8 3485 552 3927 3108 3486 3263 3928
+ 3587
+ 2793 4 8 1870 3484 3727 3728 3722 3721 3880
+ 3929
+ 2794 4 8 3727 3728 1765 3733 3880 3929 3853
+ 3854
+ 2795 4 8 3853 3854 1143 1952 3880 3929 3722
+ 3721
+ 2796 4 8 3484 543 3728 3733 3721 1952 3929
+ 3854
+ 2797 4 8 1094 2939 3130 3930 3931 3932 3934
+ 3933
+ 2798 4 8 3130 3930 350 1008 3934 3933 3141
+ 3935
+ 2799 4 8 3141 3935 384 3284 3934 3933 3931
+ 3932
+ 2800 4 8 2939 870 3930 1008 3932 3284 3933
+ 3935
+ 2801 4 8 922 2562 3723 3936 1960 3937 3724
+ 3938
+ 2802 4 8 3723 3936 1870 3485 3724 3938 3484
+ 3488
+ 2803 4 8 3484 3488 543 546 3724 3938 1960
+ 3937
+ 2804 4 8 2562 552 3936 3485 3937 546 3938
+ 3488
+ 2805 4 8 23 22 1616 3939 1411 3644 3941
+ 3940
+ 2806 4 8 1616 3939 200 201 3941 3940 204
+ 205
+ 2807 4 8 204 205 213 212 3941 3940 1411
+ 3644
+ 2808 4 8 22 27 3939 201 3644 212 3940
+ 205
+ 2809 4 8 209 918 208 3942 3061 3071 3944
+ 3943
+ 2810 4 8 208 3942 27 2321 3944 3943 2324
+ 2325
+ 2811 4 8 2324 2325 954 952 3944 3943 3061
+ 3071
+ 2812 4 8 918 568 3942 2321 3071 952 3943
+ 2325
+ 2813 4 8 209 3061 208 3944 3065 3060 3946
+ 3945
+ 2814 4 8 208 3944 27 2324 3946 3945 3914
+ 3947
+ 2815 4 8 3914 3947 3068 3059 3946 3945 3065
+ 3060
+ 2816 4 8 3061 954 3944 2324 3060 3059 3945
+ 3947
+ 2817 4 8 85 175 76 1028 218 3948 3950
+ 3949
+ 2818 4 8 76 1028 72 1031 3950 3949 2312
+ 2318
+ 2819 4 8 2312 2318 214 654 3950 3949 218
+ 3948
+ 2820 4 8 175 176 1028 1031 3948 654 3949
+ 2318
+ 2821 4 8 500 1517 1516 1520 3479 3480 3952
+ 3951
+ 2822 4 8 1516 1520 811 812 3952 3951 925
+ 2998
+ 2823 4 8 925 2998 922 1959 3952 3951 3479
+ 3480
+ 2824 4 8 1517 557 1520 812 3480 1959 3951
+ 2998
+ 2825 4 8 3764 3799 3954 3953 3955 3956 3958
+ 3957
+ 2826 4 8 3954 3953 971 970 3958 3957 969
+ 968
+ 2827 4 8 969 968 967 966 3958 3957 3955
+ 3956
+ 2828 4 8 3799 425 3953 970 3956 966 3957
+ 968
+ 2829 4 8 732 1075 733 1965 1072 1076 2083
+ 3959
+ 2830 4 8 733 1965 250 1797 2083 3959 1588
+ 1796
+ 2831 4 8 1588 1796 1084 1083 2083 3959 1072
+ 1076
+ 2832 4 8 1075 971 1965 1797 1076 1083 3959
+ 1796
+ 2833 4 8 732 733 1961 1962 735 734 3961
+ 3960
+ 2834 4 8 1961 1962 425 427 3961 3960 424
+ 426
+ 2835 4 8 424 426 429 428 3961 3960 735
+ 734
+ 2836 4 8 733 250 1962 427 734 428 3960
+ 426
+ 2837 4 8 922 2562 1960 3937 1959 2570 1958
+ 3962
+ 2838 4 8 1960 3937 543 546 1958 3962 544
+ 545
+ 2839 4 8 544 545 557 551 1958 3962 1959
+ 2570
+ 2840 4 8 2562 552 3937 546 2570 551 3962
+ 545
+ 2841 4 8 1870 3485 3723 3936 3747 3927 3964
+ 3963
+ 2842 4 8 3723 3936 922 2562 3964 3963 3082
+ 3106
+ 2843 4 8 3082 3106 2209 3108 3964 3963 3747
+ 3927
+ 2844 4 8 3485 552 3936 2562 3927 3108 3963
+ 3106
+ 2845 4 8 1728 3327 3966 3965 2046 3967 3969
+ 3968
+ 2846 4 8 3966 3965 934 3970 3969 3968 3972
+ 3971
+ 2847 4 8 3972 3971 500 1891 3969 3968 2046
+ 3967
+ 2848 4 8 3327 1885 3965 3970 3967 1891 3968
+ 3971
+ 2849 4 8 2210 2572 2208 3085 2197 2571 2201
+ 3973
+ 2850 4 8 2208 3085 2209 3082 2201 3973 2200
+ 3974
+ 2851 4 8 2200 3974 934 926 2201 3973 2197
+ 2571
+ 2852 4 8 2572 922 3085 3082 2571 926 3973
+ 3974
+ 2853 4 8 500 3479 1516 3952 3972 3975 3977
+ 3976
+ 2854 4 8 1516 3952 811 925 3977 3976 932
+ 929
+ 2855 4 8 932 929 934 926 3977 3976 3972
+ 3975
+ 2856 4 8 3479 922 3952 925 3975 926 3976
+ 929
+ 2857 4 8 3201 3202 3605 3978 3204 3203 3600
+ 3979
+ 2858 4 8 3605 3978 790 791 3600 3979 3599
+ 3625
+ 2859 4 8 3599 3625 984 988 3600 3979 3204
+ 3203
+ 2860 4 8 3202 802 3978 791 3203 988 3979
+ 3625
+ 2861 4 8 1143 3853 1721 3980 3629 3851 3896
+ 3981
+ 2862 4 8 1721 3980 861 3288 3896 3981 3765
+ 3982
+ 2863 4 8 3765 3982 3201 3781 3896 3981 3629
+ 3851
+ 2864 4 8 3853 1765 3980 3288 3851 3781 3981
+ 3982
+ 2865 4 8 3201 3205 3781 3983 3765 3768 3982
+ 3984
+ 2866 4 8 3781 3983 1765 3290 3982 3984 3288
+ 3289
+ 2867 4 8 3288 3289 861 864 3982 3984 3765
+ 3768
+ 2868 4 8 3205 870 3983 3290 3768 864 3984
+ 3289
+ 2869 4 8 2703 3985 3987 3986 3891 3988 3990
+ 3989
+ 2870 4 8 3987 3986 1765 1763 3990 3989 3290
+ 3991
+ 2871 4 8 3290 3991 870 2945 3990 3989 3891
+ 3988
+ 2872 4 8 3985 1098 3986 1763 3988 2945 3989
+ 3991
+ 2873 4 8 2703 2705 2702 2704 3042 3114 3894
+ 3992
+ 2874 4 8 2702 2704 790 2706 3894 3992 3835
+ 3993
+ 2875 4 8 3835 3993 2080 3118 3894 3992 3042
+ 3114
+ 2876 4 8 2705 1654 2704 2706 3114 3118 3992
+ 3993
+ 2877 4 8 802 791 3474 3475 3202 3978 3634
+ 3994
+ 2878 4 8 3474 3475 581 3415 3634 3994 3277
+ 3833
+ 2879 4 8 3277 3833 3201 3605 3634 3994 3202
+ 3978
+ 2880 4 8 791 790 3475 3415 3978 3605 3994
+ 3833
+ 2881 4 8 3737 3876 3996 3995 3783 3997 3999
+ 3998
+ 2882 4 8 3996 3995 2703 3042 3999 3998 3603
+ 3892
+ 2883 4 8 3603 3892 3201 3276 3999 3998 3783
+ 3997
+ 2884 4 8 3876 2080 3995 3042 3997 3276 3998
+ 3892
+ 2885 4 8 543 3271 3735 3879 3274 3275 3786
+ 4000
+ 2886 4 8 3735 3879 3737 3876 3786 4000 3783
+ 3997
+ 2887 4 8 3783 3997 3201 3276 3786 4000 3274
+ 3275
+ 2888 4 8 3271 2080 3879 3876 3275 3276 4000
+ 3997
+ 2889 4 8 1728 1731 3327 3326 2193 4001 4003
+ 4002
+ 2890 4 8 3327 3326 1885 2976 4003 4002 1882
+ 4004
+ 2891 4 8 1882 4004 394 1594 4003 4002 2193
+ 4001
+ 2892 4 8 1731 101 3326 2976 4001 1594 4002
+ 4004
+ 2893 4 8 136 139 525 4005 1878 4006 1879
+ 4007
+ 2894 4 8 525 4005 394 1594 1879 4007 1882
+ 4004
+ 2895 4 8 1882 4004 1885 2976 1879 4007 1878
+ 4006
+ 2896 4 8 139 101 4005 1594 4006 2976 4007
+ 4004
+ 2897 4 8 861 865 998 1877 1726 2809 3922
+ 4008
+ 2898 4 8 998 1877 385 1876 3922 4008 491
+ 4009
+ 2899 4 8 491 4009 496 517 3922 4008 1726
+ 2809
+ 2900 4 8 865 527 1877 1876 2809 517 4008
+ 4009
+ 2901 4 8 394 523 498 518 388 4010 494
+ 4011
+ 2902 4 8 498 518 496 517 494 4011 491
+ 4009
+ 2903 4 8 491 4009 385 1876 494 4011 388
+ 4010
+ 2904 4 8 523 527 518 517 4010 1876 4011
+ 4009
+ 2905 4 8 934 3970 932 4012 3972 3971 3977
+ 4013
+ 2906 4 8 932 4012 811 1886 3977 4013 1516
+ 1888
+ 2907 4 8 1516 1888 500 1891 3977 4013 3972
+ 3971
+ 2908 4 8 3970 1885 4012 1886 3971 1891 4013
+ 1888
+ 2909 4 8 394 499 1882 2778 2193 3456 4003
+ 4014
+ 2910 4 8 1882 2778 1885 1891 4003 4014 3327
+ 3967
+ 2911 4 8 3327 3967 1728 2046 4003 4014 2193
+ 3456
+ 2912 4 8 499 500 2778 1891 3456 2046 4014
+ 3967
+ 2913 4 8 984 4015 1945 4016 2834 4017 2835
+ 4018
+ 2914 4 8 1945 4016 846 835 2835 4018 2840
+ 3692
+ 2915 4 8 2840 3692 1643 3658 2835 4018 2834
+ 4017
+ 2916 4 8 4015 15 4016 835 4017 3658 4018
+ 3692
+ 2917 4 8 2181 3641 4020 4019 2182 4021 4023
+ 4022
+ 2918 4 8 4020 4019 2061 4024 4023 4022 2064
+ 4025
+ 2919 4 8 2064 4025 1181 4026 4023 4022 2182
+ 4021
+ 2920 4 8 3641 2694 4019 4024 4021 4026 4022
+ 4025
+ 2921 4 8 463 457 2485 4027 4028 4029 4031
+ 4030
+ 2922 4 8 2485 4027 148 179 4031 4030 186
+ 180
+ 2923 4 8 186 180 187 177 4031 4030 4028
+ 4029
+ 2924 4 8 457 134 4027 179 4029 177 4030
+ 180
+ 2925 4 8 148 479 185 480 179 4032 182
+ 4033
+ 2926 4 8 185 480 121 122 182 4033 125
+ 126
+ 2927 4 8 125 126 134 133 182 4033 179
+ 4032
+ 2928 4 8 479 135 480 122 4032 133 4033
+ 126
+ 2929 4 8 1927 1926 2616 2767 1918 1919 2614
+ 4034
+ 2930 4 8 2616 2767 1508 2772 2614 4034 2611
+ 3533
+ 2931 4 8 2611 3533 1914 1915 2614 4034 1918
+ 1919
+ 2932 4 8 1926 1928 2767 2772 1919 1915 4034
+ 3533
+ 2933 4 8 803 804 4036 4035 806 805 4038
+ 4037
+ 2934 4 8 4036 4035 1927 2993 4038 4037 4040
+ 4039
+ 2935 4 8 4040 4039 121 183 4038 4037 806
+ 805
+ 2936 4 8 804 187 4035 2993 805 183 4037
+ 4039
+ 2937 4 8 1927 3523 4042 4041 1918 3525 4044
+ 4043
+ 2938 4 8 4042 4041 2618 4045 4044 4043 2622
+ 4046
+ 2939 4 8 2622 4046 1914 2642 4044 4043 1918
+ 3525
+ 2940 4 8 3523 1523 4041 4045 3525 2642 4043
+ 4046
+ 2941 4 8 488 4047 486 4048 481 4049 484
+ 4050
+ 2942 4 8 486 4048 121 124 484 4050 122
+ 123
+ 2943 4 8 122 123 135 129 484 4050 481
+ 4049
+ 2944 4 8 4047 130 4048 124 4049 129 4050
+ 123
+ 2945 4 8 2236 2238 3779 3777 2230 2234 4052
+ 4051
+ 2946 4 8 3779 3777 463 2760 4052 4051 457
+ 2762
+ 2947 4 8 457 2762 134 2231 4052 4051 2230
+ 2234
+ 2948 4 8 2238 1713 3777 2760 2234 2231 4051
+ 2762
+ 2949 4 8 121 3674 806 4053 124 4054 4056
+ 4055
+ 2950 4 8 806 4053 803 3341 4056 4055 3350
+ 3351
+ 2951 4 8 3350 3351 130 3354 4056 4055 124
+ 4054
+ 2952 4 8 3674 2597 4053 3341 4054 3354 4055
+ 3351
+ 2953 4 8 187 2993 2987 2990 4057 4058 4060
+ 4059
+ 2954 4 8 2987 2990 2500 2766 4060 4059 2501
+ 4061
+ 2955 4 8 2501 4061 2236 2617 4060 4059 4057
+ 4058
+ 2956 4 8 2993 1927 2990 2766 4058 2617 4059
+ 4061
+ 2957 4 8 743 2726 736 4062 2339 4063 4065
+ 4064
+ 2958 4 8 736 4062 732 4066 4065 4064 4068
+ 4067
+ 2959 4 8 4068 4067 271 270 4065 4064 2339
+ 4063
+ 2960 4 8 2726 57 4062 4066 4063 270 4064
+ 4067
+ 2961 4 8 1080 1079 3245 4069 3243 4070 3244
+ 4071
+ 2962 4 8 3245 4069 743 1583 3244 4071 2908
+ 3809
+ 2963 4 8 2908 3809 42 1118 3244 4071 3243
+ 4070
+ 2964 4 8 1079 1084 4069 1583 4070 1118 4071
+ 3809
+ 2965 4 8 271 3817 4068 4072 2339 4073 4065
+ 4074
+ 2966 4 8 4068 4072 732 1074 4065 4074 736
+ 4075
+ 2967 4 8 736 4075 743 3245 4065 4074 2339
+ 4073
+ 2968 4 8 3817 1080 4072 1074 4073 3245 4074
+ 4075
+ 2969 4 8 2061 3028 4077 4076 2065 3211 4079
+ 4078
+ 2970 4 8 4077 4076 1080 1082 4079 4078 1079
+ 1081
+ 2971 4 8 1079 1081 1084 1083 4079 4078 2065
+ 3211
+ 2972 4 8 3028 971 4076 1082 3211 1083 4078
+ 1081
+ 2973 4 8 271 4080 4068 4081 3817 4082 4072
+ 4083
+ 2974 4 8 4068 4081 732 1075 4072 4083 1074
+ 1078
+ 2975 4 8 1074 1078 1080 1082 4072 4083 3817
+ 4082
+ 2976 4 8 4080 971 4081 1075 4082 1082 4083
+ 1078
+ 2977 4 8 984 4084 1931 4085 3636 4086 4088
+ 4087
+ 2978 4 8 1931 4085 845 3594 4088 4087 4090
+ 4089
+ 2979 4 8 4090 4089 2181 4091 4088 4087 3636
+ 4086
+ 2980 4 8 4084 1098 4085 3594 4086 4091 4087
+ 4089
+ 2981 4 8 1098 4091 4084 4086 3985 4092 4094
+ 4093
+ 2982 4 8 4084 4086 984 3636 4094 4093 3598
+ 3638
+ 2983 4 8 3598 3638 2703 3643 4094 4093 3985
+ 4092
+ 2984 4 8 4091 2181 4086 3636 4092 3643 4093
+ 3638
+ 2985 4 8 406 3866 410 4095 1865 3867 1868
+ 4096
+ 2986 4 8 410 4095 110 377 1868 4096 1872
+ 4097
+ 2987 4 8 1872 4097 1870 3873 1868 4096 1865
+ 3867
+ 2988 4 8 3866 384 4095 377 3867 3873 4096
+ 4097
+ 2989 4 8 384 1003 4099 4098 996 997 4101
+ 4100
+ 2990 4 8 4099 4098 1134 2054 4101 4100 3924
+ 3923
+ 2991 4 8 3924 3923 861 998 4101 4100 996
+ 997
+ 2992 4 8 1003 385 4098 2054 997 998 4100
+ 3923
+ 2993 4 8 384 3141 3931 3934 383 3142 4103
+ 4102
+ 2994 4 8 3931 3934 1094 3130 4103 4102 1093
+ 3132
+ 2995 4 8 1093 3132 66 1577 4103 4102 383
+ 3142
+ 2996 4 8 3141 350 3934 3130 3142 1577 4102
+ 3132
+ 2997 4 8 1134 4099 3924 4101 3886 4104 4106
+ 4105
+ 2998 4 8 3924 4101 861 996 4106 4105 3288
+ 3282
+ 2999 4 8 3288 3282 1765 3283 4106 4105 3886
+ 4104
+ 3000 4 8 4099 384 4101 996 4104 3283 4105
+ 3282
+ 3001 4 8 55 3246 1779 3811 2342 3249 2338
+ 4107
+ 3002 4 8 1779 3811 271 3817 2338 4107 2339
+ 4073
+ 3003 4 8 2339 4073 743 3245 2338 4107 2342
+ 3249
+ 3004 4 8 3246 1080 3811 3817 3249 3245 4107
+ 4073
+ 3005 4 8 732 736 1074 4075 1072 2081 1073
+ 4108
+ 3006 4 8 1074 4075 1080 3245 1073 4108 1079
+ 4069
+ 3007 4 8 1079 4069 1084 1583 1073 4108 1072
+ 2081
+ 3008 4 8 736 743 4075 3245 2081 1583 4108
+ 4069
+ 3009 4 8 271 4109 4068 4110 4080 4111 4081
+ 4112
+ 3010 4 8 4068 4110 732 4113 4081 4112 1075
+ 4114
+ 3011 4 8 1075 4114 971 3954 4081 4112 4080
+ 4111
+ 3012 4 8 4109 3764 4110 4113 4111 3954 4112
+ 4114
+ 3013 4 8 732 1075 4113 4114 1961 1963 4116
+ 4115
+ 3014 4 8 4113 4114 3764 3954 4116 4115 3799
+ 3953
+ 3015 4 8 3799 3953 425 970 4116 4115 1961
+ 1963
+ 3016 4 8 1075 971 4114 3954 1963 970 4115
+ 3953
+ 3017 4 8 429 3761 424 3800 735 4117 3961
+ 4118
+ 3018 4 8 424 3800 425 3799 3961 4118 1961
+ 4116
+ 3019 4 8 1961 4116 732 4113 3961 4118 735
+ 4117
+ 3020 4 8 3761 3764 3800 3799 4117 4113 4118
+ 4116
+ 3021 4 8 2209 3087 2208 3086 3316 3583 4120
+ 4119
+ 3022 4 8 2208 3086 2210 2437 4120 4119 2435
+ 2436
+ 3023 4 8 2435 2436 1897 2442 4120 4119 3316
+ 3583
+ 3024 4 8 3087 1391 3086 2437 3583 2442 4119
+ 2436
+ 3025 4 8 2205 2207 3095 3096 3331 4121 4123
+ 4122
+ 3026 4 8 3095 3096 110 3097 4123 4122 1729
+ 4124
+ 3027 4 8 1729 4124 1728 4125 4123 4122 3331
+ 4121
+ 3028 4 8 2207 2209 3096 3097 4121 4125 4122
+ 4124
+ 3029 4 8 66 60 1097 4126 3307 4127 3310
+ 4128
+ 3030 4 8 1097 4126 1098 1946 3310 4128 3306
+ 4129
+ 3031 4 8 3306 4129 3303 3757 3310 4128 3307
+ 4127
+ 3032 4 8 60 57 4126 1946 4127 3757 4128
+ 4129
+ 3033 4 8 1132 2045 4131 4130 4132 4133 4135
+ 4134
+ 3034 4 8 4131 4130 3764 3799 4135 4134 3955
+ 3956
+ 3035 4 8 3955 3956 967 966 4135 4134 4132
+ 4133
+ 3036 4 8 2045 425 4130 3799 4133 966 4134
+ 3956
+ 3037 4 8 238 4136 478 4137 239 4138 2060
+ 4139
+ 3038 4 8 478 4137 368 417 2060 4139 420
+ 421
+ 3039 4 8 420 421 250 428 2060 4139 239
+ 4138
+ 3040 4 8 4136 429 4137 417 4138 428 4139
+ 421
+ 3041 4 8 967 966 961 960 3179 4140 3180
+ 4141
+ 3042 4 8 961 960 789 959 3180 4141 788
+ 3801
+ 3043 4 8 788 3801 667 2044 3180 4141 3179
+ 4140
+ 3044 4 8 966 425 960 959 4140 2044 4141
+ 3801
+ 3045 4 8 1923 2810 3619 4142 2812 2811 4144
+ 4143
+ 3046 4 8 3619 4142 1631 3319 4144 4143 3090
+ 3320
+ 3047 4 8 3090 3320 2205 2816 4144 4143 2812
+ 2811
+ 3048 4 8 2810 1897 4142 3319 2811 2816 4143
+ 3320
+ 3049 4 8 2210 2204 2435 4145 4146 4147 4149
+ 4148
+ 3050 4 8 2435 4145 1897 2816 4149 4148 2819
+ 2817
+ 3051 4 8 2819 2817 1928 2818 4149 4148 4146
+ 4147
+ 3052 4 8 2204 2205 4145 2816 4147 2818 4148
+ 2817
+ 3053 4 8 2205 2812 2818 2815 3099 4150 4152
+ 4151
+ 3054 4 8 2818 2815 1928 1922 4152 4151 4154
+ 4153
+ 3055 4 8 4154 4153 2288 3845 4152 4151 3099
+ 4150
+ 3056 4 8 2812 1923 2815 1922 4150 3845 4151
+ 4153
+ 3057 4 8 2597 3339 2601 4155 3668 4156 4158
+ 4157
+ 3058 4 8 2601 4155 2608 3232 4158 4157 2619
+ 4159
+ 3059 4 8 2619 4159 2618 4045 4158 4157 3668
+ 4156
+ 3060 4 8 3339 1523 4155 3232 4156 4045 4157
+ 4159
+ 3061 4 8 136 140 139 143 1878 4160 4006
+ 4161
+ 3062 4 8 139 143 101 146 4006 4161 2976
+ 2977
+ 3063 4 8 2976 2977 1885 2482 4006 4161 1878
+ 4160
+ 3064 4 8 140 148 143 146 4160 2482 4161
+ 2977
+ 3065 4 8 2500 2985 2770 4162 2766 2986 2765
+ 4163
+ 3066 4 8 2770 4162 1928 4164 2765 4163 1926
+ 4165
+ 3067 4 8 1926 4165 1927 2991 2765 4163 2766
+ 2986
+ 3068 4 8 2985 148 4162 4164 2986 2991 4163
+ 4165
+ 3069 4 8 2500 2501 2504 2505 3839 4166 3840
+ 4167
+ 3070 4 8 2504 2505 935 2510 3840 4167 3445
+ 3780
+ 3071 4 8 3445 3780 463 3779 3840 4167 3839
+ 4166
+ 3072 4 8 2501 2236 2505 2510 4166 3779 4167
+ 3780
+ 3073 4 8 2205 2199 3331 4168 2984 4169 3329
+ 4170
+ 3074 4 8 3331 4168 1728 3966 3329 4170 3327
+ 3965
+ 3075 4 8 3327 3965 1885 3970 3329 4170 2984
+ 4169
+ 3076 4 8 2199 934 4168 3966 4169 3970 4170
+ 3965
+ 3077 4 8 467 2744 2147 4171 466 2745 2751
+ 4172
+ 3078 4 8 2147 4171 856 2658 2751 4172 2660
+ 2661
+ 3079 4 8 2660 2661 468 2665 2751 4172 466
+ 2745
+ 3080 4 8 2744 2246 4171 2658 2745 2665 4172
+ 2661
+ 3081 4 8 1885 2484 1886 4173 3441 3787 3437
+ 4174
+ 3082 4 8 1886 4173 811 3450 3437 4174 3438
+ 3468
+ 3083 4 8 3438 3468 2246 2749 3437 4174 3441
+ 3787
+ 3084 4 8 2484 463 4173 3450 3787 2749 4174
+ 3468
+ 3085 4 8 136 3432 3365 3433 1452 4175 3367
+ 4176
+ 3086 4 8 3365 3433 2154 2240 3367 4176 2155
+ 3459
+ 3087 4 8 2155 3459 856 2658 3367 4176 1452
+ 4175
+ 3088 4 8 3432 2246 3433 2240 4175 2658 4176
+ 3459
+ 3089 4 8 1885 2478 3441 3788 1878 4177 3462
+ 4178
+ 3090 4 8 3441 3788 2246 2744 3462 4178 3432
+ 4179
+ 3091 4 8 3432 4179 136 2434 3462 4178 1878
+ 4177
+ 3092 4 8 2478 467 3788 2744 4177 2434 4178
+ 4179
+ 3093 4 8 1643 1644 3660 3685 3658 3694 3659
+ 4180
+ 3094 4 8 3660 3685 972 2794 3659 4180 2688
+ 3650
+ 3095 4 8 2688 3650 15 1824 3659 4180 3658
+ 3694
+ 3096 4 8 1644 317 3685 2794 3694 1824 4180
+ 3650
+ 3097 4 8 607 608 2549 3648 1343 2670 2550
+ 4181
+ 3098 4 8 2549 3648 1643 1647 2550 4181 2551
+ 2803
+ 3099 4 8 2551 2803 1342 2671 2550 4181 1343
+ 2670
+ 3100 4 8 608 337 3648 1647 2670 2671 4181
+ 2803
+ 3101 4 8 1643 1644 2840 3691 1646 1645 2841
+ 4182
+ 3102 4 8 2840 3691 846 1630 2841 4182 1629
+ 1628
+ 3103 4 8 1629 1628 1627 1626 2841 4182 1646
+ 1645
+ 3104 4 8 1644 317 3691 1630 1645 1626 4182
+ 1628
+ 3105 4 8 1728 2048 2046 2047 4183 4184 4186
+ 4185
+ 3106 4 8 2046 2047 500 1135 4186 4185 3751
+ 4187
+ 3107 4 8 3751 4187 1870 3881 4186 4185 4183
+ 4184
+ 3108 4 8 2048 1134 2047 1135 4184 3881 4185
+ 4187
+ 3109 4 8 1728 4183 3717 4188 2048 4184 4190
+ 4189
+ 3110 4 8 3717 4188 384 3873 4190 4189 4099
+ 4191
+ 3111 4 8 4099 4191 1134 3881 4190 4189 2048
+ 4184
+ 3112 4 8 4183 1870 4188 3873 4184 3881 4189
+ 4191
+ 3113 4 8 1870 3722 3881 3882 3751 3750 4187
+ 4192
+ 3114 4 8 3881 3882 1134 1137 4187 4192 1135
+ 1136
+ 3115 4 8 1135 1136 500 1142 4187 4192 3751
+ 3750
+ 3116 4 8 3722 1143 3882 1137 3750 1142 4192
+ 1136
+ 3117 4 8 1134 4099 3886 4104 3881 4191 3884
+ 4193
+ 3118 4 8 3886 4104 1765 3283 3884 4193 3727
+ 4194
+ 3119 4 8 3727 4194 1870 3873 3884 4193 3881
+ 4191
+ 3120 4 8 4099 384 4104 3283 4191 3873 4193
+ 4194
+ 3121 4 8 971 969 3037 4195 4196 4197 4199
+ 4198
+ 3122 4 8 3037 4195 2703 3044 4199 4198 4201
+ 4200
+ 3123 4 8 4201 4200 2390 2394 4199 4198 4196
+ 4197
+ 3124 4 8 969 967 4195 3044 4197 2394 4198
+ 4200
+ 3125 4 8 789 962 961 965 3036 3035 3047
+ 4202
+ 3126 4 8 961 965 967 969 3047 4202 3044
+ 4195
+ 3127 4 8 3044 4195 2703 3037 3047 4202 3036
+ 3035
+ 3128 4 8 962 971 965 969 3035 3037 4202
+ 4195
+ 3129 4 8 3201 3781 3603 4203 3783 3782 3999
+ 4204
+ 3130 4 8 3603 4203 2703 3987 3999 4204 3996
+ 4205
+ 3131 4 8 3996 4205 3737 3736 3999 4204 3783
+ 3782
+ 3132 4 8 3781 1765 4203 3987 3782 3736 4204
+ 4205
+ 3133 4 8 870 3205 3290 3983 3891 3890 3990
+ 4206
+ 3134 4 8 3290 3983 1765 3781 3990 4206 3987
+ 4203
+ 3135 4 8 3987 4203 2703 3603 3990 4206 3891
+ 3890
+ 3136 4 8 3205 3201 3983 3781 3890 3603 4206
+ 4203
+ 3137 4 8 790 2695 2702 2696 3599 4207 3602
+ 4208
+ 3138 4 8 2702 2696 2703 2697 3602 4208 3598
+ 3640
+ 3139 4 8 3598 3640 984 3398 3602 4208 3599
+ 4207
+ 3140 4 8 2695 2694 2696 2697 4207 3398 4208
+ 3640
+ 3141 4 8 148 2991 186 2992 185 4209 184
+ 4210
+ 3142 4 8 186 2992 187 2993 184 4210 183
+ 4039
+ 3143 4 8 183 4039 121 4040 184 4210 185
+ 4209
+ 3144 4 8 2991 1927 2992 2993 4209 4040 4210
+ 4039
+ 3145 4 8 1098 1097 1757 3122 1946 4126 1949
+ 4211
+ 3146 4 8 1757 3122 37 1768 1949 4211 274
+ 3827
+ 3147 4 8 274 3827 57 60 1949 4211 1946
+ 4126
+ 3148 4 8 1097 66 3122 1768 4126 60 4211
+ 3827
+ 3149 4 8 2061 3028 4213 4212 4077 4076 4215
+ 4214
+ 3150 4 8 4213 4212 271 4080 4215 4214 3817
+ 4082
+ 3151 4 8 3817 4082 1080 1082 4215 4214 4077
+ 4076
+ 3152 4 8 3028 971 4212 4080 4076 1082 4214
+ 4082
+ 3153 4 8 1098 1089 4217 4216 4218 4219 4221
+ 4220
+ 3154 4 8 4217 4216 3764 4222 4221 4220 4224
+ 4223
+ 3155 4 8 4224 4223 2390 4225 4221 4220 4218
+ 4219
+ 3156 4 8 1089 1085 4216 4222 4219 4225 4220
+ 4223
+ 3157 4 8 2181 2901 4090 4226 3636 4227 4088
+ 4228
+ 3158 4 8 4090 4226 845 837 4088 4228 1931
+ 4229
+ 3159 4 8 1931 4229 984 4015 4088 4228 3636
+ 4227
+ 3160 4 8 2901 15 4226 837 4227 4015 4228
+ 4229
+ 3161 4 8 23 22 760 4230 1616 3939 1619
+ 4231
+ 3162 4 8 760 4230 81 3907 1619 4231 1615
+ 3906
+ 3163 4 8 1615 3906 200 201 1619 4231 1616
+ 3939
+ 3164 4 8 22 27 4230 3907 3939 201 4231
+ 3906
+ 3165 4 8 200 204 1817 4232 1616 3941 1815
+ 4233
+ 3166 4 8 1817 4232 618 1410 1815 4233 1417
+ 1414
+ 3167 4 8 1417 1414 23 1411 1815 4233 1616
+ 3941
+ 3168 4 8 204 213 4232 1410 3941 1411 4233
+ 1414
+ 3169 4 8 27 3914 3902 3915 208 3946 3909
+ 4234
+ 3170 4 8 3902 3915 72 3807 3909 4234 2317
+ 3806
+ 3171 4 8 2317 3806 209 3065 3909 4234 208
+ 3946
+ 3172 4 8 3914 3068 3915 3807 3946 3065 4234
+ 3806
+ 3173 4 8 3764 4109 3763 4235 4217 4236 4238
+ 4237
+ 3174 4 8 3763 4235 57 270 4238 4237 1946
+ 1947
+ 3175 4 8 1946 1947 1098 1951 4238 4237 4217
+ 4236
+ 3176 4 8 4109 271 4235 270 4236 1951 4237
+ 1947
+ 3177 4 8 2618 2619 3667 4239 2621 2620 3850
+ 4240
+ 3178 4 8 3667 4239 1406 2606 3850 4240 3618
+ 3616
+ 3179 4 8 3618 3616 1923 2626 3850 4240 2621
+ 2620
+ 3180 4 8 2619 2608 4239 2606 2620 2626 4240
+ 3616
+ 3181 4 8 1180 2335 1172 2334 2185 4241 2188
+ 4242
+ 3182 4 8 1172 2334 42 2305 2188 4242 2184
+ 2902
+ 3183 4 8 2184 2902 2181 2901 2188 4242 2185
+ 4241
+ 3184 4 8 2335 15 2334 2305 4241 2901 4242
+ 2902
+ 3185 4 8 1180 2335 3680 4243 3654 3653 3679
+ 4244
+ 3186 4 8 3680 4243 984 4015 3679 4244 2834
+ 4017
+ 3187 4 8 2834 4017 1643 3658 3679 4244 3654
+ 3653
+ 3188 4 8 2335 15 4243 4015 3653 3658 4244
+ 4017
+ 3189 4 8 2694 4026 3676 4245 3687 4246 4248
+ 4247
+ 3190 4 8 3676 4245 1180 1179 4248 4247 1854
+ 3121
+ 3191 4 8 1854 3121 981 1678 4248 4247 3687
+ 4246
+ 3192 4 8 4026 1181 4245 1179 4246 1678 4247
+ 3121
+ 3193 4 8 1110 1844 2087 4249 1178 3682 2336
+ 4250
+ 3194 4 8 2087 4249 56 3918 2336 4250 2330
+ 4251
+ 3195 4 8 2330 4251 1180 1850 2336 4250 1178
+ 3682
+ 3196 4 8 1844 954 4249 3918 3682 1850 4250
+ 4251
+ 3197 4 8 27 2321 212 4252 2323 2322 3899
+ 4253
+ 3198 4 8 212 4252 213 1549 3899 4253 2666
+ 2668
+ 3199 4 8 2666 2668 972 973 3899 4253 2323
+ 2322
+ 3200 4 8 2321 568 4252 1549 2322 973 4253
+ 2668
+ 3201 4 8 981 1854 2552 4254 975 1855 4256
+ 4255
+ 3202 4 8 2552 4254 1643 3654 4256 4255 3660
+ 3657
+ 3203 4 8 3660 3657 972 1856 4256 4255 975
+ 1855
+ 3204 4 8 1854 1180 4254 3654 1855 1856 4255
+ 3657
+ 3205 4 8 972 1787 3660 3684 975 1788 4256
+ 4257
+ 3206 4 8 3660 3684 1643 2549 4256 4257 2552
+ 2553
+ 3207 4 8 2552 2553 981 1789 4256 4257 975
+ 1788
+ 3208 4 8 1787 607 3684 2549 1788 1789 4257
+ 2553
+ 3209 4 8 1754 2950 3138 4258 2952 2951 3136
+ 4259
+ 3210 4 8 3138 4258 845 1936 3136 4259 843
+ 3493
+ 3211 4 8 843 3493 28 1475 3136 4259 2952
+ 2951
+ 3212 4 8 2950 1478 4258 1936 2951 1475 4259
+ 3493
+ 3213 4 8 845 844 1931 1943 837 838 4229
+ 4260
+ 3214 4 8 1931 1943 984 1945 4229 4260 4015
+ 4016
+ 3215 4 8 4015 4016 15 835 4229 4260 837
+ 838
+ 3216 4 8 844 846 1943 1945 838 835 4260
+ 4016
+ 3217 4 8 618 775 617 2784 616 776 615
+ 4261
+ 3218 4 8 617 2784 337 339 615 4261 336
+ 338
+ 3219 4 8 336 338 342 340 615 4261 616
+ 776
+ 3220 4 8 775 341 2784 339 776 340 4261
+ 338
+ 3221 4 8 341 1038 3566 3565 1040 1039 4263
+ 4262
+ 3222 4 8 3566 3565 2258 3564 4263 4262 2262
+ 3571
+ 3223 4 8 2262 3571 430 1041 4263 4262 1040
+ 1039
+ 3224 4 8 1038 316 3565 3564 1039 1041 4262
+ 3571
+ 3225 4 8 856 2660 4265 4264 2153 2750 4267
+ 4266
+ 3226 4 8 4265 4264 2267 2422 4267 4266 2266
+ 2425
+ 3227 4 8 2266 2425 510 2430 4267 4266 2153
+ 2750
+ 3228 4 8 2660 468 4264 2422 2750 2430 4266
+ 2425
+ 3229 4 8 1631 3091 3322 4268 3088 3092 4270
+ 4269
+ 3230 4 8 3322 4268 1120 3579 4270 4269 2891
+ 3589
+ 3231 4 8 2891 3589 110 3097 4270 4269 3088
+ 3092
+ 3232 4 8 3091 2209 4268 3579 3092 3097 4269
+ 3589
+ 3233 4 8 580 1485 1632 4271 2890 2894 3547
+ 4272
+ 3234 4 8 1632 4271 1631 3088 3547 4272 3322
+ 4270
+ 3235 4 8 3322 4270 1120 2891 3547 4272 2890
+ 2894
+ 3236 4 8 1485 110 4271 3088 2894 2891 4272
+ 4270
+ 3237 4 8 667 2044 2042 2043 3179 4140 4274
+ 4273
+ 3238 4 8 2042 2043 1132 2045 4274 4273 4132
+ 4133
+ 3239 4 8 4132 4133 967 966 4274 4273 3179
+ 4140
+ 3240 4 8 2044 425 2043 2045 4140 966 4273
+ 4133
+ 3241 4 8 667 3179 2042 4274 2029 3182 3609
+ 4275
+ 3242 4 8 2042 4274 1132 4132 3609 4275 1438
+ 4276
+ 3243 4 8 1438 4276 668 2073 3609 4275 2029
+ 3182
+ 3244 4 8 3179 967 4274 4132 3182 2073 4275
+ 4276
+ 3245 4 8 368 4277 478 4278 362 4279 476
+ 4280
+ 3246 4 8 478 4278 238 405 476 4280 404
+ 403
+ 3247 4 8 404 403 159 255 476 4280 362
+ 4279
+ 3248 4 8 4277 71 4278 405 4279 255 4280
+ 403
+ 3249 4 8 2608 2628 2619 2623 3232 3465 4159
+ 4281
+ 3250 4 8 2619 2623 2618 2622 4159 4281 4045
+ 4046
+ 3251 4 8 4045 4046 1523 2642 4159 4281 3232
+ 3465
+ 3252 4 8 2628 1914 2623 2622 3465 2642 4281
+ 4046
+ 3253 4 8 2390 2394 4201 4200 2391 2395 4283
+ 4282
+ 3254 4 8 4201 4200 2703 3044 4283 4282 3042
+ 3043
+ 3255 4 8 3042 3043 2080 2079 4283 4282 2391
+ 2395
+ 3256 4 8 2394 967 4200 3044 2395 2079 4282
+ 3043
+ 3257 4 8 384 3872 3931 4284 3283 4285 4287
+ 4286
+ 3258 4 8 3931 4284 1094 1088 4287 4286 1758
+ 1759
+ 3259 4 8 1758 1759 1765 1764 4287 4286 3283
+ 4285
+ 3260 4 8 3872 1085 4284 1088 4285 1764 4286
+ 1759
+ 3261 4 8 406 1863 3291 3292 4288 4289 4291
+ 4290
+ 3262 4 8 3291 3292 1132 1440 4291 4290 3191
+ 3194
+ 3263 4 8 3191 3194 2390 3190 4291 4290 4288
+ 4289
+ 3264 4 8 1863 1382 3292 1440 4289 3190 4290
+ 3194
+ 3265 4 8 3737 3736 3996 4205 4292 4293 4295
+ 4294
+ 3266 4 8 3996 4205 2703 3987 4295 4294 3985
+ 3986
+ 3267 4 8 3985 3986 1098 1763 4295 4294 4292
+ 4293
+ 3268 4 8 3736 1765 4205 3987 4293 1763 4294
+ 3986
+ 3269 4 8 2390 2393 3191 3192 2394 2397 4297
+ 4296
+ 3270 4 8 3191 3192 1132 1438 4297 4296 4132
+ 4276
+ 3271 4 8 4132 4276 967 2073 4297 4296 2394
+ 2397
+ 3272 4 8 2393 668 3192 1438 2397 2073 4296
+ 4276
+ 3273 4 8 647 1216 1239 2474 1833 2896 4299
+ 4298
+ 3274 4 8 1239 2474 150 1123 4299 4298 579
+ 2889
+ 3275 4 8 579 2889 580 2890 4299 4298 1833
+ 2896
+ 3276 4 8 1216 1120 2474 1123 2896 2890 4298
+ 2889
+ 3277 4 8 1132 3296 1130 4300 1124 4301 1127
+ 4302
+ 3278 4 8 1130 4300 150 151 1127 4302 1123
+ 2892
+ 3279 4 8 1123 2892 1120 2891 1127 4302 1124
+ 4301
+ 3280 4 8 3296 110 4300 151 4301 2891 4302
+ 2892
+ 3281 4 8 2694 2698 4026 4303 3687 3752 4246
+ 4304
+ 3282 4 8 4026 4303 1181 1776 4246 4304 1678
+ 3606
+ 3283 4 8 1678 3606 981 3038 4246 4304 3687
+ 3752
+ 3284 4 8 2698 1654 4303 1776 3752 3038 4304
+ 3606
+ 3285 4 8 2061 2064 4024 4025 4305 4306 4308
+ 4307
+ 3286 4 8 4024 4025 2694 4026 4308 4307 2698
+ 4303
+ 3287 4 8 2698 4303 1654 1776 4308 4307 4305
+ 4306
+ 3288 4 8 2064 1181 4025 4026 4306 1776 4307
+ 4303
+ 3289 4 8 2694 3687 3676 4248 3401 4309 3675
+ 4310
+ 3290 4 8 3676 4248 1180 1854 3675 4310 3654
+ 4254
+ 3291 4 8 3654 4254 1643 2552 3675 4310 3401
+ 4309
+ 3292 4 8 3687 981 4248 1854 4309 2552 4310
+ 4254
+ 3293 4 8 2181 3636 3641 3637 2185 4311 4313
+ 4312
+ 3294 4 8 3641 3637 2694 3398 4313 4312 3676
+ 3678
+ 3295 4 8 3676 3678 1180 3680 4313 4312 2185
+ 4311
+ 3296 4 8 3636 984 3637 3398 4311 3680 4312
+ 3678
+ 3297 4 8 2694 3400 3398 3399 2695 3688 4207
+ 4314
+ 3298 4 8 3398 3399 984 3386 4207 4314 3599
+ 3622
+ 3299 4 8 3599 3622 790 2708 4207 4314 2695
+ 3688
+ 3300 4 8 3400 1342 3399 3386 3688 2708 4314
+ 3622
+ 3301 4 8 2694 3401 3400 3404 3687 4309 3690
+ 4315
+ 3302 4 8 3400 3404 1342 2551 3690 4315 1791
+ 2555
+ 3303 4 8 1791 2555 981 2552 3690 4315 3687
+ 4309
+ 3304 4 8 3401 1643 3404 2551 4309 2552 4315
+ 2555
+ 3305 4 8 467 2744 2434 4179 2147 4171 2433
+ 4316
+ 3306 4 8 2434 4179 136 3432 2433 4316 1452
+ 4175
+ 3307 4 8 1452 4175 856 2658 2433 4316 2147
+ 4171
+ 3308 4 8 2744 2246 4179 3432 4171 2658 4316
+ 4175
+ 3309 4 8 2258 2262 2261 2265 3566 4263 4318
+ 4317
+ 3310 4 8 2261 2265 2267 2269 4318 4317 2412
+ 4319
+ 3311 4 8 2412 4319 341 1040 4318 4317 3566
+ 4263
+ 3312 4 8 2262 430 2265 2269 4263 1040 4317
+ 4319
+ 3313 4 8 856 850 858 854 2513 4320 3712
+ 4321
+ 3314 4 8 858 854 860 851 3712 4321 3559
+ 4322
+ 3315 4 8 3559 4322 2258 4323 3712 4321 2513
+ 4320
+ 3316 4 8 850 847 854 851 4320 4323 4321
+ 4322
+ 3317 4 8 847 3169 850 4324 2657 4325 4327
+ 4326
+ 3318 4 8 850 4324 856 4265 4327 4326 2660
+ 4264
+ 3319 4 8 2660 4264 468 2422 4327 4326 2657
+ 4325
+ 3320 4 8 3169 2267 4324 4265 4325 2422 4326
+ 4264
+ 3321 4 8 847 3169 2657 4325 2651 3172 2654
+ 4328
+ 3322 4 8 2657 4325 468 2422 2654 4328 2650
+ 4329
+ 3323 4 8 2650 4329 2492 3147 2654 4328 2651
+ 3172
+ 3324 4 8 3169 2267 4325 2422 3172 3147 4328
+ 4329
+ 3325 4 8 442 446 848 2742 1611 3708 3699
+ 4330
+ 3326 4 8 848 2742 847 2740 3699 4330 3167
+ 4331
+ 3327 4 8 3167 4331 342 329 3699 4330 1611
+ 3708
+ 3328 4 8 446 328 2742 2740 3708 329 4330
+ 4331
+ 3329 4 8 847 3167 2740 4331 4332 4333 4335
+ 4334
+ 3330 4 8 2740 4331 328 329 4335 4334 332
+ 333
+ 3331 4 8 332 333 341 340 4335 4334 4332
+ 4333
+ 3332 4 8 3167 342 4331 329 4333 340 4334
+ 333
+ 3333 4 8 1765 3853 3288 3980 3886 3885 4106
+ 4336
+ 3334 4 8 3288 3980 861 1721 4106 4336 3924
+ 3926
+ 3335 4 8 3924 3926 1134 1137 4106 4336 3886
+ 3885
+ 3336 4 8 3853 1143 3980 1721 3885 1137 4336
+ 3926
+ 3337 4 8 406 1863 4288 4289 4337 4338 4340
+ 4339
+ 3338 4 8 4288 4289 2390 3190 4340 4339 4342
+ 4341
+ 3339 4 8 4342 4341 3737 3874 4340 4339 4337
+ 4338
+ 3340 4 8 1863 1382 4289 3190 4338 3874 4339
+ 4341
+ 3341 4 8 870 1013 1008 1007 3284 3772 3935
+ 4343
+ 3342 4 8 1008 1007 350 1006 3935 4343 3141
+ 3143
+ 3343 4 8 3141 3143 384 1005 3935 4343 3284
+ 3772
+ 3344 4 8 1013 398 1007 1006 3772 1005 4343
+ 3143
+ 3345 4 8 2703 3985 3891 3988 3598 4094 3889
+ 4344
+ 3346 4 8 3891 3988 870 2945 3889 4344 2542
+ 4345
+ 3347 4 8 2542 4345 984 4084 3889 4344 3598
+ 4094
+ 3348 4 8 3985 1098 3988 2945 4094 4084 4344
+ 4345
+ 3349 4 8 971 969 4196 4197 3954 3958 4347
+ 4346
+ 3350 4 8 4196 4197 2390 2394 4347 4346 4224
+ 4348
+ 3351 4 8 4224 4348 3764 3955 4347 4346 3954
+ 3958
+ 3352 4 8 969 967 4197 2394 3958 3955 4346
+ 4348
+ 3353 4 8 57 270 3763 4235 4066 4067 4350
+ 4349
+ 3354 4 8 3763 4235 3764 4109 4350 4349 4113
+ 4110
+ 3355 4 8 4113 4110 732 4068 4350 4349 4066
+ 4067
+ 3356 4 8 270 271 4235 4109 4067 4068 4349
+ 4110
+ 3357 4 8 510 2266 2153 4267 2259 2260 2516
+ 4351
+ 3358 4 8 2153 4267 856 4265 2516 4351 2513
+ 4352
+ 3359 4 8 2513 4352 2258 2261 2516 4351 2259
+ 2260
+ 3360 4 8 2266 2267 4267 4265 2260 2261 4351
+ 4352
+ 3361 4 8 55 3246 46 3247 2903 3810 2906
+ 4353
+ 3362 4 8 46 3247 42 3243 2906 4353 2184
+ 4354
+ 3363 4 8 2184 4354 2181 3814 2906 4353 2903
+ 3810
+ 3364 4 8 3246 1080 3247 3243 3810 3814 4353
+ 4354
+ 3365 4 8 1098 1951 4091 4355 4356 4357 4359
+ 4358
+ 3366 4 8 4091 4355 2181 3816 4359 4358 4020
+ 4360
+ 3367 4 8 4020 4360 2061 4213 4359 4358 4356
+ 4357
+ 3368 4 8 1951 271 4355 3816 4357 4213 4358
+ 4360
+ 3369 4 8 510 501 2755 4361 3573 3572 4363
+ 4362
+ 3370 4 8 2755 4361 134 299 4363 4362 4365
+ 4364
+ 3371 4 8 4365 4364 593 2251 4363 4362 3573
+ 3572
+ 3372 4 8 501 296 4361 299 3572 2251 4362
+ 4364
+ 3373 4 8 341 4332 3566 4366 3560 4367 3563
+ 4368
+ 3374 4 8 3566 4366 2258 4323 3563 4368 3559
+ 4322
+ 3375 4 8 3559 4322 860 851 3563 4368 3560
+ 4367
+ 3376 4 8 4332 847 4366 4323 4367 851 4368
+ 4322
+ 3377 4 8 496 2241 517 2774 519 3436 520
+ 4369
+ 3378 4 8 517 2774 527 2166 520 4369 526
+ 3830
+ 3379 4 8 526 3830 136 3365 520 4369 519
+ 3436
+ 3380 4 8 2241 2154 2774 2166 3436 3365 4369
+ 3830
+ 3381 4 8 1507 2104 1505 2107 1499 2880 1502
+ 4370
+ 3382 4 8 1505 2107 635 1316 1502 4370 1498
+ 3829
+ 3383 4 8 1498 3829 935 1912 1502 4370 1499
+ 2880
+ 3384 4 8 2104 1314 2107 1316 2880 1912 4370
+ 3829
+ 3385 4 8 317 1626 1653 1651 1741 4371 1744
+ 4372
+ 3386 4 8 1653 1651 337 1652 1744 4372 331
+ 4373
+ 3387 4 8 331 4373 328 3377 1744 4372 1741
+ 4371
+ 3388 4 8 1626 1627 1651 1652 4371 3377 4372
+ 4373
+ 3389 4 8 1627 1652 3377 4373 3375 3396 3376
+ 4374
+ 3390 4 8 3377 4373 328 331 3376 4374 453
+ 2792
+ 3391 4 8 453 2792 454 2787 3376 4374 3375
+ 3396
+ 3392 4 8 1652 337 4373 331 3396 2787 4374
+ 2792
+ 3393 4 8 341 340 2412 2413 4332 4333 4376
+ 4375
+ 3394 4 8 2412 2413 2267 2418 4376 4375 3169
+ 3168
+ 3395 4 8 3169 3168 847 3167 4376 4375 4332
+ 4333
+ 3396 4 8 340 342 2413 2418 4333 3167 4375
+ 3168
+ 3397 4 8 430 1040 1034 1037 2253 4377 2256
+ 4378
+ 3398 4 8 1034 1037 618 775 2256 4378 770
+ 769
+ 3399 4 8 770 769 593 768 2256 4378 2253
+ 4377
+ 3400 4 8 1040 341 1037 775 4377 768 4378
+ 769
+ 3401 4 8 328 2740 332 4335 1467 2739 4380
+ 4379
+ 3402 4 8 332 4335 341 4332 4380 4379 3560
+ 4367
+ 3403 4 8 3560 4367 860 851 4380 4379 1467
+ 2739
+ 3404 4 8 2740 847 4335 4332 2739 851 4379
+ 4367
+ 3405 4 8 2061 2065 4077 4079 2062 2066 4382
+ 4381
+ 3406 4 8 4077 4079 1080 1079 4382 4381 3243
+ 4070
+ 3407 4 8 3243 4070 42 1118 4382 4381 2062
+ 2066
+ 3408 4 8 2065 1084 4079 1079 2066 1118 4381
+ 4070
+ 3409 4 8 2181 2182 4020 4023 2184 2183 4384
+ 4383
+ 3410 4 8 4020 4023 2061 2064 4384 4383 2062
+ 2063
+ 3411 4 8 2062 2063 42 1170 4384 4383 2184
+ 2183
+ 3412 4 8 2182 1181 4023 2064 2183 1170 4383
+ 2063
+ 3413 4 8 2181 4020 3641 4019 3643 4385 3642
+ 4386
+ 3414 4 8 3641 4019 2694 4024 3642 4386 2697
+ 4387
+ 3415 4 8 2697 4387 2703 3031 3642 4386 3643
+ 4385
+ 3416 4 8 4020 2061 4019 4024 4385 3031 4386
+ 4387
+ 3417 4 8 2061 4305 4024 4308 3031 4388 4387
+ 4389
+ 3418 4 8 4024 4308 2694 2698 4387 4389 2697
+ 2701
+ 3419 4 8 2697 2701 2703 2705 4387 4389 3031
+ 4388
+ 3420 4 8 4305 1654 4308 2698 4388 2705 4389
+ 2701
+ 3421 4 8 3764 3761 3763 3762 4113 4117 4350
+ 4390
+ 3422 4 8 3763 3762 57 2728 4350 4390 4066
+ 4391
+ 3423 4 8 4066 4391 732 735 4350 4390 4113
+ 4117
+ 3424 4 8 3761 429 3762 2728 4117 735 4390
+ 4391
+ 3425 4 8 488 1395 4393 4392 4047 4394 4396
+ 4395
+ 3426 4 8 4393 4392 2597 4397 4396 4395 3354
+ 4398
+ 3427 4 8 3354 4398 130 4399 4396 4395 4047
+ 4394
+ 3428 4 8 1395 1407 4392 4397 4394 4399 4395
+ 4398
+ 3429 4 8 3791 3792 4401 4400 3794 3793 4403
+ 4402
+ 3430 4 8 4401 4400 1132 4131 4403 4402 2045
+ 4130
+ 3431 4 8 2045 4130 425 3799 4403 4402 3794
+ 3793
+ 3432 4 8 3792 3764 4400 4131 3793 3799 4402
+ 4130
+ 3433 4 8 667 2044 1169 3803 2038 2041 3612
+ 4404
+ 3434 4 8 1169 3803 250 427 3612 4404 420
+ 423
+ 3435 4 8 420 423 368 419 3612 4404 2038
+ 2041
+ 3436 4 8 2044 425 3803 427 2041 419 4404
+ 423
+ 3437 4 8 372 473 370 4405 363 469 366
+ 4406
+ 3438 4 8 370 4405 368 4277 366 4406 362
+ 4279
+ 3439 4 8 362 4279 159 255 366 4406 363
+ 469
+ 3440 4 8 473 71 4405 4277 469 255 4406
+ 4279
+ 3441 4 8 394 1594 393 1593 2193 4001 2196
+ 4407
+ 3442 4 8 393 1593 87 319 2196 4407 1732
+ 1735
+ 3443 4 8 1732 1735 1728 1731 2196 4407 2193
+ 4001
+ 3444 4 8 1594 101 1593 319 4001 1731 4407
+ 1735
+ 3445 4 8 406 3865 4409 4408 3714 4410 4412
+ 4411
+ 3446 4 8 4409 4408 3764 4222 4412 4411 3754
+ 4413
+ 3447 4 8 3754 4413 3303 3304 4412 4411 3714
+ 4410
+ 3448 4 8 3865 1085 4408 4222 4410 3304 4411
+ 4413
+ 3449 4 8 406 4288 3291 4291 4409 4414 4416
+ 4415
+ 3450 4 8 3291 4291 1132 3191 4416 4415 4131
+ 4417
+ 3451 4 8 4131 4417 3764 4224 4416 4415 4409
+ 4414
+ 3452 4 8 4288 2390 4291 3191 4414 4224 4415
+ 4417
+ 3453 4 8 406 3865 3714 4410 407 4418 3713
+ 4419
+ 3454 4 8 3714 4410 3303 3304 3713 4419 3307
+ 3308
+ 3455 4 8 3307 3308 66 1086 3713 4419 407
+ 4418
+ 3456 4 8 3865 1085 4410 3304 4418 1086 4419
+ 3308
+ 3457 4 8 1098 1946 4217 4238 3306 4129 4421
+ 4420
+ 3458 4 8 4217 4238 3764 3763 4421 4420 3754
+ 3758
+ 3459 4 8 3754 3758 3303 3757 4421 4420 3306
+ 4129
+ 3460 4 8 1946 57 4238 3763 4129 3757 4420
+ 3758
+ 3461 4 8 3791 3795 4423 4422 4424 4425 4427
+ 4426
+ 3462 4 8 4423 4422 368 417 4427 4426 4277
+ 4428
+ 3463 4 8 4277 4428 71 4429 4427 4426 4424
+ 4425
+ 3464 4 8 3795 429 4422 417 4425 4429 4426
+ 4428
+ 3465 4 8 372 370 473 4405 4430 4431 4433
+ 4432
+ 3466 4 8 473 4405 71 4277 4433 4432 4424
+ 4427
+ 3467 4 8 4424 4427 3791 4423 4433 4432 4430
+ 4431
+ 3468 4 8 370 368 4405 4277 4431 4423 4432
+ 4427
+ 3469 4 8 372 4430 4435 4434 370 4431 4437
+ 4436
+ 3470 4 8 4435 4434 1132 4401 4437 4436 2036
+ 4438
+ 3471 4 8 2036 4438 368 4423 4437 4436 370
+ 4431
+ 3472 4 8 4430 3791 4434 4401 4431 4423 4436
+ 4438
+ 3473 4 8 429 417 424 418 3795 4422 3798
+ 4439
+ 3474 4 8 424 418 425 419 3798 4439 3794
+ 4440
+ 3475 4 8 3794 4440 3791 4423 3798 4439 3795
+ 4422
+ 3476 4 8 417 368 418 419 4422 4423 4439
+ 4440
+ 3477 4 8 3791 4401 4423 4438 3794 4403 4440
+ 4441
+ 3478 4 8 4423 4438 368 2036 4440 4441 419
+ 2039
+ 3479 4 8 419 2039 425 2045 4440 4441 3794
+ 4403
+ 3480 4 8 4401 1132 4438 2036 4403 2045 4441
+ 2039
+ 3481 4 8 2181 3814 4020 4442 3816 3815 4360
+ 4443
+ 3482 4 8 4020 4442 2061 4077 4360 4443 4213
+ 4215
+ 3483 4 8 4213 4215 271 3817 4360 4443 3816
+ 3815
+ 3484 4 8 3814 1080 4442 4077 3815 3817 4443
+ 4215
+ 3485 4 8 2181 2185 3641 4313 2182 2186 4021
+ 4444
+ 3486 4 8 3641 4313 2694 3676 4021 4444 4026
+ 4245
+ 3487 4 8 4026 4245 1181 1179 4021 4444 2182
+ 2186
+ 3488 4 8 2185 1180 4313 3676 2186 1179 4444
+ 4245
+ 3489 4 8 2181 2184 4020 4384 3814 4354 4442
+ 4445
+ 3490 4 8 4020 4384 2061 2062 4442 4445 4077
+ 4382
+ 3491 4 8 4077 4382 1080 3243 4442 4445 3814
+ 4354
+ 3492 4 8 2184 42 4384 2062 4354 3243 4445
+ 4382
+ 3493 4 8 971 4080 4447 4446 3028 4212 4449
+ 4448
+ 3494 4 8 4447 4446 1098 1951 4449 4448 4356
+ 4357
+ 3495 4 8 4356 4357 2061 4213 4449 4448 3028
+ 4212
+ 3496 4 8 4080 271 4446 1951 4212 4213 4448
+ 4357
+ 3497 4 8 2181 3636 2185 4311 2901 4227 4241
+ 4450
+ 3498 4 8 2185 4311 1180 3680 4241 4450 2335
+ 4243
+ 3499 4 8 2335 4243 15 4015 4241 4450 2901
+ 4227
+ 3500 4 8 3636 984 4311 3680 4227 4015 4450
+ 4243
+ 3501 4 8 148 2476 2482 2477 140 2486 4160
+ 4451
+ 3502 4 8 2482 2477 1885 2478 4160 4451 1878
+ 4177
+ 3503 4 8 1878 4177 136 2434 4160 4451 140
+ 2486
+ 3504 4 8 2476 467 2477 2478 2486 2434 4451
+ 4177
+ 3505 4 8 1870 4183 1872 4452 3747 4453 3744
+ 4454
+ 3506 4 8 1872 4452 110 1729 3744 4454 3097
+ 4124
+ 3507 4 8 3097 4124 2209 4125 3744 4454 3747
+ 4453
+ 3508 4 8 4183 1728 4452 1729 4453 4125 4454
+ 4124
+ 3509 4 8 1870 3723 3751 3748 4183 4455 4186
+ 4456
+ 3510 4 8 3751 3748 500 3479 4186 4456 2046
+ 4457
+ 3511 4 8 2046 4457 1728 4458 4186 4456 4183
+ 4455
+ 3512 4 8 3723 922 3748 3479 4455 4458 4456
+ 4457
+ 3513 4 8 1728 1731 1729 1730 3331 3330 4123
+ 4459
+ 3514 4 8 1729 1730 110 104 4123 4459 3095
+ 3098
+ 3515 4 8 3095 3098 2205 2978 4123 4459 3331
+ 3330
+ 3516 4 8 1731 101 1730 104 3330 2978 4459
+ 3098
+ 3517 4 8 1870 3747 3723 3964 4183 4453 4455
+ 4460
+ 3518 4 8 3723 3964 922 3082 4455 4460 4458
+ 4461
+ 3519 4 8 4458 4461 1728 4125 4455 4460 4183
+ 4453
+ 3520 4 8 3747 2209 3964 3082 4453 4125 4460
+ 4461
+ 3521 4 8 1927 2993 4036 4035 2617 4058 4463
+ 4462
+ 3522 4 8 4036 4035 803 804 4463 4462 4465
+ 4464
+ 3523 4 8 4465 4464 2236 4057 4463 4462 2617
+ 4058
+ 3524 4 8 2993 187 4035 804 4058 4057 4462
+ 4464
+ 3525 4 8 2236 2874 4465 4466 2617 3522 4463
+ 4467
+ 3526 4 8 4465 4466 803 3342 4463 4467 4036
+ 4468
+ 3527 4 8 4036 4468 1927 3523 4463 4467 2617
+ 3522
+ 3528 4 8 2874 1523 4466 3342 3522 3523 4467
+ 4468
+ 3529 4 8 3737 3874 4342 4341 3876 3875 4470
+ 4469
+ 3530 4 8 4342 4341 2390 3190 4470 4469 2391
+ 4471
+ 3531 4 8 2391 4471 2080 3301 4470 4469 3876
+ 3875
+ 3532 4 8 3874 1382 4341 3190 3875 3301 4469
+ 4471
+ 3533 4 8 1085 1764 3870 4472 4473 4474 4476
+ 4475
+ 3534 4 8 3870 4472 1870 3727 4476 4475 3729
+ 3730
+ 3535 4 8 3729 3730 3737 3736 4476 4475 4473
+ 4474
+ 3536 4 8 1764 1765 4472 3727 4474 3736 4475
+ 3730
+ 3537 4 8 3737 3876 4342 4470 3996 3995 4478
+ 4477
+ 3538 4 8 4342 4470 2390 2391 4478 4477 4201
+ 4283
+ 3539 4 8 4201 4283 2703 3042 4478 4477 3996
+ 3995
+ 3540 4 8 3876 2080 4470 2391 3995 3042 4477
+ 4283
+ 3541 4 8 2390 4225 4342 4479 4218 4219 4481
+ 4480
+ 3542 4 8 4342 4479 3737 4473 4481 4480 4292
+ 4482
+ 3543 4 8 4292 4482 1098 1089 4481 4480 4218
+ 4219
+ 3544 4 8 4225 1085 4479 4473 4219 1089 4480
+ 4482
+ 3545 4 8 2390 4218 4201 4483 4196 4484 4199
+ 4485
+ 3546 4 8 4201 4483 2703 3985 4199 4485 3037
+ 4486
+ 3547 4 8 3037 4486 971 4447 4199 4485 4196
+ 4484
+ 3548 4 8 4218 1098 4483 3985 4484 4447 4485
+ 4486
+ 3549 4 8 3068 3059 3914 3947 3861 3916 4488
+ 4487
+ 3550 4 8 3914 3947 27 2324 4488 4487 2692
+ 4489
+ 3551 4 8 2692 4489 56 3918 4488 4487 3861
+ 3916
+ 3552 4 8 3059 954 3947 2324 3916 3918 4487
+ 4489
+ 3553 4 8 803 4490 4036 4491 3342 4492 4468
+ 4493
+ 3554 4 8 4036 4491 1927 4042 4468 4493 3523
+ 4041
+ 3555 4 8 3523 4041 1523 4045 4468 4493 3342
+ 4492
+ 3556 4 8 4490 2618 4491 4042 4492 4045 4493
+ 4041
+ 3557 4 8 2236 2501 4057 4060 3779 4166 4495
+ 4494
+ 3558 4 8 4057 4060 187 2987 4495 4494 4028
+ 4496
+ 3559 4 8 4028 4496 463 3839 4495 4494 3779
+ 4166
+ 3560 4 8 2501 2500 4060 2987 4166 3839 4494
+ 4496
+ 3561 4 8 2236 2874 2235 3253 4465 4466 4498
+ 4497
+ 3562 4 8 2235 3253 834 3252 4498 4497 3513
+ 3512
+ 3563 4 8 3513 3512 803 3342 4498 4497 4465
+ 4466
+ 3564 4 8 2874 1523 3253 3252 4466 3342 4497
+ 3512
+ 3565 4 8 2288 4154 2292 4499 4500 4501 4503
+ 4502
+ 3566 4 8 2292 4499 148 4164 4503 4502 2991
+ 4165
+ 3567 4 8 2991 4165 1927 1926 4503 4502 4500
+ 4501
+ 3568 4 8 4154 1928 4499 4164 4501 1926 4502
+ 4165
+ 3569 4 8 2500 3839 4505 4504 2985 4506 4508
+ 4507
+ 3570 4 8 4505 4504 1885 2484 4508 4507 2482
+ 2483
+ 3571 4 8 2482 2483 148 2485 4508 4507 2985
+ 4506
+ 3572 4 8 3839 463 4504 2484 4506 2485 4507
+ 2483
+ 3573 4 8 148 2482 4164 4509 2983 2982 4511
+ 4510
+ 3574 4 8 4164 4509 1928 4512 4511 4510 2818
+ 4513
+ 3575 4 8 2818 4513 2205 2984 4511 4510 2983
+ 2982
+ 3576 4 8 2482 1885 4509 4512 2982 2984 4510
+ 4513
+ 3577 4 8 934 2634 932 3000 3970 4514 4012
+ 4515
+ 3578 4 8 932 3000 811 2999 4012 4515 1886
+ 4516
+ 3579 4 8 1886 4516 1885 4505 4012 4515 3970
+ 4514
+ 3580 4 8 2634 2500 3000 2999 4514 4505 4515
+ 4516
+ 3581 4 8 2500 2999 4505 4516 3839 3841 4504
+ 4517
+ 3582 4 8 4505 4516 1885 1886 4504 4517 2484
+ 4173
+ 3583 4 8 2484 4173 463 3450 4504 4517 3839
+ 3841
+ 3584 4 8 2999 811 4516 1886 3841 3450 4517
+ 4173
+ 3585 4 8 262 263 2216 2729 265 264 2341
+ 4518
+ 3586 4 8 2216 2729 743 2726 2341 4518 2339
+ 4063
+ 3587 4 8 2339 4063 271 270 2341 4518 265
+ 264
+ 3588 4 8 263 57 2729 2726 264 270 4518
+ 4063
+ 3589 4 8 972 2323 976 2327 2687 2686 4520
+ 4519
+ 3590 4 8 976 2327 954 2324 4520 4519 3918
+ 4489
+ 3591 4 8 3918 4489 56 2692 4520 4519 2687
+ 2686
+ 3592 4 8 2323 27 2327 2324 2686 2692 4519
+ 4489
+ 3593 4 8 316 1041 314 1805 1148 3570 2780
+ 4521
+ 3594 4 8 314 1805 312 431 2780 4521 438
+ 432
+ 3595 4 8 438 432 149 433 2780 4521 1148
+ 3570
+ 3596 4 8 1041 430 1805 431 3570 433 4521
+ 432
+ 3597 4 8 1314 1330 1714 4522 1906 3017 2970
+ 4523
+ 3598 4 8 1714 4522 1227 1328 2970 4523 1358
+ 3012
+ 3599 4 8 1358 3012 824 1236 2970 4523 1906
+ 3017
+ 3600 4 8 1330 943 4522 1328 3017 1236 4523
+ 3012
+ 3601 4 8 3303 4524 4526 4525 3754 4527 4529
+ 4528
+ 3602 4 8 4526 4525 3791 4401 4529 4528 3792
+ 4400
+ 3603 4 8 3792 4400 3764 4131 4529 4528 3754
+ 4527
+ 3604 4 8 4524 1132 4525 4401 4527 4131 4528
+ 4400
+ 3605 4 8 3303 3754 4526 4529 3756 3755 4531
+ 4530
+ 3606 4 8 4526 4529 3791 3792 4531 4530 3795
+ 3796
+ 3607 4 8 3795 3796 429 3761 4531 4530 3756
+ 3755
+ 3608 4 8 3754 3764 4529 3792 3755 3761 4530
+ 3796
+ 3609 4 8 3303 3756 4526 4531 3494 4532 4534
+ 4533
+ 3610 4 8 4526 4531 3791 3795 4534 4533 4424
+ 4425
+ 3611 4 8 4424 4425 71 4429 4534 4533 3494
+ 4532
+ 3612 4 8 3756 429 4531 3795 4532 4429 4533
+ 4425
+ 3613 4 8 110 151 416 1435 3296 4300 4536
+ 4535
+ 3614 4 8 416 1435 372 371 4536 4535 4435
+ 4537
+ 3615 4 8 4435 4537 1132 1130 4536 4535 3296
+ 4300
+ 3616 4 8 151 150 1435 371 4300 1130 4535
+ 4537
+ 3617 4 8 1132 1130 4435 4537 2036 4538 4437
+ 4539
+ 3618 4 8 4435 4537 372 371 4437 4539 370
+ 369
+ 3619 4 8 370 369 368 367 4437 4539 2036
+ 4538
+ 3620 4 8 1130 150 4537 371 4538 367 4539
+ 369
+ 3621 4 8 1132 1130 2036 4538 2042 3500 2037
+ 4540
+ 3622 4 8 2036 4538 368 367 2037 4540 2038
+ 3610
+ 3623 4 8 2038 3610 667 658 2037 4540 2042
+ 3500
+ 3624 4 8 1130 150 4538 367 3500 658 4540
+ 3610
+ 3625 4 8 803 4490 3341 4541 806 4542 4053
+ 4543
+ 3626 4 8 3341 4541 2597 3668 4053 4543 3674
+ 3669
+ 3627 4 8 3674 3669 121 3665 4053 4543 806
+ 4542
+ 3628 4 8 4490 2618 4541 3668 4542 3665 4543
+ 3669
+ 3629 4 8 803 804 807 808 4465 4464 4545
+ 4544
+ 3630 4 8 807 808 134 177 4545 4544 2230
+ 4546
+ 3631 4 8 2230 4546 2236 4057 4545 4544 4465
+ 4464
+ 3632 4 8 804 187 808 177 4464 4057 4544
+ 4546
+ 3633 4 8 134 132 125 128 807 3516 810
+ 4547
+ 3634 4 8 125 128 121 124 810 4547 806
+ 4056
+ 3635 4 8 806 4056 803 3350 810 4547 807
+ 3516
+ 3636 4 8 132 130 128 124 3516 3350 4547
+ 4056
+ 3637 4 8 934 2200 2199 2203 3966 4548 4168
+ 4549
+ 3638 4 8 2199 2203 2205 2207 4168 4549 3331
+ 4121
+ 3639 4 8 3331 4121 1728 4125 4168 4549 3966
+ 4548
+ 3640 4 8 2200 2209 2203 2207 4548 4125 4549
+ 4121
+ 3641 4 8 2288 2292 4551 4550 4500 4503 4553
+ 4552
+ 3642 4 8 4551 4550 121 185 4553 4552 4040
+ 4209
+ 3643 4 8 4040 4209 1927 2991 4553 4552 4500
+ 4503
+ 3644 4 8 2292 148 4550 185 4503 2991 4552
+ 4209
+ 3645 4 8 803 4490 3342 4492 3341 4541 3340
+ 4554
+ 3646 4 8 3342 4492 1523 4045 3340 4554 3339
+ 4156
+ 3647 4 8 3339 4156 2597 3668 3340 4554 3341
+ 4541
+ 3648 4 8 4490 2618 4492 4045 4541 3668 4554
+ 4156
+ 3649 4 8 789 1182 3030 3210 1184 1183 4556
+ 4555
+ 3650 4 8 3030 3210 2061 2065 4556 4555 2064
+ 2068
+ 3651 4 8 2064 2068 1181 1189 4556 4555 1184
+ 1183
+ 3652 4 8 1182 1084 3210 2065 1183 1189 4555
+ 2068
+ 3653 4 8 789 1184 3030 4556 1770 1772 4558
+ 4557
+ 3654 4 8 3030 4556 2061 2064 4558 4557 4305
+ 4306
+ 3655 4 8 4305 4306 1654 1776 4558 4557 1770
+ 1772
+ 3656 4 8 1184 1181 4556 2064 1772 1776 4557
+ 4306
+ 3657 4 8 2703 2705 3036 3116 3031 4388 3034
+ 4559
+ 3658 4 8 3036 3116 789 1770 3034 4559 3030
+ 4558
+ 3659 4 8 3030 4558 2061 4305 3034 4559 3031
+ 4388
+ 3660 4 8 2705 1654 3116 1770 4388 4305 4559
+ 4558
+ 3661 4 8 3737 3874 3735 3877 3729 4560 3732
+ 4561
+ 3662 4 8 3735 3877 543 3302 3732 4561 3484
+ 3483
+ 3663 4 8 3484 3483 1870 1869 3732 4561 3729
+ 4560
+ 3664 4 8 3874 1382 3877 3302 4560 1869 4561
+ 3483
+ 3665 4 8 1765 3283 1764 4285 3727 4194 4472
+ 4562
+ 3666 4 8 1764 4285 1085 3872 4472 4562 3870
+ 3871
+ 3667 4 8 3870 3871 1870 3873 4472 4562 3727
+ 4194
+ 3668 4 8 3283 384 4285 3872 4194 3873 4562
+ 3871
+ 3669 4 8 3737 3736 4292 4293 4473 4474 4482
+ 4563
+ 3670 4 8 4292 4293 1098 1763 4482 4563 1089
+ 1762
+ 3671 4 8 1089 1762 1085 1764 4482 4563 4473
+ 4474
+ 3672 4 8 3736 1765 4293 1763 4474 1764 4563
+ 1762
+ 3673 4 8 429 4429 3756 4532 2728 4564 3760
+ 4565
+ 3674 4 8 3756 4532 3303 3494 3760 4565 3757
+ 4566
+ 3675 4 8 3757 4566 57 58 3760 4565 2728
+ 4564
+ 3676 4 8 4429 71 4532 3494 4564 58 4565
+ 4566
+ 3677 4 8 262 1068 1063 1062 1970 1971 4568
+ 4567
+ 3678 4 8 1063 1062 238 1061 4568 4567 399
+ 4569
+ 3679 4 8 399 4569 70 1967 4568 4567 1970
+ 1971
+ 3680 4 8 1068 14 1062 1061 1971 1967 4567
+ 4569
+ 3681 4 8 57 274 263 267 61 3825 2348
+ 4570
+ 3682 4 8 263 267 262 266 2348 4570 1970
+ 1973
+ 3683 4 8 1970 1973 70 1969 2348 4570 61
+ 3825
+ 3684 4 8 274 37 267 266 3825 1969 4570
+ 1973
+ 3685 4 8 845 2349 2351 2352 4571 4572 4574
+ 4573
+ 3686 4 8 2351 2352 55 730 4574 4573 1779
+ 1777
+ 3687 4 8 1779 1777 271 273 4574 4573 4571
+ 4572
+ 3688 4 8 2349 37 2352 730 4572 273 4573
+ 1777
+ 3689 4 8 55 1779 2903 3813 2351 4574 4576
+ 4575
+ 3690 4 8 2903 3813 2181 3816 4576 4575 4090
+ 4577
+ 3691 4 8 4090 4577 845 4571 4576 4575 2351
+ 4574
+ 3692 4 8 1779 271 3813 3816 4574 4571 4575
+ 4577
+ 3693 4 8 149 2511 1154 3710 1148 3567 1151
+ 4578
+ 3694 4 8 1154 3710 860 3559 1151 4578 1147
+ 3558
+ 3695 4 8 1147 3558 316 3564 1151 4578 1148
+ 3567
+ 3696 4 8 2511 2258 3710 3559 3567 3564 4578
+ 3558
+ 3697 4 8 3303 4526 4524 4525 3499 4579 4581
+ 4580
+ 3698 4 8 4524 4525 1132 4401 4581 4580 4435
+ 4434
+ 3699 4 8 4435 4434 372 4430 4581 4580 3499
+ 4579
+ 3700 4 8 4526 3791 4525 4401 4579 4430 4580
+ 4434
+ 3701 4 8 1928 2770 3529 3527 4512 4582 4584
+ 4583
+ 3702 4 8 3529 3527 934 2634 4584 4583 3970
+ 4514
+ 3703 4 8 3970 4514 1885 4505 4584 4583 4512
+ 4582
+ 3704 4 8 2770 2500 3527 2634 4582 4505 4583
+ 4514
+ 3705 4 8 1927 4042 4040 4585 4500 4586 4553
+ 4587
+ 3706 4 8 4040 4585 121 3665 4553 4587 4551
+ 4588
+ 3707 4 8 4551 4588 2288 3846 4553 4587 4500
+ 4586
+ 3708 4 8 4042 2618 4585 3665 4586 3846 4587
+ 4588
+ 3709 4 8 2258 2513 4323 4320 2261 4352 4590
+ 4589
+ 3710 4 8 4323 4320 847 850 4590 4589 3169
+ 4324
+ 3711 4 8 3169 4324 2267 4265 4590 4589 2261
+ 4352
+ 3712 4 8 2513 856 4320 850 4352 4265 4589
+ 4324
+ 3713 4 8 1897 3319 3003 3541 2810 4142 3004
+ 4591
+ 3714 4 8 3003 3541 2608 3542 3004 4591 2626
+ 3614
+ 3715 4 8 2626 3614 1923 3619 3004 4591 2810
+ 4142
+ 3716 4 8 3319 1631 3541 3542 4142 3619 4591
+ 3614
+ 3717 4 8 606 2018 879 2858 2025 2021 3776
+ 4592
+ 3718 4 8 879 2858 468 2848 3776 4592 3701
+ 3702
+ 3719 4 8 3701 3702 1258 2020 3776 4592 2025
+ 2021
+ 3720 4 8 2018 820 2858 2848 2021 2020 4592
+ 3702
+ 3721 4 8 993 1468 1015 2547 1009 4593 1012
+ 4594
+ 3722 4 8 1015 2547 870 2548 1012 4594 1008
+ 3129
+ 3723 4 8 1008 3129 350 2958 1012 4594 1009
+ 4593
+ 3724 4 8 1468 1478 2547 2548 4593 2958 4594
+ 3129
+ 3725 4 8 1406 1831 4596 4595 1642 1829 4598
+ 4597
+ 3726 4 8 4596 4595 163 4599 4598 4597 578
+ 4600
+ 3727 4 8 578 4600 580 1830 4598 4597 1642
+ 1829
+ 3728 4 8 1831 1832 4595 4599 1829 1830 4597
+ 4600
+ 3729 4 8 1407 1405 4397 4601 3222 4602 4604
+ 4603
+ 3730 4 8 4397 4601 2597 2600 4604 4603 4606
+ 4605
+ 3731 4 8 4606 4605 1832 1831 4604 4603 3222
+ 4602
+ 3732 4 8 1405 1406 4601 2600 4602 1831 4603
+ 4605
+ 3733 4 8 580 1642 2278 2281 578 4598 4608
+ 4607
+ 3734 4 8 2278 2281 114 1404 4608 4607 4610
+ 4609
+ 3735 4 8 4610 4609 163 4596 4608 4607 578
+ 4598
+ 3736 4 8 1642 1406 2281 1404 4598 4596 4607
+ 4609
+ 3737 4 8 488 1395 1398 1399 4393 4392 4612
+ 4611
+ 3738 4 8 1398 1399 1406 1405 4612 4611 2600
+ 4601
+ 3739 4 8 2600 4601 2597 4397 4612 4611 4393
+ 4392
+ 3740 4 8 1395 1407 1399 1405 4392 4397 4611
+ 4601
+ 3741 4 8 1897 2816 2435 4145 3316 3318 4120
+ 4613
+ 3742 4 8 2435 4145 2210 2204 4120 4613 2208
+ 2206
+ 3743 4 8 2208 2206 2209 2207 4120 4613 3316
+ 3318
+ 3744 4 8 2816 2205 4145 2204 3318 2207 4613
+ 2206
+ 3745 4 8 743 2726 741 2727 736 4062 739
+ 4614
+ 3746 4 8 741 2727 429 2728 739 4614 735
+ 4391
+ 3747 4 8 735 4391 732 4066 739 4614 736
+ 4062
+ 3748 4 8 2726 57 2727 2728 4062 4066 4614
+ 4391
+ 3749 4 8 1927 4042 4500 4586 1925 4615 4617
+ 4616
+ 3750 4 8 4500 4586 2288 3846 4617 4616 3845
+ 3849
+ 3751 4 8 3845 3849 1923 2621 4617 4616 1925
+ 4615
+ 3752 4 8 4042 2618 4586 3846 4615 2621 4616
+ 3849
+ 3753 4 8 1928 2772 4146 4618 3529 3528 4620
+ 4619
+ 3754 4 8 4146 4618 2210 2438 4620 4619 2197
+ 2820
+ 3755 4 8 2197 2820 934 2632 4620 4619 3529
+ 3528
+ 3756 4 8 2772 1508 4618 2438 3528 2632 4619
+ 2820
+ 3757 4 8 1923 1922 3845 4153 1925 1924 4617
+ 4621
+ 3758 4 8 3845 4153 2288 4154 4617 4621 4500
+ 4501
+ 3759 4 8 4500 4501 1927 1926 4617 4621 1925
+ 1924
+ 3760 4 8 1922 1928 4153 4154 1924 1926 4621
+ 4501
+ 3761 4 8 2288 3845 3843 3844 3534 4622 4624
+ 4623
+ 3762 4 8 3843 3844 1406 3618 4624 4623 1635
+ 3617
+ 3763 4 8 1635 3617 1631 3619 4624 4623 3534
+ 4622
+ 3764 4 8 3845 1923 3844 3618 4622 3619 4623
+ 3617
+ 3765 4 8 2288 2291 3843 4625 4626 4627 4629
+ 4628
+ 3766 4 8 3843 4625 1406 1404 4629 4628 1398
+ 1401
+ 3767 4 8 1398 1401 488 1397 4629 4628 4626
+ 4627
+ 3768 4 8 2291 114 4625 1404 4627 1397 4628
+ 1401
+ 3769 4 8 1094 2939 2941 2942 3130 3930 4631
+ 4630
+ 3770 4 8 2941 2942 1940 2938 4631 4630 3125
+ 3126
+ 3771 4 8 3125 3126 350 1008 4631 4630 3130
+ 3930
+ 3772 4 8 2939 870 2942 2938 3930 1008 4630
+ 3126
+ 3773 4 8 1754 4632 1756 4633 3138 4634 3596
+ 4635
+ 3774 4 8 1756 4633 1098 2947 3596 4635 3594
+ 4636
+ 3775 4 8 3594 4636 845 1938 3596 4635 3138
+ 4634
+ 3776 4 8 4632 1940 4633 2947 4634 1938 4635
+ 4636
+ 3777 4 8 834 2103 3513 3518 3346 3357 3511
+ 4637
+ 3778 4 8 3513 3518 803 3350 3511 4637 3335
+ 3352
+ 3779 4 8 3335 3352 226 634 3511 4637 3346
+ 3357
+ 3780 4 8 2103 130 3518 3350 3357 634 4637
+ 3352
+ 3781 4 8 214 2309 2312 2313 218 4638 3950
+ 4639
+ 3782 4 8 2312 2313 72 73 3950 4639 76
+ 77
+ 3783 4 8 76 77 85 84 3950 4639 218
+ 4638
+ 3784 4 8 2309 86 2313 73 4638 84 4639
+ 77
+ 3785 4 8 1832 3222 1831 4602 4599 4640 4595
+ 4641
+ 3786 4 8 1831 4602 1406 1405 4595 4641 4596
+ 4642
+ 3787 4 8 4596 4642 163 4643 4595 4641 4599
+ 4640
+ 3788 4 8 3222 1407 4602 1405 4640 4643 4641
+ 4642
+ 3789 4 8 114 2291 1404 4625 2276 4644 2277
+ 4645
+ 3790 4 8 1404 4625 1406 3843 2277 4645 1635
+ 4624
+ 3791 4 8 1635 4624 1631 3534 2277 4645 2276
+ 4644
+ 3792 4 8 2291 2288 4625 3843 4644 3534 4645
+ 4624
+ 3793 4 8 2061 3031 4020 4385 4356 4646 4359
+ 4647
+ 3794 4 8 4020 4385 2181 3643 4359 4647 4091
+ 4092
+ 3795 4 8 4091 4092 1098 3985 4359 4647 4356
+ 4646
+ 3796 4 8 3031 2703 4385 3643 4646 3985 4647
+ 4092
+ 3797 4 8 1098 3985 4292 4295 4218 4483 4481
+ 4648
+ 3798 4 8 4292 4295 3737 3996 4481 4648 4342
+ 4478
+ 3799 4 8 4342 4478 2390 4201 4481 4648 4218
+ 4483
+ 3800 4 8 3985 2703 4295 3996 4483 4201 4648
+ 4478
+ 3801 4 8 71 4429 4277 4428 405 4649 4278
+ 4650
+ 3802 4 8 4277 4428 368 417 4278 4650 478
+ 4137
+ 3803 4 8 478 4137 238 4136 4278 4650 405
+ 4649
+ 3804 4 8 4429 429 4428 417 4649 4136 4650
+ 4137
+ 3805 4 8 350 3125 2953 4651 2958 3128 2954
+ 4652
+ 3806 4 8 2953 4651 1754 4632 2954 4652 2950
+ 4653
+ 3807 4 8 2950 4653 1478 1939 2954 4652 2958
+ 3128
+ 3808 4 8 3125 1940 4651 4632 3128 1939 4652
+ 4653
+ 3809 4 8 870 2945 2938 2946 2542 4345 2936
+ 4654
+ 3810 4 8 2938 2946 1940 2947 2936 4654 1932
+ 4655
+ 3811 4 8 1932 4655 984 4084 2936 4654 2542
+ 4345
+ 3812 4 8 2945 1098 2946 2947 4345 4084 4654
+ 4655
+ 3813 4 8 350 2953 3125 4651 3130 4656 4631
+ 4657
+ 3814 4 8 3125 4651 1940 4632 4631 4657 2941
+ 4658
+ 3815 4 8 2941 4658 1094 1749 4631 4657 3130
+ 4656
+ 3816 4 8 2953 1754 4651 4632 4656 1749 4657
+ 4658
+ 3817 4 8 1832 4606 3222 4604 4659 4660 4662
+ 4661
+ 3818 4 8 3222 4604 1407 4397 4662 4661 4399
+ 4398
+ 3819 4 8 4399 4398 130 3354 4662 4661 4659
+ 4660
+ 3820 4 8 4606 2597 4604 4397 4660 3354 4661
+ 4398
+ 3821 4 8 2288 2291 3104 4663 3534 4644 3535
+ 4664
+ 3822 4 8 3104 4663 110 112 3535 4664 3088
+ 4665
+ 3823 4 8 3088 4665 1631 2276 3535 4664 3534
+ 4644
+ 3824 4 8 2291 114 4663 112 4644 2276 4664
+ 4665
+ 3825 4 8 803 4490 806 4542 4036 4491 4038
+ 4666
+ 3826 4 8 806 4542 121 3665 4038 4666 4040
+ 4585
+ 3827 4 8 4040 4585 1927 4042 4038 4666 4036
+ 4491
+ 3828 4 8 4490 2618 4542 3665 4491 4042 4666
+ 4585
+ 3829 4 8 110 3088 112 4665 1485 4271 4668
+ 4667
+ 3830 4 8 112 4665 114 2276 4668 4667 2278
+ 2279
+ 3831 4 8 2278 2279 580 1632 4668 4667 1485
+ 4271
+ 3832 4 8 3088 1631 4665 2276 4271 1632 4667
+ 2279
+ 3833 4 8 238 4136 2211 4669 1063 4670 2213
+ 4671
+ 3834 4 8 2211 4669 743 741 2213 4671 2216
+ 2732
+ 3835 4 8 2216 2732 262 2733 2213 4671 1063
+ 4670
+ 3836 4 8 4136 429 4669 741 4670 2733 4671
+ 2732
+ 3837 4 8 163 162 4610 4672 578 1486 4608
+ 4673
+ 3838 4 8 4610 4672 114 112 4608 4673 2278
+ 4668
+ 3839 4 8 2278 4668 580 1485 4608 4673 578
+ 1486
+ 3840 4 8 162 110 4672 112 1486 1485 4673
+ 4668
+ 3841 4 8 70 399 1970 4568 69 400 2346
+ 4674
+ 3842 4 8 1970 4568 262 1063 2346 4674 2344
+ 4675
+ 3843 4 8 2344 4675 71 405 2346 4674 69
+ 400
+ 3844 4 8 399 238 4568 1063 400 405 4674
+ 4675
+ 3845 4 8 3303 4526 3499 4579 3494 4534 3497
+ 4676
+ 3846 4 8 3499 4579 372 4430 3497 4676 473
+ 4433
+ 3847 4 8 473 4433 71 4424 3497 4676 3494
+ 4534
+ 3848 4 8 4526 3791 4579 4430 4534 4424 4676
+ 4433
+ 3849 4 8 41 1818 306 4677 304 1819 305
+ 4678
+ 3850 4 8 306 4677 312 1808 305 4678 311
+ 1809
+ 3851 4 8 311 1809 317 1418 305 4678 304
+ 1819
+ 3852 4 8 1818 23 4677 1808 1819 1418 4678
+ 1809
+ 3853 4 8 350 345 352 348 2953 4679 2956
+ 4680
+ 3854 4 8 352 348 28 31 2956 4680 2952
+ 3134
+ 3855 4 8 2952 3134 1754 1753 2956 4680 2953
+ 4679
+ 3856 4 8 345 37 348 31 4679 1753 4680
+ 3134
+ 3857 4 8 993 1468 1009 4593 1470 1469 2961
+ 4681
+ 3858 4 8 1009 4593 350 2958 2961 4681 352
+ 2957
+ 3859 4 8 352 2957 28 1475 2961 4681 1470
+ 1469
+ 3860 4 8 1468 1478 4593 2958 1469 1475 4681
+ 2957
+ 3861 4 8 1 2 18 21 4 3 4683
+ 4682
+ 3862 4 8 18 21 23 25 4683 4682 753
+ 4684
+ 3863 4 8 753 4684 10 9 4683 4682 4
+ 3
+ 3864 4 8 2 15 21 25 3 9 4682
+ 4684
+ 3865 4 8 1 16 3023 4685 18 17 4687
+ 4686
+ 3866 4 8 3023 4685 81 3907 4687 4686 760
+ 4230
+ 3867 4 8 760 4230 23 22 4687 4686 18
+ 17
+ 3868 4 8 16 27 4685 3907 17 22 4686
+ 4230
+ 3869 4 8 1508 2508 2503 2502 2616 2615 2769
+ 4688
+ 3870 4 8 2503 2502 2500 2501 2769 4688 2766
+ 4061
+ 3871 4 8 2766 4061 1927 2617 2769 4688 2616
+ 2615
+ 3872 4 8 2508 2236 2502 2501 2615 2617 4688
+ 4061
+ 3873 4 8 71 4429 405 4649 2344 4689 4675
+ 4690
+ 3874 4 8 405 4649 238 4136 4675 4690 1063
+ 4670
+ 3875 4 8 1063 4670 262 2733 4675 4690 2344
+ 4689
+ 3876 4 8 4429 429 4649 4136 4689 2733 4690
+ 4670
+ 3877 4 8 430 431 434 435 503 3837 506
+ 4691
+ 3878 4 8 434 435 135 441 506 4691 297
+ 4692
+ 3879 4 8 297 4692 296 3550 506 4691 503
+ 3837
+ 3880 4 8 431 312 435 441 3837 3550 4691
+ 4692
+ 3881 4 8 294 293 452 2137 2541 2540 3380
+ 4693
+ 3882 4 8 452 2137 328 1461 3380 4693 3377
+ 4694
+ 3883 4 8 3377 4694 1627 1621 3380 4693 2541
+ 2540
+ 3884 4 8 293 295 2137 1461 2540 1621 4693
+ 4694
+ 3885 4 8 593 594 597 598 4365 4695 4697
+ 4696
+ 3886 4 8 597 598 199 605 4697 4696 357
+ 825
+ 3887 4 8 357 825 134 826 4697 4696 4365
+ 4695
+ 3888 4 8 594 606 598 605 4695 826 4696
+ 825
+ 3889 4 8 134 299 357 360 4365 4364 4697
+ 4698
+ 3890 4 8 357 360 199 356 4697 4698 597
+ 3819
+ 3891 4 8 597 3819 593 2251 4697 4698 4365
+ 4364
+ 3892 4 8 299 296 360 356 4364 2251 4698
+ 3819
+ 3893 4 8 135 297 133 298 507 502 4700
+ 4699
+ 3894 4 8 133 298 134 299 4700 4699 2755
+ 4361
+ 3895 4 8 2755 4361 510 501 4700 4699 507
+ 502
+ 3896 4 8 297 296 298 299 502 501 4699
+ 4361
+ 3897 4 8 510 2287 2755 2756 507 2283 4700
+ 4701
+ 3898 4 8 2755 2756 134 179 4700 4701 133
+ 4032
+ 3899 4 8 133 4032 135 479 4700 4701 507
+ 2283
+ 3900 4 8 2287 148 2756 179 2283 479 4701
+ 4032
+ 3901 4 8 580 573 579 574 1833 1840 4299
+ 4702
+ 3902 4 8 579 574 150 570 4299 4702 1239
+ 1240
+ 3903 4 8 1239 1240 647 1205 4299 4702 1833
+ 1840
+ 3904 4 8 573 237 574 570 1840 1205 4702
+ 1240
+ 3905 4 8 398 1373 396 4703 389 1874 392
+ 4704
+ 3906 4 8 396 4703 394 523 392 4704 388
+ 4010
+ 3907 4 8 388 4010 385 1876 392 4704 389
+ 1874
+ 3908 4 8 1373 527 4703 523 1874 1876 4704
+ 4010
+ 3909 4 8 85 84 225 626 218 4638 221
+ 4705
+ 3910 4 8 225 626 223 630 221 4705 217
+ 3424
+ 3911 4 8 217 3424 214 2309 221 4705 218
+ 4638
+ 3912 4 8 84 86 626 630 4638 2309 4705
+ 3424
+ 3913 4 8 602 623 1230 2110 1266 1262 3013
+ 4706
+ 3914 4 8 1230 2110 943 936 3013 4706 1328
+ 1326
+ 3915 4 8 1328 1326 1227 1226 3013 4706 1266
+ 1262
+ 3916 4 8 623 164 2110 936 1262 1226 4706
+ 1326
+ 3917 4 8 1227 1714 1329 1716 1328 4522 1327
+ 4707
+ 3918 4 8 1329 1716 681 1313 1327 4707 1199
+ 1333
+ 3919 4 8 1199 1333 943 1330 1327 4707 1328
+ 4522
+ 3920 4 8 1714 1314 1716 1313 4522 1330 4707
+ 1333
+ 3921 4 8 3303 3494 3307 3495 3757 4566 4127
+ 4708
+ 3922 4 8 3307 3495 66 65 4127 4708 60
+ 59
+ 3923 4 8 60 59 57 58 4127 4708 3757
+ 4566
+ 3924 4 8 3494 71 3495 65 4566 58 4708
+ 59
+ 3925 4 8 618 888 770 2252 889 892 1046
+ 4709
+ 3926 4 8 770 2252 593 2251 1046 4709 1043
+ 3821
+ 3927 4 8 1043 3821 188 516 1046 4709 889
+ 892
+ 3928 4 8 888 296 2252 2251 892 516 4709
+ 3821
+ 3929 4 8 1 18 3023 4687 4 4683 3025
+ 4710
+ 3930 4 8 3023 4687 81 760 3025 4710 754
+ 757
+ 3931 4 8 754 757 10 753 3025 4710 4
+ 4683
+ 3932 4 8 18 23 4687 760 4683 753 4710
+ 757
+ 3933 4 8 250 1168 1108 1289 1798 2191 4712
+ 4711
+ 3934 4 8 1108 1289 1110 1287 4712 4711 1185
+ 2899
+ 3935 4 8 1185 2899 789 784 4712 4711 1798
+ 2191
+ 3936 4 8 1168 785 1289 1287 2191 784 4711
+ 2899
+ 3937 4 8 789 1182 1185 1186 1798 1799 4712
+ 4713
+ 3938 4 8 1185 1186 1110 1119 4712 4713 1108
+ 2975
+ 3939 4 8 1108 2975 250 1588 4712 4713 1798
+ 1799
+ 3940 4 8 1182 1084 1186 1119 1799 1588 4713
+ 2975
+ 3941 4 8 250 1169 246 3613 1163 1164 4715
+ 4714
+ 3942 4 8 246 3613 150 658 4715 4714 660
+ 661
+ 3943 4 8 660 661 223 666 4715 4714 1163
+ 1164
+ 3944 4 8 1169 667 3613 658 1164 666 4714
+ 661
+ 3945 4 8 223 630 660 956 1163 2913 4715
+ 4716
+ 3946 4 8 660 956 150 248 4715 4716 246
+ 247
+ 3947 4 8 246 247 250 249 4715 4716 1163
+ 2913
+ 3948 4 8 630 86 956 248 2913 249 4716
+ 247
+ 3949 4 8 223 666 252 665 222 2358 251
+ 4717
+ 3950 4 8 252 665 237 664 251 4717 234
+ 2457
+ 3951 4 8 234 2457 164 721 251 4717 222
+ 2358
+ 3952 4 8 666 667 665 664 2358 721 4717
+ 2457
+ 3953 4 8 677 1394 1896 1895 2469 2559 3410
+ 4718
+ 3954 4 8 1896 1895 1133 1121 3410 4718 1245
+ 2473
+ 3955 4 8 1245 2473 647 1216 3410 4718 2469
+ 2559
+ 3956 4 8 1394 1120 1895 1121 2559 1216 4718
+ 2473
+ 3957 4 8 394 1155 1594 1592 525 1156 4005
+ 4719
+ 3958 4 8 1594 1592 101 282 4005 4719 139
+ 278
+ 3959 4 8 139 278 136 276 4005 4719 525
+ 1156
+ 3960 4 8 1155 280 1592 282 1156 276 4719
+ 278
+ 3961 4 8 398 1373 1375 1376 396 4703 1580
+ 4720
+ 3962 4 8 1375 1376 280 1160 1580 4720 1155
+ 1157
+ 3963 4 8 1155 1157 394 523 1580 4720 396
+ 4703
+ 3964 4 8 1373 527 1376 1160 4703 523 4720
+ 1157
+ 3965 4 8 200 204 203 207 1817 4232 3743
+ 4721
+ 3966 4 8 203 207 209 211 3743 4721 3741
+ 4722
+ 3967 4 8 3741 4722 618 1410 3743 4721 1817
+ 4232
+ 3968 4 8 204 213 207 211 4232 1410 4721
+ 4722
+ 3969 4 8 209 208 918 3942 211 210 4724
+ 4723
+ 3970 4 8 918 3942 568 2321 4724 4723 1549
+ 4252
+ 3971 4 8 1549 4252 213 212 4724 4723 211
+ 210
+ 3972 4 8 208 27 3942 2321 210 212 4723
+ 4252
+ 3973 4 8 199 354 357 358 833 2102 831
+ 4725
+ 3974 4 8 357 358 134 132 831 4725 832
+ 3515
+ 3975 4 8 832 3515 834 2103 831 4725 833
+ 2102
+ 3976 4 8 354 130 358 132 2102 2103 4725
+ 3515
+ 3977 4 8 385 1003 386 3769 389 1004 390
+ 4726
+ 3978 4 8 386 3769 87 382 390 4726 397
+ 3145
+ 3979 4 8 397 3145 398 1005 390 4726 389
+ 1004
+ 3980 4 8 1003 384 3769 382 1004 1005 4726
+ 3145
+ 3981 4 8 1923 1917 2810 3007 1922 1916 2813
+ 4727
+ 3982 4 8 2810 3007 1897 2636 2813 4727 2819
+ 3530
+ 3983 4 8 2819 3530 1928 1915 2813 4727 1922
+ 1916
+ 3984 4 8 1917 1914 3007 2636 1916 1915 4727
+ 3530
+ 3985 4 8 2205 3099 2983 4728 2978 3100 2981
+ 4729
+ 3986 4 8 2983 4728 148 2292 2981 4729 146
+ 2293
+ 3987 4 8 146 2293 101 2289 2981 4729 2978
+ 3100
+ 3988 4 8 3099 2288 4728 2292 3100 2289 4729
+ 2293
+ 3989 4 8 1627 1629 2836 2839 2833 2832 3383
+ 4730
+ 3990 4 8 2836 2839 984 1945 3383 4730 987
+ 2556
+ 3991 4 8 987 2556 993 1471 3383 4730 2833
+ 2832
+ 3992 4 8 1629 846 2839 1945 2832 1471 4730
+ 2556
+ 3993 4 8 846 1622 1857 3664 2537 2536 4732
+ 4731
+ 3994 4 8 1857 3664 41 283 4732 4731 286
+ 287
+ 3995 4 8 286 287 294 293 4732 4731 2537
+ 2536
+ 3996 4 8 1622 295 3664 283 2536 293 4731
+ 287
+ 3997 4 8 2267 2269 2417 4733 2412 4319 2415
+ 4734
+ 3998 4 8 2417 4733 593 2253 2415 4734 768
+ 4377
+ 3999 4 8 768 4377 341 1040 2415 4734 2412
+ 4319
+ 4000 4 8 2269 430 4733 2253 4319 1040 4734
+ 4377
+ 4001 4 8 213 1549 211 4724 1410 1548 4722
+ 4735
+ 4002 4 8 211 4724 209 918 4722 4735 3741
+ 4736
+ 4003 4 8 3741 4736 618 911 4722 4735 1410
+ 1548
+ 4004 4 8 1549 568 4724 918 1548 911 4735
+ 4736
+ 4005 4 8 1110 1102 2087 3008 1844 1846 4249
+ 4737
+ 4006 4 8 2087 3008 56 3010 4249 4737 3918
+ 3919
+ 4007 4 8 3918 3919 954 1849 4249 4737 1844
+ 1846
+ 4008 4 8 1102 1056 3008 3010 1846 1849 4737
+ 3919
+ 4009 4 8 429 4429 2728 4564 2733 4689 2731
+ 4738
+ 4010 4 8 2728 4564 57 58 2731 4738 263
+ 2345
+ 4011 4 8 263 2345 262 2344 2731 4738 2733
+ 4689
+ 4012 4 8 4429 71 4564 58 4689 2344 4738
+ 2345
+ 4013 4 8 430 2269 2253 4733 509 2268 3575
+ 4739
+ 4014 4 8 2253 4733 593 2417 3575 4739 3573
+ 3705
+ 4015 4 8 3573 3705 510 2266 3575 4739 509
+ 2268
+ 4016 4 8 2269 2267 4733 2417 2268 2266 4739
+ 3705
+ 4017 4 8 341 4332 2412 4376 3566 4366 4318
+ 4740
+ 4018 4 8 2412 4376 2267 3169 4318 4740 2261
+ 4590
+ 4019 4 8 2261 4590 2258 4323 4318 4740 3566
+ 4366
+ 4020 4 8 4332 847 4376 3169 4366 4323 4740
+ 4590
+ 4021 4 8 468 2655 2660 2663 2657 2656 4327
+ 4741
+ 4022 4 8 2660 2663 856 855 4327 4741 850
+ 849
+ 4023 4 8 850 849 847 848 4327 4741 2657
+ 2656
+ 4024 4 8 2655 442 2663 855 2656 848 4741
+ 849
+ 4025 4 8 1928 2770 4512 4582 4164 4162 4509
+ 4742
+ 4026 4 8 4512 4582 1885 4505 4509 4742 2482
+ 4508
+ 4027 4 8 2482 4508 148 2985 4509 4742 4164
+ 4162
+ 4028 4 8 2770 2500 4582 4505 4162 2985 4742
+ 4508
+ 4029 4 8 1391 2226 2444 4743 1514 2579 2878
+ 4744
+ 4030 4 8 2444 4743 1508 1496 2878 4744 1503
+ 1497
+ 4031 4 8 1503 1497 635 1498 2878 4744 1514
+ 2579
+ 4032 4 8 2226 935 4743 1496 2579 1498 4744
+ 1497
+ 4033 4 8 935 2226 1496 4743 2576 4745 2822
+ 4746
+ 4034 4 8 1496 4743 1508 2444 2822 4746 2438
+ 2441
+ 4035 4 8 2438 2441 2210 2437 2822 4746 2576
+ 4745
+ 4036 4 8 2226 1391 4743 2444 4745 2437 4746
+ 2441
+ 4037 4 8 935 2226 2576 4745 923 2567 2574
+ 4747
+ 4038 4 8 2576 4745 2210 2437 2574 4747 2572
+ 3081
+ 4039 4 8 2572 3081 922 2564 2574 4747 923
+ 2567
+ 4040 4 8 2226 1391 4745 2437 2567 2564 4747
+ 3081
+ 4041 4 8 934 2199 2197 2198 3529 4748 4620
+ 4749
+ 4042 4 8 2197 2198 2210 2204 4620 4749 4146
+ 4147
+ 4043 4 8 4146 4147 1928 2818 4620 4749 3529
+ 4748
+ 4044 4 8 2199 2205 2198 2204 4748 2818 4749
+ 4147
+ 4045 4 8 1631 3091 3319 3315 3322 4268 3323
+ 4750
+ 4046 4 8 3319 3315 1897 3316 3323 4750 1898
+ 3580
+ 4047 4 8 1898 3580 1120 3579 3323 4750 3322
+ 4268
+ 4048 4 8 3091 2209 3315 3316 4268 3579 4750
+ 3580
+ 4049 4 8 2205 3099 2818 4152 2983 4728 4511
+ 4751
+ 4050 4 8 2818 4152 1928 4154 4511 4751 4164
+ 4499
+ 4051 4 8 4164 4499 148 2292 4511 4751 2983
+ 4728
+ 4052 4 8 3099 2288 4152 4154 4728 2292 4751
+ 4499
+ 4053 4 8 238 239 2211 3175 4136 4138 4669
+ 4752
+ 4054 4 8 2211 3175 743 742 4669 4752 741
+ 740
+ 4055 4 8 741 740 429 428 4669 4752 4136
+ 4138
+ 4056 4 8 239 250 3175 742 4138 428 4752
+ 740
+ 4057 4 8 2390 3190 2393 3189 2391 4471 2392
+ 4753
+ 4058 4 8 2393 3189 668 1444 2392 4753 2070
+ 3299
+ 4059 4 8 2070 3299 2080 3301 2392 4753 2391
+ 4471
+ 4060 4 8 3190 1382 3189 1444 4471 3301 4753
+ 3299
+ 4061 4 8 2061 3031 4356 4646 3028 3032 4449
+ 4754
+ 4062 4 8 4356 4646 1098 3985 4449 4754 4447
+ 4486
+ 4063 4 8 4447 4486 971 3037 4449 4754 3028
+ 3032
+ 4064 4 8 3031 2703 4646 3985 3032 3037 4754
+ 4486
+ 4065 4 8 372 414 363 471 416 415 1437
+ 4755
+ 4066 4 8 363 471 159 261 1437 4755 158
+ 4756
+ 4067 4 8 158 4756 110 119 1437 4755 416
+ 415
+ 4068 4 8 414 66 471 261 415 119 4755
+ 4756
+ 4069 4 8 430 433 2262 3568 509 3578 2263
+ 4757
+ 4070 4 8 2262 3568 2258 2511 2263 4757 2259
+ 2514
+ 4071 4 8 2259 2514 510 2151 2263 4757 509
+ 3578
+ 4072 4 8 433 149 3568 2511 3578 2151 4757
+ 2514
+ 4073 4 8 1258 2647 3152 3150 3701 3774 3704
+ 4758
+ 4074 4 8 3152 3150 2492 3147 3704 4758 2650
+ 4329
+ 4075 4 8 2650 4329 468 2422 3704 4758 3701
+ 3774
+ 4076 4 8 2647 2267 3150 3147 3774 2422 4758
+ 4329
+ 4077 4 8 2390 2394 3191 4297 4224 4348 4417
+ 4759
+ 4078 4 8 3191 4297 1132 4132 4417 4759 4131
+ 4135
+ 4079 4 8 4131 4135 3764 3955 4417 4759 4224
+ 4348
+ 4080 4 8 2394 967 4297 4132 4348 3955 4759
+ 4135
+ 4081 4 8 406 1863 4337 4338 1865 1864 4761
+ 4760
+ 4082 4 8 4337 4338 3737 3874 4761 4760 3729
+ 4560
+ 4083 4 8 3729 4560 1870 1869 4761 4760 1865
+ 1864
+ 4084 4 8 1863 1382 4338 3874 1864 1869 4760
+ 4560
+ 4085 4 8 581 2721 3195 3196 3415 3416 3832
+ 4762
+ 4086 4 8 3195 3196 2080 3118 3832 4762 3835
+ 3993
+ 4087 4 8 3835 3993 790 2706 3832 4762 3415
+ 3416
+ 4088 4 8 2721 1654 3196 3118 3416 2706 4762
+ 3993
+ 4089 4 8 3764 3954 4109 4111 4217 4763 4236
+ 4764
+ 4090 4 8 4109 4111 271 4080 4236 4764 1951
+ 4446
+ 4091 4 8 1951 4446 1098 4447 4236 4764 4217
+ 4763
+ 4092 4 8 3954 971 4111 4080 4763 4447 4764
+ 4446
+ 4093 4 8 500 3479 3972 3975 2046 4457 3969
+ 4765
+ 4094 4 8 3972 3975 934 926 3969 4765 3966
+ 4766
+ 4095 4 8 3966 4766 1728 4458 3969 4765 2046
+ 4457
+ 4096 4 8 3479 922 3975 926 4457 4458 4765
+ 4766
+ 4097 4 8 187 2987 186 2988 4028 4496 4031
+ 4767
+ 4098 4 8 186 2988 148 2985 4031 4767 2485
+ 4506
+ 4099 4 8 2485 4506 463 3839 4031 4767 4028
+ 4496
+ 4100 4 8 2987 2500 2988 2985 4496 3839 4767
+ 4506
+ 4101 4 8 463 457 4028 4029 3779 4052 4495
+ 4768
+ 4102 4 8 4028 4029 187 177 4495 4768 4057
+ 4546
+ 4103 4 8 4057 4546 2236 2230 4495 4768 3779
+ 4052
+ 4104 4 8 457 134 4029 177 4052 2230 4768
+ 4546
+ 4105 4 8 2205 2812 3099 4150 3090 4144 3536
+ 4769
+ 4106 4 8 3099 4150 2288 3845 3536 4769 3534
+ 4622
+ 4107 4 8 3534 4622 1631 3619 3536 4769 3090
+ 4144
+ 4108 4 8 2812 1923 4150 3845 4144 3619 4769
+ 4622
+ 4109 4 8 3764 4217 4224 4221 3954 4763 4347
+ 4770
+ 4110 4 8 4224 4221 2390 4218 4347 4770 4196
+ 4484
+ 4111 4 8 4196 4484 971 4447 4347 4770 3954
+ 4763
+ 4112 4 8 4217 1098 4221 4218 4763 4447 4770
+ 4484
+ 4113 4 8 860 1147 3560 3561 1467 1466 4380
+ 4771
+ 4114 4 8 3560 3561 341 1038 4380 4771 332
+ 2527
+ 4115 4 8 332 2527 328 1465 4380 4771 1467
+ 1466
+ 4116 4 8 1147 316 3561 1038 1466 1465 4771
+ 2527
+ 4117 4 8 317 1626 1741 4371 885 1620 2802
+ 4772
+ 4118 4 8 1741 4371 328 3377 2802 4772 1461
+ 4694
+ 4119 4 8 1461 4694 295 1621 2802 4772 885
+ 1620
+ 4120 4 8 1626 1627 4371 3377 1620 1621 4772
+ 4694
+ 4121 4 8 1832 4599 1842 4773 3222 4640 3218
+ 4774
+ 4122 4 8 1842 4773 237 572 3218 4774 3216
+ 4775
+ 4123 4 8 3216 4775 1407 4643 3218 4774 3222
+ 4640
+ 4124 4 8 4599 163 4773 572 4640 4643 4774
+ 4775
+ 4125 4 8 121 3665 3672 3666 4551 4588 4777
+ 4776
+ 4126 4 8 3672 3666 1406 3667 4777 4776 3843
+ 3847
+ 4127 4 8 3843 3847 2288 3846 4777 4776 4551
+ 4588
+ 4128 4 8 3665 2618 3666 3667 4588 3846 4776
+ 3847
+ 4129 4 8 993 992 2833 3381 2176 2177 2831
+ 4778
+ 4130 4 8 2833 3381 1627 3375 2831 4778 2541
+ 3378
+ 4131 4 8 2541 3378 294 450 2831 4778 2176
+ 2177
+ 4132 4 8 992 454 3381 3375 2177 450 4778
+ 3378
+ 4133 4 8 2597 3674 2600 3673 4393 4779 4612
+ 4780
+ 4134 4 8 2600 3673 1406 3672 4612 4780 1398
+ 4781
+ 4135 4 8 1398 4781 488 486 4612 4780 4393
+ 4779
+ 4136 4 8 3674 121 3673 3672 4779 486 4780
+ 4781
+ 4137 4 8 2597 2598 3334 4782 4606 4783 4785
+ 4784
+ 4138 4 8 3334 4782 226 2467 4785 4784 2091
+ 3538
+ 4139 4 8 2091 3538 1832 1825 4785 4784 4606
+ 4783
+ 4140 4 8 2598 1206 4782 2467 4783 1825 4784
+ 3538
+ 4141 4 8 384 3284 3283 3287 3931 3932 4287
+ 4786
+ 4142 4 8 3283 3287 1765 3290 4287 4786 1758
+ 4787
+ 4143 4 8 1758 4787 1094 2939 4287 4786 3931
+ 3932
+ 4144 4 8 3284 870 3287 3290 3932 2939 4786
+ 4787
+ 4145 4 8 226 638 940 3225 643 637 4789
+ 4788
+ 4146 4 8 940 3225 943 1198 4789 4788 1192
+ 1195
+ 4147 4 8 1192 1195 648 636 4789 4788 643
+ 637
+ 4148 4 8 638 635 3225 1198 637 636 4788
+ 1195
+ 4149 4 8 164 936 714 2446 229 937 2464
+ 4790
+ 4150 4 8 714 2446 648 1192 2464 4790 643
+ 4789
+ 4151 4 8 643 4789 226 940 2464 4790 229
+ 937
+ 4152 4 8 936 943 2446 1192 937 940 4790
+ 4789
+ 4153 4 8 72 3807 1054 4791 2312 3804 2315
+ 4792
+ 4154 4 8 1054 4791 1056 3503 2315 4792 2311
+ 3504
+ 4155 4 8 2311 3504 214 3067 2315 4792 2312
+ 3804
+ 4156 4 8 3807 3068 4791 3503 3804 3067 4792
+ 3504
+ 4157 4 8 1 16 1048 3911 3023 4685 3863
+ 4793
+ 4158 4 8 1048 3911 72 3902 3863 4793 75
+ 3905
+ 4159 4 8 75 3905 81 3907 3863 4793 3023
+ 4685
+ 4160 4 8 16 27 3911 3902 4685 3907 4793
+ 3905
+ 4161 4 8 384 3872 383 4794 3931 4284 4103
+ 4795
+ 4162 4 8 383 4794 66 1086 4103 4795 1093
+ 1087
+ 4163 4 8 1093 1087 1094 1088 4103 4795 3931
+ 4284
+ 4164 4 8 3872 1085 4794 1086 4284 1088 4795
+ 1087
+ 4165 4 8 1765 3290 1763 3991 1758 4787 1761
+ 4796
+ 4166 4 8 1763 3991 1098 2945 1761 4796 1096
+ 2940
+ 4167 4 8 1096 2940 1094 2939 1761 4796 1758
+ 4787
+ 4168 4 8 3290 870 3991 2945 4787 2939 4796
+ 2940
+ 4169 4 8 1132 3296 1124 4301 1440 3295 3261
+ 4797
+ 4170 4 8 1124 4301 1120 2891 3261 4797 1386
+ 3591
+ 4171 4 8 1386 3591 1382 1873 3261 4797 1440
+ 3295
+ 4172 4 8 3296 110 4301 2891 3295 1873 4797
+ 3591
+ 4173 4 8 1094 1747 3130 3131 1749 1748 4656
+ 4798
+ 4174 4 8 3130 3131 350 345 4656 4798 2953
+ 4679
+ 4175 4 8 2953 4679 1754 1753 4656 4798 1749
+ 1748
+ 4176 4 8 1747 37 3131 345 1748 1753 4798
+ 4679
+ 4177 4 8 1940 4632 2947 4633 2941 4658 2944
+ 4799
+ 4178 4 8 2947 4633 1098 1756 2944 4799 1096
+ 1752
+ 4179 4 8 1096 1752 1094 1749 2944 4799 2941
+ 4658
+ 4180 4 8 4632 1754 4633 1756 4658 1749 4799
+ 1752
+ 4181 4 8 56 2330 3918 4251 2687 3662 4520
+ 4800
+ 4182 4 8 3918 4251 954 1850 4520 4800 976
+ 1852
+ 4183 4 8 976 1852 972 1856 4520 4800 2687
+ 3662
+ 4184 4 8 2330 1180 4251 1850 3662 1856 4800
+ 1852
+ 4185 4 8 1134 2054 4099 4098 2048 2052 4190
+ 4801
+ 4186 4 8 4099 4098 384 1003 4190 4801 3717
+ 3770
+ 4187 4 8 3717 3770 1728 2049 4190 4801 2048
+ 2052
+ 4188 4 8 2054 385 4098 1003 2052 2049 4801
+ 3770
+ 4189 4 8 1728 1729 3717 3718 4183 4452 4188
+ 4802
+ 4190 4 8 3717 3718 384 377 4188 4802 3873
+ 4097
+ 4191 4 8 3873 4097 1870 1872 4188 4802 4183
+ 4452
+ 4192 4 8 1729 110 3718 377 4452 1872 4802
+ 4097
+ 4193 4 8 1 1429 1049 3079 2217 2220 3857
+ 4803
+ 4194 4 8 1049 3079 1056 1099 3857 4803 3010
+ 3011
+ 4195 4 8 3010 3011 56 50 3857 4803 2217
+ 2220
+ 4196 4 8 1429 51 3079 1099 2220 50 4803
+ 3011
+ 4197 4 8 134 455 458 459 2755 2867 2758
+ 4804
+ 4198 4 8 458 459 467 466 2758 4804 2146
+ 2753
+ 4199 4 8 2146 2753 510 2430 2758 4804 2755
+ 2867
+ 4200 4 8 455 468 459 466 2867 2430 4804
+ 2753
+ 4201 4 8 1940 2947 1938 4636 1932 4655 1935
+ 4805
+ 4202 4 8 1938 4636 845 3594 1935 4805 1931
+ 4085
+ 4203 4 8 1931 4085 984 4084 1935 4805 1932
+ 4655
+ 4204 4 8 2947 1098 4636 3594 4655 4084 4805
+ 4085
+ 4205 4 8 1754 4632 3138 4634 2950 4653 4258
+ 4806
+ 4206 4 8 3138 4634 845 1938 4258 4806 1936
+ 1937
+ 4207 4 8 1936 1937 1478 1939 4258 4806 2950
+ 4653
+ 4208 4 8 4632 1940 4634 1938 4653 1939 4806
+ 1937
+ 4209 4 8 262 1425 1070 2725 1068 1428 1069
+ 4807
+ 4210 4 8 1070 2725 51 53 1069 4807 1071
+ 3078
+ 4211 4 8 1071 3078 14 728 1069 4807 1068
+ 1428
+ 4212 4 8 1425 55 2725 53 1428 728 4807
+ 3078
+ 4213 4 8 2209 3082 4125 4461 2200 3974 4548
+ 4808
+ 4214 4 8 4125 4461 1728 4458 4548 4808 3966
+ 4766
+ 4215 4 8 3966 4766 934 926 4548 4808 2200
+ 3974
+ 4216 4 8 3082 922 4461 4458 3974 926 4808
+ 4766
+ 4217 4 8 845 837 4090 4226 2351 2354 4576
+ 4809
+ 4218 4 8 4090 4226 2181 2901 4576 4809 2903
+ 2904
+ 4219 4 8 2903 2904 55 724 4576 4809 2351
+ 2354
+ 4220 4 8 837 15 4226 2901 2354 724 4809
+ 2904
+ 4221 4 8 845 3594 4571 4810 4090 4089 4577
+ 4811
+ 4222 4 8 4571 4810 271 1951 4577 4811 3816
+ 4355
+ 4223 4 8 3816 4355 2181 4091 4577 4811 4090
+ 4089
+ 4224 4 8 3594 1098 4810 1951 4089 4091 4811
+ 4355
+ 4225 4 8 214 215 218 219 654 649 3948
+ 4812
+ 4226 4 8 218 219 85 168 3948 4812 175
+ 169
+ 4227 4 8 175 169 176 165 3948 4812 654
+ 649
+ 4228 4 8 215 164 219 168 649 165 4812
+ 169
+ 4229 4 8 618 886 889 890 3741 3740 4814
+ 4813
+ 4230 4 8 889 890 188 191 4814 4813 1274
+ 1275
+ 4231 4 8 1274 1275 209 657 4814 4813 3741
+ 3740
+ 4232 4 8 886 176 890 191 3740 657 4813
+ 1275
+ 4233 4 8 209 918 1274 1422 3741 4736 4814
+ 4815
+ 4234 4 8 1274 1422 188 1272 4814 4815 889
+ 1419
+ 4235 4 8 889 1419 618 911 4814 4815 3741
+ 4736
+ 4236 4 8 918 568 1422 1272 4736 911 4815
+ 1419
+ 4237 4 8 467 2476 465 2479 458 2759 461
+ 4816
+ 4238 4 8 465 2479 463 2485 461 4816 457
+ 4027
+ 4239 4 8 457 4027 134 179 461 4816 458
+ 2759
+ 4240 4 8 2476 148 2479 2485 2759 179 4816
+ 4027
+ 4241 4 8 488 486 4626 4817 487 485 4819
+ 4818
+ 4242 4 8 4626 4817 2288 4551 4819 4818 2292
+ 4550
+ 4243 4 8 2292 4550 148 185 4819 4818 487
+ 485
+ 4244 4 8 486 121 4817 4551 485 185 4818
+ 4550
+ 4245 4 8 226 3334 2091 4785 634 3355 4821
+ 4820
+ 4246 4 8 2091 4785 1832 4606 4821 4820 4659
+ 4660
+ 4247 4 8 4659 4660 130 3354 4821 4820 634
+ 3355
+ 4248 4 8 3334 2597 4785 4606 3355 3354 4820
+ 4660
+ 4249 4 8 580 1830 578 4600 573 1843 576
+ 4822
+ 4250 4 8 578 4600 163 4599 576 4822 572
+ 4773
+ 4251 4 8 572 4773 237 1842 576 4822 573
+ 1843
+ 4252 4 8 1830 1832 4600 4599 1843 1842 4822
+ 4773
+ 4253 4 8 2597 2598 3339 4823 3334 4782 3333
+ 4824
+ 4254 4 8 3339 4823 1523 3234 3333 4824 3332
+ 3348
+ 4255 4 8 3332 3348 226 2467 3333 4824 3334
+ 4782
+ 4256 4 8 2598 1206 4823 3234 4782 2467 4824
+ 3348
+ 4257 4 8 647 1205 645 1202 1838 1839 3540
+ 4825
+ 4258 4 8 645 1202 226 227 3540 4825 2091
+ 2094
+ 4259 4 8 2091 2094 1832 1842 3540 4825 1838
+ 1839
+ 4260 4 8 1205 237 1202 227 1839 1842 4825
+ 2094
+ 4261 4 8 114 2291 112 4663 105 2290 108
+ 4826
+ 4262 4 8 112 4663 110 3104 108 4826 104
+ 3103
+ 4263 4 8 104 3103 101 2289 108 4826 105
+ 2290
+ 4264 4 8 2291 2288 4663 3104 2290 2289 4826
+ 3103
+ 4265 4 8 2597 2601 2600 2604 3668 4158 3671
+ 4827
+ 4266 4 8 2600 2604 1406 2606 3671 4827 3667
+ 4239
+ 4267 4 8 3667 4239 2618 2619 3671 4827 3668
+ 4158
+ 4268 4 8 2601 2608 2604 2606 4158 2619 4827
+ 4239
+ 4269 4 8 163 4643 4596 4642 4610 4828 4609
+ 4829
+ 4270 4 8 4596 4642 1406 1405 4609 4829 1404
+ 1403
+ 4271 4 8 1404 1403 114 1402 4609 4829 4610
+ 4828
+ 4272 4 8 4643 1407 4642 1405 4828 1402 4829
+ 1403
+ 4273 4 8 1523 3234 3339 4823 3232 3235 4155
+ 4830
+ 4274 4 8 3339 4823 2597 2598 4155 4830 2601
+ 2602
+ 4275 4 8 2601 2602 2608 2607 4155 4830 3232
+ 3235
+ 4276 4 8 3234 1206 4823 2598 3235 2607 4830
+ 2602
+ 4277 4 8 148 2297 2292 2295 487 4831 4819
+ 4832
+ 4278 4 8 2292 2295 2288 2291 4819 4832 4626
+ 4627
+ 4279 4 8 4626 4627 488 1397 4819 4832 487
+ 4831
+ 4280 4 8 2297 114 2295 2291 4831 1397 4832
+ 4627
+ 4281 4 8 2597 2598 4606 4783 2600 2599 4605
+ 4833
+ 4282 4 8 4606 4783 1832 1825 4605 4833 1831
+ 1826
+ 4283 4 8 1831 1826 1406 1641 4605 4833 2600
+ 2599
+ 4284 4 8 2598 1206 4783 1825 2599 1641 4833
+ 1826
+ 4285 4 8 1832 2091 4659 4821 2093 2092 4835
+ 4834
+ 4286 4 8 4659 4821 130 634 4835 4834 174
+ 631
+ 4287 4 8 174 631 85 230 4835 4834 2093
+ 2092
+ 4288 4 8 2091 226 4821 634 2092 230 4834
+ 631
+ 4289 4 8 1928 2772 2819 3532 4146 4618 4149
+ 4836
+ 4290 4 8 2819 3532 1897 2445 4149 4836 2435
+ 2439
+ 4291 4 8 2435 2439 2210 2438 4149 4836 4146
+ 4618
+ 4292 4 8 2772 1508 3532 2445 4618 2438 4836
+ 2439
+ 4293 4 8 294 2141 286 3360 2537 2827 4732
+ 4837
+ 4294 4 8 286 3360 41 1603 4732 4837 1857
+ 1858
+ 4295 4 8 1857 1858 846 1862 4732 4837 2537
+ 2827
+ 4296 4 8 2141 280 3360 1603 2827 1862 4837
+ 1858
+ 4297 4 8 3303 3304 3754 4413 3306 3305 4421
+ 4838
+ 4298 4 8 3754 4413 3764 4222 4421 4838 4217
+ 4216
+ 4299 4 8 4217 4216 1098 1089 4421 4838 3306
+ 3305
+ 4300 4 8 3304 1085 4413 4222 3305 1089 4838
+ 4216
+ 4301 4 8 2205 2199 2984 4169 2818 4748 4513
+ 4839
+ 4302 4 8 2984 4169 1885 3970 4513 4839 4512
+ 4584
+ 4303 4 8 4512 4584 1928 3529 4513 4839 2818
+ 4748
+ 4304 4 8 2199 934 4169 3970 4748 3529 4839
+ 4584
+ 4305 4 8 593 594 4365 4695 3573 3707 4363
+ 4840
+ 4306 4 8 4365 4695 134 826 4363 4840 2755
+ 2865
+ 4307 4 8 2755 2865 510 2429 4363 4840 3573
+ 3707
+ 4308 4 8 594 606 4695 826 3707 2429 4840
+ 2865
+ 4309 4 8 81 80 754 3027 83 82 1060
+ 4841
+ 4310 4 8 754 3027 10 748 1060 4841 1058
+ 4842
+ 4311 4 8 1058 4842 85 84 1060 4841 83
+ 82
+ 4312 4 8 80 86 3027 748 82 84 4841
+ 4842
+ 4313 4 8 845 2349 4571 4572 3594 3593 4810
+ 4843
+ 4314 4 8 4571 4572 271 273 4810 4843 1951
+ 1950
+ 4315 4 8 1951 1950 1098 1757 4810 4843 3594
+ 3593
+ 4316 4 8 2349 37 4572 273 3593 1757 4843
+ 1950
+ 4317 4 8 1927 4042 1925 4615 1918 4044 1921
+ 4844
+ 4318 4 8 1925 4615 1923 2621 1921 4844 1917
+ 2625
+ 4319 4 8 1917 2625 1914 2622 1921 4844 1918
+ 4044
+ 4320 4 8 4042 2618 4615 2621 4044 2622 4844
+ 2625
+ 4321 4 8 569 564 1285 2370 1280 2355 1283
+ 4845
+ 4322 4 8 1285 2370 681 719 1283 4845 722
+ 720
+ 4323 4 8 722 720 667 721 1283 4845 1280
+ 2355
+ 4324 4 8 564 164 2370 719 2355 721 4845
+ 720
+ 4325 4 8 2236 2235 2230 2229 4465 4498 4545
+ 4846
+ 4326 4 8 2230 2229 134 832 4545 4846 807
+ 3519
+ 4327 4 8 807 3519 803 3513 4545 4846 4465
+ 4498
+ 4328 4 8 2235 834 2229 832 4498 3513 4846
+ 3519
+ 4329 4 8 130 124 3354 4054 4047 4048 4396
+ 4847
+ 4330 4 8 3354 4054 2597 3674 4396 4847 4393
+ 4779
+ 4331 4 8 4393 4779 488 486 4396 4847 4047
+ 4048
+ 4332 4 8 124 121 4054 3674 4048 486 4847
+ 4779
+ 4333 4 8 85 3220 174 4848 2093 3221 4835
+ 4849
+ 4334 4 8 174 4848 130 4399 4835 4849 4659
+ 4662
+ 4335 4 8 4659 4662 1832 3222 4835 4849 2093
+ 3221
+ 4336 4 8 3220 1407 4848 4399 3221 3222 4849
+ 4662
+ 4337 4 8 488 486 1398 4781 4626 4817 4629
+ 4850
+ 4338 4 8 1398 4781 1406 3672 4629 4850 3843
+ 4777
+ 4339 4 8 3843 4777 2288 4551 4629 4850 4626
+ 4817
+ 4340 4 8 486 121 4781 3672 4817 4551 4850
+ 4777
+ 4341 4 8 406 1865 4337 4761 3865 3864 4852
+ 4851
+ 4342 4 8 4337 4761 3737 3729 4852 4851 4473
+ 4476
+ 4343 4 8 4473 4476 1085 3870 4852 4851 3865
+ 3864
+ 4344 4 8 1865 1870 4761 3729 3864 3870 4851
+ 4476
+ 4345 4 8 406 3866 3865 3869 407 4853 4418
+ 4854
+ 4346 4 8 3865 3869 1085 3872 4418 4854 1086
+ 4794
+ 4347 4 8 1086 4794 66 383 4418 4854 407
+ 4853
+ 4348 4 8 3866 384 3869 3872 4853 383 4854
+ 4794
+ 4349 4 8 406 409 3714 3716 3291 4855 4857
+ 4856
+ 4350 4 8 3714 3716 3303 3499 4857 4856 4524
+ 4581
+ 4351 4 8 4524 4581 1132 4435 4857 4856 3291
+ 4855
+ 4352 4 8 409 372 3716 3499 4855 4435 4856
+ 4581
+ 4353 4 8 406 3714 4409 4412 3291 4857 4416
+ 4858
+ 4354 4 8 4409 4412 3764 3754 4416 4858 4131
+ 4527
+ 4355 4 8 4131 4527 1132 4524 4416 4858 3291
+ 4857
+ 4356 4 8 3714 3303 4412 3754 4857 4524 4858
+ 4527
+ 4357 4 8 406 409 3291 4855 410 413 3294
+ 4859
+ 4358 4 8 3291 4855 1132 4435 3294 4859 3296
+ 4536
+ 4359 4 8 3296 4536 110 416 3294 4859 410
+ 413
+ 4360 4 8 409 372 4855 4435 413 416 4859
+ 4536
+ 4361 4 8 406 4337 4288 4340 3865 4852 4861
+ 4860
+ 4362 4 8 4288 4340 2390 4342 4861 4860 4225
+ 4479
+ 4363 4 8 4225 4479 1085 4473 4861 4860 3865
+ 4852
+ 4364 4 8 4337 3737 4340 4342 4852 4473 4860
+ 4479
+ 4365 4 8 406 4409 3865 4408 4288 4414 4861
+ 4862
+ 4366 4 8 3865 4408 1085 4222 4861 4862 4225
+ 4223
+ 4367 4 8 4225 4223 2390 4224 4861 4862 4288
+ 4414
+ 4368 4 8 4409 3764 4408 4222 4414 4224 4862
+ 4223
+ 4369 4 8 406 3866 407 4853 410 4095 411
+ 4863
+ 4370 4 8 407 4853 66 383 411 4863 119
+ 378
+ 4371 4 8 119 378 110 377 411 4863 410
+ 4095
+ 4372 4 8 3866 384 4853 383 4095 377 4863
+ 378
+ 4373 4 8 1 16 2217 3900 3856 3910 3859
+ 4864
+ 4374 4 8 2217 3900 56 2692 3859 4864 3861
+ 4488
+ 4375 4 8 3861 4488 3068 3914 3859 4864 3856
+ 3910
+ 4376 4 8 16 27 3900 2692 3910 3914 4864
+ 4488
+ 4377 4 8 1 1049 1048 1052 3856 3855 3913
+ 4865
+ 4378 4 8 1048 1052 72 1054 3913 4865 3807
+ 4791
+ 4379 4 8 3807 4791 3068 3503 3913 4865 3856
+ 3855
+ 4380 4 8 1049 1056 1052 1054 3855 3503 4865
+ 4791
+ENDOFSECTION
+ ELEMENT GROUP 2.4.6
+GROUP: 1 ELEMENTS: 4380 MATERIAL: 0 NFLAGS: 0
+ Block 1
+
+
+ 1 2 3 4 5 6 7 8 9 10
+ 11 12 13 14 15 16 17 18 19 20
+ 21 22 23 24 25 26 27 28 29 30
+ 31 32 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48 49 50
+ 51 52 53 54 55 56 57 58 59 60
+ 61 62 63 64 65 66 67 68 69 70
+ 71 72 73 74 75 76 77 78 79 80
+ 81 82 83 84 85 86 87 88 89 90
+ 91 92 93 94 95 96 97 98 99 100
+ 101 102 103 104 105 106 107 108 109 110
+ 111 112 113 114 115 116 117 118 119 120
+ 121 122 123 124 125 126 127 128 129 130
+ 131 132 133 134 135 136 137 138 139 140
+ 141 142 143 144 145 146 147 148 149 150
+ 151 152 153 154 155 156 157 158 159 160
+ 161 162 163 164 165 166 167 168 169 170
+ 171 172 173 174 175 176 177 178 179 180
+ 181 182 183 184 185 186 187 188 189 190
+ 191 192 193 194 195 196 197 198 199 200
+ 201 202 203 204 205 206 207 208 209 210
+ 211 212 213 214 215 216 217 218 219 220
+ 221 222 223 224 225 226 227 228 229 230
+ 231 232 233 234 235 236 237 238 239 240
+ 241 242 243 244 245 246 247 248 249 250
+ 251 252 253 254 255 256 257 258 259 260
+ 261 262 263 264 265 266 267 268 269 270
+ 271 272 273 274 275 276 277 278 279 280
+ 281 282 283 284 285 286 287 288 289 290
+ 291 292 293 294 295 296 297 298 299 300
+ 301 302 303 304 305 306 307 308 309 310
+ 311 312 313 314 315 316 317 318 319 320
+ 321 322 323 324 325 326 327 328 329 330
+ 331 332 333 334 335 336 337 338 339 340
+ 341 342 343 344 345 346 347 348 349 350
+ 351 352 353 354 355 356 357 358 359 360
+ 361 362 363 364 365 366 367 368 369 370
+ 371 372 373 374 375 376 377 378 379 380
+ 381 382 383 384 385 386 387 388 389 390
+ 391 392 393 394 395 396 397 398 399 400
+ 401 402 403 404 405 406 407 408 409 410
+ 411 412 413 414 415 416 417 418 419 420
+ 421 422 423 424 425 426 427 428 429 430
+ 431 432 433 434 435 436 437 438 439 440
+ 441 442 443 444 445 446 447 448 449 450
+ 451 452 453 454 455 456 457 458 459 460
+ 461 462 463 464 465 466 467 468 469 470
+ 471 472 473 474 475 476 477 478 479 480
+ 481 482 483 484 485 486 487 488 489 490
+ 491 492 493 494 495 496 497 498 499 500
+ 501 502 503 504 505 506 507 508 509 510
+ 511 512 513 514 515 516 517 518 519 520
+ 521 522 523 524 525 526 527 528 529 530
+ 531 532 533 534 535 536 537 538 539 540
+ 541 542 543 544 545 546 547 548 549 550
+ 551 552 553 554 555 556 557 558 559 560
+ 561 562 563 564 565 566 567 568 569 570
+ 571 572 573 574 575 576 577 578 579 580
+ 581 582 583 584 585 586 587 588 589 590
+ 591 592 593 594 595 596 597 598 599 600
+ 601 602 603 604 605 606 607 608 609 610
+ 611 612 613 614 615 616 617 618 619 620
+ 621 622 623 624 625 626 627 628 629 630
+ 631 632 633 634 635 636 637 638 639 640
+ 641 642 643 644 645 646 647 648 649 650
+ 651 652 653 654 655 656 657 658 659 660
+ 661 662 663 664 665 666 667 668 669 670
+ 671 672 673 674 675 676 677 678 679 680
+ 681 682 683 684 685 686 687 688 689 690
+ 691 692 693 694 695 696 697 698 699 700
+ 701 702 703 704 705 706 707 708 709 710
+ 711 712 713 714 715 716 717 718 719 720
+ 721 722 723 724 725 726 727 728 729 730
+ 731 732 733 734 735 736 737 738 739 740
+ 741 742 743 744 745 746 747 748 749 750
+ 751 752 753 754 755 756 757 758 759 760
+ 761 762 763 764 765 766 767 768 769 770
+ 771 772 773 774 775 776 777 778 779 780
+ 781 782 783 784 785 786 787 788 789 790
+ 791 792 793 794 795 796 797 798 799 800
+ 801 802 803 804 805 806 807 808 809 810
+ 811 812 813 814 815 816 817 818 819 820
+ 821 822 823 824 825 826 827 828 829 830
+ 831 832 833 834 835 836 837 838 839 840
+ 841 842 843 844 845 846 847 848 849 850
+ 851 852 853 854 855 856 857 858 859 860
+ 861 862 863 864 865 866 867 868 869 870
+ 871 872 873 874 875 876 877 878 879 880
+ 881 882 883 884 885 886 887 888 889 890
+ 891 892 893 894 895 896 897 898 899 900
+ 901 902 903 904 905 906 907 908 909 910
+ 911 912 913 914 915 916 917 918 919 920
+ 921 922 923 924 925 926 927 928 929 930
+ 931 932 933 934 935 936 937 938 939 940
+ 941 942 943 944 945 946 947 948 949 950
+ 951 952 953 954 955 956 957 958 959 960
+ 961 962 963 964 965 966 967 968 969 970
+ 971 972 973 974 975 976 977 978 979 980
+ 981 982 983 984 985 986 987 988 989 990
+ 991 992 993 994 995 996 997 998 999 1000
+ 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
+ 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020
+ 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030
+ 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040
+ 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
+ 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060
+ 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070
+ 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080
+ 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
+ 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100
+ 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110
+ 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120
+ 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130
+ 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140
+ 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150
+ 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160
+ 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170
+ 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180
+ 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
+ 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200
+ 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210
+ 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220
+ 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230
+ 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
+ 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250
+ 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260
+ 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
+ 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280
+ 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290
+ 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300
+ 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310
+ 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320
+ 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330
+ 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340
+ 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350
+ 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360
+ 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370
+ 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380
+ 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390
+ 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400
+ 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410
+ 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420
+ 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430
+ 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440
+ 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450
+ 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460
+ 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470
+ 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480
+ 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490
+ 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500
+ 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510
+ 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520
+ 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530
+ 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540
+ 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550
+ 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560
+ 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570
+ 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580
+ 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590
+ 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600
+ 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610
+ 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620
+ 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630
+ 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640
+ 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650
+ 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660
+ 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670
+ 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680
+ 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690
+ 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700
+ 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710
+ 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720
+ 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730
+ 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740
+ 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750
+ 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760
+ 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770
+ 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780
+ 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790
+ 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800
+ 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810
+ 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820
+ 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830
+ 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840
+ 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850
+ 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860
+ 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870
+ 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880
+ 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890
+ 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900
+ 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910
+ 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920
+ 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930
+ 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940
+ 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950
+ 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960
+ 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970
+ 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980
+ 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990
+ 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
+ 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
+ 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
+ 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
+ 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040
+ 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050
+ 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060
+ 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070
+ 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080
+ 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090
+ 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100
+ 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110
+ 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120
+ 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130
+ 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140
+ 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150
+ 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160
+ 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170
+ 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180
+ 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190
+ 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200
+ 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210
+ 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220
+ 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230
+ 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240
+ 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250
+ 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260
+ 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270
+ 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280
+ 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290
+ 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300
+ 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310
+ 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320
+ 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330
+ 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340
+ 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350
+ 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360
+ 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370
+ 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380
+ 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
+ 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400
+ 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410
+ 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420
+ 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430
+ 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440
+ 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450
+ 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460
+ 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470
+ 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480
+ 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490
+ 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500
+ 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510
+ 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520
+ 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530
+ 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540
+ 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550
+ 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560
+ 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570
+ 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580
+ 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590
+ 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600
+ 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610
+ 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620
+ 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630
+ 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640
+ 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650
+ 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660
+ 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670
+ 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680
+ 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690
+ 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700
+ 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710
+ 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720
+ 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730
+ 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740
+ 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750
+ 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760
+ 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770
+ 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780
+ 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790
+ 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800
+ 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810
+ 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820
+ 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830
+ 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840
+ 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850
+ 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860
+ 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870
+ 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880
+ 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890
+ 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900
+ 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910
+ 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920
+ 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930
+ 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940
+ 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950
+ 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960
+ 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970
+ 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980
+ 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990
+ 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000
+ 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010
+ 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020
+ 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030
+ 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040
+ 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050
+ 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060
+ 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070
+ 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080
+ 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090
+ 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100
+ 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110
+ 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120
+ 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130
+ 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140
+ 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150
+ 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160
+ 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170
+ 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180
+ 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190
+ 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200
+ 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210
+ 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220
+ 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230
+ 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240
+ 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250
+ 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260
+ 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270
+ 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280
+ 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290
+ 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300
+ 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310
+ 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320
+ 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330
+ 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340
+ 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350
+ 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360
+ 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370
+ 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380
+ 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390
+ 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400
+ 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410
+ 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420
+ 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430
+ 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440
+ 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450
+ 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460
+ 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470
+ 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480
+ 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490
+ 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500
+ 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510
+ 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520
+ 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530
+ 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540
+ 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550
+ 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560
+ 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570
+ 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580
+ 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590
+ 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600
+ 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610
+ 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620
+ 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630
+ 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640
+ 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650
+ 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660
+ 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670
+ 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680
+ 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690
+ 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700
+ 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710
+ 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720
+ 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730
+ 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740
+ 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750
+ 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760
+ 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770
+ 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780
+ 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790
+ 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800
+ 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810
+ 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820
+ 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830
+ 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840
+ 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850
+ 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860
+ 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870
+ 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880
+ 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890
+ 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900
+ 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910
+ 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920
+ 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930
+ 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940
+ 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950
+ 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960
+ 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970
+ 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980
+ 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990
+ 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
+ 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010
+ 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020
+ 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030
+ 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040
+ 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050
+ 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060
+ 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070
+ 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080
+ 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090
+ 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100
+ 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110
+ 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120
+ 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130
+ 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140
+ 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150
+ 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160
+ 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170
+ 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180
+ 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190
+ 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200
+ 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210
+ 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220
+ 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230
+ 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240
+ 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250
+ 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260
+ 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270
+ 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280
+ 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290
+ 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300
+ 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310
+ 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320
+ 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330
+ 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340
+ 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350
+ 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360
+ 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370
+ 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_TOP 1 6 0 6
+ 570 4 5
+ 569 4 5
+ 572 4 5
+ 4272 4 1
+ 4269 4 1
+ 4271 4 3
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_BOT 1 24 0 6
+ 3 4 5
+ 2 4 3
+ 4 4 2
+ 11 4 5
+ 10 4 3
+ 12 4 2
+ 268 4 1
+ 265 4 1
+ 267 4 3
+ 390 4 5
+ 389 4 5
+ 392 4 5
+ 848 4 1
+ 845 4 1
+ 847 4 3
+ 926 4 5
+ 925 4 5
+ 928 4 5
+ 3850 4 5
+ 3849 4 5
+ 3852 4 5
+ 3863 4 5
+ 3862 4 3
+ 3864 4 2
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XPLUS 1 39 0 6
+ 45 4 4
+ 46 4 4
+ 47 4 4
+ 73 4 4
+ 74 4 4
+ 75 4 4
+ 141 4 4
+ 142 4 4
+ 143 4 4
+ 170 4 5
+ 169 4 5
+ 172 4 5
+ 206 4 5
+ 205 4 5
+ 208 4 5
+ 226 4 5
+ 225 4 5
+ 228 4 5
+ 275 4 5
+ 274 4 3
+ 276 4 2
+ 363 4 5
+ 362 4 3
+ 364 4 2
+ 698 4 5
+ 697 4 5
+ 700 4 5
+ 2006 4 5
+ 2005 4 5
+ 2008 4 5
+ 3679 4 5
+ 3678 4 3
+ 3680 4 2
+ 4123 4 5
+ 4122 4 3
+ 4124 4 2
+ 4311 4 5
+ 4310 4 3
+ 4312 4 2
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_XMINUS 1 39 0 6
+ 32 4 1
+ 29 4 1
+ 31 4 3
+ 43 4 5
+ 42 4 3
+ 44 4 2
+ 91 4 5
+ 90 4 3
+ 92 4 2
+ 107 4 5
+ 106 4 3
+ 108 4 2
+ 131 4 5
+ 130 4 3
+ 132 4 2
+ 155 4 5
+ 154 4 3
+ 156 4 2
+ 176 4 1
+ 173 4 1
+ 175 4 3
+ 711 4 5
+ 710 4 3
+ 712 4 2
+ 1134 4 5
+ 1133 4 5
+ 1136 4 5
+ 1139 4 5
+ 1138 4 3
+ 1140 4 2
+ 1551 4 5
+ 1550 4 3
+ 1552 4 2
+ 2139 4 5
+ 2138 4 3
+ 2140 4 2
+ 4280 4 1
+ 4277 4 1
+ 4279 4 3
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YMINUS 1 27 0 6
+ 27 4 5
+ 26 4 3
+ 28 4 2
+ 31 4 5
+ 30 4 3
+ 32 4 2
+ 35 4 5
+ 34 4 3
+ 36 4 2
+ 47 4 5
+ 46 4 3
+ 48 4 2
+ 83 4 5
+ 82 4 3
+ 84 4 2
+ 807 4 5
+ 806 4 3
+ 808 4 2
+ 2686 4 5
+ 2685 4 5
+ 2688 4 5
+ 3838 4 5
+ 3837 4 5
+ 3840 4 5
+ 4067 4 5
+ 4066 4 3
+ 4068 4 2
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ BC_YPLUS 1 33 0 6
+ 51 4 5
+ 50 4 3
+ 52 4 2
+ 100 4 1
+ 97 4 1
+ 99 4 3
+ 278 4 5
+ 277 4 5
+ 280 4 5
+ 410 4 5
+ 409 4 5
+ 412 4 5
+ 1121 4 4
+ 1122 4 4
+ 1123 4 4
+ 2047 4 5
+ 2046 4 3
+ 2048 4 2
+ 2404 4 1
+ 2401 4 1
+ 2403 4 3
+ 2944 4 1
+ 2941 4 1
+ 2943 4 3
+ 3428 4 1
+ 3425 4 1
+ 3427 4 3
+ 3879 4 5
+ 3878 4 3
+ 3880 4 2
+ 4334 4 5
+ 4333 4 5
+ 4336 4 5
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 1 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 2 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 3 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 4 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 5 1 0 0 51
+ENDOFSECTION
+ BOUNDARY CONDITIONS 2.4.6
+ cfd_bc 6 1 0 0 51
+ENDOFSECTION
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/externals.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/externals.ini
new file mode 100644
index 000000000..a1a4a4745
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr!, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = hopr.ini !, parameter.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = pre !, post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = !, RadTrans_Cylinder_2D_RadiationState.h5 ! Suffix for the binary execution
+!nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/hopr.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/hopr.ini
new file mode 100644
index 000000000..665392440
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/hopr.ini
@@ -0,0 +1,28 @@
+!=============================================================================== !
+! OUTPUT
+!=============================================================================== !
+ProjectName = mesh_cubitDebug_split2hex ! name of the project (used for filenames)
+Debugvisu = T
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+FileName = export_split2hex.neu ! name of mesh file as exported from grid generator
+Mode = 2 ! 1 Cartesian 2 gambit file 3 CGNS
+meshscale = 0.001
+!=============================================================================== !
+! BOUNDARY CONDITIONS
+!=============================================================================== !
+BoundaryName=BC_TOP
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_BOT
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_XMINUS
+BoundaryType=(/1,0,0,1/)
+BoundaryName=BC_XPLUS
+BoundaryType=(/1,0,0,-1/)
+BoundaryName=BC_YMINUS
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_YPLUS
+BoundaryType=(/4,0,0,0/)
+
+vv=(/0.001,0.,0./)
\ No newline at end of file
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/mesh_cubitDebug_split2hex_mesh.h5 b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/mesh_cubitDebug_split2hex_mesh.h5
new file mode 100644
index 000000000..59f8c75e5
Binary files /dev/null and b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/mesh_cubitDebug_split2hex_mesh.h5 differ
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/parameter.ini
new file mode 100644
index 000000000..62afece01
--- /dev/null
+++ b/regressioncheck/NIG_Photoionization/volume_emission_rectangle_ray_trace_high-order_Cubit_split2hex_periodic/parameter.ini
@@ -0,0 +1,170 @@
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+VisuParticles = T
+TimeStampLength = 21
+! =============================================================================== !
+! VARIABLES
+! =============================================================================== !
+CFLscale = 0.2
+IniExactFunc = 0
+N = 1!,2,3,4
+RayTracing-NMax = 1!,2,3,4
+NVisu = 1!,2,3,4
+NodeTypeVisu = VISU_INNER
+
+DoLoadBalance = T
+Load-DeviationThreshold = 0.001
+LoadBalanceMaxSteps = 20
+DoInitialAutoRestart = T
+nocrosscombination:UsePhotonTriaTracking,RayTracing-nSurfSample,Part-Boundary$-PhotonSpecularReflection,Part-Boundary$-PhotonEnACC,RayTracing-PowerDensity
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = mesh_cubitDebug_split2hex_mesh.h5
+Logging = F
+WriteErrorFiles = F
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = photoionization
+IterDisplayStep = 10
+Part-AnalyzeStep = 1
+
+CalcNumSpec = T
+CalcNumDens = T
+
+!CheckExchangeProcs = F ! deactivate the asymmetric communicator check
+CalcPartBalance = T
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 5.0E-9
+tend = 100e-9
+Analyze_dt = 100e-9
+
+PIC-DoDeposition = F
+
+PIC-DoInterpolation = F
+Part-LorentzType = 0
+
+epsCG = 1e-2
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = T
+Particles-DSMC-CollisMode = 3
+Part-NumberOfRandomSeeds = 0
+Particles-HaloEpsVelo = 3E7
+
+Particles-CollXSec-Database = XSec_Database_H2_Photoionization.h5
+
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
+EpsMergeElectronicState = 1E-2
+Part-Species$-ElecRelaxProb = 1.
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies = 5
+Part-nBounds = 6
+
+Part-Boundary1-SourceName = BC_TOP
+Part-Boundary1-Condition = reflective
+Part-Boundary1-PhotonEnACC = 1.0 ! Photon inlet BC must always be absorbing
+
+Part-Boundary2-SourceName = BC_BOT
+Part-Boundary2-Condition = reflective
+
+Part-Boundary3-SourceName = BC_XMINUS
+Part-Boundary3-Condition = periodic
+
+Part-Boundary4-SourceName = BC_XPLUS
+Part-Boundary4-Condition = periodic
+
+Part-Boundary5-SourceName = BC_YMINUS
+Part-Boundary5-Condition = reflective
+Part-Boundary5-PhotonSpecularReflection = T ! cannot be diffuse because this reduces the input energy
+Part-Boundary5-PhotonEnACC = 1e-9 ! cannot be absorbing because this reduces the input energy
+
+Part-Boundary6-SourceName = BC_YPLUS
+Part-Boundary6-Condition = reflective
+Part-Boundary6-PhotonSpecularReflection = T ! cannot be diffuse because this reduces the input energy
+Part-Boundary6-PhotonEnACC = 1e-9 ! cannot be absorbing because this reduces the input energy
+
+Part-nPeriodicVectors = 1
+
+Part-FIBGMdeltas = (/ 1.0e-3 , 1.0e-3 , 0.00133 /)
+Part-FactorFIBGM = (/ 1. , 1. , 1. /)
+
+Part-Boundary$-BoundaryParticleOutput = T
+Part-Boundary$-PhotonSpecularReflection = T , F , T , F ! F: diffuse with PhotonEnACC , T: perfect mirror
+Part-Boundary$-PhotonEnACC = 1e-9 , 1.0 , 1e-9 , 1.0 ! 1: fully absorb, 1e-9: reflect all (double energy in volume)
+! =============================================================================== !
+! Ray Tracing
+! =============================================================================== !
+UseRayTracing = T
+UsePhotonTriaTracking = T,F,F,T
+RayTracing-nSurfSample= 1,2,5,10
+RayTracing-NumRays = 5000
+!RayTracing-NumRays = 5000000
+RayTracing-PartBound = 1 ! -> iBC: 6
+PhotonModeBPO = 1 ! Debugging output: vectors
+RayTracing-VolRefineMode = 1 ! Volumetric refinement
+RayTracing-VolRefineModeZ = 1000.
+
+RayTracing-PulseDuration = 15e-9
+RayTracing-WaveLength = 10e-9
+! ATTENTION: This values is changed due to the increased optical path through the domain
+! The adjusted value reduces the input energy back to the original value for perpendicular irradiation
+! | Enhancement factor for energy deposited in the volume [-] | 1.17720111668984E+000 | CALCUL. |
+! When reflection is 100%, the optical path is doubled, hence, the energy is halved again
+RayTracing-PowerDensity = 0.424736260364707, 0.849472520729414, 0.424736260364707, 0.849472520729414
+
+RayTracing-RepetitionRate = 1000
+RayTracing-RayDirection = (/ 0.25 , 0.5 , -0.9 /)
+! =============================================================================== !
+! Weighting Factor
+! =============================================================================== !
+Part-Species$-MacroParticleFactor = 0.1
+
+! =============================================================================== !
+! Species1 | H2
+! =============================================================================== !
+Part-Species1-MassIC = 3.348E-27
+Part-Species1-ChargeIC = 0.0
+
+Part-Species1-nInits = 1
+
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-SpaceIC = background
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-PartDensity = 10.0e20
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
+Part-Species1-Init1-MWTemperatureIC = 300.
+Part-Species1-Init1-TempVib = 300.
+Part-Species1-Init1-TempRot = 300.
+Part-Species1-Init1-TempElec = 300.
+! =============================================================================== !
+! Species2 | H
+! =============================================================================== !
+Part-Species2-MassIC = 1.674E-27
+Part-Species2-ChargeIC = 0.0
+! =============================================================================== !
+! Species3 | e
+! =============================================================================== !
+Part-Species3-MassIC = 9.11E-31
+Part-Species3-ChargeIC = -1.60217653E-19
+! =============================================================================== !
+! Species4 | H2Ion
+! =============================================================================== !
+Part-Species4-MassIC = 3.3470890E-27
+Part-Species4-ChargeIC = 1.60217653E-19
+! =============================================================================== !
+! Species5 | HIon
+! =============================================================================== !
+Part-Species5-MassIC = 1.673089E-27
+Part-Species5-ChargeIC = 1.60217653E-19
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_vMPF/parameter.ini b/regressioncheck/NIG_Photoionization/volume_emission_vMPF/parameter.ini
index 411137c04..fbc1ec06a 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_vMPF/parameter.ini
+++ b/regressioncheck/NIG_Photoionization/volume_emission_vMPF/parameter.ini
@@ -64,7 +64,6 @@ Particles-DSMC-ElecRelaxProb = 1.
! PARTICLES
! =============================================================================== !
Part-nSpecies = 7
-Part-maxParticleNumber = 5000000
Part-nBounds = 1
Part-Boundary1-SourceName = BC_open
diff --git a/regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md b/regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md
index b6dcf29ee..77f547f69 100644
--- a/regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md
+++ b/regressioncheck/NIG_Photoionization/volume_emission_vMPF/readme.md
@@ -1,4 +1,5 @@
-# Photoionization: Volumetric Emission
+# Photoionization in the volume with vMPF
+- **Comparing**: the total number of real electrons in the system with an analytical expression and particle numbers for different MPFs
* Particle emission due to photoionization of $`H_{2}`$ and $`N_{2}`$ in a volume only (no surface emission)
* no deposition, no interpolation
* comparison of the number of emitted electrons with the $`N_{2}^{+}`$ ions with a numerical solution
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/RadTrans_Cylinder_2D_reference_RadiationState.h5 b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/RadTrans_Cylinder_2D_reference_RadiationState.h5
new file mode 100644
index 000000000..f3a73a610
Binary files /dev/null and b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/RadTrans_Cylinder_2D_reference_RadiationState.h5 differ
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/analyze.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/analyze.ini
new file mode 100644
index 000000000..271cf3683
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/analyze.ini
@@ -0,0 +1,7 @@
+! hdf5 diff
+h5diff_file = RadTrans_Cylinder_2D_RadiationState.h5
+h5diff_reference_file = RadTrans_Cylinder_2D_reference_RadiationState.h5
+h5diff_data_set = ElemData
+h5diff_tolerance_value = 15.0e-2
+h5diff_tolerance_type = relative
+h5diff_max_differences = 3
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/command_line.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/command_line.ini
new file mode 100644
index 000000000..ad5e9710e
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/command_line.ini
@@ -0,0 +1 @@
+MPI=1,2,3,6
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/externals.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/externals.ini
new file mode 100644
index 000000000..ca895db8f
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = hopr.ini , parameter.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = pre , post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = , RadTrans_Cylinder_2D_RadiationState.h5 ! Suffix for the binary execution
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/hopr.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/hopr.ini
new file mode 100644
index 000000000..c94c4dd4f
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/hopr.ini
@@ -0,0 +1,66 @@
+!================================================================================================================================= !
+! OUTPUT
+!================================================================================================================================= !
+ ProjectName = cylinder_2D_doublemortars ! Name of output files
+ Debugvisu = T ! Write files for Visualization of the mesh and boundary conditions (tecplot ascii)
+
+!================================================================================================================================= !
+! MESH
+!================================================================================================================================= !
+ Mode =1 ! Mode for Cartesian boxes
+ nZones =6 ! number of boxes
+
+
+ Corner =(/-0.02,0.,-0.02 ,,0.00,0.,-0.02 ,,0.00,0.8,-0.02 ,,-0.02,0.8,-0.02 ,,-0.02,0.,0.02 ,,0.00,0.,0.02 ,,0.00,0.8,0.02 ,,-0.02,0.8,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/1,20,1/) ! number of elements in each direction
+ BCIndex =(/3,1,0,0,2,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+ Corner =(/-0.02,0.8,-0.02 ,,0.00,0.8,-0.02 ,,0.00,0.9,-0.02 ,,-0.02,0.9,-0.02 ,,-0.02,0.8,0.02 ,,0.00,0.8,0.02 ,,0.00,0.9,0.02 ,,-0.02,0.9,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/1,5,1/) ! number of elements in each direction
+ BCIndex =(/3,0,0,0,2,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+ Corner =(/-0.02,0.9,-0.02 ,,0.00,0.9,-0.02 ,,0.00,1.,-0.02 ,,-0.02,1.,-0.02 ,,-0.02,0.9,0.02 ,,0.00,0.9,0.02 ,,0.00,1.,0.02 ,,-0.02,1.,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/2,10,1/) ! number of elements in each direction
+ BCIndex =(/3,0,0,4,2,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+ Corner =(/0.,0.,-0.02 ,,0.02,0.,-0.02 ,,0.02,0.8,-0.02 ,,0.,0.8,-0.02 ,,0.,0.,0.02 ,,0.02,0.,0.02 ,,0.02,0.8,0.02 ,,0.,0.8,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/1,40,1/) ! number of elements in each direction
+ BCIndex =(/3,1,2,0,0,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+ Corner =(/0.,0.8,-0.02 ,,0.02,0.8,-0.02 ,,0.02,0.9,-0.02 ,,0.,0.9,-0.02 ,,0.,0.8,0.02 ,,0.02,0.8,0.02 ,,0.02,0.9,0.02 ,,0.,0.9,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/2,10,1/) ! number of elements in each direction
+ BCIndex =(/3,0,2,0,0,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+ Corner =(/0.,0.9,-0.02 ,,0.02,0.9,-0.02 ,,0.02,1.,-0.02 ,,0.,1.,-0.02 ,,-0.,0.9,0.02 ,,0.02,0.9,0.02 ,,0.02,1.,0.02 ,,0.,1.,0.02/)
+ ! Corner node positions: (/ x_1,y_1,z_1, x_2,y_2,z_2,..... , x_8,y_8,z_8/)
+ nElems =(/4,20,1/) ! number of elements in each direction
+ BCIndex =(/3,0,2,4,0,3/) ! Indices of Boundary Conditions for six Boundary Faces (z-,y-,x+,y+,x-,z+)
+ elemtype =108 ! element type (104: Tetrahedra, 105: pyramid, 106:prism, 108: Hexahedral)
+
+
+!================================================================================================================================= !
+! BOUNDARY CONDITIONS
+!================================================================================================================================= !
+ BoundaryName=BC_SYM ! BC index 1 (from position in parameterfile)
+ BoundaryType=(/4,0,0,0/) ! (/ Type, curveIndex, State, alpha /)
+ BoundaryName=BC_WALL ! BC index 2 (from position in parameterfile)
+ BoundaryType=(/4,0,0,0/)
+ BoundaryName=BC_MIR ! BC index 3
+ BoundaryType=(/4,0,0,0/)
+ BoundaryName=BC_OUT ! BC index 4
+ BoundaryType=(/3,0,0,0/)
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini
new file mode 100644
index 000000000..f09b19eb6
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini
@@ -0,0 +1,110 @@
+IniExactFunc = 0
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cylinder_2D_doublemortars_mesh.h5
+!MeshFile =./pre-hopr/cylinder_2D_doublemortars_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = RadTrans_Cylinder_2D
+OutputFormat = 1 ! 0...Tecplot (only PostProcTool)
+ContinuousVisu = 0 ! 0 - False | 1 - True | 2 - Both
+NVisu = 1 ! Number of visualization points
+NodeType_visu = VISU ! VISU... Equidistant points
+VarName = ElectricFieldX
+VarName = ElectricFieldY
+VarName = ElectricFieldZ
+Visu3D = T
+CalcKineticEnergy = FALSE
+Logging = F
+
+DoRefMapping=F
+TriaTracking=T
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 1. !1E-3 ! End time
+Analyze_dt = 1. ! Timestep of analyze outputs
+CFLscale = 0.9 ! Scaling of theoretical CFL number
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=5
+Part-nSpecies=1
+Part-externalField=(/0.,0.,0.,0.,0.,0.,0.,0./)
+Part-nBounds=4
+Part-Boundary1-SourceName=BC_SYM
+Part-Boundary1-Condition=symmetric_axis
+Part-Boundary2-SourceName=BC_WALL
+Part-Boundary2-Condition=reflective
+Part-Boundary3-SourceName=BC_MIR
+Part-Boundary3-Condition=symmetric
+Part-Boundary4-SourceName=BC_OUT
+Part-Boundary4-Condition=reflective
+
+Part-Boundary2-PhotonSpecularReflection=true
+Part-Boundary4-PhotonEnACC=1.0
+
+Part-FIBGMdeltas=(/0.1,0.1,1/)
+! =============================================================================== !
+! Species1
+! =============================================================================== !
+Part-Species1-initialParticleNumber=0
+Part-Species1-MacroParticleFactor=2E12
+Part-Species1-MassIC=2.65700E-26 ! O Molecular Mass
+Part-Species1-MWTemperatureIC=195
+Part-Species1-TempElec=195
+Part-Species1-RadiationMass_u = 15.998
+Part-Species1-SpeciesName=O
+Part-Species1-InteractionID = 1
+Part-Species1-Tref =273
+Part-Species1-dref = 3.0E-10
+Part-Species1-omega=0.24
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC=true
+Particles-DSMCReservoirSim=false
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds =-1
+Particles-ManualTimeStep= 1
+Particles-HaloEpsVelo =1E-7
+Particles-DSMC-CalcSurfaceVal=true
+! =============================================================================== !
+! Radiation
+! =============================================================================== !
+Radiation-RadType = 2 ! 1: particle radiation, 2: black body radiation
+Radiation-bb-atoms = f ! atomic line radiation (t,f)
+Radiation-bb-molecules = f ! molecular band radiation (t,f)
+Radiation-bf = f ! bound-free radiation
+Radiation-ff = f ! free-free radiation
+Radiation-MacroRadInput= f
+
+Radiation-MinWaveLen =50 ! minimum wavelength [nm]
+Radiation-MaxWaveLen =5000 ! maximum Wavelength [nm]
+Radiation-WaveLenDiscr =1000 ! number of discretization points
+Radiation-WaveLenReductionFactor = 1 !Spectral binning factor for radiative transfer
+! =============================================================================== !
+! Radiative Transfer
+! =============================================================================== !
+Radiation-NumPhotonsPerCell=1000
+Radiation-AbsorptionModel=1 !1:analytical 2:MC
+Radiation-DirectionModel=1,2 !1:random 2:spiral(random or center)
+Radiation-PhotonPosModel=1,2 !1:random 2:Halton
+Radiation-AdaptivePhotonNumEmission=true
+Radiation-PhotonWaveLengthModel = 1 ! Absorption models: 1:Acceptance Rejection 2:Bisection
+! =============================================================================== !
+! 2D/Axisymmetric Simulation
+! =============================================================================== !
+Particles-Symmetry2D=T
+Particles-Symmetry2DAxisymmetric=T
+Particles-RadialWeighting=T
+Particles-RadialWeighting-PartScaleFactor=10000
+Particles-RadialWeighting-CloneMode=2
+Particles-RadialWeighting-CloneDelay=6
+Particles-RadialWeighting-CellLocalWeighting=F
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md
new file mode 100644
index 000000000..985a90fd2
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/readme.md
@@ -0,0 +1,4 @@
+# Radiative Transfer (2D) - isothermal infinite cylinder
+* Testing the two-dimensional axisymmetric tracking routines for radiative energy transfer on hexahedral, non-conforming computational meshes with 1->2 transitions in each direction
+* Testing methods to overcome the disadvantages of a Monte Carlo ray tracer
+* Comparing the divergence of the radiative heatflux in an infinite cylinder filled with a gas emitting blackbody radiation
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/RadTrans_Cylinder_3D_reference_RadiationState.h5 b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/RadTrans_Cylinder_3D_reference_RadiationState.h5
new file mode 100644
index 000000000..5302215d0
Binary files /dev/null and b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/RadTrans_Cylinder_3D_reference_RadiationState.h5 differ
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini
new file mode 100644
index 000000000..847c96315
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/analyze.ini
@@ -0,0 +1,7 @@
+! hdf5 diff
+h5diff_file = RadTrans_Cylinder_3D_RadiationState.h5
+h5diff_reference_file = RadTrans_Cylinder_3D_reference_RadiationState.h5
+h5diff_data_set = ElemData
+h5diff_tolerance_value = 10.0e-2
+h5diff_tolerance_type = relative
+h5diff_max_differences = 0
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/command_line.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/command_line.ini
new file mode 100644
index 000000000..ad5e9710e
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/command_line.ini
@@ -0,0 +1 @@
+MPI=1,2,3,6
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/externals.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/externals.ini
new file mode 100644
index 000000000..ca895db8f
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/externals.ini
@@ -0,0 +1,6 @@
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = hopr.ini , parameter.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = pre , post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = , RadTrans_Cylinder_2D_RadiationState.h5 ! Suffix for the binary execution
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/hopr.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/hopr.ini
new file mode 100644
index 000000000..785b133b8
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/hopr.ini
@@ -0,0 +1,102 @@
+DEFVAR=(INT): i0 = 16 ! no. elems in inner square i0xi0
+DEFVAR=(INT): i1 = 32 ! no. elems in inner ring in azimuthal direction /4
+DEFVAR=(INT): i2 = 64 ! no. elems in outer ring in azimuthal direction / 4
+DEFVAR=(INT): ir1 = 16 ! no. elems in r for first ring
+DEFVAR=(INT): ir2 = 4 ! no. elems in r for second ring
+DEFVAR=(INT): irsum = 030 ! sum of i0+ir1+ir2
+DEFVAR=(INT): iz = 1 ! no. elems in z
+DEFVAR=(INT): il= 1 ! no. elems in z
+DEFVAR=(REAL): ri = 0.5 ! inner square dim , should be =0.5!
+DEFVAR=(REAL): rm = 1.8 ! middle square dim , should be =1!
+DEFVAR=(REAL): r0 = 2.0 ! outer square dim
+DEFVAR=(REAL): lz = 0.01 !19.78 ! ! length of domain in z
+DEFVAR=(REAL): f1 = 1. ! stretching factor in first ring
+DEFVAR=(REAL): f2 = 1. ! stretching factor in second ring
+!================================================================================================================================ !
+! OUTPUT
+!================================================================================================================================= !
+ProjectName = cylinder_3D_mortars
+Debugvisu = T
+checkElemJacobians = T
+DebugVisuLevel = 3
+Nvisu = 1
+
+!================================================================================================================================= !
+! MESH
+!================================================================================================================================= !
+Mode =1 ! Mode for Cartesian boxes
+Mode =1 ! Mode for Cartesian boxes
+nZones =9 ! number of boxes
+!center
+Corner =(/-ri,-ri,-lz ,,ri,-ri,-lz ,,ri,ri,-lz ,, -ri,ri,-lz,, -ri,-ri,lz ,,ri,-ri,lz ,,ri,ri,lz ,, -ri,ri,lz /)
+nElems =(/i0,i0,il/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/1.,1.,1./) ! stretching
+!left inner
+Corner =(/-rm,-rm,-lz ,,-ri,-ri,-lz ,,-ri,ri,-lz ,, -rm,rm,-lz,, -rm,-rm,lz ,,-ri,-ri,lz ,,-ri,ri,lz ,, -rm,rm,lz /)
+nElems =(/ir1,i1,iz/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/f1,1.,1./) ! stretching
+!right inner
+Corner =(/ri,-ri,-lz ,,rm,-rm,-lz ,,rm,rm,-lz ,, ri,ri,-lz,, ri,-ri,lz ,,rm,-rm,lz ,,rm,rm,lz ,, ri,ri,lz /)
+nElems =(/ir1,i1,iz/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/-f1,1.,1./) ! stretching
+!upper inner
+Corner =(/-ri,ri,-lz ,,ri,ri,-lz ,,rm,rm,-lz ,, -rm,rm,-lz,, -ri,ri,lz ,,ri,ri,lz ,,rm,rm,lz ,, -rm,rm,lz /)
+nElems =(/i1,ir1,iz/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/1.,-f1,1./) ! stretching
+!lower inner
+Corner =(/-rm,-rm,-lz ,,rm,-rm,-lz ,,ri,-ri,-lz ,, -ri,-ri,-lz,, -rm,-rm,lz ,,rm,-rm,lz ,,ri,-ri,lz ,, -ri,-ri,lz /)
+nElems =(/i1,ir1,iz/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/1.,f1,1./) ! stretching
+!left
+Corner =(/-r0,-r0,-lz ,,-rm,-rm,-lz ,,-rm,rm,-lz ,, -r0,r0,-lz,, -r0,-r0,lz ,,-rm,-rm,lz ,,-rm,rm,lz ,, -r0,r0,lz /)
+nElems =(/ir2,i2,il/) ! number of elements in each direction
+BCIndex =(/2,0,0,0,1,2/) ! Indices of Boundary Conditions
+factor =(/-f2,1.,1./) ! stretching
+elemtype =108 ! element type (108: Hexahedral)
+!rmght
+Corner =(/rm,-rm,-lz ,,r0,-r0,-lz ,,r0,r0,-lz ,, rm,rm,-lz,, rm,-rm,lz ,,r0,-r0,lz ,,r0,r0,lz ,, rm,rm,lz /)
+nElems =(/ir2,i2,il/) ! number of elements in each direction
+BCIndex =(/2,0,1,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/f2,1.,1./) ! stretching
+!upper
+Corner =(/-rm,rm,-lz ,,rm,rm,-lz ,,r0,r0,-lz ,, -r0,r0,-lz,, -rm,rm,lz ,,rm,rm,lz ,,r0,r0,lz ,, -r0,r0,lz /)
+nElems =(/i2,ir2,il/) ! number of elements in each direction
+BCIndex =(/2,0,0,1,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/1.,f2,1./) ! stretching
+!lower
+Corner =(/-r0,-r0,-lz ,,r0,-r0,-lz ,,rm,-rm,-lz ,, -rm,-rm,-lz,, -r0,-r0,lz ,,r0,-r0,lz ,,rm,-rm,lz ,, -rm,-rm,lz /)
+nElems =(/i2,ir2,il/) ! number of elements in each direction
+BCIndex =(/2,1,0,0,0,2/) ! Indices of Boundary Conditions
+elemtype =108 ! element type (108: Hexahedral)
+factor =(/1.,-f2,1./) ! stretching
+
+useCurveds =F
+!BoundaryOrder=4 ! number of points per element, polynomial degree is NGeo=BoundaryOrder-1
+!================================================================================================================================= !
+! BOUNDARY CONDITIONS
+!================================================================================================================================= !
+BoundaryName=BC_OUT ! BC index 1 (from position in parameterfile)
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_WALL ! BC index 2
+BoundaryType=(/4,0,0,0/)
+!================================================================================================================================= !
+! MESH POST DEFORM
+!================================================================================================================================= !
+MeshPostDeform = 1
+PostDeform_R0 = 0.5
+PostDeform_Rt = 0.074
+PostDeform_LZ = 5
+PostDeform_Mt = 1 !3
+PostDeform_Slabs = (/3,2,15,2/)
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/parameter.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/parameter.ini
new file mode 100644
index 000000000..964167eed
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/parameter.ini
@@ -0,0 +1,101 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cylinder_3D_mortars_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = RadTrans_Cylinder_3D
+OutputFormat = 1 ! 0...Tecplot (only PostProcTool)
+ContinuousVisu = 0 ! 0 - False | 1 - True | 2 - Both
+NVisu = 1 ! Number of visualization points
+NodeType_visu = VISU ! VISU... Equidistant points
+VarName = ElectricFieldX
+VarName = ElectricFieldY
+VarName = ElectricFieldZ
+Visu3D = T
+CalcKineticEnergy = FALSE
+Logging = F
+
+DoRefMapping=F
+TriaTracking=T
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 1. !1E-3 ! End time
+Analyze_dt = 1. ! Timestep of analyze outputs
+CFLscale = 0.9 ! Scaling of theoretical CFL number
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=1
+Part-nSpecies=1
+Part-externalField=(/0.,0.,0.,0.,0.,0.,0.,0./)
+Part-nBounds=2
+Part-Boundary1-SourceName=BC_OUT
+Part-Boundary1-Condition=reflective
+Part-Boundary1-PhotonEnACC=1.0
+Part-Boundary2-SourceName=BC_WALL
+Part-Boundary2-Condition=reflective!symmetric
+Part-Boundary2-PhotonSpecularReflection=true
+PIC-Interpolation-Type=particle_position
+Part-FIBGMdeltas=(/0.1,0.1,1/)
+! =============================================================================== !
+! Species1
+! =============================================================================== !
+Part-Species1-initialParticleNumber=0
+Part-Species1-MacroParticleFactor=2E12
+Part-Species1-MassIC=2.65700E-26 ! O Molecular Mass
+Part-Species1-MWTemperatureIC=195
+Part-Species1-TempElec=195
+Part-Species1-RadiationMass_u = 15.998
+Part-Species1-SpeciesName=O
+Part-Species1-InteractionID = 1
+Part-Species1-Tref =273
+Part-Species1-dref = 3.0E-10
+Part-Species1-omega=0.24
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC=true
+Particles-DSMCReservoirSim=false
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds =-1
+Particles-ManualTimeStep= 1
+Particles-HaloEpsVelo =1E-7
+Particles-DSMC-CalcSurfaceVal=true
+! =============================================================================== !
+! Radiation
+! =============================================================================== !
+Radiation-RadType = 2 ! 1: particle radiation, 2: black body radiation
+Radiation-bb-atoms = f ! atomic line radiation (t,f)
+Radiation-bb-molecules = f ! molecular band radiation (t,f)
+Radiation-bf = f ! bound-free radiation
+Radiation-ff = f ! free-free radiation
+Radiation-MacroRadInput= f
+
+Radiation-MinWaveLen =50 ! minimum wavelength [nm]
+Radiation-MaxWaveLen =5000 ! maximum Wavelength [nm]
+Radiation-WaveLenDiscr =1000 ! number of discretization points
+Radiation-WaveLenReductionFactor = 1 !Spectral binning factor for radiative transfer
+! =============================================================================== !
+! Radiative Transfer
+! =============================================================================== !
+Radiation-NumPhotonsPerCell=1500
+Radiation-AbsorptionModel=1 !1:analytical 2:MC
+Radiation-DirectionModel=1 !1:random 2:spiral
+Radiation-PhotonPosModel=1 !1:random 2:Halton
+Radiation-AdaptivePhotonNumEmission=true !true:photons have same energy= false:PhotonNum per cell is equal
diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md
new file mode 100644
index 000000000..1c23e29da
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_3D/readme.md
@@ -0,0 +1,4 @@
+# Radiative Transfer (3D) - isothermal infinite cylinder
+* Testing the two-dimensional axisymmetric tracking routines for radiative energy transfer on hexahedral, non-conforming computational meshes with 1->2 transitions in each direction
+* Testing methods to overcome the disadvantages of a Monte Carlo ray tracer
+* Comparing the divergence of the radiative heatflux in an infinite cylinder filled with a gas emitting blackbody radiation
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Ni_NIST.dat b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Ni_NIST.dat
new file mode 100644
index 000000000..1551da276
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Ni_NIST.dat
@@ -0,0 +1,1466 @@
+366
+4 0 1 2 0.0
+6 19224 2 2 0.0
+4 19233 3 2 0.0
+2 28839 4 2 0.0
+4 28839 5 2 0.0
+2 83284 6 3 0.0
+4 83318 7 3 0.0
+6 83365 8 3 0.0
+2 86137 9 3 0.0
+4 86221 10 3 0.0
+6 88107 11 2 0.0
+4 88151 12 2 0.0
+2 88171 13 2 0.0
+2 93582 14 3 0.0
+2 94771 15 3 0.0
+4 94793 16 3 0.0
+6 94831 17 3 0.0
+8 94882 18 3 0.0
+2 95475 19 3 0.0
+4 95494 20 3 0.0
+6 95532 21 3 0.0
+4 96751 22 3 0.0
+4 96788 23 3 0.0
+6 96864 24 3 0.0
+2 97770 25 3 0.0
+4 97806 26 3 0.0
+6 99663 27 3 0.0
+4 99664 28 3 0.0
+2 103620 29 4 0.0
+4 103670 30 4 0.0
+6 103740 31 4 0.0
+2 104140 32 4 0.0
+4 104220 33 4 0.0
+4 104620 34 3 0.0
+2 104650 35 3 0.0
+4 104660 36 3 0.0
+6 104680 37 3 0.0
+8 104720 38 3 0.0
+10 104770 39 3 0.0
+6 104810 40 3 0.0
+6 104830 41 3 0.0
+4 104860 42 3 0.0
+8 104880 43 3 0.0
+2 104890 44 3 0.0
+2 104980 45 3 0.0
+4 105000 46 3 0.0
+6 105010 47 3 0.0
+8 105020 48 3 0.0
+4 105120 49 3 0.0
+6 105140 50 3 0.0
+2 106480 51 4 0.0
+2 106760 52 4 0.0
+4 106780 53 4 0.0
+6 106810 54 4 0.0
+8 106870 55 4 0.0
+2 106980 56 4 0.0
+4 107000 57 4 0.0
+6 107040 58 4 0.0
+4 107180 59 4 0.0
+6 107250 60 4 0.0
+4 107450 61 4 0.0
+2 107590 62 4 0.0
+4 107630 63 4 0.0
+2 109810 64 5 0.0
+4 109860 65 5 0.0
+6 109930 66 5 0.0
+2 110040 67 5 0.0
+4 110100 68 5 0.0
+4 110190 69 4 0.0
+6 110210 70 4 0.0
+4 110220 71 4 0.0
+2 110250 72 4 0.0
+8 110250 73 4 0.0
+6 110290 74 4 0.0
+6 110300 75 4 0.0
+10 110300 76 4 0.0
+4 110320 77 4 0.0
+6 110350 78 4 0.0
+8 110350 79 4 0.0
+2 110350 80 4 0.0
+8 110360 81 4 0.0
+6 110390 82 4 0.0
+8 110390 83 4 0.0
+2 110390 84 4 0.0
+4 110400 85 4 0.0
+6 110400 86 4 0.0
+10 110400 87 4 0.0
+8 110400 88 4 0.0
+8 110400 89 4 0.0
+4 110400 90 4 0.0
+6 110400 91 4 0.0
+4 110450 92 4 0.0
+2 110460 93 4 0.0
+4 110460 94 4 0.0
+6 110470 95 4 0.0
+12 110470 96 4 0.0
+10 110470 97 4 0.0
+4 110490 98 4 0.0
+6 110490 99 4 0.0
+8 110500 100 4 0.0
+6 110500 101 4 0.0
+10 110500 102 4 0.0
+8 110500 103 4 0.0
+4 110520 104 3 0.0
+6 110540 105 3 0.0
+6 110710 106 3 0.0
+8 110720 107 3 0.0
+2 111060 108 5 0.0
+2 111140 109 5 0.0
+4 111170 110 5 0.0
+2 111200 111 5 0.0
+6 111200 112 5 0.0
+4 111210 113 5 0.0
+8 111260 114 5 0.0
+2 111270 115 5 0.0
+4 111290 116 5 0.0
+6 111330 117 5 0.0
+4 111500 118 5 0.0
+4 111850 119 5 0.0
+6 111910 120 5 0.0
+2 112290 121 3 0.0
+4 112320 122 3 0.0
+2 112570 123 6 0.0
+4 112610 124 6 0.0
+6 112680 125 6 0.0
+2 112690 126 6 0.0
+4 112740 127 6 0.0
+4 112760 128 5 0.0
+6 112760 129 5 0.0
+8 112800 130 5 0.0
+4 112800 131 5 0.0
+2 112810 132 5 0.0
+6 112810 133 5 0.0
+6 112820 134 5 0.0
+8 112830 135 5 0.0
+6 112830 136 5 0.0
+4 112840 137 5 0.0
+10 112860 138 5 0.0
+8 112870 139 5 0.0
+2 112870 140 5 0.0
+10 112880 141 5 0.0
+8 112880 142 5 0.0
+4 112880 143 5 0.0
+6 112880 144 5 0.0
+8 112890 145 5 0.0
+2 112900 146 5 0.0
+4 112910 147 5 0.0
+6 112910 148 5 0.0
+8 112910 149 5 0.0
+4 112930 150 5 0.0
+6 112950 151 5 0.0
+2 112950 152 5 0.0
+4 112950 153 5 0.0
+12 112950 154 5 0.0
+10 112950 155 5 0.0
+6 112960 156 5 0.0
+4 112960 157 5 0.0
+8 112970 158 5 0.0
+10 112970 159 5 0.0
+8 112970 160 5 0.0
+6 113310 161 6 0.0
+4 113350 162 6 0.0
+8 113370 163 6 0.0
+6 113400 164 6 0.0
+2 114030 165 7 0.0
+4 114070 166 7 0.0
+2 114110 167 7 0.0
+4 114120 168 6 0.0
+6 114130 169 6 0.0
+6 114150 170 7 0.0
+4 114170 171 6 0.0
+6 114170 172 6 0.0
+8 114170 173 6 0.0
+8 114180 174 6 0.0
+6 114180 175 6 0.0
+2 114180 176 6 0.0
+6 114190 177 6 0.0
+4 114200 178 6 0.0
+4 114210 179 7 0.0
+8 114220 180 6 0.0
+6 114220 181 6 0.0
+10 114220 182 6 0.0
+8 114220 183 6 0.0
+6 114220 184 6 0.0
+4 114220 185 6 0.0
+10 114250 186 6 0.0
+2 114250 187 6 0.0
+8 114260 188 6 0.0
+2 114270 189 6 0.0
+4 114270 190 6 0.0
+6 114270 191 6 0.0
+8 114270 192 6 0.0
+4 114280 193 6 0.0
+6 114290 194 6 0.0
+2 114300 195 6 0.0
+4 114300 196 6 0.0
+10 114300 197 6 0.0
+12 114300 198 6 0.0
+4 114300 199 6 0.0
+6 114300 200 6 0.0
+6 114310 201 6 0.0
+8 114310 202 6 0.0
+10 114310 203 6 0.0
+8 114310 204 6 0.0
+8 114550 205 7 0.0
+2 114890 206 8 0.0
+4 114940 207 8 0.0
+4 114950 208 7 0.0
+6 114960 209 7 0.0
+2 114960 210 8 0.0
+4 114990 211 7 0.0
+6 115000 212 7 0.0
+8 115000 213 7 0.0
+2 115010 214 7 0.0
+6 115010 215 7 0.0
+4 115020 216 7 0.0
+6 115020 217 8 0.0
+4 115030 218 8 0.0
+10 115080 219 7 0.0
+8 115090 220 7 0.0
+2 115090 221 7 0.0
+8 115090 222 7 0.0
+4 115090 223 7 0.0
+6 115090 224 7 0.0
+4 115100 225 7 0.0
+6 115110 226 7 0.0
+2 115450 227 9 0.0
+4 115480 228 9 0.0
+2 115480 229 9 0.0
+4 115500 230 9 0.0
+6 115500 231 8 0.0
+2 115530 232 8 0.0
+4 115540 233 8 0.0
+8 115540 234 8 0.0
+6 115540 235 8 0.0
+6 115580 236 9 0.0
+4 115600 237 8 0.0
+10 115610 238 8 0.0
+2 115620 239 8 0.0
+4 115620 240 8 0.0
+6 115620 241 8 0.0
+8 115620 242 8 0.0
+2 115620 243 8 0.0
+4 115630 244 8 0.0
+6 115630 245 8 0.0
+8 115630 246 8 0.0
+6 115630 247 8 0.0
+2 115830 248 10 0.0
+2 115840 249 10 0.0
+4 115840 250 10 0.0
+4 115880 251 10 0.0
+8 115890 252 9 0.0
+2 115890 253 9 0.0
+6 115890 254 9 0.0
+4 115890 255 9 0.0
+4 115890 256 9 0.0
+2 115890 257 9 0.0
+8 115900 258 9 0.0
+6 115900 259 9 0.0
+6 115960 260 10 0.0
+4 115970 261 9 0.0
+4 115990 262 9 0.0
+6 115990 263 9 0.0
+2 115990 264 9 0.0
+6 115990 265 9 0.0
+2 116110 266 11 0.0
+4 116110 267 11 0.0
+6 116120 268 11 0.0
+4 116120 269 11 0.0
+2 116120 270 11 0.0
+2 116160 271 10 0.0
+4 116160 272 10 0.0
+6 116160 273 10 0.0
+8 116160 274 10 0.0
+4 116160 275 10 0.0
+2 116160 276 10 0.0
+6 116160 277 10 0.0
+8 116160 278 10 0.0
+4 116240 279 10 0.0
+6 116240 280 10 0.0
+2 116260 281 10 0.0
+6 116260 282 10 0.0
+4 116260 283 10 0.0
+2 116280 284 3 0.0
+2 116300 285 12 0.0
+4 116300 286 12 0.0
+4 116310 287 12 0.0
+2 116310 288 12 0.0
+6 116310 289 12 0.0
+4 116350 290 11 0.0
+2 116350 291 11 0.0
+8 116360 292 11 0.0
+6 116360 293 11 0.0
+8 116370 294 11 0.0
+4 116370 295 11 0.0
+6 116370 296 11 0.0
+2 116370 297 11 0.0
+6 116440 298 11 0.0
+4 116440 299 11 0.0
+2 116440 300 11 0.0
+6 116440 301 11 0.0
+4 116440 302 11 0.0
+4 116470 303 13 0.0
+2 116470 304 13 0.0
+2 116500 305 12 0.0
+4 116500 306 12 0.0
+4 116580 307 12 0.0
+6 116580 308 12 0.0
+2 116580 309 12 0.0
+6 116620 310 12 0.0
+4 116620 311 12 0.0
+4 119210 312 4 0.0
+6 119210 313 4 0.0
+8 119810 314 3 0.0
+10 120150 315 3 0.0
+8 120150 316 3 0.0
+6 120150 317 3 0.0
+4 120160 318 3 0.0
+4 120310 319 3 0.0
+2 120310 320 3 0.0
+2 120570 321 3 0.0
+6 121200 322 2 0.0
+6 122250 323 4 0.0
+8 122250 324 4 0.0
+12 125690 325 4 0.0
+10 125690 326 4 0.0
+6 131000 327 3 0.0
+4 142080 328 3 0.0
+6 142080 329 3 0.0
+8 142080 330 3 0.0
+2 144360 331 3 0.0
+4 144360 332 3 0.0
+6 144360 333 3 0.0
+6 154440 334 4 0.0
+2 154440 335 4 0.0
+4 154440 336 4 0.0
+2 158320 337 5 0.0
+4 158320 338 5 0.0
+6 158320 339 5 0.0
+4 160240 340 6 0.0
+6 160240 341 6 0.0
+2 160240 342 6 0.0
+2 161330 343 7 0.0
+6 161330 344 7 0.0
+4 161330 345 7 0.0
+6 162000 346 8 0.0
+4 162000 347 8 0.0
+2 162000 348 8 0.0
+6 162440 349 9 0.0
+4 162440 350 9 0.0
+2 162440 351 9 0.0
+6 162770 352 10 0.0
+4 162770 353 10 0.0
+2 162770 354 10 0.0
+2 163000 355 11 0.0
+6 163000 356 11 0.0
+4 163000 357 11 0.0
+4 163160 358 12 0.0
+6 163160 359 12 0.0
+2 163160 360 12 0.0
+2 163300 361 13 0.0
+4 163300 362 13 0.0
+6 163300 363 13 0.0
+2 163400 364 14 0.0
+4 163400 365 14 0.0
+6 163400 366 14 0.0
+
+1097
+865.23 1 236 4 6 3740000 0 0
+865.84 1 230 4 4 3740000 0 0
+866.18 1 227 4 2 3730000 0 0
+869.4 1 217 4 6 5560000 0 0
+870.03 1 207 4 4 5550000 0 0
+870.37 1 206 4 2 5540000 0 0
+875.28 1 187 4 2 34000000 0 0
+875.66 1 178 4 4 33900000 0 0
+875.72 1 177 4 6 33900000 0 0
+876.07 1 170 4 6 8810000 0 0
+876.65 1 166 4 4 8790000 0 0
+876.99 1 165 4 2 8780000 0 0
+885.97 1 140 4 2 55800000 0 0
+886.23 1 137 4 4 55800000 0 0
+886.33 1 134 4 6 55800000 0 0
+887.46 1 125 4 6 15100000 0 0
+888.02 1 124 4 4 15100000 0 0
+888.37 1 123 4 2 15100000 0 0
+906.21 1 80 4 2 99900000 0 0
+906.43 1 77 4 4 99900000 0 0
+906.62 1 75 4 6 99800000 0 0
+909.7 1 66 4 6 29300000 0 0
+910.28 1 65 4 4 29200000 0 0
+910.64 1 64 4 2 29200000 0 0
+952.3 1 47 4 6 9190000 0 0
+952.41 1 46 4 4 12500000 0 0
+952.52 1 45 4 2 8820000 0 0
+953.41 1 44 4 2 193000000 0 0
+953.65 1 42 4 4 183000000 0 0
+953.97 1 41 4 6 170000000 0 0
+954.1 1 40 4 6 33000000 0 0
+963.99 1 31 4 6 70700000 0 0
+964.63 1 30 4 4 67600000 0 0
+965.04 1 29 4 2 57600000 0 0
+980.62 2 322 6 6 333000000 0 0
+980.71 3 322 4 6 22900000 0 0
+989.26 2 319 6 4 99500000 0 0
+989.34 3 320 4 2 112000000 0 0
+989.35 3 319 4 4 10900000 0 0
+990.77 2 318 6 4 24900000 0 0
+990.83 2 317 6 6 235000000 0 0
+990.86 3 318 4 4 226000000 0 0
+990.91 3 317 4 6 16500000 0 0
+1000.1 2 313 6 6 37200000 0 0
+1000.1 2 312 6 4 3920000 0 0
+1000.2 3 312 4 4 36200000 0 0
+1000.2 3 313 4 6 2720000 0 0
+1067.6 2 145 6 8 35300000 0 0
+1068.5 2 133 6 6 2340000 0 0
+1068.6 3 133 4 6 32800000 0 0
+1082.7 5 322 4 6 126000000 0 0
+1090.2 4 321 2 2 65500000 0 0
+1090.2 5 321 4 2 131000000 0 0
+1093.2 4 320 2 2 78800000 0 0
+1093.2 5 320 4 2 38500000 0 0
+1093.2 4 319 2 4 19900000 0 0
+1093.3 5 319 4 4 99600000 0 0
+1095.1 4 318 2 4 1150000 0 0
+1095.2 5 317 4 6 1400000 0 0
+1097.2 2 81 6 8 63500000 0 0
+1098.2 2 74 6 6 4230000 0 0
+1098.3 3 74 4 6 59100000 0 0
+1100.4 2 68 6 4 36000000 0 0
+1100.5 3 68 4 4 4000000 0 0
+1101.3 3 67 4 2 39900000 0 0
+1106.5 4 312 2 4 3040000 0 0
+1106.6 5 313 4 6 3520000 0 0
+1106.6 5 312 4 4 739000 0 0
+1134.2 1 13 4 2 158000000 0 0
+1134.4 1 12 4 4 154000000 0 0
+1135 1 11 4 6 150000000 0 0
+1163.9 2 50 6 6 75200000 0 0
+1164 3 50 4 6 1270000 0 0
+1164.2 2 49 6 4 5170000 0 0
+1164.3 3 49 4 4 69400000 0 0
+1167.4 2 43 6 8 129000000 0 0
+1168.3 3 41 4 6 23600000 0 0
+1168.4 2 40 6 6 4240000 0 0
+1168.5 3 40 4 6 124000000 0 0
+1170.7 3 35 4 2 53100000 0 0
+1171.1 2 34 6 4 56000000 0 0
+1171.2 3 34 4 4 2840000 0 0
+1176.5 2 33 6 4 92200000 0 0
+1176.6 3 33 4 4 10200000 0 0
+1177.7 3 32 4 2 102000000 0 0
+1189 5 151 4 6 24800000 0 0
+1189.2 4 150 2 4 20700000 0 0
+1189.2 5 150 4 4 4130000 0 0
+1190.9 4 132 2 2 14600000 0 0
+1190.9 5 132 4 2 7300000 0 0
+1191 4 131 2 4 3650000 0 0
+1191 5 131 4 4 18200000 0 0
+1199.5 1 8 4 6 401000000 0 0
+1200.2 1 7 4 4 399000000 0 0
+1200.7 1 6 4 2 398000000 0 0
+1225 5 95 4 6 44100000 0 0
+1225.4 4 92 2 4 36700000 0 0
+1225.4 5 92 4 4 7340000 0 0
+1228.4 4 72 2 2 27000000 0 0
+1228.4 5 72 4 2 13500000 0 0
+1228.8 4 71 2 4 6760000 0 0
+1228.8 5 71 4 4 33800000 0 0
+1243.2 2 28 6 4 33400000 0 0
+1243.2 2 27 6 6 321000000 0 0
+1243.3 3 28 4 4 309000000 0 0
+1243.3 3 27 4 6 23500000 0 0
+1310.5 5 50 4 6 84200000 0 0
+1310.9 4 49 2 4 66800000 0 0
+1311 5 49 4 4 18900000 0 0
+1316 5 41 4 6 40400 0 0
+1316.3 5 40 4 6 1420000 0 0
+1319 4 35 2 2 56200000 0 0
+1319 5 35 4 2 27600000 0 0
+1319.7 4 34 2 4 20200000 0 0
+1319.7 5 34 4 4 63300000 0 0
+1326.6 4 33 2 4 1790000 0 0
+1326.6 5 33 4 4 8950000 0 0
+1327.9 4 32 2 2 7140000 0 0
+1327.9 5 32 4 2 3570000 0 0
+1411.9 4 28 2 4 42500000 0 0
+1411.9 5 28 4 4 9590000 0 0
+1411.9 5 27 4 6 51000000 0 0
+1492.6 2 10 6 4 313000000 0 0
+1492.8 3 10 4 4 35100000 0 0
+1494.7 3 9 4 2 372000000 0 0
+1742.7 4 10 2 4 23400000 0 0
+1742.7 5 10 4 4 116000000 0 0
+1745.2 4 9 2 2 92200000 0 0
+1745.3 5 9 4 2 44500000 0 0
+3467.5 1 5 4 4 0.00621 0 0
+3467.5 1 5 4 4 1.66E-07 0 0
+3467.5 1 4 4 2 0.00252 0 0
+3467.5 1 4 4 2 1.14E-08 0 0
+3819.4 9 122 2 4 895000 0 0
+3823.1 9 121 2 2 3700000 0 0
+3831.5 10 122 4 4 4670000 0 0
+3835.3 10 121 4 2 1890000 0 0
+3888.7 9 119 2 4 2090000 0 0
+3893.3 10 120 4 6 2500000 0 0
+3901.3 10 119 4 4 414000 0 0
+4012.3 9 108 2 2 575000 0 0
+4025.7 10 108 4 2 1140000 0 0
+4096.2 23 322 4 6 80500 0 0
+4101.1 9 104 2 4 3480000 0 0
+4109.1 24 322 6 6 1230000 0 0
+4111.1 10 105 4 6 3900000 0 0
+4115.1 10 104 4 4 662000 0 0
+4138.8 6 61 2 4 280000 0 0
+4144.6 7 61 4 4 609000 0 0
+4152.7 8 61 6 4 1010000 0 0
+4251.1 23 320 4 2 2590000 0 0
+4251.4 23 319 4 4 224000 0 0
+4265.2 24 319 6 4 2260000 0 0
+4274.5 26 322 4 6 828000 0 0
+4279.3 23 318 4 4 5010000 0 0
+4280.4 23 317 4 6 361000 0 0
+4293.4 24 318 6 4 557000 0 0
+4294.4 24 317 6 6 5210000 0 0
+4357.5 24 314 6 8 5100000 0 0
+4386.8 25 321 2 2 884000 0 0
+4393.6 26 321 4 2 1760000 0 0
+4436.4 25 320 2 2 2990000 0 0
+4436.7 25 319 2 4 751000 0 0
+4443.4 26 320 4 2 1410000 0 0
+4443.7 26 319 4 4 3810000 0 0
+4467.1 25 318 2 4 20400 0 0
+4475.4 26 317 4 6 27600 0 0
+4653.1 9 63 2 4 240000 0 0
+4661.8 9 62 2 2 672000 0 0
+4664.2 25 312 2 4 1510000 0 0
+4671.2 10 63 4 4 749000 0 0
+4672 26 313 4 6 1800000 0 0
+4672 26 312 4 4 302000 0 0
+4679.9 10 62 4 2 269000 0 0
+4916.3 9 51 2 2 808000 0 0
+4936.5 10 51 4 2 1760000 0 0
+5199.3 1 3 4 4 1.9E-05 0 0
+5199.3 1 3 4 4 3.6E-06 0 0
+5201.3 14 132 2 2 1870000 0 0
+5201.7 1 2 4 6 2.45E-07 0 0
+5201.7 1 2 4 6 5.52E-06 0 0
+5203.1 14 131 2 4 1870000 0 0
+5282.7 11 58 6 6 245000 0 0
+5311.9 22 236 4 6 94000 0 0
+5330.1 11 55 6 8 205000 0 0
+5334.9 22 230 4 4 92800 0 0
+5345.5 11 54 6 6 61000 0 0
+5348 22 227 4 2 92100 0 0
+5355.9 11 53 6 4 10100 0 0
+5358.1 12 54 4 6 141000 0 0
+5368.5 12 53 4 4 107000 0 0
+5374.1 13 53 2 4 83400 0 0
+5374.2 12 52 4 2 33300 0 0
+5379.8 13 52 2 2 166000 0 0
+5473.3 22 217 4 6 139000 0 0
+5498.1 22 207 4 4 137000 0 0
+5511.7 22 206 4 2 136000 0 0
+5513.2 15 147 2 4 129000 0 0
+5514.6 15 146 2 2 257000 0 0
+5519.6 16 148 4 6 120000 0 0
+5520.1 16 147 4 4 205000 0 0
+5521.5 16 146 4 2 256000 0 0
+5530.9 17 149 6 8 72600 0 0
+5531.1 17 148 6 6 292000 0 0
+5531.5 17 147 6 4 178000 0 0
+5546.5 18 149 8 8 433000 0 0
+5546.7 18 148 8 6 95900 0 0
+5558.9 15 128 2 4 994000 0 0
+5561.9 18 138 8 10 1420000 0 0
+5565.8 17 130 6 8 1210000 0 0
+5565.8 16 129 4 6 1060000 0 0
+5565.9 16 128 4 4 396000 0 0
+5577.4 17 129 6 6 342000 0 0
+5577.5 17 128 6 4 28100 0 0
+5581.6 18 130 8 8 200000 0 0
+5593.3 18 129 8 6 13500 0 0
+5714.7 22 187 4 2 89400 0 0
+5730.9 22 178 4 4 88700 0 0
+5733.7 22 177 4 6 88500 0 0
+5736 19 147 2 4 447000 0 0
+5737.5 19 146 2 2 894000 0 0
+5741.5 20 148 4 6 749000 0 0
+5742 20 147 4 4 571000 0 0
+5743.6 20 146 4 2 178000 0 0
+5748.6 22 170 4 6 221000 0 0
+5754.1 21 149 6 8 1060000 0 0
+5754.2 21 148 6 6 319000 0 0
+5754.8 21 147 6 4 53100 0 0
+5773.6 22 166 4 4 218000 0 0
+5788.4 22 165 4 2 216000 0 0
+6001.1 14 72 2 2 3640000 0 0
+6010.1 14 71 2 4 3580000 0 0
+6188.8 23 151 4 6 9020 0 0
+6196 23 150 4 4 121000 0 0
+6203.7 22 140 4 2 280000 0 0
+6216.1 22 137 4 4 278000 0 0
+6218.2 24 151 6 6 125000 0 0
+6221.4 22 134 4 6 277000 0 0
+6225.5 24 150 6 4 13300 0 0
+6239.4 24 145 6 8 281000 0 0
+6240.3 23 133 4 6 262000 0 0
+6270.2 24 133 6 6 18500 0 0
+6277.2 22 125 4 6 375000 0 0
+6305.7 22 124 4 4 370000 0 0
+6323.3 22 123 4 2 367000 0 0
+6400.2 15 85 2 4 395000 0 0
+6404.1 15 84 2 2 789000 0 0
+6407 16 86 4 6 368000 0 0
+6409.4 16 85 4 4 630000 0 0
+6413.4 16 84 4 2 786000 0 0
+6421.6 17 89 6 8 223000 0 0
+6422.4 17 86 6 6 897000 0 0
+6424.8 17 85 6 4 547000 0 0
+6442.7 18 89 8 8 1330000 0 0
+6443.5 18 86 8 6 294000 0 0
+6483.5 15 69 2 4 3430000 0 0
+6484.5 18 76 8 10 4900000 0 0
+6485.5 16 70 4 6 3670000 0 0
+6486.6 17 73 6 8 4200000 0 0
+6493 16 69 4 4 1370000 0 0
+6501.3 17 70 6 6 1180000 0 0
+6508.1 18 73 8 8 691000 0 0
+6508.8 17 69 6 4 97000 0 0
+6522.9 18 70 8 6 46600 0 0
+6597.7 25 150 2 4 90800 0 0
+6605 26 151 4 6 109000 0 0
+6608 16 66 4 6 88700 0 0
+6613.2 26 150 4 4 18000 0 0
+6624.4 17 66 6 6 793000 0 0
+6628.8 15 65 2 4 220000 0 0
+6638.8 16 65 4 4 1400000 0 0
+6646.8 18 66 8 6 3490000 0 0
+6648.3 15 64 2 2 2180000 0 0
+6650.1 25 132 2 2 137000 0 0
+6653 25 131 2 4 34200 0 0
+6655.3 17 65 6 4 2740000 0 0
+6658.3 16 64 4 2 2170000 0 0
+6665.9 26 132 4 2 67900 0 0
+6668.8 26 131 4 4 170000 0 0
+6702.3 19 85 2 4 1500000 0 0
+6706.7 19 84 2 2 2990000 0 0
+6708 20 86 4 6 2510000 0 0
+6710.6 20 85 4 4 1910000 0 0
+6715 20 84 4 2 596000 0 0
+6722.8 19 80 2 2 195000 0 0
+6724.5 21 89 6 8 3560000 0 0
+6725.3 21 86 6 6 1070000 0 0
+6728 21 85 6 4 178000 0 0
+6731.1 20 80 4 2 973000 0 0
+6735.2 19 77 2 4 485000 0 0
+6743.5 20 77 4 4 155000 0 0
+6753.9 20 75 4 6 347000 0 0
+6761.1 21 77 6 4 518000 0 0
+6771.5 21 75 6 6 802000 0 0
+6928.6 20 66 4 6 775000 0 0
+6947.1 21 66 6 6 1830000 0 0
+6953.5 19 65 2 4 1030000 0 0
+6962.4 20 65 4 4 467000 0 0
+6975 19 64 2 2 383000 0 0
+6981.1 21 65 6 4 983000 0 0
+6984 20 64 4 2 2040000 0 0
+7308.6 23 95 4 6 40300 0 0
+7321 23 92 4 4 541000 0 0
+7349.6 24 95 6 6 555000 0 0
+7353.4 22 80 4 2 1320000 0 0
+7362.2 24 92 6 4 59100 0 0
+7368.2 22 77 4 4 1310000 0 0
+7380.5 22 75 4 6 1300000 0 0
+7408.2 23 74 4 6 1520000 0 0
+7408.3 24 81 6 8 1630000 0 0
+7425.7 6 22 2 4 5950000 0 0
+7430.8 23 72 4 2 906000 0 0
+7444.3 7 22 4 4 12400000 0 0
+7444.7 23 71 4 4 90100 0 0
+7450.3 24 74 6 6 107000 0 0
+7470.4 8 22 6 4 19300000 0 0
+7487.2 24 71 6 4 797000 0 0
+7509.7 23 68 4 4 230000 0 0
+7548.3 23 67 4 2 2850000 0 0
+7553 24 68 6 4 1790000 0 0
+7589.7 22 66 4 6 701000 0 0
+7630.3 22 65 4 4 690000 0 0
+7656.2 22 64 4 2 683000 0 0
+7705.6 62 321 2 2 693000 0 0
+7729.3 63 321 4 2 1370000 0 0
+7888.4 25 92 2 4 686000 0 0
+7896.1 26 95 4 6 821000 0 0
+7901.2 27 122 6 4 28200000 0 0
+7901.5 28 122 4 4 3280000 0 0
+7910.6 26 92 4 4 136000 0 0
+7917.6 28 121 4 2 31300000 0 0
+8107.9 25 68 2 4 236000 0 0
+8131.4 26 68 4 4 1170000 0 0
+8152.9 25 67 2 2 929000 0 0
+8168.5 27 120 6 6 13200000 0 0
+8168.8 28 120 4 6 939000 0 0
+8176.7 26 67 4 2 460000 0 0
+8187.1 7 21 4 6 8580000 0 0
+8190.3 6 20 2 4 12700000 0 0
+8202.6 6 19 2 2 4950000 0 0
+8203.7 27 119 6 4 1390000 0 0
+8204 28 119 4 4 12500000 0 0
+8213 7 20 4 4 4840000 0 0
+8218.6 8 21 6 6 22300000 0 0
+8225.4 7 19 4 2 26400000 0 0
+8244.7 8 20 6 4 13600000 0 0
+8570.1 9 26 2 4 4920000 0 0
+8596.4 9 25 2 2 20900000 0 0
+8631.6 10 26 4 4 26600000 0 0
+8658.1 27 113 6 4 5460000 0 0
+8658.3 10 25 4 2 10500000 0 0
+8658.5 28 113 4 4 606000 0 0
+8669.3 28 111 4 2 6040000 0 0
+8682.7 8 18 6 8 24600000 0 0
+8685.8 7 17 4 6 18000000 0 0
+8688.5 6 16 2 4 10900000 0 0
+8705.6 6 15 2 2 21000000 0 0
+8714.1 7 16 4 4 12800000 0 0
+8721.2 8 17 6 6 6750000 0 0
+8731.3 7 15 4 2 3760000 0 0
+8749.8 8 16 6 4 1040000 0 0
+9031.4 14 35 2 2 30200000 0 0
+9048.4 27 107 6 8 28000000 0 0
+9052 27 106 6 6 1880000 0 0
+9052.4 28 106 4 6 26000000 0 0
+9063 14 34 2 4 29500000 0 0
+9190 27 105 6 6 24400000 0 0
+9190.4 28 105 4 6 1760000 0 0
+9210.1 27 104 6 4 2700000 0 0
+9210.5 28 104 4 4 23300000 0 0
+9363.8 104 322 4 6 951000 0 0
+9384.7 105 322 6 6 13600000 0 0
+9389.4 9 23 2 4 22400000 0 0
+9395.4 10 24 4 6 26300000 0 0
+9398.4 14 33 2 4 28200 0 0
+9463.3 10 23 4 4 3980000 0 0
+9466.8 14 32 2 2 436000 0 0
+9533.1 106 322 6 6 13100 0 0
+9537.1 107 322 8 6 289000 0 0
+9779.6 15 46 2 4 1180000 0 0
+9789.5 16 47 4 6 1130000 0 0
+9791 15 45 2 2 2990000 0 0
+9801.2 16 46 4 4 2750000 0 0
+9812.7 16 45 4 2 5300000 0 0
+9816.7 17 48 6 8 656000 0 0
+9825.4 17 47 6 6 4950000 0 0
+9837.3 17 46 6 4 4500000 0 0
+9866 18 48 8 8 9620000 0 0
+9874.9 18 47 8 6 2970000 0 0
+9886.1 15 44 2 2 2930000 0 0
+9908.2 16 44 4 2 311000 0 0
+9911.9 15 42 2 4 758000 0 0
+9934.2 16 42 4 4 3640000 0 0
+9949.8 17 43 6 8 1080000 0 0
+9968.5 16 41 4 6 760000 0 0
+9971.2 17 42 6 4 450000 0 0
+9983.2 16 40 4 6 810000 0 0
+10000 18 43 8 8 920000 0 0
+10006 17 41 6 6 2280000 0 0
+10021 17 40 6 6 2260000 0 0
+10057 18 41 8 6 1390000 0 0
+10108 15 36 2 4 27000000 0 0
+10112 16 37 4 6 29300000 0 0
+10115 17 38 6 8 33000000 0 0
+10117 18 39 8 10 38200000 0 0
+10131 16 36 4 4 9890000 0 0
+10150 17 37 6 6 7440000 0 0
+10168 18 38 8 8 3980000 0 0
+10170 17 36 6 4 495000 0 0
+10203 18 37 8 6 281000 0 0
+10214 104 320 4 2 9100000 0 0
+10216 104 319 4 4 848000 0 0
+10241 105 319 6 4 8000000 0 0
+10379 104 318 4 4 20100000 0 0
+10385 104 317 4 6 1470000 0 0
+10401 2 5 6 4 0.000978 0 0
+10401 2 5 6 4 0.0529 0 0
+10401 2 4 6 2 0.0303 0 0
+10405 105 318 6 4 2220000 0 0
+10410 3 5 4 4 0.00175 0 0
+10410 3 5 4 4 0.0226 0 0
+10410 3 4 4 2 0.00109 0 0
+10410 3 4 4 2 0.0452 0 0
+10411 105 317 6 6 20600000 0 0
+10503 19 46 2 4 6170000 0 0
+10510 20 47 4 6 12500000 0 0
+10516 19 45 2 2 18100000 0 0
+10523 20 46 4 4 15400000 0 0
+10537 20 45 4 2 7280000 0 0
+10542 21 48 6 8 23900000 0 0
+10553 21 47 6 6 11500000 0 0
+10566 21 46 6 4 3300000 0 0
+10588 106 318 6 4 2070000 0 0
+10594 106 317 6 6 104000 0 0
+10599 107 317 8 6 1980000 0 0
+10626 19 44 2 2 3390000 0 0
+10647 20 44 4 2 4010000 0 0
+10656 19 42 2 4 5550000 0 0
+10676 111 321 2 2 2260000 0 0
+10677 20 42 4 4 257000 0 0
+10692 113 321 4 2 4490000 0 0
+10716 20 41 4 6 4180000 0 0
+10721 21 42 6 4 2290000 0 0
+10733 20 40 4 6 1030000 0 0
+10761 21 41 6 6 2370000 0 0
+10790 105 314 6 8 21600000 0 0
+10986 106 314 6 8 371000 0 0
+10992 107 314 8 8 10200000 0 0
+11183 16 31 4 6 201000 0 0
+11230 17 31 6 6 2090000 0 0
+11241 15 30 2 4 600000 0 0
+11260 122 322 4 6 2920000 0 0
+11269 16 30 4 4 4130000 0 0
+11295 18 31 8 6 10800000 0 0
+11297 15 29 2 2 6920000 0 0
+11317 17 30 6 4 9020000 0 0
+11326 16 29 4 2 7360000 0 0
+11509 104 312 4 4 109000 0 0
+11509 104 313 4 6 13100 0 0
+11540 105 313 6 6 116000 0 0
+11540 105 312 6 4 13700 0 0
+11569 11 22 6 4 2080000 0 0
+11628 12 22 4 4 1320000 0 0
+11655 13 22 2 4 639000 0 0
+11766 106 312 6 4 11600000 0 0
+11766 106 313 6 6 552000 0 0
+11772 107 313 8 6 11000000 0 0
+11967 23 50 4 6 54900 0 0
+12002 23 49 4 4 5040000 0 0
+12078 24 50 6 6 6120000 0 0
+12089 121 321 2 2 5220000 0 0
+12113 24 49 6 4 753000 0 0
+12127 122 321 4 2 10300000 0 0
+12133 20 31 4 6 2950000 0 0
+12190 21 31 6 6 7110000 0 0
+12207 19 30 2 4 4080000 0 0
+12232 32 122 2 4 55400 0 0
+12235 20 30 4 4 1520000 0 0
+12271 32 121 2 2 219000 0 0
+12274 19 29 2 2 1430000 0 0
+12292 22 44 4 2 13800000 0 0
+12293 21 30 6 4 3760000 0 0
+12299 61 236 4 6 32800 0 0
+12302 20 29 4 2 7410000 0 0
+12332 22 42 4 4 12700000 0 0
+12348 33 122 4 4 290000 0 0
+12385 22 41 4 6 12800000 0 0
+12388 33 121 4 2 127000 0 0
+12423 61 230 4 4 31900 0 0
+12465 23 40 4 6 21600000 0 0
+12473 24 43 6 8 22800000 0 0
+12473 121 320 2 2 10700000 0 0
+12476 121 319 2 4 2670000 0 0
+12494 61 227 4 2 31300 0 0
+12513 122 320 4 2 5210000 0 0
+12516 122 319 4 4 13200000 0 0
+12555 27 63 6 4 164000 0 0
+12556 28 63 4 4 18200 0 0
+12584 24 40 6 6 929000 0 0
+12619 28 62 4 2 179000 0 0
+12692 29 118 2 4 82800 0 0
+12712 23 35 4 2 2450000 0 0
+12720 121 318 2 4 140000 0 0
+12762 122 318 4 4 20600 0 0
+12765 30 118 4 4 163000 0 0
+12771 122 317 4 6 169000 0 0
+12775 23 34 4 4 547000 0 0
+12877 31 118 6 4 238000 0 0
+12901 24 34 6 4 2590000 0 0
+12973 32 119 2 4 854000 0 0
+12980 34 122 4 4 35700 0 0
+13014 33 120 4 6 1020000 0 0
+13023 34 121 4 2 35300 0 0
+13045 35 122 2 4 14100 0 0
+13049 29 116 2 4 91700 0 0
+13055 30 117 4 6 65900 0 0
+13073 29 115 2 2 36500 0 0
+13089 35 121 2 2 47100 0 0
+13104 33 119 4 4 166000 0 0
+13126 30 116 4 4 28800 0 0
+13150 30 115 4 2 179000 0 0
+13173 31 117 6 6 150000 0 0
+13176 27 60 6 6 426000 0 0
+13177 28 60 4 6 30400 0 0
+13200 61 217 4 6 49200 0 0
+13245 31 116 6 4 94700 0 0
+13258 29 110 2 4 25400 0 0
+13268 30 112 4 6 42500 0 0
+13288 31 114 6 8 60500 0 0
+13296 29 109 2 2 50300 0 0
+13299 27 59 6 4 44400 0 0
+13300 28 59 4 4 399000 0 0
+13337 30 110 4 4 31900 0 0
+13345 61 207 4 4 47600 0 0
+13375 30 109 4 2 9880 0 0
+13390 31 112 6 6 17700 0 0
+13426 61 206 4 2 46700 0 0
+13433 9 14 2 2 3440000 0 0
+13452 23 33 4 4 491000 0 0
+13460 31 110 6 4 2910 0 0
+13468 11 21 6 6 536000 0 0
+13538 11 20 6 4 314000 0 0
+13548 12 21 4 6 199000 0 0
+13585 10 14 4 2 6390000 0 0
+13591 24 33 6 4 5360000 0 0
+13592 23 32 4 2 6630000 0 0
+13606 25 49 2 4 11200000 0 0
+13619 12 20 4 4 112000 0 0
+13628 26 50 4 6 13900000 0 0
+13653 12 19 4 2 587000 0 0
+13655 13 20 2 4 284000 0 0
+13672 26 49 4 4 3020000 0 0
+13690 13 19 2 2 108000 0 0
+13717 34 120 4 6 98400 0 0
+13817 34 119 4 4 16000 0 0
+13891 35 119 2 4 79000 0 0
+14094 40 120 6 6 20200 0 0
+14147 32 113 2 4 15300 0 0
+14176 32 111 2 2 61000 0 0
+14199 40 119 6 4 416000 0 0
+14236 43 120 8 6 393000 0 0
+14303 33 113 4 4 74200 0 0
+14317 22 31 4 6 1330000 0 0
+14332 33 111 4 2 29500 0 0
+14459 22 30 4 4 1180000 0 0
+14459 32 108 2 2 65000 0 0
+14459 121 312 2 4 5230000 0 0
+14513 122 313 4 6 6200000 0 0
+14513 122 312 4 4 1040000 0 0
+14527 25 35 2 2 2310000 0 0
+14553 22 29 4 2 1100000 0 0
+14602 26 35 4 2 1140000 0 0
+14609 25 34 2 4 706000 0 0
+14621 33 108 4 2 126000 0 0
+14685 26 34 4 4 1750000 0 0
+14698 61 187 4 2 180000 0 0
+14761 11 18 6 8 996000 0 0
+14805 61 178 4 4 176000 0 0
+14824 61 177 4 6 176000 0 0
+14873 11 17 6 6 280000 0 0
+14923 61 170 4 6 78300 0 0
+14956 11 16 6 4 44600 0 0
+14971 12 17 4 6 667000 0 0
+14978 41 118 6 4 182000 0 0
+15055 12 16 4 4 485000 0 0
+15057 42 118 4 4 119000 0 0
+15093 61 166 4 4 75700 0 0
+15099 13 16 2 4 387000 0 0
+15106 12 15 4 2 147000 0 0
+15117 44 118 2 4 59000 0 0
+15151 13 15 2 2 751000 0 0
+15157 34 113 4 4 41800 0 0
+15190 34 111 4 2 16600 0 0
+15195 61 165 4 2 74200 0 0
+15203 37 114 6 8 623 0 0
+15246 35 113 2 4 8210 0 0
+15279 35 111 2 2 32600 0 0
+15281 38 114 8 8 12100 0 0
+15291 36 112 4 6 1130 0 0
+15335 37 112 6 6 20400 0 0
+15381 41 117 6 6 43000 0 0
+15382 36 110 4 4 23200 0 0
+15396 39 114 10 8 103000 0 0
+15415 38 112 8 6 94200 0 0
+15427 37 110 6 4 92500 0 0
+15433 36 109 4 2 115000 0 0
+15463 42 117 4 6 18100 0 0
+15479 41 116 6 4 27100 0 0
+15500 25 33 2 4 1120000 0 0
+15562 42 116 4 4 7910 0 0
+15587 26 33 4 4 5050000 0 0
+15596 42 115 4 2 49100 0 0
+15626 44 116 2 4 24400 0 0
+15660 44 115 2 2 9700 0 0
+15683 32 104 2 4 86600 0 0
+15687 25 32 2 2 3590000 0 0
+15775 26 32 4 2 1680000 0 0
+15796 46 117 4 6 1940 0 0
+15798 51 132 2 2 1290000 0 0
+15815 51 131 2 4 1280000 0 0
+15815 33 105 4 6 91700 0 0
+15827 47 117 6 6 17300 0 0
+15850 48 117 8 6 76800 0 0
+15870 45 116 2 4 4780 0 0
+15874 33 104 4 4 13200 0 0
+15900 46 116 4 4 30400 0 0
+15905 45 115 2 2 47500 0 0
+15931 47 116 6 4 59500 0 0
+15935 46 115 4 2 47200 0 0
+16259 52 147 2 4 108000 0 0
+16271 52 146 2 2 215000 0 0
+16307 53 148 4 6 99600 0 0
+16311 53 147 4 4 171000 0 0
+16324 53 146 4 2 213000 0 0
+16362 52 140 2 2 76800 0 0
+16403 54 149 6 8 59800 0 0
+16404 54 148 6 6 240000 0 0
+16408 54 147 6 4 147000 0 0
+16411 49 113 4 4 10900 0 0
+16415 53 140 4 2 76000 0 0
+16449 52 137 2 4 7560 0 0
+16450 49 111 4 2 109000 0 0
+16476 50 113 6 4 97200 0 0
+16503 53 137 4 4 47900 0 0
+16540 53 134 4 6 2970 0 0
+16550 55 149 8 8 350000 0 0
+16551 55 148 8 6 77600 0 0
+16601 54 137 6 4 92600 0 0
+16639 54 134 6 6 26300 0 0
+16663 52 128 2 4 985000 0 0
+16687 55 138 8 10 1400000 0 0
+16713 54 130 6 8 1200000 0 0
+16717 53 129 4 6 1050000 0 0
+16718 53 128 4 4 390000 0 0
+16790 55 134 8 6 114000 0 0
+16818 54 129 6 6 333000 0 0
+16819 54 128 6 4 27400 0 0
+16865 34 105 4 6 41600 0 0
+16866 55 130 8 8 193000 0 0
+16867 56 147 2 4 444000 0 0
+16880 56 146 2 2 886000 0 0
+16907 57 148 4 6 741000 0 0
+16912 57 147 4 4 564000 0 0
+16925 57 146 4 2 176000 0 0
+16933 34 104 4 4 11300 0 0
+16973 55 129 8 6 12900 0 0
+16979 56 140 2 2 60100 0 0
+17023 57 140 4 2 298000 0 0
+17024 58 149 6 8 1040000 0 0
+17025 58 148 6 6 311000 0 0
+17030 58 147 6 4 51800 0 0
+17044 35 104 2 4 29300 0 0
+17072 56 137 2 4 148000 0 0
+17117 57 137 4 4 46900 0 0
+17157 57 134 4 6 105000 0 0
+17239 58 137 6 4 155000 0 0
+17279 58 134 6 6 239000 0 0
+17352 59 151 4 6 19100 0 0
+17409 59 150 4 4 255000 0 0
+17566 60 151 6 6 257000 0 0
+17624 60 150 6 4 27300 0 0
+17736 60 145 6 8 923000 0 0
+17763 59 133 4 6 858000 0 0
+17778 59 132 4 2 352000 0 0
+17799 59 131 4 4 35100 0 0
+17988 60 133 6 6 59000 0 0
+18025 60 131 6 4 304000 0 0
+18433 49 105 4 6 6220 0 0
+18434 61 140 4 2 504000 0 0
+18514 49 104 4 4 59400 0 0
+18515 50 105 6 6 69200 0 0
+18545 61 137 4 4 495000 0 0
+18591 61 134 4 6 491000 0 0
+18732 62 150 2 4 431000 0 0
+18806 63 151 4 6 511000 0 0
+18872 63 150 4 4 84200 0 0
+19099 61 125 4 6 137000 0 0
+19365 61 124 4 4 131000 0 0
+19532 61 123 4 2 128000 0 0
+19686 111 284 2 2 7610 0 0
+19742 113 284 4 2 15100 0 0
+24538 118 236 4 6 16600 0 0
+25037 118 230 4 4 15700 0 0
+25097 121 284 2 2 29900 0 0
+25260 122 284 4 2 58600 0 0
+25328 118 227 4 2 15100 0 0
+26157 29 61 2 4 729000 0 0
+26466 30 61 4 4 1410000 0 0
+26544 51 72 2 2 4120000 0 0
+26721 51 71 2 4 4040000 0 0
+26953 31 61 6 4 2000000 0 0
+27497 52 85 2 4 395000 0 0
+27571 52 84 2 2 783000 0 0
+27601 53 86 4 6 364000 0 0
+27646 53 85 4 4 622000 0 0
+27720 53 84 4 2 771000 0 0
+27845 52 80 2 2 234000 0 0
+27865 54 89 6 8 216000 0 0
+27879 54 86 6 6 869000 0 0
+27925 54 85 6 4 528000 0 0
+27998 53 80 4 2 230000 0 0
+28058 52 77 2 4 22900 0 0
+28214 53 77 4 4 144000 0 0
+28292 55 89 8 8 1240000 0 0
+28307 55 86 8 6 275000 0 0
+28396 53 75 4 6 8840 0 0
+28410 118 217 4 6 25400 0 0
+28504 54 77 6 4 275000 0 0
+28690 54 75 6 6 77100 0 0
+28707 32 63 2 4 769000 0 0
+29039 32 62 2 2 2970000 0 0
+29089 118 207 4 4 23700 0 0
+29104 52 69 2 4 3990000 0 0
+29115 55 76 8 10 5700000 0 0
+29120 53 70 4 6 4270000 0 0
+29130 54 73 6 8 4880000 0 0
+29143 55 75 8 6 327000 0 0
+29271 53 69 4 4 1570000 0 0
+29283 56 85 2 4 1810000 0 0
+29354 33 63 4 4 3600000 0 0
+29366 57 86 4 6 3010000 0 0
+29366 56 84 2 2 3580000 0 0
+29417 57 85 4 4 2280000 0 0
+29430 54 70 6 6 1340000 0 0
+29476 118 206 4 2 22800 0 0
+29501 57 84 4 2 707000 0 0
+29584 54 69 6 4 109000 0 0
+29598 55 73 8 8 773000 0 0
+29643 29 57 2 4 1720000 0 0
+29674 30 58 4 6 1240000 0 0
+29678 56 80 2 2 289000 0 0
+29701 33 62 4 2 1390000 0 0
+29708 58 89 6 8 4150000 0 0
+29724 58 86 6 6 1240000 0 0
+29776 58 85 6 4 206000 0 0
+29780 29 56 2 2 679000 0 0
+29815 57 80 4 2 1420000 0 0
+29906 55 70 8 6 50800 0 0
+29920 56 77 2 4 705000 0 0
+30040 30 57 4 4 529000 0 0
+30060 57 77 4 4 222000 0 0
+30181 30 56 4 2 3260000 0 0
+30267 57 75 4 6 490000 0 0
+30288 31 58 6 6 2710000 0 0
+30419 59 95 4 6 86800 0 0
+30435 58 77 6 4 723000 0 0
+30635 59 92 4 4 1150000 0 0
+30648 58 75 6 6 1100000 0 0
+30670 31 57 6 4 1680000 0 0
+31084 60 95 6 6 1140000 0 0
+31309 60 92 6 4 119000 0 0
+31687 29 53 2 4 1310000 0 0
+31763 53 66 4 6 58900 0 0
+31773 30 54 4 6 2180000 0 0
+31886 29 52 2 2 2570000 0 0
+31917 31 55 6 8 3070000 0 0
+32132 54 66 6 6 512000 0 0
+32142 30 53 4 4 1600000 0 0
+32161 60 81 6 8 4720000 0 0
+32222 59 74 4 6 4380000 0 0
+32281 52 65 2 4 140000 0 0
+32346 30 52 4 2 492000 0 0
+32478 31 54 6 6 874000 0 0
+32487 53 65 4 4 881000 0 0
+32654 59 72 4 2 1000000 0 0
+32701 55 66 8 6 2160000 0 0
+32749 52 64 2 2 1340000 0 0
+32864 31 53 6 4 141000 0 0
+32872 54 65 6 4 1670000 0 0
+32917 32 59 2 4 2120000 0 0
+32924 59 71 4 4 97900 0 0
+32961 53 64 4 2 1320000 0 0
+32968 60 74 6 6 292000 0 0
+32987 33 60 4 6 2530000 0 0
+33192 34 63 4 4 20200 0 0
+33622 35 63 2 4 3880 0 0
+33636 34 62 4 2 7750 0 0
+33704 60 71 6 4 821000 0 0
+33771 33 59 4 4 393000 0 0
+34078 35 62 2 2 14900 0 0
+34122 57 66 4 6 699000 0 0
+34234 59 68 4 4 203000 0 0
+34431 61 80 4 2 2640000 0 0
+34607 58 66 6 6 1560000 0 0
+34757 61 77 4 4 2560000 0 0
+34768 23 28 4 4 12200 0 0
+34770 56 65 2 4 917000 0 0
+34774 23 27 4 6 995 0 0
+34959 57 65 4 4 289000 0 0
+34983 62 92 2 4 2650000 0 0
+35034 61 75 4 6 2500000 0 0
+35052 59 67 4 2 1890000 0 0
+35079 60 68 6 4 1700000 0 0
+35187 63 95 4 6 3130000 0 0
+35314 56 64 2 2 350000 0 0
+35468 58 65 6 4 934000 0 0
+35477 63 92 4 4 509000 0 0
+35509 57 64 4 2 1720000 0 0
+35716 24 28 6 4 1360 0 0
+35722 24 27 6 6 11900 0 0
+36388 118 187 4 2 195000 0 0
+37056 118 178 4 4 184000 0 0
+37172 118 177 4 6 183000 0 0
+37640 62 72 2 2 273000 0 0
+37805 118 170 4 6 42600 0 0
+37913 34 60 4 6 257000 0 0
+37999 62 71 2 4 66500 0 0
+38160 41 61 6 4 949000 0 0
+38213 63 72 4 2 131000 0 0
+38583 63 71 4 4 317000 0 0
+38671 42 61 4 4 608000 0 0
+38914 118 166 4 4 39000 0 0
+38951 34 59 4 4 39500 0 0
+39070 44 61 2 4 295000 0 0
+39545 35 59 2 4 189000 0 0
+39599 118 165 4 2 37000 0 0
+39756 62 68 2 4 414000 0 0
+39866 49 63 4 4 97400 0 0
+40248 50 63 6 4 852000 0 0
+40306 61 66 4 6 302000 0 0
+40395 63 68 4 4 1970000 0 0
+40509 49 62 4 2 929000 0 0
+40862 62 67 2 2 1520000 0 0
+40938 40 60 6 6 46900 0 0
+41241 104 151 4 6 20500 0 0
+41478 61 65 4 4 277000 0 0
+41538 63 67 4 2 725000 0 0
+41563 104 150 4 4 271000 0 0
+41650 105 151 6 6 279000 0 0
+41978 105 150 6 4 29200 0 0
+42151 40 59 6 4 902000 0 0
+42163 43 60 8 6 858000 0 0
+42255 61 64 4 2 262000 0 0
+42619 105 145 6 8 1310000 0 0
+42864 32 51 2 2 268000 0 0
+43640 104 133 4 6 1140000 0 0
+43735 104 132 4 2 265000 0 0
+43781 67 122 2 4 63400 0 0
+43860 104 131 4 4 26200 0 0
+44098 105 133 6 6 79000 0 0
+44281 67 121 2 2 245000 0 0
+44323 105 131 6 4 229000 0 0
+44323 33 51 4 2 485000 0 0
+45127 68 122 4 4 290000 0 0
+45209 41 58 6 6 88500 0 0
+45658 68 121 4 2 112000 0 0
+45755 37 55 6 8 4210 0 0
+45928 42 58 4 6 36200 0 0
+46063 41 57 6 4 53800 0 0
+46475 38 55 8 8 79000 0 0
+46505 36 54 4 6 7370 0 0
+46810 42 57 4 4 15200 0 0
+46877 49 60 4 6 9200 0 0
+46918 37 54 6 6 131000 0 0
+47153 42 56 4 2 92800 0 0
+47299 36 53 4 4 147000 0 0
+47395 44 57 2 4 45700 0 0
+47407 50 60 6 6 125000 0 0
+47554 39 55 10 8 647000 0 0
+47626 71 122 4 4 3230 0 0
+47676 38 54 8 6 587000 0 0
+47726 37 53 6 4 576000 0 0
+47742 36 52 4 2 716000 0 0
+47747 44 56 2 2 17900 0 0
+48202 72 122 2 4 623 0 0
+48218 71 121 4 2 1240 0 0
+48475 49 59 4 4 112000 0 0
+48808 72 121 2 2 2400 0 0
+48935 41 55 6 8 48800 0 0
+49000 46 58 4 6 12500 0 0
+49042 50 59 6 4 12100 0 0
+49297 47 58 6 6 111000 0 0
+49518 48 58 8 6 485000 0 0
+49710 45 57 2 4 29900 0 0
+50006 46 57 4 4 188000 0 0
+50097 45 56 2 2 293000 0 0
+50268 41 54 6 6 13500 0 0
+50315 47 57 6 4 364000 0 0
+50398 46 56 4 2 287000 0 0
+51158 42 54 4 6 29900 0 0
+51197 41 53 6 4 2130 0 0
+52121 42 53 4 4 21600 0 0
+52659 42 52 4 2 6530 0 0
+52806 25 28 2 4 2340 0 0
+52848 44 53 2 4 16200 0 0
+53397 92 122 4 4 12400 0 0
+53401 44 52 2 2 31300 0 0
+53696 34 51 4 2 688000 0 0
+53761 47 55 6 8 14200 0 0
+53819 26 28 4 4 492 0 0
+53833 26 27 4 6 2570 0 0
+54024 48 55 8 8 84300 0 0
+54067 95 122 6 4 108000 0 0
+54143 92 121 4 2 119000 0 0
+54831 35 51 2 2 323000 0 0
+55000 46 54 4 6 21700 0 0
+55025 67 119 2 4 552000 0 0
+55374 47 54 6 6 52300 0 0
+55501 68 120 4 6 645000 0 0
+55653 48 54 8 6 17100 0 0
+55742 45 53 2 4 22400 0 0
+56115 46 53 4 4 35100 0 0
+56358 45 52 2 2 43300 0 0
+56504 47 53 6 4 30100 0 0
+56641 109 147 2 4 114000 0 0
+56739 46 52 4 2 42400 0 0
+56788 109 146 2 2 226000 0 0
+57168 68 119 4 4 98400 0 0
+57252 108 132 2 2 1090000 0 0
+57291 110 148 4 6 103000 0 0
+57342 110 147 4 4 176000 0 0
+57467 108 131 2 4 1070000 0 0
+57493 110 146 4 2 218000 0 0
+57719 113 151 4 6 1150000 0 0
+57863 111 150 2 4 951000 0 0
+57914 109 140 2 2 70900 0 0
+58350 113 150 4 4 186000 0 0
+58580 112 149 6 8 58800 0 0
+58596 112 148 6 6 236000 0 0
+58647 110 140 4 2 68300 0 0
+58649 112 147 6 4 144000 0 0
+59016 109 137 2 4 6700 0 0
+59202 64 118 2 4 164000 0 0
+59330 71 120 4 6 169000 0 0
+59778 110 137 4 4 41300 0 0
+60266 110 134 4 6 2520 0 0
+60598 114 149 8 8 319000 0 0
+60615 114 148 8 6 70700 0 0
+60796 65 118 4 4 302000 0 0
+61069 115 147 2 4 500000 0 0
+61199 112 137 6 4 75700 0 0
+61239 71 119 4 4 25600 0 0
+61241 115 146 2 2 993000 0 0
+61539 116 148 4 6 822000 0 0
+61598 116 147 4 4 624000 0 0
+61712 112 134 6 6 21100 0 0
+61755 74 120 6 6 21800 0 0
+61772 116 146 4 2 193000 0 0
+61866 109 128 2 4 1060000 0 0
+62161 111 132 2 2 78200 0 0
+62194 72 119 2 4 122000 0 0
+62415 111 131 2 4 19300 0 0
+62482 114 138 8 10 1470000 0 0
+62552 115 140 2 2 74200 0 0
+62689 110 129 4 6 1090000 0 0
+62704 110 128 4 4 408000 0 0
+62724 113 132 4 2 38100 0 0
+62747 112 130 6 8 1250000 0 0
+62982 113 131 4 4 94000 0 0
+63106 116 140 4 2 362000 0 0
+63120 117 149 6 8 1090000 0 0
+63138 117 148 6 6 326000 0 0
+63200 117 147 6 4 54200 0 0
+63504 66 118 6 4 398000 0 0
+63826 74 119 6 4 415000 0 0
+63840 115 137 2 4 175000 0 0
+63956 114 134 8 6 84200 0 0
+64255 112 129 6 6 329000 0 0
+64269 112 128 6 4 27000 0 0
+64417 116 137 4 4 54400 0 0
+64803 81 120 8 6 377000 0 0
+64985 116 134 4 6 119000 0 0
+65068 114 130 8 8 186000 0 0
+66172 117 137 6 4 169000 0 0
+66691 114 129 8 6 11700 0 0
+66771 117 134 6 6 256000 0 0
+67870 64 116 2 4 457000 0 0
+68014 65 117 4 6 327000 0 0
+68523 64 115 2 2 178000 0 0
+68560 92 120 4 6 4620 0 0
+69669 95 120 6 6 61700 0 0
+69973 65 116 4 4 134000 0 0
+70668 65 115 4 2 810000 0 0
+71122 92 119 4 4 55900 0 0
+71422 66 117 6 6 659000 0 0
+72316 95 119 6 4 5910 0 0
+73051 118 140 4 2 726000 0 0
+73584 66 116 6 4 387000 0 0
+73914 64 110 2 4 311000 0 0
+74212 65 112 4 6 516000 0 0
+74814 118 137 4 4 676000 0 0
+74951 66 114 6 8 715000 0 0
+75113 64 109 2 2 592000 0 0
+75581 118 134 4 6 656000 0 0
+76415 65 110 4 4 360000 0 0
+77697 65 109 4 2 107000 0 0
+78287 66 112 6 6 188000 0 0
+80743 66 110 6 4 28600 0 0
+83237 75 118 6 4 404000 0 0
+84744 118 125 4 6 99300 0 0
+84843 77 118 4 4 255000 0 0
+84922 67 113 2 4 88200 0 0
+85975 67 111 2 2 340000 0 0
+86854 80 118 2 4 119000 0 0
+90136 68 113 4 4 369000 0 0
+90233 118 124 4 4 82300 0 0
+91323 68 111 4 2 142000 0 0
+91512 119 151 4 6 10200 0 0
+93110 119 150 4 4 130000 0 0
+93976 118 123 4 2 72800 0 0
+95376 70 114 6 8 2040 0 0
+96135 120 151 6 6 123000 0 0
+97388 75 117 6 6 37200 0 0
+97543 67 108 2 2 35500 0 0
+97900 120 150 6 4 12500 0 0
+98660 73 114 8 8 36200 0 0
+99072 69 112 4 6 3340 0 0
+99594 77 117 4 6 14900 0 0
+100690 71 113 4 4 825 0 0
+100850 70 112 6 6 57900 0 0
+101450 75 116 6 4 21200 0 0
+101460 120 145 6 8 452000 0 0
+102170 71 111 4 2 316 0 0
+103040 69 110 4 4 62400 0 0
+103300 72 113 2 4 153 0 0
+103850 77 116 4 4 5850 0 0
+104070 75 114 6 8 22400 0 0
+104230 119 133 4 6 389000 0 0
+104420 76 114 10 8 268000 0 0
+104490 68 108 4 2 57700 0 0
+104520 73 112 8 6 244000 0 0
+104770 119 132 4 2 150000 0 0
+104860 72 111 2 2 585 0 0
+104960 70 110 6 4 237000 0 0
+105380 69 109 4 2 292000 0 0
+105390 77 115 4 2 35000 0 0
+105490 119 131 4 4 14700 0 0
+106880 80 116 2 4 16800 0 0
+107370 85 117 4 6 5130 0 0
+108060 86 117 6 6 45300 0 0
+108270 89 117 8 6 200000 0 0
+108510 80 115 2 2 6410 0 0
+110260 120 133 6 6 23500 0 0
+110610 75 112 6 6 5580 0 0
+111130 84 116 2 4 11600 0 0
+111680 120 131 6 4 111000 0 0
+112340 85 116 4 4 71700 0 0
+112890 84 115 2 2 110000 0 0
+113090 86 116 6 4 138000 0 0
+113470 77 112 4 6 12100 0 0
+114140 85 115 4 2 107000 0 0
+115580 75 110 6 4 816 0 0
+116340 86 114 6 8 6100 0 0
+116600 89 114 8 8 36500 0 0
+118700 77 110 4 4 8030 0 0
+118930 71 108 4 2 289000 0 0
+121830 77 109 4 2 2320 0 0
+122590 72 108 2 2 132000 0 0
+122680 80 110 2 4 5690 0 0
+123680 85 112 4 6 8320 0 0
+124590 86 112 6 6 20000 0 0
+124880 89 112 8 6 6580 0 0
+126020 80 109 2 2 10500 0 0
+128310 84 110 2 4 7980 0 0
+129920 85 110 4 4 12300 0 0
+130510 92 113 4 4 11800 0 0
+130920 86 110 6 4 10500 0 0
+131970 84 109 2 2 14700 0 0
+133010 92 111 4 2 111000 0 0
+133670 85 109 4 2 14100 0 0
+134580 95 113 6 4 96600 0 0
+157970 121 150 2 4 60600 0 0
+159740 122 151 4 6 70300 0 0
+164680 122 150 4 4 10700 0 0
+194720 121 132 2 2 899 0 0
+197230 121 131 2 4 216 0 0
+205020 122 132 4 2 385 0 0
+206040 67 104 2 4 13700 0 0
+207800 122 131 4 4 924 0 0
+226750 68 105 4 6 12400 0 0
+239680 68 104 4 4 1740 0 0
+307940 71 105 4 6 1660 0 0
+332290 71 104 4 4 221 0 0
+362490 72 104 2 4 850 0 0
+386780 74 105 6 6 180 0 0
+425990 74 104 6 4 2840 0 0
+548280 81 105 8 6 1270 0 0
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Radiation_Emission_Absorption_reference.csv b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Radiation_Emission_Absorption_reference.csv
new file mode 100644
index 000000000..595e00836
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/Radiation_Emission_Absorption_reference.csv
@@ -0,0 +1,1001 @@
+ wavelength,emission_coefficient,absorption_coefficient
+ 867.89999999999998 , 6.6484521100255448E-002 , 1.1690101274144701E-015
+ 867.90130130130126 , 181333334309.24490 , 3.1884189092027111E-003
+ 867.90260260260266 , 1654958025.0862880 , 2.9099445401048214E-005
+ 867.90390390390382 , 1666653394.2738166 , 2.9305087327887931E-005
+ 867.90520520520522 , 1678472518.3585877 , 2.9512905260898694E-005
+ 867.90650650650650 , 1690689474.9231606 , 2.9727718358952484E-005
+ 867.90780780780779 , 1702916520.6829913 , 2.9942708857267849E-005
+ 867.90910910910907 , 1715126049.9612854 , 3.0157391359917844E-005
+ 867.91041041041035 , 1727466668.6839666 , 3.0374378833492646E-005
+ 867.91171171171175 , 1739940250.9833915 , 3.0593704231222101E-005
+ 867.91301301301303 , 1752548705.0360849 , 3.0815401104941201E-005
+ 867.91431431431431 , 1765505973.2033560 , 3.1043231244355513E-005
+ 867.91561561561559 , 1778633690.9873590 , 3.1274058432178637E-005
+ 867.91691691691688 , 1791667879.7212782 , 3.1503241080717326E-005
+ 867.91821821821827 , 1804845113.4846475 , 3.1734938917533469E-005
+ 867.91951951951944 , 1818167483.1213036 , 3.1969188706336566E-005
+ 867.92082082082084 , 1831637118.2537811 , 3.2206027892689429E-005
+ 867.92212212212212 , 1845398688.1598704 , 3.2448000224340605E-005
+ 867.92342342342340 , 1859513258.4906745 , 3.2696179430383657E-005
+ 867.92472472472468 , 1873448043.8048661 , 3.2941197441885488E-005
+ 867.92602602602597 , 1887539224.3567703 , 3.3188965380945493E-005
+ 867.92732732732736 , 1901789137.8020689 , 3.3439524351013336E-005
+ 867.92862862862864 , 1916200166.0774615 , 3.3692916234140331E-005
+ 867.92992992992981 , 1930837240.5686352 , 3.3950282731375074E-005
+ 867.93123123123121 , 1946035202.3162842 , 3.4217511417165989E-005
+ 867.93253253253249 , 1960955463.8049362 , 3.4479857245868048E-005
+ 867.93383383383389 , 1976047063.7583036 , 3.4745215751764043E-005
+ 867.93513513513517 , 1991312623.2801499 , 3.5013633022225782E-005
+ 867.93643643643634 , 2006754813.4112308 , 3.5285156022676846E-005
+ 867.93773773773773 , 2022376357.0962498 , 3.5559832631177895E-005
+ 867.93903903903902 , 2038707044.7613437 , 3.5846978254733637E-005
+ 867.94034034034041 , 2054737435.3785672 , 3.6128843697513698E-005
+ 867.94164164164158 , 2070926396.4888639 , 3.6413497315785509E-005
+ 867.94294294294286 , 2087306413.4709394 , 3.6701510306213647E-005
+ 867.94424424424426 , 2103880489.6669993 , 3.6992935477142020E-005
+ 867.94554554554554 , 2120651688.1062164 , 3.7287826686401961E-005
+ 867.94684684684682 , 2138084447.7583673 , 3.7594350253766101E-005
+ 867.94814814814811 , 2155408193.6380262 , 3.7898957010992163E-005
+ 867.94944944944939 , 2172803484.5794153 , 3.8204821758805272E-005
+ 867.95075075075079 , 2190409078.6362004 , 3.8514384306762775E-005
+ 867.95205205205195 , 2208228363.0590563 , 3.8827704213545068E-005
+ 867.95335335335335 , 2226264794.0030375 , 3.9144842249391497E-005
+ 867.95465465465463 , 2244905505.0070281 , 3.9472605457808256E-005
+ 867.95595595595603 , 2263658977.7172713 , 3.9802351377003594E-005
+ 867.95725725725720 , 2282383427.8481555 , 4.0131586986601550E-005
+ 867.95855855855848 , 2301339913.7696347 , 4.0464902526153717E-005
+ 867.95985985985988 , 2320532266.2129631 , 4.0802365352144839E-005
+ 867.96116116116116 , 2339964395.7109656 , 4.1144044224226045E-005
+ 867.96246246246255 , 2359932207.2843752 , 4.1495142097314738E-005
+ 867.96376376376372 , 2380269906.0882940 , 4.1852743768750926E-005
+ 867.96506506506501 , 2400462376.7633939 , 4.2207791866053392E-005
+ 867.96636636636640 , 2420911494.5132432 , 4.2567352638255051E-005
+ 867.96766766766768 , 2441621606.2855296 , 4.2931502518573512E-005
+ 867.96896896896897 , 2462597150.6472921 , 4.3300319551187102E-005
+ 867.97027027027025 , 2484026549.4308085 , 4.3677116793428765E-005
+ 867.97157157157153 , 2506124044.5227804 , 4.4065661301616670E-005
+ 867.97287287287293 , 2527942003.2791681 , 4.4449290668627785E-005
+ 867.97417417417410 , 2550044570.4375796 , 4.4837924359935848E-005
+ 867.97547547547549 , 2572436694.2918549 , 4.5231649382343615E-005
+ 867.97677677677677 , 2595123429.4013519 , 4.5630554611140835E-005
+ 867.97807807807806 , 2814447399.5977263 , 4.9490677658953578E-005
+ 867.97937937937934 , 2983730517.2378917 , 5.2469958406757990E-005
+ 867.98068068068062 , 3008828035.0447745 , 5.2911280750908594E-005
+ 867.98198198198202 , 3034251561.7974615 , 5.3358335553052121E-005
+ 867.98328328328330 , 3060006830.6362548 , 5.3811223621644826E-005
+ 867.98458458458458 , 3086117045.5455809 , 5.4270353285983334E-005
+ 867.98588588588586 , 3112589171.7959504 , 5.4735847037742203E-005
+ 867.98718718718715 , 3140173932.3400664 , 5.5220903977226546E-005
+ 867.98848848848854 , 3167432470.3018403 , 5.5700225070293456E-005
+ 867.98978978978971 , 3194961179.4749446 , 5.6184296825407985E-005
+ 867.99109109109111 , 3222859435.1369338 , 5.6674866578850202E-005
+ 867.99239239239239 , 3251141239.8857598 , 5.7172180680334329E-005
+ 867.99369369369367 , 3279846689.6028228 , 5.7676944772762886E-005
+ 867.99499499499507 , 3309592997.8962145 , 5.8200009788096574E-005
+ 867.99629629629624 , 3339333184.9733577 , 5.8722967371158375E-005
+ 867.99759759759763 , 3369210006.1315398 , 5.9248327617556787E-005
+ 867.99889889889891 , 3399499762.4719520 , 5.9780948784483027E-005
+ 868.00020020020020 , 3430210178.5016456 , 6.0320966695215831E-005
+ 868.00150150150148 , 3461402838.0731668 , 6.0869465206191375E-005
+ 868.00280280280276 , 3493558232.9932938 , 6.1434890953114692E-005
+ 868.00410410410416 , 3526084070.6018200 , 6.2006830406075922E-005
+ 868.00540540540544 , 3558588290.2530112 , 6.2578389957390444E-005
+ 868.00670670670661 , 3591555443.9238315 , 6.3158089579593723E-005
+ 868.00800800800801 , 3624994454.5341921 , 6.3746086168014194E-005
+ 868.00930930930929 , 3658958636.6444263 , 6.4343317999194608E-005
+ 868.01061061061068 , 3693811500.5955000 , 6.4956175384204345E-005
+ 868.01191191191185 , 3729474626.6690397 , 6.5583279693506486E-005
+ 868.01321321321313 , 3764928644.2014999 , 6.6206707429986535E-005
+ 868.01451451451453 , 3800903453.7822914 , 6.6839292578174634E-005
+ 868.01581581581581 , 3837409406.2216296 , 6.7481217140403260E-005
+ 868.01711711711710 , 3874490919.7604418 , 6.8133262771823174E-005
+ 868.01841841841838 , 3912365420.1972928 , 6.8799251785438449E-005
+ 868.01971971971966 , 3951574314.7116199 , 6.9488703406952703E-005
+ 868.02102102102106 , 3990351904.2566123 , 7.0170571545766092E-005
+ 868.02232232232234 , 4029717538.0784845 , 7.0862779617983479E-005
+ 868.02362362362362 , 4069683279.0473576 , 7.1565539729561740E-005
+ 868.02492492492490 , 4110284001.2151961 , 7.2279465504847590E-005
+ 868.02622622622619 , 4151555646.7851171 , 7.3005188886462674E-005
+ 868.02752752752758 , 4194786968.3056126 , 7.3765369078598395E-005
+ 868.02882882882875 , 4237323455.6696930 , 7.4513332117217201E-005
+ 868.03013013013015 , 4280526530.1342759 , 7.5273016136568802E-005
+ 868.03143143143143 , 4324410319.0584688 , 7.6044669543075556E-005
+ 868.03273273273282 , 4368999489.2036247 , 7.6828726251456438E-005
+ 868.03403403403399 , 4414346688.2905025 , 7.7626112692237125E-005
+ 868.03533533533528 , 4461676611.6048670 , 7.8458360935820565E-005
+ 868.03663663663667 , 4508722843.3673668 , 7.9285621239997796E-005
+ 868.03793793793795 , 4556286491.5455685 , 8.0121979642806953E-005
+ 868.03923923923924 , 4604625550.4768324 , 8.0971972510848823E-005
+ 868.04054054054052 , 4653757113.9663200 , 8.1835900410345139E-005
+ 868.04184184184180 , 4703766617.5865717 , 8.2715266855959351E-005
+ 868.04314314314320 , 4755692916.8722267 , 8.3628335763483578E-005
+ 868.04444444444437 , 4807930364.9846373 , 8.4546875877874068E-005
+ 868.04574574574576 , 4860470563.3762789 , 8.5470739590766810E-005
+ 868.04704704704704 , 4913898025.6445971 , 8.6410204519929524E-005
+ 868.04834834834833 , 4968233007.4001064 , 8.7365626826406686E-005
+ 868.04964964964961 , 5023552637.2216120 , 8.8338363742897544E-005
+ 868.05095095095089 , 5080728541.1511326 , 8.9343739472698557E-005
+ 868.05225225225229 , 5138935568.1342115 , 9.0367245594386567E-005
+ 868.05355355355357 , 5197181671.4859171 , 9.1391439102519312E-005
+ 868.05485485485485 , 5256447925.4625607 , 9.2433570417444061E-005
+ 868.05615615615613 , 5316758477.4755363 , 9.3494064130697588E-005
+ 868.05745745745742 , 5378181761.1602650 , 9.4574124349944275E-005
+ 868.05875875875881 , 5441368863.1993475 , 9.5685198276963509E-005
+ 868.06006006006010 , 5506474191.3857851 , 9.6830000416069963E-005
+ 868.06136136136126 , 5571294975.5262136 , 9.7969799679956595E-005
+ 868.06266266266266 , 5637294768.6375618 , 9.9130330006085075E-005
+ 868.06396396396394 , 5704502544.2966890 , 1.0031210084561606E-004
+ 868.06526526526534 , 5772977754.5432091 , 1.0151615811717068E-004
+ 868.06656656656651 , 5843083649.2050095 , 1.0274888879129191E-004
+ 868.06786786786790 , 5916202424.1743317 , 1.0403459488199058E-004
+ 868.06916916916919 , 5988639380.1313801 , 1.0530831275508157E-004
+ 868.07047047047047 , 6062446517.2447586 , 1.0660612312776891E-004
+ 868.07177177177175 , 6137658843.8941908 , 1.0792864156256577E-004
+ 868.07307307307303 , 6214326713.3291016 , 1.0927675370238268E-004
+ 868.07437437437443 , 6292530689.7769632 , 1.1065187694423725E-004
+ 868.07567567567571 , 6374830085.3892002 , 1.1209900975297216E-004
+ 868.07697697697688 , 6456230824.7604923 , 1.1353034167473679E-004
+ 868.07827827827828 , 6539143003.6971598 , 1.1498824989151027E-004
+ 868.07957957957956 , 6623699696.6491909 , 1.1647507428066263E-004
+ 868.08088088088095 , 6709944946.5763807 , 1.1799158926179095E-004
+ 868.08218218218224 , 6798011526.9808207 , 1.1954013106873124E-004
+ 868.08348348348341 , 6890227511.9358521 , 1.2116163145871025E-004
+ 868.08478478478480 , 6982574954.4401474 , 1.2278544362357747E-004
+ 868.08608608608608 , 7076172249.0175228 , 1.2443123256360652E-004
+ 868.08738738738748 , 7171706777.7069340 , 1.2611108465346874E-004
+ 868.08868868868865 , 7269232662.5151510 , 1.2782595153488878E-004
+ 868.08998998998993 , 7368878880.2760067 , 1.2957810241442526E-004
+ 868.09129129129133 , 7472748988.0836325 , 1.3140452221617574E-004
+ 868.09259259259261 , 7578063729.3386269 , 1.3325634329214200E-004
+ 868.09389389389389 , 7684285694.8528728 , 1.3512411667777213E-004
+ 868.09519519519517 , 7792805970.2774181 , 1.3703230210408880E-004
+ 868.09649649649646 , 7903691656.0111723 , 1.3898207941471846E-004
+ 868.09779779779785 , 8017069417.9089813 , 1.4097567688276324E-004
+ 868.09909909909902 , 8134713564.7224121 , 1.4304429118085175E-004
+ 868.10040040040042 , 8255500823.8252258 , 1.4516817107588606E-004
+ 868.10170170170170 , 8376749296.1398020 , 1.4730016100990132E-004
+ 868.10300300300298 , 8500745586.8952370 , 1.4948046680734027E-004
+ 868.10430430430426 , 8627573696.6466484 , 1.5171056547090073E-004
+ 868.10560560560555 , 8757360389.5990467 , 1.5399268667155513E-004
+ 868.10690690690694 , 8891410611.6175728 , 1.5634977527240380E-004
+ 868.10820820820823 , 9030805810.2686100 , 1.5880084488140289E-004
+ 868.10950950950951 , 9170083650.5920258 , 1.6124985142438323E-004
+ 868.11081081081079 , 9312674556.9855766 , 1.6375711271872763E-004
+ 868.11211211211207 , 9458684796.9336681 , 1.6632449729124402E-004
+ 868.11341341341347 , 9608244995.5794106 , 1.6895430233331593E-004
+ 868.11471471471475 , 9762002294.2757320 , 1.7165790760673532E-004
+ 868.11601601601603 , 9923970071.7138786 , 1.7450587813078885E-004
+ 868.11731731731732 , 10085070957.826578 , 1.7733860643816531E-004
+ 868.11861861861860 , 10250203531.315247 , 1.8024222518630997E-004
+ 868.11991991991999 , 10419503796.039436 , 1.8321912576289273E-004
+ 868.12122122122116 , 10593113520.006718 , 1.8627180090778370E-004
+ 868.12252252252256 , 10771294894.204548 , 1.8940486294145595E-004
+ 868.12382382382384 , 10959838546.680988 , 1.9272012533963294E-004
+ 868.12512512512512 , 11148144375.165571 , 1.9603120654008288E-004
+ 868.12642642642641 , 11340872579.590124 , 1.9942004776908284E-004
+ 868.12772772772769 , 11538733455.119747 , 2.0289913828933526E-004
+ 868.12902902902908 , 11741911160.698683 , 2.0647171620921391E-004
+ 868.13033033033037 , 11950694602.805086 , 2.1014286325486261E-004
+ 868.13163163163154 , 12170700710.763546 , 2.1401133985486201E-004
+ 868.13293293293293 , 12393334828.521658 , 2.1792602535131221E-004
+ 868.13423423423421 , 12620213331.799013 , 2.2191534127526479E-004
+ 868.13553553553561 , 12853485753.780609 , 2.2601708328901659E-004
+ 868.13683683683678 , 13093394774.336557 , 2.3023551848620757E-004
+ 868.13813813813806 , 13340271017.769356 , 2.3457646174689797E-004
+ 868.13943943943946 , 13599344677.190279 , 2.3913187470367157E-004
+ 868.14074074074074 , 13865045694.283850 , 2.4380381740216466E-004
+ 868.14204204204214 , 14134696888.785730 , 2.4854521745263606E-004
+ 868.14334334334330 , 14412415469.220396 , 2.5342846853210964E-004
+ 868.14464464464470 , 14698526392.918907 , 2.5845928443528392E-004
+ 868.14594594594598 , 14993424955.032867 , 2.6364461673827346E-004
+ 868.14724724724726 , 15301637750.862061 , 2.6906405698417867E-004
+ 868.14854854854855 , 15622083714.738260 , 2.7469859450629335E-004
+ 868.14984984984983 , 15946031215.313189 , 2.8039470089069065E-004
+ 868.15115115115123 , 16280304449.017727 , 2.8627236730431295E-004
+ 868.15245245245251 , 16625346538.623154 , 2.9233938526822734E-004
+ 868.15375375375368 , 16981653297.767515 , 2.9860447331999556E-004
+ 868.15505505505507 , 17352574293.602482 , 3.0512652865796026E-004
+ 868.15635635635635 , 17743648294.218323 , 3.1200293672175564E-004
+ 868.15765765765775 , 18137573585.879086 , 3.1892948030397695E-004
+ 868.15895895895892 , 18544932602.997749 , 3.2609223239392994E-004
+ 868.16026026026020 , 18966342797.441128 , 3.3350204977549260E-004
+ 868.16156156156160 , 19402458182.354439 , 3.4117043210775253E-004
+ 868.16286286286288 , 19854738155.454548 , 3.4912304312383400E-004
+ 868.16416416416416 , 20338492136.555630 , 3.5762906561827865E-004
+ 868.16546546546545 , 20824195037.824409 , 3.6616935712585537E-004
+ 868.16676676676673 , 21327712094.616570 , 3.7502287914220947E-004
+ 868.16806806806812 , 21849927188.880596 , 3.8420517314347854E-004
+ 868.16936936936929 , 22391780478.667946 , 3.9373277011949686E-004
+ 868.17067067067069 , 22954403485.665371 , 4.0362556830991368E-004
+ 868.17197197197197 , 23556725337.760952 , 4.1421639792871387E-004
+ 868.17327327327325 , 24168099595.835903 , 4.2496639799573780E-004
+ 868.17457457457465 , 24800877945.941216 , 4.3609275117779240E-004
+ 868.17587587587582 , 25459143020.616478 , 4.4766724319913109E-004
+ 868.17717717717721 , 26144296305.595329 , 4.5971451666398846E-004
+ 868.17847847847850 , 26857944119.579960 , 4.7226281777075480E-004
+ 868.17977977977978 , 27619998048.548538 , 4.8566225313294759E-004
+ 868.18108108108106 , 28405495498.077412 , 4.9947390008170758E-004
+ 868.18238238238234 , 29216707266.601425 , 5.1373768776369149E-004
+ 868.18368368368374 , 30063708250.439636 , 5.2863076503130413E-004
+ 868.18498498498502 , 30948672596.727951 , 5.4419136034400146E-004
+ 868.18628628628630 , 31874020051.344383 , 5.6046202199283102E-004
+ 868.18758758758759 , 32860233742.282310 , 5.7780290798522507E-004
+ 868.18888888888887 , 33893436377.481430 , 5.9597000860884153E-004
+ 868.19019019019026 , 34959047448.968391 , 6.1470695399319967E-004
+ 868.19149149149143 , 36076701356.372650 , 6.3435897957807470E-004
+ 868.19279279279283 , 37249892271.708107 , 6.5498752407560561E-004
+ 868.19409409409411 , 38482447943.876831 , 6.7665989233732418E-004
+ 868.19539539539539 , 39794493325.224197 , 6.9972994659735894E-004
+ 868.19669669669668 , 41192863211.157440 , 7.2431785946255715E-004
+ 868.19799799799796 , 42634497739.283867 , 7.4966650392882701E-004
+ 868.19929929929935 , 44154608701.507706 , 7.7639501572308476E-004
+ 868.20060060060064 , 45758949454.711227 , 8.0460455724112932E-004
+ 868.20190190190181 , 47453778333.036888 , 8.3440517007159741E-004
+ 868.20320320320320 , 49256754524.026756 , 8.6610736279733695E-004
+ 868.20450450450448 , 51213107963.943520 , 9.0050641459064288E-004
+ 868.20580580580588 , 53230597300.223755 , 9.3598043177769313E-004
+ 868.20710710710716 , 55370531484.628769 , 9.7360742147033729E-004
+ 868.20840840840833 , 57642641181.097519 , 1.0135584798212560E-003
+ 868.20970970970973 , 60057603168.514870 , 1.0560213387045608E-003
+ 868.21101101101101 , 62627369610.116714 , 1.1012061587589359E-003
+ 868.21231231231241 , 65464570658.666359 , 1.1510933315865344E-003
+ 868.21361361361357 , 68398409303.636978 , 1.2026797024066317E-003
+ 868.21491491491486 , 71531818340.579773 , 1.2577751591138747E-003
+ 868.21621621621625 , 74886068839.586838 , 1.3167537150447378E-003
+ 868.21751751751754 , 78485347133.359070 , 1.3800406431594230E-003
+ 868.21881881881882 , 82360260336.310745 , 1.4481741170484310E-003
+ 868.22012012012010 , 86678995638.147827 , 1.5241114005999580E-003
+ 868.22142142142138 , 91295839832.202179 , 1.6052903899045460E-003
+ 868.22272272272278 , 96343754405.391602 , 1.6940489740308960E-003
+ 868.22402402402395 , 101970820430.38425 , 1.7929908909935348E-003
+ 868.22532532532534 , 108357148584.71468 , 1.9052830615128389E-003
+ 868.22662662662663 , 115773909217.43539 , 2.0356935280808480E-003
+ 868.22792792792802 , 124868270964.08803 , 2.1956015800470262E-003
+ 868.22922922922919 , 136061170582.01932 , 2.3924086260335982E-003
+ 868.23053053053047 , 150201263974.53922 , 2.6410367487835163E-003
+ 868.23183183183187 , 168776385469.68845 , 2.9676468255973179E-003
+ 868.23313313313315 , 193759112019.74658 , 3.4069230566118164E-003
+ 868.23443443443455 , 227928734044.84641 , 4.0077342412857420E-003
+ 868.23573573573572 , 276169450434.69421 , 4.8559601901116490E-003
+ 868.23703703703700 , 343999830071.80841 , 6.0486349550427608E-003
+ 868.23833833833839 , 436826481774.85956 , 7.6808239831469820E-003
+ 868.23963963963968 , 564737646429.07202 , 9.9299107551071783E-003
+ 868.24094094094096 , 739319290437.92346 , 1.2999613547585508E-002
+ 868.24224224224224 , 974800409254.66748 , 1.7140123525800823E-002
+ 868.24354354354352 , 1292251237762.1770 , 2.2721922688933468E-002
+ 868.24484484484492 , 1718390287143.8201 , 3.0214807750038711E-002
+ 868.24614614614609 , 2258228278578.8853 , 3.9706883188978394E-002
+ 868.24744744744748 , 2943386112342.2446 , 5.1754146365813387E-002
+ 868.24874874874877 , 3797869139573.0103 , 6.6778689687022219E-002
+ 868.25005005005005 , 4844162853565.3193 , 8.5175873573325706E-002
+ 868.25135135135133 , 6107493630713.5889 , 0.10738926191027030
+ 868.25265265265261 , 7644883223669.8164 , 0.13442147913844371
+ 868.25395395395401 , 9373703760920.7617 , 0.16481966349620453
+ 868.25525525525529 , 11327700865782.965 , 0.19917717077252278
+ 868.25655655655657 , 13488324906568.693 , 0.23716783922441717
+ 868.25785785785786 , 15822875176529.572 , 0.27821668603291633
+ 868.25915915915914 , 18283902009733.965 , 0.32148939459582992
+ 868.26046046046054 , 20891777030909.891 , 0.36734416310519125
+ 868.26176176176170 , 23407831117641.008 , 0.41158442645634125
+ 868.26306306306310 , 25815641682352.039 , 0.45392142313362632
+ 868.26436436436438 , 28030277258103.277 , 0.49286178681185461
+ 868.26566566566567 , 29960579095699.363 , 0.52680265566325490
+ 868.26696696696706 , 31520711493983.637 , 0.55423476404103444
+ 868.26826826826823 , 32653046031373.082 , 0.57414482031764102
+ 868.26956956956963 , 33242931988539.742 , 0.58451689882992042
+ 868.27087087087091 , 33353346321247.480 , 0.58645833551173887
+ 868.27217217217219 , 33093605486455.191 , 0.58189126266106272
+ 868.27347347347347 , 32327470454417.453 , 0.56842016320289557
+ 868.27477477477476 , 31074551051712.957 , 0.54638984049317407
+ 868.27607607607615 , 29354966443795.234 , 0.51615405369135914
+ 868.27737737737743 , 27286298886833.418 , 0.47978027422438224
+ 868.27867867867860 , 24991257723878.910 , 0.43942612408672083
+ 868.27997997998000 , 22536747006561.531 , 0.39626799009260782
+ 868.28128128128128 , 20011942785132.016 , 0.35187387189286656
+ 868.28258258258268 , 17498918411821.799 , 0.30768688103276720
+ 868.28388388388385 , 15036407141603.877 , 0.26438807179434609
+ 868.28518518518513 , 12709108773530.811 , 0.22346673702828176
+ 868.28648648648652 , 10619587004299.148 , 0.18672627395525832
+ 868.28778778778781 , 8745127856376.7441 , 0.15376729833800110
+ 868.28908908908909 , 7099305402560.9590 , 0.12482848571067669
+ 868.29039039039037 , 5683709294989.8066 , 9.9937787232765016E-002
+ 868.29169169169165 , 4482150745253.2793 , 7.8810552330165623E-002
+ 868.29299299299305 , 3476286776950.6606 , 6.1124252906281873E-002
+ 868.29429429429433 , 2685663739570.0684 , 4.7222576189603585E-002
+ 868.29559559559561 , 2055531777118.1384 , 3.6142844928223623E-002
+ 868.29689689689690 , 1561886227199.4033 , 2.7462980524743351E-002
+ 868.29819819819818 , 1181519056375.3721 , 2.0774911661604577E-002
+ 868.29949949949957 , 892594883128.42310 , 1.5694702630369151E-002
+ 868.30080080080074 , 671954445420.97180 , 1.1815139661584149E-002
+ 868.30210210210214 , 515794279701.50391 , 9.0693457235521708E-003
+ 868.30340340340342 , 401732410831.88257 , 7.0637742429958354E-003
+ 868.30470470470470 , 319117143397.17560 , 5.6111344105290789E-003
+ 868.30600600600599 , 259577935190.88071 , 4.5642453719559328E-003
+ 868.30730730730727 , 216693224042.12708 , 3.8101955688640970E-003
+ 868.30860860860867 , 184946026962.72516 , 3.2519788241190703E-003
+ 868.30990990990995 , 162467013081.25662 , 2.8567263276686968E-003
+ 868.31121121121123 , 145707570906.15936 , 2.5620421647675959E-003
+ 868.31251251251251 , 132818016639.95998 , 2.3354029902215262E-003
+ 868.31381381381379 , 122602375753.63390 , 2.1557797538447158E-003
+ 868.31511511511519 , 114244749347.88257 , 2.0088263514009951E-003
+ 868.31641641641636 , 107044881288.40555 , 1.8822300470395137E-003
+ 868.31771771771776 , 100914261103.47377 , 1.7744345315334235E-003
+ 868.31901901901904 , 95538684923.706970 , 1.6799151043673662E-003
+ 868.32032032032032 , 90692447186.692520 , 1.5947031419559566E-003
+ 868.32162162162160 , 86271560055.715179 , 1.5169702063697076E-003
+ 868.32292292292288 , 82204699797.809113 , 1.4454621996673944E-003
+ 868.32422422422428 , 78376710310.781799 , 1.3781543199288292E-003
+ 868.32552552552556 , 74834300481.725571 , 1.3158678372821955E-003
+ 868.32682682682685 , 71588903176.603439 , 1.2588037883633973E-003
+ 868.32812812812813 , 68556804561.475723 , 1.2054902168329824E-003
+ 868.32942942942941 , 65719269517.928574 , 1.1555976999600823E-003
+ 868.33073073073081 , 63060147302.612358 , 1.1088422562361303E-003
+ 868.33203203203209 , 60536464893.930092 , 1.0644682948691975E-003
+ 868.33333333333326 , 58146395278.843513 , 1.0224436698687662E-003
+ 868.33463463463465 , 55951400284.718536 , 9.8384908433740096E-004
+ 868.33593593593594 , 53885155696.044052 , 9.4751834794279508E-004
+ 868.33723723723733 , 51938281676.801666 , 9.1328653395750248E-004
+ 868.33853853853850 , 50102179463.279991 , 8.8100244880419268E-004
+ 868.33983983983990 , 48359005759.281441 , 8.5035236074881490E-004
+ 868.34114114114118 , 46677837820.713226 , 8.2079253442551641E-004
+ 868.34244244244246 , 45134704718.043556 , 7.9365980432911313E-004
+ 868.34374374374374 , 43673931651.360664 , 7.6797523318648505E-004
+ 868.34504504504503 , 42289977150.099060 , 7.4364138528872992E-004
+ 868.34634634634642 , 40977716491.413139 , 7.2056815181184715E-004
+ 868.34764764764770 , 39732586176.338959 , 6.9867530006587758E-004
+ 868.34894894894887 , 38510528745.163002 , 6.7718815243876919E-004
+ 868.35025025025027 , 37390108710.124825 , 6.5748811569481421E-004
+ 868.35155155155155 , 36324261469.435081 , 6.3874765022834084E-004
+ 868.35285285285295 , 35309641515.456062 , 6.2090793269982826E-004
+ 868.35415415415423 , 34343127141.148415 , 6.0391407372724056E-004
+ 868.35545545545540 , 33422111969.593376 , 5.8772025033925032E-004
+ 868.35675675675679 , 32518926468.680874 , 5.7183994711700319E-004
+ 868.35805805805808 , 31677447708.539242 , 5.5704464292466080E-004
+ 868.35935935935947 , 30878881565.518242 , 5.4300388854447391E-004
+ 868.36066066066064 , 30115809043.887196 , 5.2958723504766827E-004
+ 868.36196196196192 , 29386287561.615612 , 5.1676052612773871E-004
+ 868.36326326326332 , 28688601241.491592 , 5.0449359322893609E-004
+ 868.36456456456460 , 28006521869.648102 , 4.9250110827937679E-004
+ 868.36586586586589 , 27360706796.095932 , 4.8114625876148967E-004
+ 868.36716716716717 , 26750163022.726849 , 4.7041160231905992E-004
+ 868.36846846846845 , 26165152331.276268 , 4.6012590988590396E-004
+ 868.36976976976985 , 25604429598.038399 , 4.5026728904547827E-004
+ 868.37107107107101 , 25066815700.131599 , 4.4081500733618168E-004
+ 868.37237237237241 , 24543413403.450272 , 4.3161264406132142E-004
+ 868.37367367367369 , 24040284573.107796 , 4.2276674869079446E-004
+ 868.37497497497498 , 23566916437.981853 , 4.1444415223122186E-004
+ 868.37627627627626 , 23112541989.428970 , 4.0645553781200387E-004
+ 868.37757757757754 , 22676341694.447899 , 3.9878649664653085E-004
+ 868.37887887887894 , 22257520860.275402 , 3.9142305583976202E-004
+ 868.38018018018022 , 21851752179.504467 , 3.8428914604125310E-004
+ 868.38148148148150 , 21456240301.443233 , 3.7733558907440695E-004
+ 868.38278278278278 , 21086237556.982830 , 3.7083057241334367E-004
+ 868.38408408408407 , 20730789200.015419 , 3.6458148256159843E-004
+ 868.38538538538546 , 20389349394.196323 , 3.5857872362708460E-004
+ 868.38668668668674 , 20061368562.690571 , 3.5281263270795605E-004
+ 868.38798798798803 , 19745528172.705940 , 3.4726004090025660E-004
+ 868.38928928928931 , 19433609114.667015 , 3.4177641672651285E-004
+ 868.39059059059059 , 19143805700.549755 , 3.3668166073604538E-004
+ 868.39189189189199 , 18865481271.289040 , 3.3178875876996978E-004
+ 868.39319319319316 , 18598262388.726421 , 3.2709114625784866E-004
+ 868.39449449449455 , 18341767134.016064 , 3.2258210847188525E-004
+ 868.39579579579583 , 18096164409.096581 , 3.1826462583426312E-004
+ 868.39709709709712 , 17852012273.646461 , 3.1397268348617627E-004
+ 868.39839839839840 , 17625775685.656067 , 3.0999575272951975E-004
+ 868.39969969969968 , 17409334407.476643 , 3.0619107551197041E-004
+ 868.40100100100108 , 17201951252.685707 , 3.0254569051357008E-004
+ 868.40230230230236 , 17003369915.018669 , 2.9905509215618427E-004
+ 868.40360360360353 , 16813546221.756960 , 2.9571850837171754E-004
+ 868.40490490490492 , 16627300631.471661 , 2.9244489388177274E-004
+ 868.40620620620621 , 16452340244.897758 , 2.8936970146931334E-004
+ 868.40750750750760 , 16287081505.720766 , 2.8646512044871764E-004
+ 868.40880880880877 , 16129446775.119995 , 2.8369461909632030E-004
+ 868.41011011011005 , 15979275718.356493 , 2.8105537987253219E-004
+ 868.41141141141145 , 15836393553.733719 , 2.7854433036207503E-004
+ 868.41271271271273 , 15698604058.515430 , 2.7612289517626955E-004
+ 868.41401401401413 , 15567688143.481440 , 2.7382231493381536E-004
+ 868.41531531531530 , 15446207908.828642 , 2.7168767135088423E-004
+ 868.41661661661658 , 15331375064.528578 , 2.6966994013459680E-004
+ 868.41791791791798 , 15223107274.236849 , 2.6776767584874061E-004
+ 868.41921921921926 , 15121292304.237013 , 2.6597890608009154E-004
+ 868.42052052052054 , 15025234461.620150 , 2.6429143587979102E-004
+ 868.42182182182182 , 14933750358.143101 , 2.6268440250134585E-004
+ 868.42312312312322 , 14851160119.838446 , 2.6123377568064259E-004
+ 868.42442442442450 , 14774602148.736364 , 2.5988925148552914E-004
+ 868.42572572572567 , 14704062141.762836 , 2.5865058147702508E-004
+ 868.42702702702707 , 14639480085.814049 , 2.5751671172440798E-004
+ 868.42832832832835 , 14581145331.783224 , 2.5649276197186531E-004
+ 868.42962962962974 , 14526338444.999983 , 2.5553088698438320E-004
+ 868.43093093093091 , 14479776425.298008 , 2.5471400135175911E-004
+ 868.43223223223220 , 14438969645.752405 , 2.5399835621496840E-004
+ 868.43353353353359 , 14403927262.010544 , 2.5338411514262520E-004
+ 868.43483483483487 , 14374646987.512775 , 2.5287123993720102E-004
+ 868.43613613613616 , 14351957253.470736 , 2.5247432101219700E-004
+ 868.43743743743744 , 14332896083.045435 , 2.5214128465943220E-004
+ 868.43873873873872 , 14321320059.918839 , 2.5193987123250342E-004
+ 868.44004004004012 , 14315522272.700926 , 2.5184011438476319E-004
+ 868.44134134134129 , 14315519162.568449 , 2.5184230491537507E-004
+ 868.44264264264268 , 14321370897.515223 , 2.5194750377826588E-004
+ 868.44394394394396 , 14333651949.432486 , 2.5216582432532458E-004
+ 868.44524524524525 , 14351937338.269417 , 2.5248985126204214E-004
+ 868.44654654654664 , 14375699942.260893 , 2.5291018436099719E-004
+ 868.44784784784781 , 14405936784.435932 , 2.5344442722802170E-004
+ 868.44914914914921 , 14442300269.823660 , 2.5408646889728726E-004
+ 868.45045045045049 , 14484920302.658718 , 2.5483859776667130E-004
+ 868.45175175175177 , 14533895591.015636 , 2.5570255246773742E-004
+ 868.45305305305305 , 14591895659.294836 , 2.5672536845868215E-004
+ 868.45435435435434 , 14653843277.504217 , 2.5781760172774400E-004
+ 868.45565565565573 , 14723086964.201475 , 2.5903820790859920E-004
+ 868.45695695695701 , 14799140474.763348 , 2.6037864475412706E-004
+ 868.45825825825830 , 14882217476.374634 , 2.6184267510260639E-004
+ 868.45955955955958 , 14972485088.416744 , 2.6343324154569548E-004
+ 868.46086086086086 , 15073231274.498529 , 2.6520825023770974E-004
+ 868.46216216216226 , 15179318155.560349 , 2.6707722714792428E-004
+ 868.46346346346343 , 15292890924.395311 , 2.6907791649040364E-004
+ 868.46476476476482 , 15414412877.327963 , 2.7121849691217134E-004
+ 868.46606606606611 , 15544192361.235327 , 2.7350439774395338E-004
+ 868.46736736736739 , 15682491517.839149 , 2.7594023404308517E-004
+ 868.46866866866867 , 15832822745.744282 , 2.7858785038597513E-004
+ 868.46996996996995 , 15991573047.083860 , 2.8138364365786747E-004
+ 868.47127127127135 , 16157870111.030119 , 2.8431221948500086E-004
+ 868.47257257257263 , 16333911981.660213 , 2.8741229802556654E-004
+ 868.47387387387380 , 16520081249.475599 , 2.9069061457759771E-004
+ 868.47517517517520 , 16716789887.791887 , 2.9415442167826205E-004
+ 868.47647647647648 , 16927281363.239637 , 2.9786082043071409E-004
+ 868.47777777777787 , 17151555385.585918 , 3.0180982251127214E-004
+ 868.47907907907916 , 17383360277.707451 , 3.0589132664706159E-004
+ 868.48038038038032 , 17627606930.399094 , 3.1019180972024894E-004
+ 868.48168168168172 , 17884808997.671951 , 3.1472031307630191E-004
+ 868.48298298298300 , 18155600132.689102 , 3.1948799147340639E-004
+ 868.48428428428440 , 18442275291.125957 , 3.2453524244108309E-004
+ 868.48558558558557 , 18751440885.765022 , 3.2997838806819165E-004
+ 868.48688688688685 , 19068091883.744324 , 3.3555323517540898E-004
+ 868.48818818818825 , 19401280632.333183 , 3.4141916284343316E-004
+ 868.48948948948953 , 19751757423.957546 , 3.4758937671543791E-004
+ 868.49079079079081 , 20120504636.635353 , 3.5408117008749038E-004
+ 868.49209209209209 , 20508511178.760456 , 3.6091195023435729E-004
+ 868.49339339339338 , 20930948556.736454 , 3.6834879677307547E-004
+ 868.49469469469477 , 21362887203.066792 , 3.7595284382266645E-004
+ 868.49599599599594 , 21817096882.389210 , 3.8394888721735845E-004
+ 868.49729729729734 , 22295412448.087902 , 3.9236922716805471E-004
+ 868.49859859859862 , 22799390441.333065 , 4.0124126375270429E-004
+ 868.49989989990002 , 23330617832.684414 , 4.1059293131796273E-004
+ 868.50120120120118 , 23906127691.255756 , 4.2072406853355327E-004
+ 868.50250250250247 , 24504093341.043392 , 4.3125044832058318E-004
+ 868.50380380380386 , 25130373724.282364 , 4.4227520349494892E-004
+ 868.50510510510514 , 25791837575.814129 , 4.5391924603446142E-004
+ 868.50640640640654 , 26490948931.149990 , 4.6622594934473500E-004
+ 868.50770770770771 , 27230329069.964970 , 4.7924145392112995E-004
+ 868.50900900900899 , 28028600490.066387 , 4.9329356875955411E-004
+ 868.51031031031039 , 28872610898.057343 , 5.0815077178376262E-004
+ 868.51161161161167 , 29754363820.083893 , 5.2367229632781405E-004
+ 868.51291291291295 , 30689615790.997349 , 5.4013550304064318E-004
+ 868.51421421421423 , 31682363636.171005 , 5.5761074452428147E-004
+ 868.51551551551552 , 32737011866.937225 , 5.7617555020336221E-004
+ 868.51681681681691 , 33872905621.589893 , 5.9617044327615215E-004
+ 868.51811811811808 , 35096242162.484024 , 6.1770450883925985E-004
+ 868.51941941941948 , 36372537615.432655 , 6.4017073425782340E-004
+ 868.52072072072076 , 37733351832.984673 , 6.6412465570938196E-004
+ 868.52202202202204 , 39185650112.385048 , 6.8968887583648855E-004
+ 868.52332332332332 , 40737408961.858215 , 7.1700379904681127E-004
+ 868.52462462462461 , 42407220974.414207 , 7.4639669735540658E-004
+ 868.52592592592600 , 44243444898.679703 , 7.7871879793018955E-004
+ 868.52722722722729 , 46163651856.833015 , 8.1251914591634264E-004
+ 868.52852852852845 , 48232851987.774292 , 8.4894207591444692E-004
+ 868.52982982982985 , 50471907559.817299 , 8.8835480476451311E-004
+ 868.53113113113113 , 52909654406.940910 , 9.3126490489106237E-004
+ 868.53243243243253 , 55586836156.607788 , 9.7838954912151917E-004
+ 868.53373373373370 , 58674101428.137321 , 1.0327325287590742E-003
+ 868.53503503503509 , 62074802000.471504 , 1.0925925935740585E-003
+ 868.53633633633638 , 66009132619.342072 , 1.1618456514455482E-003
+ 868.53763763763766 , 70691648793.553833 , 1.2442683223256481E-003
+ 868.53893893893905 , 76437853261.312943 , 1.3454141132327540E-003
+ 868.54024024024022 , 83715253081.074448 , 1.4735121214922565E-003
+ 868.54154154154162 , 93539599869.534027 , 1.6464417048136480E-003
+ 868.54284284284290 , 106593390357.25313 , 1.8762161990377117E-003
+ 868.54414414414418 , 124331092251.75475 , 2.1884372726301287E-003
+ 868.54544544544547 , 148844417094.03717 , 2.6199234027069456E-003
+ 868.54674674674675 , 182869633919.68643 , 3.2188386195374486E-003
+ 868.54804804804814 , 230046523296.29858 , 4.0492506364131079E-003
+ 868.54934934934943 , 296843467474.26422 , 5.2250164531703275E-003
+ 868.55065065065060 , 388711595006.48224 , 6.8420872610309028E-003
+ 868.55195195195199 , 511707515626.19855 , 9.0070719951222972E-003
+ 868.55325325325327 , 675951313813.86707 , 1.1898105208066950E-002
+ 868.55455455455467 , 892058799196.51624 , 1.5702047240829100E-002
+ 868.55585585585584 , 1171961379297.6826 , 2.0628915697146366E-002
+ 868.55715715715712 , 1534265918280.9277 , 2.7006230115847241E-002
+ 868.55845845845852 , 1995164633112.0010 , 3.5119007206922556E-002
+ 868.55975975975980 , 2552008045784.3213 , 4.4920610634411523E-002
+ 868.56106106106108 , 3223842426428.9585 , 5.6746294398355712E-002
+ 868.56236236236236 , 4018935106961.7070 , 7.0741580742806079E-002
+ 868.56366366366365 , 4941368818777.1826 , 8.6978334238651631E-002
+ 868.56496496496504 , 5996699635568.4775 , 0.10555435334965514
+ 868.56626626626633 , 7200330047218.1074 , 0.12674075395396647
+ 868.56756756756761 , 8473481843205.6611 , 0.14915087558650711
+ 868.56886886886889 , 9821805008067.3711 , 0.17288416974609561
+ 868.57017017017017 , 11212493900043.732 , 0.19736318886221485
+ 868.57147147147157 , 12605543395078.975 , 0.22188375950069592
+ 868.57277277277274 , 13955177808814.025 , 0.24564013435588256
+ 868.57407407407413 , 15249887441909.947 , 0.26842971877655125
+ 868.57537537537542 , 16351809877109.188 , 0.28782584729434640
+ 868.57667667667670 , 17256433833990.385 , 0.30374911200115340
+ 868.57797797797798 , 17922528677131.387 , 0.31547376790433740
+ 868.57927927927926 , 18317184473604.363 , 0.32242053169883661
+ 868.58058058058066 , 18434573233556.348 , 0.32448681863519852
+ 868.58188188188194 , 18345496292245.879 , 0.32291887956821880
+ 868.58318318318322 , 17976806786232.992 , 0.31642917745517979
+ 868.58448448448451 , 17334800683681.293 , 0.30512853445059129
+ 868.58578578578579 , 16450927630048.986 , 0.28957052976084696
+ 868.58708708708718 , 15366836857854.684 , 0.27048827655346841
+ 868.58838838838835 , 14130313710939.568 , 0.24872289632589939
+ 868.58968968968975 , 12763628153193.469 , 0.22466638679678680
+ 868.59099099099103 , 11352561983984.541 , 0.19982868613827115
+ 868.59229229229231 , 9959616345071.6074 , 0.17530994451949630
+ 868.59359359359360 , 8605798899988.0713 , 0.15147994053867103
+ 868.59489489489488 , 7324551519695.0146 , 0.12892732071730198
+ 868.59619619619627 , 6141374603543.7910 , 0.10810094515422025
+ 868.59749749749756 , 5061014479616.7734 , 8.9084359107431760E-002
+ 868.59879879879884 , 4103956082867.4292 , 7.2238140054813563E-002
+ 868.60010010010012 , 3297016168977.1289 , 5.8034318702114909E-002
+ 868.60140140140140 , 2613896461697.8838 , 4.6009990664774625E-002
+ 868.60270270270280 , 2046624186917.9944 , 3.6024818521256684E-002
+ 868.60400400400408 , 1584277794759.2520 , 2.7886560268441770E-002
+ 868.60530530530525 , 1212338639835.4802 , 2.1339657537332437E-002
+ 868.60660660660665 , 915756229196.84119 , 1.6119190328893175E-002
+ 868.60790790790793 , 694256348485.31897 , 1.2220331891896533E-002
+ 868.60920920920933 , 525616992391.35205 , 9.2519286979423077E-003
+ 868.61051051051049 , 399103050852.93048 , 7.0250204605841644E-003
+ 868.61181181181189 , 305462660490.15582 , 5.3767551351281660E-003
+ 868.61311311311317 , 236964364658.13480 , 4.1710429971133309E-003
+ 868.61441441441445 , 186089918702.71027 , 3.2755472977744585E-003
+ 868.61571571571574 , 150993843088.43793 , 2.6577837442431944E-003
+ 868.61701701701702 , 125699467068.25429 , 2.2125505052916984E-003
+ 868.61831831831842 , 107389519198.85629 , 1.8902577332907205E-003
+ 868.61961961961970 , 93997265628.639145 , 1.6545266136935950E-003
+ 868.62092092092087 , 84030016174.640472 , 1.4790826943665038E-003
+ 868.62222222222226 , 76265244283.606583 , 1.3424069714176301E-003
+ 868.62352352352355 , 70321693438.576767 , 1.2377885204023617E-003
+ 868.62482482482494 , 65528069946.178551 , 1.1534111873705308E-003
+ 868.62612612612622 , 61505334103.013000 , 1.0826030804446216E-003
+ 868.62742742742739 , 58035576392.338577 , 1.0215285373746459E-003
+ 868.62872872872879 , 54974248580.249580 , 9.6764321085569187E-004
+ 868.63003003003007 , 52172879438.501045 , 9.1833370552814612E-004
+ 868.63133133133147 , 49647713991.874374 , 8.7388595438498274E-004
+ 868.63263263263264 , 47362195044.891708 , 8.3365648240848317E-004
+ 868.63393393393392 , 45248701905.556168 , 7.9645502520056641E-004
+ 868.63523523523531 , 43285284348.510323 , 7.6189520751393167E-004
+ 868.63653653653660 , 41455768918.088943 , 7.2969234695085573E-004
+ 868.63783783783788 , 39724429821.136459 , 6.9921760065962699E-004
+ 868.63913913913916 , 38096961612.600273 , 6.7057119630397775E-004
+ 868.64044044044044 , 36604976649.414803 , 6.4430957918596809E-004
+ 868.64174174174184 , 35205305809.628342 , 6.1967288934860988E-004
+ 868.64304304304301 , 33890080676.795242 , 5.9652261536859326E-004
+ 868.64434434434440 , 32653284715.971462 , 5.7475285980622772E-004
+ 868.64564564564569 , 31481037227.187393 , 5.5411929733485601E-004
+ 868.64694694694697 , 30356057385.116322 , 5.3431774544761756E-004
+ 868.64824824824825 , 29325342914.431435 , 5.1617545895404785E-004
+ 868.64954954954953 , 28352772960.609127 , 4.9905664699236962E-004
+ 868.65085085085093 , 27433319925.165600 , 4.8287279885159758E-004
+ 868.65215215215221 , 26563707820.818630 , 4.6756625693443872E-004
+ 868.65345345345349 , 25740186863.513290 , 4.5307102021440343E-004
+ 868.65475475475478 , 24934421717.914452 , 4.3888832764569851E-004
+ 868.65605605605606 , 24197476888.734535 , 4.2591701444907491E-004
+ 868.65735735735745 , 23498538627.830097 , 4.1361470584393921E-004
+ 868.65865865865874 , 22834476280.402802 , 4.0192628548369662E-004
+ 868.65995995996002 , 22203140252.596500 , 3.9081391747763927E-004
+ 868.66126126126130 , 21602583387.673603 , 3.8024333160613941E-004
+ 868.66256256256258 , 21015084457.711502 , 3.6990260061088088E-004
+ 868.66386386386398 , 20468571269.094921 , 3.6028330270651023E-004
+ 868.66516516516515 , 19951611021.819717 , 3.5118420761709576E-004
+ 868.66646646646655 , 19458604707.871685 , 3.4250675632325090E-004
+ 868.66776776776783 , 18987818709.353916 , 3.3422042838813831E-004
+ 868.66906906906911 , 18538326596.809864 , 3.2630892204120514E-004
+ 868.67037037037039 , 18099575221.100269 , 3.1858648602564837E-004
+ 868.67167167167167 , 17684491517.360054 , 3.1128064959979652E-004
+ 868.67297297297307 , 17293444730.787231 , 3.0439792182869306E-004
+ 868.67427427427435 , 16919755960.633875 , 2.9782074248433521E-004
+ 868.67557557557552 , 16561627408.189770 , 2.9151745300073711E-004
+ 868.67687687687692 , 16218815308.103163 , 2.8548377120984794E-004
+ 868.67817817817820 , 15885502014.397163 , 2.7961729929017263E-004
+ 868.67947947947960 , 15564966557.828897 , 2.7397574698720541E-004
+ 868.68078078078076 , 15264626549.326426 , 2.6868968351918728E-004
+ 868.68208208208205 , 14977650466.978582 , 2.6363887244080342E-004
+ 868.68338338338344 , 14701812841.093300 , 2.5878411652367734E-004
+ 868.68468468468473 , 14437425021.426537 , 2.5413090895410391E-004
+ 868.68598598598601 , 14181770354.016914 , 2.4963143469595289E-004
+ 868.68728728728729 , 13931973251.397091 , 2.4523507272454384E-004
+ 868.68858858858857 , 13699662670.049442 , 2.4114651690727154E-004
+ 868.68988988988997 , 13477881294.902140 , 2.3724331990947084E-004
+ 868.69119119119125 , 13264621822.611538 , 2.3349012521433531E-004
+ 868.69249249249253 , 13060078313.053471 , 2.2989035721117100E-004
+ 868.69379379379382 , 12863761277.630592 , 2.2643540501112320E-004
+ 868.69509509509521 , 12668858862.397066 , 2.2300536410893086E-004
+ 868.69639639639649 , 12489468016.110720 , 2.1984836761807338E-004
+ 868.69769769769766 , 12318505248.158209 , 2.1683974624605014E-004
+ 868.69899899899906 , 12154644336.870924 , 2.1395614030149840E-004
+ 868.70030030030034 , 11997470600.550341 , 2.1119024839941599E-004
+ 868.70160160160174 , 11847140831.829294 , 2.0854483905435986E-004
+ 868.70290290290291 , 11698510968.002798 , 2.0592936708462421E-004
+ 868.70420420420419 , 11560777390.312679 , 2.0350570317579329E-004
+ 868.70550550550558 , 11430999060.729530 , 2.0122209187000206E-004
+ 868.70680680680687 , 11307673473.889618 , 1.9905208217464696E-004
+ 868.70810810810815 , 11189488257.427614 , 1.9697255706977904E-004
+ 868.70940940940943 , 11077114681.074345 , 1.9499534600988806E-004
+ 868.71071071071071 , 10967150438.511425 , 1.9306056484644707E-004
+ 868.71201201201211 , 10864500885.882627 , 1.9125455134793361E-004
+ 868.71331331331328 , 10769498074.240314 , 1.8958316001104741E-004
+ 868.71461461461467 , 10680964243.064684 , 1.8802567221065783E-004
+ 868.71591591591596 , 10596322107.817608 , 1.8653668631562307E-004
+ 868.71721721721724 , 10516852828.084122 , 1.8513877450209880E-004
+ 868.71851851851864 , 10440463087.818880 , 1.8379509491005334E-004
+ 868.71981981981980 , 10368926377.381348 , 1.8253685775879887E-004
+ 868.72112112112120 , 10304760386.817137 , 1.8140838415723321E-004
+ 868.72242242242248 , 10247582219.567963 , 1.8040296639279711E-004
+ 868.72372372372377 , 10193370171.731329 , 1.7944975607933890E-004
+ 868.72502502502505 , 10143950404.088285 , 1.7858092613224068E-004
+ 868.72632632632633 , 10098345391.033924 , 1.7777927507870063E-004
+ 868.72762762762773 , 10055933647.303759 , 1.7703385940939393E-004
+ 868.72892892892901 , 10021101488.951321 , 1.7642188996235068E-004
+ 868.73023023023029 , 9993004509.9383087 , 1.7592853459291310E-004
+ 868.73153153153157 , 9968524324.7147846 , 1.7549885821951044E-004
+ 868.73283283283286 , 9948264920.7768974 , 1.7514350246220861E-004
+ 868.73413413413425 , 9932612457.0173550 , 1.7486927737257916E-004
+ 868.73543543543542 , 9919210925.4841194 , 1.7463471096191045E-004
+ 868.73673673673682 , 9913774376.6296597 , 1.7454038335429538E-004
+ 868.73803803803810 , 9915017014.7901115 , 1.7456369040164745E-004
+ 868.73933933933938 , 9921228081.8727188 , 1.7467449480326763E-004
+ 868.74064064064066 , 9931177803.5174713 , 1.7485113267252033E-004
+ 868.74194194194195 , 9946277402.5982132 , 1.7511846903253643E-004
+ 868.74324324324334 , 9964526517.4627323 , 1.7544129474803189E-004
+ 868.74454454454462 , 9990187923.8006763 , 1.7589464332876280E-004
+ 868.74584584584579 , 10023052801.545013 , 1.7647486238018387E-004
+ 868.74714714714719 , 10063189213.273033 , 1.7718315766700730E-004
+ 868.74844844844847 , 10106630429.899559 , 1.7794964838606551E-004
+ 868.74974974974987 , 10156055011.085039 , 1.7882152472934885E-004
+ 868.75105105105115 , 10210161367.070370 , 1.7977588031920666E-004
+ 868.75235235235232 , 10271550986.759171 , 1.8085850599374733E-004
+ 868.75365365365371 , 10340852125.903893 , 1.8208047429368261E-004
+ 868.75495495495500 , 10421117653.474302 , 1.8349557972901874E-004
+ 868.75625625625639 , 10504278767.161356 , 1.8496167544324927E-004
+ 868.75755755755756 , 10594850328.536140 , 1.8655830036805177E-004
+ 868.75885885885884 , 10692124685.616602 , 1.8827300606461477E-004
+ 868.76016016016024 , 10797496397.544147 , 1.9013033921456713E-004
+ 868.76146146146152 , 10912364466.947510 , 1.9215493414792936E-004
+ 868.76276276276280 , 11041847238.952892 , 1.9443697686145583E-004
+ 868.76406406406409 , 11176044104.443798 , 1.9680204958587720E-004
+ 868.76536536536537 , 11319253294.173065 , 1.9932587438288574E-004
+ 868.76666666666677 , 11472131046.141466 , 2.0202002402499035E-004
+ 868.76796796796793 , 11635153384.983892 , 2.0489288087915196E-004
+ 868.76926926926933 , 11810880160.702913 , 2.0798951506944654E-004
+ 868.77057057057061 , 12004439445.127028 , 2.1140028758742774E-004
+ 868.77187187187189 , 12208549719.350195 , 2.1499692088053349E-004
+ 868.77317317317318 , 12423479966.255983 , 2.1878415398069153E-004
+ 868.77447447447446 , 12652649823.843027 , 2.2282223588426575E-004
+ 868.77577577577586 , 12895953177.261314 , 2.2710930926675389E-004
+ 868.77707707707714 , 13157097141.745317 , 2.3171064269390869E-004
+ 868.77837837837853 , 13440986796.157234 , 2.3671267179117348E-004
+ 868.77967967967970 , 13745640721.575254 , 2.4208049038081548E-004
+ 868.78098098098098 , 14064096381.089497 , 2.4769144031060457E-004
+ 868.78228228228238 , 14403921292.738182 , 2.5367884099827760E-004
+ 868.78358358358366 , 14765619272.585093 , 2.6005158203250891E-004
+ 868.78488488488495 , 15153056041.403822 , 2.6687773232556098E-004
+ 868.78618618618623 , 15571020257.173229 , 2.7424166799754356E-004
+ 868.78748748748751 , 16027764344.537649 , 2.8228877435217343E-004
+ 868.78878878878891 , 16503221588.598026 , 2.9066553790871720E-004
+ 868.79009009009008 , 17011995976.611107 , 2.9962923798723635E-004
+ 868.79139139139147 , 17556023110.461842 , 3.0921398526651006E-004
+ 868.79269269269275 , 18139650309.029064 , 3.1949634412635009E-004
+ 868.79399399399404 , 18766431900.853588 , 3.3053893461256324E-004
+ 868.79529529529532 , 19465348412.756306 , 3.4285231052268319E-004
+ 868.79659659659660 , 20192912246.463562 , 3.5567035446947541E-004
+ 868.79789789789800 , 20977777372.522678 , 3.6949786229396658E-004
+ 868.79919919919928 , 21826834300.403133 , 3.8445623305399606E-004
+ 868.80050050050045 , 22750695362.323208 , 4.0073241019750183E-004
+ 868.80180180180184 , 23763740468.172653 , 4.1857971846852256E-004
+ 868.80310310310313 , 24920753204.304859 , 4.3896328461104237E-004
+ 868.80440440440452 , 26200251647.943729 , 4.6150466346076094E-004
+ 868.80570570570569 , 27659600278.059208 , 4.8721444078245592E-004
+ 868.80700700700709 , 29376837548.846878 , 5.1746742211715403E-004
+ 868.80830830830837 , 31457431944.079021 , 5.5412163121797576E-004
+ 868.80960960960965 , 34059388899.132984 , 5.9996062553177533E-004
+ 868.81091091091105 , 37501462761.384399 , 6.6059988590996376E-004
+ 868.81221221221222 , 42086713754.632317 , 7.4137840067558635E-004
+ 868.81351351351361 , 48245675087.946297 , 8.4988083972080885E-004
+ 868.81481481481489 , 56727230068.263626 , 9.9930022612430315E-004
+ 868.81611611611618 , 68490205028.474701 , 1.2065281313803694E-003
+ 868.81741741741746 , 84825531688.768906 , 1.4943067781711397E-003
+ 868.81871871871874 , 107810007903.78561 , 1.8992229639737280E-003
+ 868.82002002002014 , 140035842507.20056 , 2.4669434284204203E-003
+ 868.82132132132142 , 183213084506.15286 , 3.2275939707370532E-003
+ 868.82262262262259 , 241255525233.76498 , 4.2501235483646807E-003
+ 868.82392392392399 , 318179691856.75256 , 5.6052910110955768E-003
+ 868.82522522522527 , 418580037277.19556 , 7.3740364561993496E-003
+ 868.82652652652666 , 548298029801.57355 , 9.6592685812344949E-003
+ 868.82782782782783 , 717438439079.59277 , 1.2639002321260712E-002
+ 868.82912912912911 , 922341652647.21143 , 1.6248766570935960E-002
+ 868.83043043043051 , 1171809176878.9185 , 2.0643616779027901E-002
+ 868.83173173173179 , 1469818259173.8740 , 2.5893619806011056E-002
+ 868.83303303303308 , 1818916958943.3911 , 3.2043664601463434E-002
+ 868.83433433433436 , 2219674340132.7471 , 3.9103776323040171E-002
+ 868.83563563563564 , 2685920044340.2070 , 4.7317590684384861E-002
+ 868.83693693693704 , 3184979797269.1792 , 5.6109487560664723E-002
+ 868.83823823823832 , 3718558471331.6084 , 6.5509501556563807E-002
+ 868.83953953953960 , 4276162333700.8945 , 7.5332765409630978E-002
+ 868.84084084084088 , 4842933445290.9766 , 8.5317527965175319E-002
+ 868.84214214214217 , 5401359750459.9863 , 9.5155280711575793E-002
+ 868.84344344344356 , 5943752861730.6699 , 0.10471057793526982
+ 868.84474474474473 , 6427383663665.8906 , 0.11323066416447478
+ 868.84604604604613 , 6835249209247.8730 , 0.12041599981710402
+ 868.84734734734741 , 7154345305230.9531 , 0.12603749104638484
+ 868.84864864864869 , 7369299670559.7812 , 0.12982432557929072
+ 868.84994994994997 , 7469238007811.8379 , 0.13158493176540725
+ 868.85125125125126 , 7473270275646.0449 , 0.13165596825232029
+ 868.85255255255265 , 7381209948566.7852 , 0.13003414903508934
+ 868.85385385385393 , 7173592543139.1953 , 0.12637656983732715
+ 868.85515515515522 , 6860990696841.2520 , 0.12086948798747663
+ 868.85645645645650 , 6458547489966.8584 , 0.11377967794131896
+ 868.85775775775778 , 5984601315035.2061 , 0.10543020570962776
+ 868.85905905905918 , 5454128484860.6338 , 9.6084907826865837E-002
+ 868.86036036036035 , 4883214843986.7285 , 8.6027167353471545E-002
+ 868.86166166166174 , 4316289366423.5190 , 7.6039686036387749E-002
+ 868.86296296296302 , 3757509013380.8589 , 6.6195696737509233E-002
+ 868.86426426426431 , 3221905365106.4634 , 5.6760009627878159E-002
+ 868.86556556556559 , 2721423602608.4019 , 4.7943062012449515E-002
+ 868.86686686686687 , 2264059108728.8237 , 3.9885707928878862E-002
+ 868.86816816816827 , 1844875717210.8357 , 3.2500987324577339E-002
+ 868.86946946946955 , 1492272114165.1404 , 2.6289197623144061E-002
+ 868.87077077077083 , 1190865994674.1050 , 2.0979349968534549E-002
+ 868.87207207207211 , 938136200877.63379 , 1.6527031840694713E-002
+ 868.87337337337340 , 729782757761.24219 , 1.2856504170353425E-002
+ 868.87467467467479 , 561979368436.51245 , 9.9003252229678835E-003
+ 868.87597597597608 , 425898329679.17554 , 7.5029964324650851E-003
+ 868.87727727727724 , 322969618608.81421 , 5.6897095935310362E-003
+ 868.87857857857864 , 244600269955.91086 , 4.3090831117134631E-003
+ 868.87987987987992 , 185384958999.55423 , 3.2658918089061295E-003
+ 868.88118118118132 , 141270877302.39047 , 2.4887376738825205E-003
+ 868.88248248248249 , 108820595081.69727 , 1.9170637731657401E-003
+ 868.88378378378377 , 84844240469.728928 , 1.4946743876156955E-003
+ 868.88508508508517 , 67811894097.480659 , 1.1946170478641857E-003
+ 868.88638638638645 , 55752854879.447823 , 9.8217406764975813E-004
+ 868.88768768768773 , 47045297863.928688 , 8.2877388590157236E-004
+ 868.88898898898901 , 40712369505.514641 , 7.1720735080676795E-004
+ 868.89029029029041 , 36041893344.215149 , 6.3492809955684540E-004
+ 868.89159159159169 , 32487515707.582672 , 5.7231106639880154E-004
+ 868.89289289289286 , 29732675374.099621 , 5.2377941717989733E-004
+ 868.89419419419426 , 27581606848.151592 , 4.8588436656591836E-004
+ 868.89549549549554 , 25801752104.805599 , 4.5452895869858314E-004
+ 868.89679679679693 , 24284972615.463539 , 4.2780812908639073E-004
+ 868.89809809809822 , 22959993211.799561 , 4.0446621997540115E-004
+ 868.89939939939939 , 21772454023.490219 , 3.8354558254692785E-004
+ 868.90070070070078 , 20676530896.423000 , 3.6423893630451511E-004
+ 868.90200200200206 , 19702936650.796459 , 3.4708734661843837E-004
+ 868.90330330330346 , 18804345049.961407 , 3.3125707092100404E-004
+ 868.90460460460463 , 17970299947.731617 , 3.1656390853305506E-004
+ 868.90590590590591 , 17193793985.304909 , 3.0288440290637337E-004
+ 868.90720720720731 , 16468673661.584999 , 2.9011015198655778E-004
+ 868.90850850850859 , 15769327142.091814 , 2.7778995454376317E-004
+ 868.90980980980987 , 15134788701.373180 , 2.6661147435298776E-004
+ 868.91111111111115 , 14540015888.265177 , 2.5613354054273706E-004
+ 868.91241241241244 , 13980712618.290585 , 2.4628047256896533E-004
+ 868.91371371371383 , 13454495695.841368 , 2.3701028064297160E-004
+ 868.91501501501500 , 12958839429.084829 , 2.2827847061847556E-004
+ 868.91631631631640 , 12480344375.919830 , 2.1984898688292068E-004
+ 868.91761761761768 , 12036497860.535080 , 2.1202990227576858E-004
+ 868.91891891891896 , 11620937121.635294 , 2.0470912455262927E-004
+ 868.92022022022024 , 11227643201.986500 , 1.9778062041353196E-004
+ 868.92152152152153 , 10855208147.294586 , 1.9121958364813325E-004
+ 868.92282282282292 , 10502309255.122625 , 1.8500271054057836E-004
+ 868.92412412412421 , 10161907734.825378 , 1.7900600131759450E-004
+ 868.92542542542549 , 9839535644.4906712 , 1.7332691383197278E-004
+ 868.92672672672677 , 9538218370.4710484 , 1.6801874609698086E-004
+ 868.92802802802805 , 9251418446.5841579 , 1.6296632936719022E-004
+ 868.92932932932945 , 8978185105.3350525 , 1.5815291412708826E-004
+ 868.93063063063073 , 8717914513.2377262 , 1.5356785871272006E-004
+ 868.93193193193201 , 8467229493.3833017 , 1.4915167035251176E-004
+ 868.93323323323330 , 8225051436.2953215 , 1.4488534728568432E-004
+ 868.93453453453458 , 7999170565.4736938 , 1.4090612928537629E-004
+ 868.93583583583597 , 7783115410.2738752 , 1.3710000944208253E-004
+ 868.93713713713714 , 7576153177.3704185 , 1.3345408043268010E-004
+ 868.93843843843854 , 7378141994.4276438 , 1.2996583701093943E-004
+ 868.93973973973982 , 7187863716.1753817 , 1.2661382244749276E-004
+ 868.94104104104110 , 7000550831.3818188 , 1.2331404788712400E-004
+ 868.94234234234239 , 6826323243.9771423 , 1.2024479489839625E-004
+ 868.94364364364367 , 6658997447.7603083 , 1.1729712915334299E-004
+ 868.94494494494506 , 6497990421.8837576 , 1.1446078278848296E-004
+ 868.94624624624635 , 6343370327.3318901 , 1.1173695046957288E-004
+ 868.94754754754752 , 6194630117.3824539 , 1.0911670235291677E-004
+ 868.94884884884891 , 6047512253.2792673 , 1.0652503396569292E-004
+ 868.95015015015019 , 5909297626.8016291 , 1.0409021222071703E-004
+ 868.95145145145159 , 5776720171.5177174 , 1.0175469909583164E-004
+ 868.95275275275276 , 5648736308.2800112 , 9.9500112286565726E-005
+ 868.95405405405404 , 5525377286.5753727 , 9.7326998452607616E-005
+ 868.95535535535544 , 5406381224.4781713 , 9.5230744738416804E-005
+ 868.95665665665672 , 5289137451.8156576 , 9.3165360041198332E-005
+ 868.95795795795800 , 5177064212.3069944 , 9.1191063304770566E-005
+ 868.95925925925928 , 5070038991.8583221 , 8.9305696220329597E-005
+ 868.96056056056057 , 4966454038.1710129 , 8.7480936759158249E-005
+ 868.96186186186196 , 4866276662.8525743 , 8.5716207195013890E-005
+ 868.96316316316324 , 4769433366.1743488 , 8.4010211568605819E-005
+ 868.96446446446453 , 4674426862.2277966 , 8.2336573720601469E-005
+ 868.96576576576581 , 4582088181.0450277 , 8.0709933853187978E-005
+ 868.96706706706721 , 4494317338.7888250 , 7.9163764413100215E-005
+ 868.96836836836849 , 4409189876.3070660 , 7.7664163322606287E-005
+ 868.96966966966966 , 4326599230.2556677 , 7.6209253180703197E-005
+ 868.97097097097105 , 4246622668.6754136 , 7.4800392488095032E-005
+ 868.97227227227233 , 4168524581.1275439 , 7.3424623936452357E-005
+ 868.97357357357373 , 4091393353.4979138 , 7.2065887701766094E-005
+ 868.97487487487490 , 4018424876.5738182 , 7.0780485551221947E-005
+ 868.97617617617618 , 3947534768.4429388 , 6.9531697482859767E-005
+ 868.97747747747758 , 3878541090.0791731 , 6.8316319780620482E-005
+ 868.97877877877886 , 3811645155.5461431 , 6.7137894839615971E-005
+ 868.98008008008014 , 3746618252.5962205 , 6.5992395752731165E-005
+ 868.98138138138142 , 3681445858.6052103 , 6.4844332842360110E-005
+ 868.98268268268271 , 3620035324.9590383 , 6.3762541620253859E-005
+ 868.98398398398410 , 3560302776.1710601 , 6.2710310624580556E-005
+ 868.98528528528527 , 3502011749.3904471 , 6.1683476461444150E-005
+ 868.98658658658667 , 3445413993.0969620 , 6.0686469571760823E-005
+ 868.98788788788795 , 3390310693.4457083 , 5.9715789601028692E-005
+ 868.98918918918923 , 3335363984.2865238 , 5.8747867607043966E-005
+ 868.99049049049063 , 3282774511.0247083 , 5.7821472195445824E-005
+ 868.99179179179180 , 3231898162.3024569 , 5.6925256115200081E-005
+ 868.99309309309319 , 3182186385.1269498 , 5.6049557313635099E-005
+ 868.99439439439448 , 3133794524.6816545 , 5.5197109541945671E-005
+ 868.99569569569576 , 3086638654.3299375 , 5.4366434897423244E-005
+ 868.99699699699704 , 3039860738.2122378 , 5.3542418025993219E-005
+ 868.99829829829832 , 2994406252.7456036 , 5.2741715319022327E-005
+ 868.99959959959972 , 2950668058.0945225 , 5.1971247770630308E-005
+ 869.00090090090100 , 2907888794.4763260 , 5.1217674264047910E-005
+ 869.00220220220228 , 2866134961.0725660 , 5.0482164826683398E-005
+ 869.00350350350357 , 2825422983.9586921 , 4.9765008115542725E-005
+ 869.00480480480485 , 2785250286.7690210 , 4.9057351283826681E-005
+ 869.00610610610624 , 2745635526.6101551 , 4.8359523019204371E-005
+ 869.00740740740741 , 2707718513.2135978 , 4.7691603267014523E-005
+ 869.00870870870881 , 2670605957.1650181 , 4.7037855771233164E-005
+ 869.01001001001009 , 2634283067.9406400 , 4.6398019801860657E-005
+ 869.01131131131137 , 2598854382.4237690 , 4.5773935054749745E-005
+ 869.01261261261266 , 2564081359.3125958 , 4.5161400528510271E-005
+ 869.01391391391394 , 2529297376.4123836 , 4.4548672398557665E-005
+ 869.01521521521533 , 2496178062.6224022 , 4.3965270093853238E-005
+ 869.01651651651662 , 2463745965.2406211 , 4.3393974230874524E-005
+ 869.01781781781779 , 2431912296.0183873 , 4.2833221648022244E-005
+ 869.01911911911918 , 2400859236.2441740 , 4.2286218822846041E-005
+ 869.02042042042046 , 2370454462.3279386 , 4.1750636303379580E-005
+ 869.02172172172186 , 2339885253.5508771 , 4.1212156458280743E-005
+ 869.02302302302314 , 2310668354.8331838 , 4.0697499669388764E-005
+ 869.02432432432431 , 2282134225.9507785 , 4.0194870704729211E-005
+ 869.02562562562571 , 2254055322.7907267 , 3.9700262738303935E-005
+ 869.02692692692699 , 2226654986.4905105 , 3.9217606806092503E-005
+ 869.02822822822839 , 2199803842.1969395 , 3.8744625416906408E-005
+ 869.02952952952955 , 2172955833.3245177 , 3.8271698807867373E-005
+ 869.03083083083084 , 2146929702.5942979 , 3.7813250710393071E-005
+ 869.03213213213223 , 2121654242.9174886 , 3.7368026679913784E-005
+ 869.03343343343352 , 2096774078.7846518 , 3.6929767455323092E-005
+ 869.03473473473480 , 2072432979.5200427 , 3.6501003488626260E-005
+ 869.03603603603608 , 2048581012.1903276 , 3.6080855675383542E-005
+ 869.03733733733736 , 2024862977.9713233 , 3.5663066925414850E-005
+ 869.03863863863876 , 2001551847.8073919 , 3.5252446151169747E-005
+ 869.03993993993993 , 1979037394.3713820 , 3.4855859951922400E-005
+ 869.04124124124132 , 1956872553.5355535 , 3.4465433396873460E-005
+ 869.04254254254261 , 1935128702.3284924 , 3.4082422718233562E-005
+ 869.04384384384389 , 1913827212.9162803 , 3.3707203963550945E-005
+ 869.04514514514517 , 1892761623.8999755 , 3.3336140649788441E-005
+ 869.04644644644645 , 1871777479.7934222 , 3.2966511751146860E-005
+ 869.04774774774785 , 1851619420.3833239 , 3.2611435532598271E-005
+ 869.04904904904913 , 1831776045.7941790 , 3.2261903304027235E-005
+ 869.05035035035053 , 1812252933.1454518 , 3.1918013109906676E-005
+ 869.05165165165170 , 1793135523.0143976 , 3.1581268761691194E-005
+ 869.05295295295298 , 1774333248.7253032 , 3.1250075764758339E-005
+ 869.05425425425437 , 1755356879.8625150 , 3.0915815389311197E-005
+ 869.05555555555566 , 1737223398.5722775 , 3.0596403733939133E-005
+ 869.05685685685694 , 1719377845.2931848 , 3.0282064392955844E-005
+ 869.05815815815822 , 1701766036.8019063 , 2.9971843526246724E-005
+ 869.05945945945950 , 1684531014.7880232 , 2.9668258865708967E-005
+ 869.06076076076090 , 1667581156.7574775 , 2.9369697568260445E-005
+ 869.06206206206207 , 1650530229.5966740 , 2.9069355399164686E-005
+ 869.06336336336346 , 1634055831.5424452 , 2.8779169557020453E-005
+ 869.06466466466475 , 1617938158.2216516 , 2.8495267769048766E-005
+ 869.06596596596603 , 1601985122.8097303 , 2.8214267468771023E-005
+ 869.06726726726731 , 1586380275.6851540 , 2.7939399442073898E-005
+ 869.06856856856859 , 1571025375.2051156 , 2.7668934351253147E-005
+ 869.06986986986999 , 1555664307.7225266 , 2.7398360293664794E-005
+ 869.07117117117127 , 1540627757.0837178 , 2.7133502904036634E-005
+ 869.07247247247244 , 1525998009.2042851 , 2.6875811810214408E-005
+ 869.07377377377384 , 1511522526.0828564 , 2.6620839146699291E-005
+ 869.07507507507512 , 1497322352.3952320 , 2.6370715482418205E-005
+ 869.07637637637652 , 1483359179.0720479 , 2.6124766430706040E-005
+ 869.07767767767768 , 1469467064.4925547 , 2.5880068912019882E-005
+ 869.07897897897908 , 1455694218.3476465 , 2.5637472235808982E-005
+ 869.08028028028036 , 1442366200.2558169 , 2.5402711763394607E-005
+ 869.08158158158164 , 1429185312.6069372 , 2.5170543749494894E-005
+ 869.08288288288304 , 1416215499.1624184 , 2.4942093679051047E-005
+ 869.08418418418421 , 1403472900.6991432 , 2.4717645606579713E-005
+ 869.08548548548561 , 1390864167.9125979 , 2.4495555550319566E-005
+ 869.08678678678689 , 1378207367.6887431 , 2.4272618411765035E-005
+ 869.08808808808817 , 1366023777.7135825 , 2.4058017501831811E-005
+ 869.08938938938945 , 1353982636.8326025 , 2.3845926317203301E-005
+ 869.09069069069074 , 1342095731.7565224 , 2.3636552279117128E-005
+ 869.09199199199213 , 1330428683.9172938 , 2.3431050413235374E-005
+ 869.09329329329341 , 1318926614.7631555 , 2.3228454695997812E-005
+ 869.09459459459458 , 1307299680.4557996 , 2.3023658973931073E-005
+ 869.09589589589598 , 1296106954.5715072 , 2.2826512404970411E-005
+ 869.09719719719726 , 1285073731.2022882 , 2.2632175750514551E-005
+ 869.09849849849866 , 1274144278.6493580 , 2.2439667679554474E-005
+ 869.09979979979983 , 1263429189.5290885 , 2.2250934811298322E-005
+ 869.10110110110111 , 1252860482.8586574 , 2.2064780499028026E-005
+ 869.10240240240250 , 1242235390.1159861 , 2.1877632588085824E-005
+ 869.10370370370379 , 1231879289.3788884 , 2.1695223240966628E-005
+ 869.10500500500507 , 1221740942.0385592 , 2.1516649793538342E-005
+ 869.10630630630635 , 1211662001.9515479 , 2.1339123804417314E-005
+ 869.10760760760763 , 1201792786.6406476 , 2.1165291139721735E-005
+ 869.10890890890903 , 1192054162.6867468 , 2.0993758852353883E-005
+ 869.11021021021031 , 1182316529.1820018 , 2.0822243778424701E-005
+ 869.11151151151159 , 1172709543.3597505 , 2.0653030081502881E-005
+ 869.11281281281288 , 1163354740.4671810 , 2.0488258840741637E-005
+ 869.11411411411416 , 1154062492.6962416 , 2.0324590266407777E-005
+ 869.11541541541555 , 1144933731.3266509 , 2.0163800928868780E-005
+ 869.11671671671672 , 1135936180.7369609 , 2.0005322680541184E-005
+ 869.11801801801812 , 1126987705.1655283 , 1.9847708761140112E-005
+ 869.11931931931940 , 1118053927.2039769 , 1.9690353548672444E-005
+ 869.12062062062068 , 1109399947.1082854 , 1.9537927295618204E-005
+ 869.12192192192197 , 1100812194.2460601 , 1.9386668172633200E-005
+ 869.12322322322325 , 1092346221.2999246 , 1.9237553996448118E-005
+ 869.12452452452465 , 1084012671.4706802 , 1.9090772084049870E-005
+ 869.12582582582593 , 1075768478.2727156 , 1.8945564151060247E-005
+ 869.12712712712721 , 1067441766.3909642 , 1.8798902285511753E-005
+ 869.12842842842849 , 1059416818.7732395 , 1.8657556371862746E-005
+ 869.12972972972977 , 1051462104.1702398 , 1.8517447948474811E-005
+ 869.13103103103117 , 1043591476.3344232 , 1.8378820847579184E-005
+ 869.13233233233234 , 1035854894.7527258 , 1.8242554437980745E-005
+ 869.13363363363374 , 1028210923.6297450 , 1.8107919341816678E-005
+ 869.13493493493502 , 1020494309.3048909 , 1.7972004300153322E-005
+ 869.13623623623630 , 1013005366.0129334 , 1.7840099927092648E-005
+ 869.13753753753758 , 1005621305.3656332 , 1.7710043271583414E-005
+ 869.13883883883886 , 998287208.64964437 , 1.7580867178288390E-005
+ 869.14014014014026 , 991089050.98880911 , 1.7454084969014405E-005
+ 869.14144144144154 , 983974571.17646563 , 1.7328776718896487E-005
+ 869.14274274274283 , 976830468.64936483 , 1.7202946422508386E-005
+ 869.14404404404411 , 969816136.08893704 , 1.7079402089891639E-005
+ 869.14534534534539 , 962948047.05253112 , 1.6958433949142027E-005
+ 869.14664664664679 , 956098986.37082803 , 1.6837801728901351E-005
+ 869.14794794794807 , 949387918.86206138 , 1.6719599440669903E-005
+ 869.14924924924924 , 942752679.52776802 , 1.6602732834584819E-005
+ 869.15055055055063 , 936124668.27035451 , 1.6485993389703042E-005
+ 869.15185185185192 , 929542624.28606987 , 1.6370063572974854E-005
+ 869.15315315315331 , 923131645.88025546 , 1.6257147232976953E-005
+ 869.15445445445448 , 916743858.05809939 , 1.6144639979980489E-005
+ 869.15575575575576 , 910463954.07478940 , 1.6034032576715139E-005
+ 869.15705705705716 , 904263702.27406144 , 1.5924828072767916E-005
+ 869.15835835835844 , 898102246.87679565 , 1.5816306876060003E-005
+ 869.15965965965972 , 891914992.51774061 , 1.5707331016583522E-005
+ 869.16096096096101 , 885918684.98920846 , 1.5601718889396317E-005
+ 869.16226226226240 , 879952159.35277379 , 1.5496631784333469E-005
+ 869.16356356356368 , 874063560.06128454 , 1.5392917130908538E-005
+ 869.16486486486485 , 868259187.87993431 , 1.5290685822915617E-005
+ 869.16616616616625 , 862516656.24052835 , 1.5189543797640164E-005
+ 869.16746746746753 , 856698833.88876784 , 1.5087075225913787E-005
+ 869.16876876876893 , 851076417.07031667 , 1.4988048943602050E-005
+ 869.17007007007021 , 845494115.65019262 , 1.4889729558328601E-005
+ 869.17137137137138 , 839962310.96317732 , 1.4792299732448239E-005
+ 869.17267267267277 , 834519141.73567343 , 1.4696430775615628E-005
+ 869.17397397397406 , 829132476.49298406 , 1.4601557095927625E-005
+ 869.17527527527545 , 823703312.27345586 , 1.4505934567267507E-005
+ 869.17657657657662 , 818397632.52607501 , 1.4412487308291777E-005
+ 869.17787787787790 , 813166609.21128178 , 1.4320355296133497E-005
+ 869.17917917917930 , 807960946.73354125 , 1.4228670333802121E-005
+ 869.18048048048058 , 802848135.36726820 , 1.4138620380557629E-005
+ 869.18178178178186 , 797787072.78901803 , 1.4049481940144023E-005
+ 869.18308308308315 , 452524662.19192129 , 7.9720914447604020E-006
+ 869.18438438438443 , 448967540.50749278 , 7.9094259113261658E-006
+ 869.18568568568583 , 445507647.61432624 , 7.8484732498738663E-006
+ 869.18698698698699 , 442087388.73179370 , 7.7882188176751193E-006
+ 869.18828828828839 , 438706163.66169447 , 7.7286520410853498E-006
+ 869.18958958958967 , 435363383.37159032 , 7.6697625431663369E-006
+ 869.19089089089096 , 432022584.03820366 , 7.6109079436062867E-006
+ 869.19219219219224 , 428679267.60341477 , 7.5520090004684570E-006
+ 869.19349349349352 , 425450738.28365970 , 7.4951322529238962E-006
+ 869.19479479479492 , 422258356.41821527 , 7.4388923122438804E-006
+ 869.19609609609620 , 419101586.92254567 , 7.3832797518861532E-006
+ 869.19739739739748 , 415979904.47574484 , 7.3282853173135578E-006
+ 869.19869869869876 , 412882339.11811322 , 7.2737157516073510E-006
+ 869.20000000000005 , 409735232.67497045 , 7.2182734244873126E-006
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/analyze.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/analyze.ini
new file mode 100644
index 000000000..87ca3c7ce
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/analyze.ini
@@ -0,0 +1,5 @@
+compare_data_file_name = Radiation_Emission_Absorption.csv
+compare_data_file_reference = Radiation_Emission_Absorption_reference.csv
+compare_data_file_tolerance = 1E-5
+compare_data_file_tolerance_type = relative
+
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/command_line.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/command_line.ini
new file mode 100644
index 000000000..0100a3584
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/command_line.ini
@@ -0,0 +1 @@
+MPI=1
diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2/cube_mesh.h5 b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/cube_mesh.h5
similarity index 86%
rename from regressioncheck/NIG_Reservoir/RELAX_N2/cube_mesh.h5
rename to regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/cube_mesh.h5
index cebf62bca..5a856e349 100644
Binary files a/regressioncheck/NIG_Reservoir/RELAX_N2/cube_mesh.h5 and b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/cube_mesh.h5 differ
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/parameter.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/parameter.ini
new file mode 100644
index 000000000..8ef903887
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/parameter.ini
@@ -0,0 +1,101 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = RadLas = T
+CalcKineticEnergy = TRUE
+CalcTemp = TRUE
+CalcNumSpec = TRUE
+CalcInternalEnergy = TRUE
+CalcReacRates=FALSE ! Compile with TimeDisc=42
+Logging = F
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 5E-5 ! End time
+Analyze_dt = 5E-5 ! Timestep of analyze outputs
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=10
+Part-nSpecies=1
+Part-nBounds=1
+Part-Boundary1-SourceName=BC_reflective
+Part-Boundary1-Condition=reflective
+Part-FIBGMdeltas=(/4.64E-4,4.64E-4,4.64E-4/)
+! =============================================================================== !
+! Species1 - N
+! =============================================================================== !
+Part-Species1-initialParticleNumber=0
+Part-Species1-MassIC=2.32600E-26 ! N Molecular Mass
+Part-Species1-MacroParticleFactor=4E10
+Part-Species1-MWTemperatureIC=195
+Part-Species1-TempElec=195
+
+Part-Species1-SpeciesName=N
+Part-Species1-InteractionID = 1
+Part-Species1-Tref =273 ! K
+Part-Species1-dref = 3.0E-10 ! m
+Part-Species1-omega=0.24
+
+Part-Species1-RadiationTtrans=20000.0
+Part-Species1-RadiationTelec=10000.0
+Part-Species1-RadiationNumDens=1.0E+21
+Part-Species1-RadiationIonizationEn = 117345
+Part-Species1-RadiationMass_u = 14.0067
+Part-Species1-RadiationRadius_A = 0.7
+Part-Species1-Starkex = 0.33
+Part-Species1-NuclCharge = 1
+Radiation-Species1-SpectraFileName = Ni_NIST.dat
+! =============================================================================== !
+! Electrons
+! =============================================================================== !
+Radiation-NumDensElectrons=1.0E+21
+Radiation-TElectrons =10000.0
+
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC=true
+Particles-DSMCReservoirSim=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds =2
+Particles-RandomSeed1= 1
+Particles-RandomSeed2= 2
+Particles-DSMC-CalcQualityFactors=TRUE
+
+Particles-ManualTimeStep=5E-5
+
+! =============================================================================== !
+! Radiation
+! =============================================================================== !
+Radiation-RadType = 3 ! 1:particle radiation, 2:black body radiation, 3:rad solver
+
+Radiation-bb-atoms = t ! atomic line radiation (t,f)
+Radiation-bb-molecules = f ! molecular band radiation (t,f)
+Radiation-bf = f ! bound-free radiation
+Radiation-ff = f ! free-free radiation
+
+Radiation-MinWaveLen =867.9 ! minimum wavelength [nm]
+Radiation-MaxWaveLen =869.2 ! maximum Wavelength [nm]
+Radiation-WaveLenDiscr =1000 ! number of discretization points
+
+
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md
new file mode 100644
index 000000000..66dec5b20
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_N/readme.md
@@ -0,0 +1,3 @@
+# Radiation - Emission and absorption
+* Testing cell local emission and absorption coefficient of radiation solver
+* Comparison: emission and absorption coefficient of atomic bound-bound transitions of atomic nitrogen (868 nm triplet)
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Oi_NIST.dat b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Oi_NIST.dat
new file mode 100644
index 000000000..d224df991
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Oi_NIST.dat
@@ -0,0 +1,1430 @@
+580
+5 0 1 2 0.0
+3 158.26 2 2 0.0
+1 226.98 3 2 0.0
+5 15868 4 2 0.0
+1 33793 5 2 0.0
+5 73768 6 3 0.0
+3 76795 7 3 0.0
+3 86626 8 3 0.0
+5 86628 9 3 0.0
+7 86631 10 3 0.0
+3 88631 11 3 0.0
+5 88631 12 3 0.0
+1 88631 13 3 0.0
+5 95477 14 4 0.0
+3 96225 15 4 0.0
+9 97421 16 3 0.0
+7 97421 17 3 0.0
+5 97421 18 3 0.0
+3 97421 19 3 0.0
+1 97421 20 3 0.0
+3 97488 21 3 0.0
+5 97488 22 3 0.0
+7 97489 23 3 0.0
+3 99093 24 4 0.0
+5 99094 25 4 0.0
+7 99095 26 4 0.0
+3 99681 27 4 0.0
+5 99681 28 4 0.0
+1 99681 29 4 0.0
+7 101140 30 3 0.0
+5 101150 31 3 0.0
+3 101160 32 3 0.0
+5 102120 33 5 0.0
+3 102410 34 5 0.0
+5 102660 35 3 0.0
+9 102870 36 4 0.0
+7 102870 37 4 0.0
+5 102870 38 4 0.0
+3 102870 39 4 0.0
+1 102870 40 4 0.0
+7 102910 41 4 0.0
+5 102910 42 4 0.0
+3 102910 43 4 0.0
+11 102970 44 4 0.0
+9 102970 45 4 0.0
+7 102970 46 4 0.0
+5 102970 47 4 0.0
+3 102970 48 4 0.0
+7 102970 49 4 0.0
+5 102970 50 4 0.0
+9 102970 51 4 0.0
+3 103630 52 5 0.0
+5 103630 53 5 0.0
+7 103630 54 5 0.0
+5 103870 55 5 0.0
+3 103870 56 5 0.0
+1 103870 57 5 0.0
+5 105020 58 6 0.0
+3 105170 59 6 0.0
+9 105390 60 5 0.0
+7 105390 61 5 0.0
+5 105390 62 5 0.0
+3 105390 63 5 0.0
+1 105390 64 5 0.0
+5 105410 65 5 0.0
+7 105410 66 5 0.0
+3 105410 67 5 0.0
+5 105440 68 5 0.0
+9 105440 69 5 0.0
+3 105440 70 5 0.0
+7 105440 71 5 0.0
+11 105440 72 5 0.0
+9 105440 73 5 0.0
+5 105440 74 5 0.0
+7 105440 75 5 0.0
+3 105790 76 6 0.0
+5 105790 77 6 0.0
+7 105790 78 6 0.0
+1 105910 79 6 0.0
+5 105910 80 6 0.0
+3 105910 81 6 0.0
+5 106550 82 7 0.0
+3 106630 83 7 0.0
+9 106750 84 6 0.0
+7 106750 85 6 0.0
+5 106750 86 6 0.0
+3 106750 87 6 0.0
+1 106750 88 6 0.0
+3 106770 89 6 0.0
+5 106770 90 6 0.0
+7 106770 91 6 0.0
+9 106790 92 6 0.0
+7 106790 93 6 0.0
+5 106790 94 6 0.0
+3 106790 95 6 0.0
+11 106790 96 6 0.0
+7 106790 97 6 0.0
+5 106790 98 6 0.0
+9 106790 99 6 0.0
+13 106790 100 2 0.0
+7 106790 101 2 0.0
+11 106790 102 2 0.0
+9 106790 103 2 0.0
+7 106790 104 2 0.0
+9 106790 105 2 0.0
+11 106790 106 2 0.0
+5 106790 107 2 0.0
+5 107450 108 8 0.0
+3 107500 109 8 0.0
+9 107570 110 7 0.0
+7 107570 111 7 0.0
+5 107570 112 7 0.0
+3 107570 113 7 0.0
+1 107570 114 7 0.0
+5 107580 115 7 0.0
+3 107580 116 7 0.0
+7 107580 117 7 0.0
+11 107600 118 7 0.0
+3 107600 119 7 0.0
+7 107600 120 7 0.0
+5 107600 121 7 0.0
+9 107600 122 7 0.0
+9 107600 123 7 0.0
+7 107600 124 7 0.0
+5 107600 125 7 0.0
+5 108020 126 9 0.0
+3 108060 127 9 0.0
+9 108110 128 8 0.0
+7 108110 129 8 0.0
+5 108110 130 8 0.0
+3 108110 131 8 0.0
+1 108110 132 8 0.0
+5 108110 133 8 0.0
+3 108110 134 8 0.0
+7 108110 135 8 0.0
+5 108410 136 10 0.0
+3 108440 137 10 0.0
+7 108470 138 9 0.0
+1 108470 139 9 0.0
+9 108470 140 9 0.0
+5 108470 141 9 0.0
+3 108470 142 9 0.0
+3 108480 143 9 0.0
+5 108480 144 9 0.0
+7 108480 145 9 0.0
+3 108710 146 11 0.0
+1 108730 147 10 0.0
+3 108730 148 10 0.0
+5 108730 149 10 0.0
+7 108730 150 10 0.0
+9 108730 151 10 0.0
+7 108740 152 10 0.0
+5 108740 153 10 0.0
+3 108740 154 10 0.0
+3 108910 155 12 0.0
+5 108930 156 11 0.0
+3 108930 157 11 0.0
+7 108930 158 11 0.0
+3 109060 159 13 0.0
+7 109070 160 12 0.0
+3 109070 161 12 0.0
+5 109070 162 12 0.0
+3 109170 163 14 0.0
+7 109190 164 13 0.0
+3 109190 165 13 0.0
+5 109190 166 13 0.0
+3 109270 167 15 0.0
+5 109280 168 14 0.0
+7 109280 169 14 0.0
+3 109280 170 14 0.0
+3 109340 171 16 0.0
+3 109350 172 15 0.0
+5 109350 173 15 0.0
+7 109350 174 15 0.0
+3 109400 175 17 0.0
+7 109410 176 16 0.0
+5 109410 177 16 0.0
+3 109410 178 16 0.0
+3 109450 179 18 0.0
+3 109460 180 17 0.0
+7 109460 181 17 0.0
+5 109460 182 17 0.0
+3 109490 183 18 0.0
+5 109500 184 18 0.0
+3 109500 185 19 0.0
+7 109500 186 18 0.0
+3 109530 187 19 0.0
+5 109530 188 19 0.0
+7 109530 189 19 0.0
+3 109530 190 10 0.0
+3 109560 191 10 0.0
+7 109560 192 10 0.0
+5 109560 193 10 0.0
+3 109560 194 11 0.0
+3 109590 195 12 0.0
+7 109590 196 11 0.0
+5 109590 197 11 0.0
+3 109590 198 11 0.0
+3 109610 199 13 0.0
+3 109610 200 12 0.0
+5 109610 201 12 0.0
+7 109610 202 12 0.0
+5 109630 203 13 0.0
+3 109630 204 13 0.0
+3 109630 205 14 0.0
+7 109630 206 13 0.0
+7 109650 207 14 0.0
+3 109650 208 14 0.0
+5 109650 209 14 0.0
+3 109650 210 15 0.0
+3 109660 211 15 0.0
+7 109660 212 15 0.0
+3 109660 213 16 0.0
+5 109660 214 15 0.0
+7 109670 215 16 0.0
+3 109670 216 16 0.0
+3 109670 217 17 0.0
+5 109670 218 16 0.0
+7 109690 219 17 0.0
+3 109690 220 18 0.0
+5 109690 221 17 0.0
+3 109690 222 17 0.0
+7 109700 223 18 0.0
+3 109700 224 19 0.0
+5 109700 225 18 0.0
+3 109700 226 18 0.0
+7 109710 227 19 0.0
+3 109710 228 19 0.0
+3 109710 229 10 0.0
+5 109710 230 19 0.0
+5 109710 231 10 0.0
+3 109710 232 11 0.0
+7 109710 233 10 0.0
+3 109710 234 10 0.0
+3 113200 235 3 0.0
+7 113290 236 3 0.0
+5 113290 237 3 0.0
+3 113300 238 3 0.0
+9 113710 239 3 0.0
+7 113720 240 3 0.0
+5 113730 241 3 0.0
+5 113910 242 3 0.0
+3 113920 243 3 0.0
+1 113930 244 3 0.0
+7 114000 245 3 0.0
+3 115920 246 3 0.0
+5 116630 247 3 0.0
+7 122420 248 4 0.0
+5 122430 249 4 0.0
+3 122440 250 4 0.0
+5 122800 251 4 0.0
+5 123300 252 3 0.0
+3 123360 253 3 0.0
+1 123390 254 3 0.0
+9 124210 255 3 0.0
+7 124220 256 3 0.0
+5 124220 257 3 0.0
+9 124240 258 3 0.0
+11 124240 259 3 0.0
+1 124240 260 3 0.0
+7 124250 261 3 0.0
+7 124250 262 3 0.0
+5 124260 263 3 0.0
+9 124260 264 3 0.0
+3 124260 265 3 0.0
+3 124270 266 3 0.0
+5 124320 267 3 0.0
+7 124330 268 3 0.0
+3 124340 269 3 0.0
+7 125780 270 4 0.0
+3 125780 271 4 0.0
+5 125780 272 4 0.0
+5 126270 273 2 0.0
+3 126340 274 2 0.0
+1 126380 275 2 0.0
+7 127280 276 3 0.0
+5 127290 277 3 0.0
+3 127290 278 3 0.0
+3 127670 279 3 0.0
+5 128590 280 3 0.0
+7 128980 281 5 0.0
+5 128990 282 5 0.0
+3 129000 283 5 0.0
+5 129130 284 5 0.0
+9 129670 285 4 0.0
+9 129680 286 4 0.0
+11 129680 287 4 0.0
+1 129680 288 4 0.0
+3 129680 289 4 0.0
+7 129690 290 4 0.0
+7 129690 291 4 0.0
+5 129700 292 4 0.0
+9 129700 293 4 0.0
+3 129700 294 4 0.0
+5 129730 295 4 0.0
+3 129740 296 4 0.0
+7 129740 297 4 0.0
+11 129780 298 4 0.0
+11 129780 299 4 0.0
+13 129780 300 4 0.0
+11 129800 301 4 0.0
+5 129970 302 4 0.0
+3 129980 303 4 0.0
+1 129980 304 4 0.0
+1 130940 305 3 0.0
+7 131850 306 6 0.0
+5 131870 307 6 0.0
+3 131880 308 6 0.0
+5 131940 309 6 0.0
+9 132190 310 5 0.0
+9 132200 311 5 0.0
+11 132200 312 5 0.0
+3 132200 313 5 0.0
+7 132200 314 5 0.0
+5 132210 315 5 0.0
+9 132220 316 5 0.0
+3 132220 317 5 0.0
+3 132230 318 5 0.0
+5 132240 319 5 0.0
+7 132240 320 5 0.0
+5 132310 321 5 0.0
+3 132320 322 5 0.0
+7 133370 323 7 0.0
+5 133380 324 7 0.0
+3 133390 325 7 0.0
+5 133420 326 7 0.0
+7 133570 327 6 0.0
+5 133570 328 6 0.0
+3 133570 329 6 0.0
+3 133570 330 6 0.0
+3 133580 331 6 0.0
+5 133590 332 6 0.0
+7 133590 333 6 0.0
+5 133620 334 6 0.0
+3 133630 335 6 0.0
+7 134270 336 8 0.0
+5 134270 337 8 0.0
+3 134290 338 8 0.0
+5 134300 339 8 0.0
+7 134380 340 7 0.0
+5 134380 341 7 0.0
+3 134380 342 7 0.0
+3 134390 343 7 0.0
+3 134400 344 7 0.0
+5 134410 345 7 0.0
+7 134410 346 7 0.0
+5 134420 347 7 0.0
+3 134430 348 7 0.0
+7 134840 349 9 0.0
+5 134840 350 9 0.0
+5 134870 351 9 0.0
+7 134920 352 8 0.0
+3 134920 353 8 0.0
+3 134920 354 8 0.0
+5 134920 355 8 0.0
+3 134920 356 8 0.0
+5 134940 357 8 0.0
+7 134940 358 8 0.0
+5 134940 359 8 0.0
+3 134950 360 8 0.0
+5 135230 361 10 0.0
+7 135230 362 10 0.0
+5 135250 363 10 0.0
+5 135280 364 9 0.0
+3 135280 365 9 0.0
+3 135280 366 9 0.0
+7 135280 367 9 0.0
+3 135280 368 9 0.0
+5 135300 369 9 0.0
+5 135300 370 9 0.0
+7 135300 371 9 0.0
+3 135300 372 9 0.0
+7 135500 373 11 0.0
+7 135540 374 10 0.0
+3 135540 375 10 0.0
+5 135540 376 10 0.0
+3 135540 377 10 0.0
+3 135540 378 10 0.0
+5 135560 379 10 0.0
+3 135560 380 10 0.0
+7 135560 381 10 0.0
+5 135560 382 10 0.0
+5 135680 383 4 0.0
+1 135680 384 4 0.0
+3 135680 385 4 0.0
+7 135700 386 12 0.0
+5 135720 387 12 0.0
+5 135730 388 11 0.0
+3 135730 389 11 0.0
+7 135730 390 11 0.0
+3 135730 391 11 0.0
+3 135740 392 11 0.0
+3 135750 393 11 0.0
+5 135750 394 11 0.0
+7 135760 395 11 0.0
+5 135760 396 11 0.0
+7 135850 397 13 0.0
+5 135880 398 12 0.0
+3 135880 399 12 0.0
+3 135880 400 12 0.0
+7 135880 401 12 0.0
+3 135890 402 12 0.0
+3 135900 403 12 0.0
+5 135900 404 12 0.0
+7 135900 405 12 0.0
+5 135900 406 12 0.0
+3 135990 407 13 0.0
+7 135990 408 13 0.0
+3 135990 409 13 0.0
+5 135990 410 13 0.0
+5 136000 411 14 0.0
+3 136000 412 13 0.0
+5 136010 413 13 0.0
+3 136010 414 13 0.0
+5 136070 415 14 0.0
+3 136070 416 14 0.0
+3 136070 417 14 0.0
+7 136070 418 14 0.0
+3 136080 419 14 0.0
+5 136100 420 14 0.0
+7 136140 421 15 0.0
+3 136140 422 15 0.0
+5 136140 423 15 0.0
+3 136140 424 15 0.0
+5 136170 425 15 0.0
+3 136190 426 16 0.0
+7 136190 427 16 0.0
+3 136190 428 16 0.0
+5 136190 429 16 0.0
+5 136240 430 16 0.0
+3 136350 431 4 0.0
+5 137930 432 3 0.0
+1 137950 433 3 0.0
+3 137950 434 3 0.0
+5 137950 435 3 0.0
+3 137960 436 3 0.0
+5 137960 437 3 0.0
+7 137960 438 3 0.0
+3 137980 439 3 0.0
+3 142650 440 5 0.0
+5 142650 441 5 0.0
+1 142650 442 5 0.0
+3 142740 443 5 0.0
+5 143360 444 4 0.0
+3 143360 445 4 0.0
+5 143360 446 4 0.0
+3 143360 447 4 0.0
+5 143360 448 4 0.0
+7 143360 449 4 0.0
+1 143360 450 4 0.0
+3 143380 451 4 0.0
+5 145520 452 6 0.0
+3 145520 453 6 0.0
+1 145520 454 6 0.0
+3 145620 455 6 0.0
+5 145870 456 5 0.0
+3 145870 457 5 0.0
+1 145870 458 5 0.0
+5 145870 459 5 0.0
+3 145870 460 5 0.0
+5 145870 461 5 0.0
+7 145870 462 5 0.0
+3 145890 463 5 0.0
+3 147030 464 7 0.0
+1 147030 465 7 0.0
+5 147030 466 7 0.0
+3 147060 467 7 0.0
+5 147230 468 6 0.0
+5 147230 469 6 0.0
+1 147230 470 6 0.0
+7 147230 471 6 0.0
+5 147230 472 6 0.0
+3 147230 473 6 0.0
+3 147230 474 6 0.0
+3 147240 475 6 0.0
+3 147920 476 8 0.0
+1 147920 477 8 0.0
+5 147920 478 8 0.0
+3 147940 479 8 0.0
+5 148040 480 7 0.0
+3 148050 481 7 0.0
+5 148050 482 7 0.0
+1 148050 483 7 0.0
+3 148050 484 7 0.0
+7 148050 485 7 0.0
+5 148050 486 7 0.0
+3 148060 487 7 0.0
+5 148500 488 9 0.0
+3 148500 489 9 0.0
+1 148500 490 9 0.0
+3 148500 491 9 0.0
+5 148580 492 8 0.0
+7 148580 493 8 0.0
+1 148580 494 8 0.0
+5 148580 495 8 0.0
+3 148580 496 8 0.0
+3 148580 497 8 0.0
+5 148580 498 8 0.0
+3 148580 499 8 0.0
+5 148880 500 10 0.0
+1 148880 501 10 0.0
+3 148880 502 10 0.0
+3 148890 503 10 0.0
+5 148940 504 9 0.0
+5 148950 505 9 0.0
+1 148950 506 9 0.0
+7 148950 507 9 0.0
+5 148950 508 9 0.0
+3 148950 509 9 0.0
+3 148950 510 9 0.0
+3 148950 511 9 0.0
+1 149160 512 11 0.0
+3 149160 513 11 0.0
+5 149160 514 11 0.0
+3 149170 515 11 0.0
+1 149200 516 10 0.0
+5 149200 517 10 0.0
+3 149200 518 10 0.0
+3 149200 519 10 0.0
+5 149200 520 10 0.0
+7 149200 521 10 0.0
+5 149200 522 10 0.0
+5 149360 523 12 0.0
+3 149360 524 12 0.0
+1 149360 525 12 0.0
+3 149390 526 11 0.0
+3 149390 527 11 0.0
+1 149390 528 11 0.0
+5 149390 529 11 0.0
+7 149390 530 11 0.0
+5 149390 531 11 0.0
+5 149390 532 11 0.0
+5 149510 533 13 0.0
+3 149510 534 13 0.0
+1 149510 535 13 0.0
+5 149540 536 12 0.0
+3 149540 537 12 0.0
+1 149540 538 12 0.0
+5 149540 539 12 0.0
+3 149540 540 12 0.0
+7 149540 541 12 0.0
+3 149630 542 14 0.0
+5 149630 543 14 0.0
+1 149630 544 14 0.0
+5 149650 545 13 0.0
+1 149650 546 13 0.0
+3 149650 547 13 0.0
+3 149650 548 13 0.0
+5 149650 549 13 0.0
+7 149650 550 13 0.0
+5 149740 551 14 0.0
+1 149740 552 14 0.0
+5 149740 553 14 0.0
+3 149740 554 14 0.0
+7 149740 555 14 0.0
+3 149740 556 14 0.0
+1 149820 557 15 0.0
+3 149820 558 15 0.0
+3 149820 559 15 0.0
+5 149820 560 15 0.0
+7 149820 561 15 0.0
+5 149820 562 15 0.0
+3 149920 563 17 0.0
+5 149920 564 17 0.0
+1 149920 565 17 0.0
+3 149920 566 17 0.0
+5 149920 567 17 0.0
+7 149920 568 17 0.0
+5 149960 569 18 0.0
+3 149960 570 18 0.0
+5 149960 571 18 0.0
+1 149960 572 18 0.0
+3 149960 573 18 0.0
+7 149960 574 18 0.0
+7 150000 575 19 0.0
+5 150000 576 19 0.0
+3 150000 577 19 0.0
+1 150000 578 19 0.0
+5 150000 579 19 0.0
+3 150000 580 19 0.0
+
+847
+697.53 1 447 5 3 602000 0 0
+697.53 1 448 5 5 5300000 0 0
+697.53 1 449 5 7 20500000 0 0
+698.30 2 447 3 3 8970000 0 0
+698.30 2 448 3 5 15800000 0 0
+698.63 3 447 1 3 11900000 0 0
+724.84 1 437 5 5 11900000 0 0
+724.84 1 438 5 7 46000000 0 0
+724.84 1 436 5 3 1350000 0 0
+725.67 2 436 3 3 20100000 0 0
+725.67 2 437 3 5 35300000 0 0
+726.03 3 436 1 3 26600000 0 0
+769.35 1 303 5 3 88400000 0 0
+769.41 1 302 5 5 159000000 0 0
+770.26 2 304 3 1 211000000 0 0
+770.29 2 303 3 3 52900000 0 0
+770.35 2 302 3 5 52900000 0 0
+770.70 3 303 1 3 70400000 0 0
+770.79 1 296 5 3 25800000 0 0
+770.99 1 294 5 3 483000 0 0
+771.02 1 292 5 5 4400000 0 0
+771.06 1 290 5 7 17900000 0 0
+771.73 2 296 3 3 15400000 0 0
+771.93 2 294 3 3 7200000 0 0
+771.97 2 292 3 5 13100000 0 0
+772.14 3 296 1 3 5120000 0 0
+772.34 3 294 1 3 9580000 0 0
+791.51 1 274 5 3 275000000 0 0
+791.97 1 273 5 5 494000000 0 0
+792.23 2 275 3 1 659000000 0 0
+792.51 2 274 3 3 164000000 0 0
+792.94 3 274 1 3 219000000 0 0
+792.97 2 273 3 5 164000000 0 0
+804.27 1 269 5 3 70200000 0 0
+804.74 1 265 5 3 1210000 0 0
+804.78 1 263 5 5 11000000 0 0
+804.85 1 261 5 7 44700000 0 0
+805.29 2 269 3 3 42100000 0 0
+805.74 3 269 1 3 14000000 0 0
+805.76 2 265 3 3 18000000 0 0
+805.80 2 263 3 5 32900000 0 0
+806.21 3 265 1 3 24000000 0 0
+810.66 1 253 5 3 13700000 0 0
+811.05 1 252 5 5 24600000 0 0
+811.50 2 254 3 1 32700000 0 0
+811.71 2 253 3 3 8170000 0 0
+812.09 2 252 3 5 8150000 0 0
+812.16 3 253 1 3 10900000 0 0
+816.72 1 250 5 3 1630000 0 0
+816.77 1 249 5 5 14700000 0 0
+816.86 1 248 5 7 58900000 0 0
+817.78 2 250 3 3 24400000 0 0
+817.83 2 249 3 5 44000000 0 0
+818.24 3 250 1 3 32500000 0 0
+839.83 4 357 5 5 10300000 0 0
+839.83 4 358 5 7 11200000 0 0
+843.59 4 346 5 7 16300000 0 0
+843.59 4 345 5 5 15100000 0 0
+844.33 4 339 5 5 9090000 0 0
+849.45 4 333 5 7 24900000 0 0
+849.48 4 332 5 5 23300000 0 0
+850.68 4 326 5 5 14600000 0 0
+859.31 4 320 5 7 40600000 0 0
+859.35 4 319 5 5 38200000 0 0
+859.59 4 313 5 3 11000000 0 0
+861.56 4 309 5 5 25800000 0 0
+877.80 1 243 5 3 285000000 0 0
+877.88 1 242 5 5 512000000 0 0
+878.20 4 297 5 7 70500000 0 0
+878.25 4 295 5 5 66800000 0 0
+878.62 4 289 5 3 17000000 0 0
+878.97 2 244 3 1 681000000 0 0
+879.02 2 243 3 3 170000000 0 0
+879.10 2 242 3 5 170000000 0 0
+879.55 3 243 1 3 226000000 0 0
+882.89 4 284 5 5 52200000 0 0
+922.01 4 268 5 7 123000000 0 0
+922.07 4 267 5 5 117000000 0 0
+922.46 4 266 5 3 20400000 0 0
+924.95 1 134 5 3 201000 0 0
+924.95 1 135 5 7 7220000 0 0
+924.95 1 133 5 5 1810000 0 0
+926.31 2 134 3 3 3000000 0 0
+926.31 2 133 3 5 5390000 0 0
+926.90 3 134 1 3 3990000 0 0
+929.52 1 116 5 3 296000 0 0
+929.52 1 115 5 5 2660000 0 0
+929.52 1 117 5 7 10600000 0 0
+930.26 1 109 5 3 6900000 0 0
+930.89 2 115 3 5 7950000 0 0
+930.89 2 116 3 3 4420000 0 0
+931.48 3 116 1 3 5880000 0 0
+931.63 2 109 3 3 4120000 0 0
+932.23 3 109 1 3 1370000 0 0
+935.19 4 251 5 5 133000000 0 0
+936.63 1 91 5 7 16600000 0 0
+936.63 1 90 5 5 4150000 0 0
+936.63 1 89 5 3 461000 0 0
+937.84 1 83 5 3 11100000 0 0
+938.02 2 90 3 5 12400000 0 0
+938.02 2 89 3 3 6880000 0 0
+938.62 3 89 1 3 9160000 0 0
+939.24 2 83 3 3 6630000 0 0
+939.84 3 83 1 3 2210000 0 0
+948.69 1 65 5 5 7020000 0 0
+948.69 1 67 5 3 780000 0 0
+948.69 1 66 5 7 28100000 0 0
+950.11 2 67 3 3 11600000 0 0
+950.11 2 65 3 5 21000000 0 0
+950.73 3 67 1 3 15500000 0 0
+950.88 1 59 5 3 19400000 0 0
+952.32 2 59 3 3 11600000 0 0
+952.94 3 59 1 3 3850000 0 0
+971.74 1 43 5 3 1620000 0 0
+971.74 1 42 5 5 14600000 0 0
+971.74 1 41 5 7 58500000 0 0
+973.23 2 43 3 3 24200000 0 0
+973.23 2 42 3 5 43700000 0 0
+973.88 3 43 1 3 32300000 0 0
+974.07 1 35 5 5 110000 0 0
+975.57 2 35 3 5 22200 0 0
+976.45 1 34 5 3 38600000 0 0
+977.96 2 34 3 3 23000000 0 0
+978.62 3 34 1 3 7660000 0 0
+988.58 1 32 5 3 6470000 0 0
+988.65 1 31 5 5 57700000 0 0
+988.77 1 30 5 7 226000000 0 0
+990.13 2 32 3 3 94700000 0 0
+990.20 2 31 3 5 168000000 0 0
+990.80 3 32 1 3 125000000 0 0
+999.50 4 246 5 3 506000000 0 0
+1025.80 1 23 5 7 76600000 0 0
+1025.80 1 22 5 5 19100000 0 0
+1025.80 1 21 5 3 2110000 0 0
+1027.40 2 21 3 3 31700000 0 0
+1027.40 2 22 3 5 57100000 0 0
+1028.20 3 21 1 3 42200000 0 0
+1039.20 1 15 5 3 94300000 0 0
+1040.90 2 15 3 3 56400000 0 0
+1041.70 3 15 1 3 18800000 0 0
+1152.20 4 35 5 5 528000000 0 0
+1172.50 4 32 5 3 49800 0 0
+1172.60 4 31 5 5 366 0 0
+1172.80 4 30 5 7 7970 0 0
+1217.60 5 246 1 3 206000000 0 0
+1302.20 1 7 5 3 341000000 0 0
+1304.90 2 7 3 3 203000000 0 0
+1306.00 3 7 1 3 67600000 0 0
+1355.60 1 6 5 5 4200 0 0
+1358.50 2 6 3 5 1360 0 0
+1484.50 5 32 1 3 9050 0 0
+1641.30 4 7 5 3 1830 0 0
+1727.10 4 6 5 5 0.00532 0 0
+1827.10 11 447 3 3 77900 0 0
+1827.10 11 448 3 5 152000 0 0
+1827.10 13 447 1 3 112000 0 0
+1827.10 12 448 5 5 43200 0 0
+1827.10 12 449 5 7 196000 0 0
+2027.10 11 436 3 3 105000 0 0
+2027.10 11 437 3 5 282000 0 0
+2027.10 13 436 1 3 192000 0 0
+2027.10 12 437 5 5 48500 0 0
+2027.10 12 438 5 7 370000 0 0
+2289.20 27 448 3 5 135000 0 0
+2289.20 27 447 3 3 24800 0 0
+2289.30 28 449 5 7 167000 0 0
+2289.30 29 447 1 3 82900 0 0
+2325.50 5 7 1 3 4.61 0 0
+2418.10 11 304 3 1 298000 0 0
+2418.40 11 303 3 3 74500 0 0
+2418.50 12 303 5 3 124000 0 0
+2418.50 13 303 1 3 99300 0 0
+2419.00 11 302 3 5 74400 0 0
+2419.00 12 302 5 5 223000 0 0
+2432.70 11 296 3 3 371000 0 0
+2432.80 12 296 5 3 619000 0 0
+2432.80 13 296 1 3 123000 0 0
+2434.70 11 294 3 3 128000 0 0
+2434.80 13 294 1 3 170000 0 0
+2435.10 11 292 3 5 232000 0 0
+2435.10 12 292 5 5 77000 0 0
+2435.40 12 290 5 7 313000 0 0
+2612.20 27 436 3 3 95700 0 0
+2612.20 28 438 5 7 148000 0 0
+2612.20 27 437 3 5 108000 0 0
+2612.20 28 437 5 5 71000 0 0
+2612.20 29 436 1 3 90000 0 0
+2800.70 11 269 3 3 485000 0 0
+2800.70 12 269 5 3 808000 0 0
+2800.70 13 269 1 3 161000 0 0
+2806.40 11 265 3 3 177000 0 0
+2806.40 12 265 5 3 11800 0 0
+2806.40 13 265 1 3 236000 0 0
+2806.80 11 263 3 5 322000 0 0
+2806.90 12 263 5 5 107000 0 0
+2807.70 12 261 5 7 435000 0 0
+2877.10 11 254 3 1 1470000 0 0
+2879.80 11 253 3 3 368000 0 0
+2879.80 12 253 5 3 613000 0 0
+2879.80 13 253 1 3 490000 0 0
+2884.70 11 252 3 5 366000 0 0
+2884.70 12 252 5 5 1100000 0 0
+2959.20 1 5 5 1 0.000242 0 0
+2973.20 2 5 3 1 0.0754 0 0
+3299.90 27 304 3 1 143000 0 0
+3300.50 27 303 3 3 35700 0 0
+3300.50 28 303 5 3 59500 0 0
+3300.50 29 303 1 3 47600 0 0
+3301.50 27 302 3 5 35700 0 0
+3301.50 28 302 5 5 107000 0 0
+3327.20 27 296 3 3 217000 0 0
+3327.20 28 296 5 3 364000 0 0
+3327.20 29 296 1 3 72200 0 0
+3330.90 27 294 3 3 11000 0 0
+3330.90 29 294 1 3 14500 0 0
+3331.50 27 292 3 5 20100 0 0
+3331.50 28 292 5 5 6720 0 0
+3332.10 28 290 5 7 28100 0 0
+3693.40 7 57 3 1 93000 0 0
+3693.40 7 56 3 3 93000 0 0
+3693.40 7 55 3 5 93000 0 0
+3823.70 30 277 7 5 117000 0 0
+3824.50 30 276 7 7 663000 0 0
+3825.00 31 278 5 3 187000 0 0
+3825.40 31 277 5 5 519000 0 0
+3826.10 32 278 3 3 559000 0 0
+3826.30 31 276 5 7 83100 0 0
+3826.60 32 277 3 5 112000 0 0
+3856.10 35 280 5 5 1630000 0 0
+3948.40 6 26 5 7 491000 0 0
+3948.60 6 25 5 5 488000 0 0
+3948.70 6 24 5 3 487000 0 0
+3953.00 11 244 3 1 310000 0 0
+3954.00 11 243 3 3 77400 0 0
+3954.10 12 243 5 3 129000 0 0
+3954.10 13 243 1 3 103000 0 0
+3955.60 11 242 3 5 77300 0 0
+3955.70 12 242 5 5 232000 0 0
+3999.10 35 279 5 3 2410000 0 0
+4055.90 27 269 3 3 272000 0 0
+4055.90 28 269 5 3 456000 0 0
+4056.00 29 269 1 3 90500 0 0
+4067.80 27 265 3 3 96000 0 0
+4067.90 28 265 5 3 6430 0 0
+4067.90 29 265 1 3 128000 0 0
+4068.90 27 263 3 5 174000 0 0
+4068.90 28 263 5 5 58400 0 0
+4070.70 28 261 5 7 235000 0 0
+4218.30 27 254 3 1 544000 0 0
+4223.90 27 253 3 3 136000 0 0
+4224.00 28 253 5 3 226000 0 0
+4224.00 29 253 1 3 181000 0 0
+4234.50 27 252 3 5 135000 0 0
+4234.50 28 252 5 5 404000 0 0
+4369.40 7 29 3 1 756000 0 0
+4369.50 7 28 3 5 759000 0 0
+4369.50 7 27 3 3 758000 0 0
+4655.40 8 132 3 1 430000 0 0
+4655.40 8 131 3 3 323000 0 0
+4655.40 8 130 3 5 151000 0 0
+4655.90 9 131 5 3 108000 0 0
+4655.90 9 130 5 5 251000 0 0
+4655.90 9 129 5 7 287000 0 0
+4656.70 10 130 7 5 28700 0 0
+4656.70 10 129 7 7 143000 0 0
+4656.70 10 128 7 9 430000 0 0
+4773.80 8 114 3 1 700000 0 0
+4773.80 8 113 3 3 525000 0 0
+4773.80 8 112 3 5 245000 0 0
+4774.20 9 113 5 3 175000 0 0
+4774.20 9 112 5 5 408000 0 0
+4774.20 9 111 5 7 467000 0 0
+4775.10 10 112 7 5 46600 0 0
+4775.10 10 111 7 7 233000 0 0
+4775.10 10 110 7 9 700000 0 0
+4803.00 8 108 3 5 262000 0 0
+4803.50 9 108 5 5 437000 0 0
+4804.30 10 108 7 5 611000 0 0
+4968.80 8 88 3 1 1270000 0 0
+4968.80 8 87 3 3 950000 0 0
+4968.80 8 86 3 5 443000 0 0
+4969.30 9 87 5 3 316000 0 0
+4969.30 9 86 5 5 738000 0 0
+4969.30 9 85 5 7 844000 0 0
+4970.20 10 86 7 5 84300 0 0
+4970.20 10 85 7 7 422000 0 0
+4970.20 10 84 7 9 1270000 0 0
+5020.20 8 82 3 5 428000 0 0
+5020.70 9 82 5 5 713000 0 0
+5021.60 10 82 7 5 998000 0 0
+5132.60 11 133 3 5 74800 0 0
+5132.60 11 134 3 3 41600 0 0
+5132.70 12 133 5 5 24900 0 0
+5132.70 12 135 5 7 99800 0 0
+5132.70 12 134 5 3 2770 0 0
+5132.80 13 134 1 3 55400 0 0
+5276.40 11 115 3 5 132000 0 0
+5276.40 11 116 3 3 73400 0 0
+5276.60 12 117 5 7 176000 0 0
+5276.60 12 116 5 3 4890 0 0
+5276.60 12 115 5 5 44000 0 0
+5276.60 13 116 1 3 97800 0 0
+5300.40 11 109 3 3 358000 0 0
+5300.50 12 109 5 3 596000 0 0
+5300.60 13 109 1 3 119000 0 0
+5330.60 8 64 3 1 2710000 0 0
+5330.60 8 63 3 3 2030000 0 0
+5330.60 8 62 3 5 948000 0 0
+5331.20 9 63 5 3 677000 0 0
+5331.20 9 62 5 5 1580000 0 0
+5331.20 9 61 5 7 1810000 0 0
+5332.20 10 62 7 5 180000 0 0
+5332.20 10 61 7 7 902000 0 0
+5332.20 10 60 7 9 2710000 0 0
+5436.70 8 58 3 5 774000 0 0
+5437.30 9 58 5 5 1290000 0 0
+5438.40 10 58 7 5 1800000 0 0
+5514.10 11 89 3 3 149000 0 0
+5514.10 11 90 3 5 269000 0 0
+5514.30 12 91 5 7 358000 0 0
+5514.30 12 90 5 5 89500 0 0
+5514.30 12 89 5 3 9950 0 0
+5514.40 13 89 1 3 199000 0 0
+5556.40 11 83 3 3 583000 0 0
+5556.50 12 83 5 3 971000 0 0
+5556.60 13 83 1 3 194000 0 0
+5578.90 4 5 5 1 1.26 0 0
+5960.00 11 65 3 5 680000 0 0
+5960.00 11 67 3 3 378000 0 0
+5960.20 12 65 5 5 227000 0 0
+5960.20 12 67 5 3 25200 0 0
+5960.20 12 66 5 7 906000 0 0
+5960.30 13 67 1 3 504000 0 0
+6047.90 11 59 3 3 1050000 0 0
+6048.10 12 59 5 3 1750000 0 0
+6048.20 13 59 1 3 350000 0 0
+6142.30 9 41 5 7 962 0 0
+6157.70 8 40 3 1 7620000 0 0
+6157.70 8 39 3 3 5720000 0 0
+6157.70 8 38 3 5 2670000 0 0
+6158.40 9 39 5 3 1910000 0 0
+6158.50 9 38 5 5 4450000 0 0
+6158.50 9 37 5 7 5080000 0 0
+6159.90 10 38 7 5 507000 0 0
+6159.90 10 37 7 7 2540000 0 0
+6159.90 10 36 7 9 7620000 0 0
+6302.00 1 4 5 5 2.11E-05 0 0
+6302.00 1 4 5 5 0.00563 0 0
+6325.10 21 238 3 3 18100 0 0
+6325.20 22 238 5 3 6020 0 0
+6326.50 21 237 3 5 3610 0 0
+6326.50 22 237 5 5 16800 0 0
+6326.60 22 236 5 7 2680 0 0
+6326.60 23 237 7 5 3760 0 0
+6326.60 23 236 7 7 21400 0 0
+6365.50 2 4 3 5 0.00182 0 0
+6365.50 2 4 3 5 3.39E-06 0 0
+6393.50 3 4 1 5 8.6E-07 0 0
+6455.40 8 33 3 5 1650000 0 0
+6456.20 9 33 5 5 2750000 0 0
+6457.80 10 33 7 5 3850000 0 0
+6728.10 6 12 5 5 1180 0 0
+6728.40 6 11 5 3 644 0 0
+7003.80 11 43 3 3 1470000 0 0
+7003.90 11 42 3 5 2650000 0 0
+7004.10 12 43 5 3 98300 0 0
+7004.10 12 42 5 5 883000 0 0
+7004.20 12 41 5 7 3530000 0 0
+7004.20 13 43 1 3 1960000 0 0
+7019.20 27 244 3 1 32200 0 0
+7022.30 27 243 3 3 8050 0 0
+7022.30 28 243 5 3 13400 0 0
+7022.40 29 243 1 3 10700 0 0
+7027.40 27 242 3 5 8030 0 0
+7027.50 28 242 5 5 24100 0 0
+7158.70 35 247 5 5 50500000 0 0
+7256.20 11 34 3 3 2240000 0 0
+7256.40 12 34 5 3 3730000 0 0
+7256.50 13 34 1 3 745000 0 0
+7774.10 6 10 5 7 36900000 0 0
+7776.30 6 9 5 5 36900000 0 0
+7777.50 6 8 5 3 36900000 0 0
+7984.10 11 32 3 3 23300 0 0
+7984.50 12 32 5 3 1800 0 0
+7984.60 13 32 1 3 30900 0 0
+7989.20 11 31 3 5 41900 0 0
+7989.50 12 31 5 5 14100 0 0
+7997.30 12 30 5 7 56300 0 0
+8224.10 30 237 7 5 5080000 0 0
+8224.10 30 236 7 7 28900000 0 0
+8229.90 31 238 5 3 8130000 0 0
+8232.30 31 237 5 5 22600000 0 0
+8232.30 31 236 5 7 3620000 0 0
+8235.30 32 238 3 3 24300000 0 0
+8237.60 32 237 3 5 4860000 0 0
+8448.60 7 13 3 1 32200000 0 0
+8448.70 7 12 3 5 32200000 0 0
+8449.10 7 11 3 3 32200000 0 0
+8822.80 35 245 5 7 29300000 0 0
+9207.50 9 23 5 7 1660 0 0
+9263.30 8 20 3 1 44600000 0 0
+9263.40 8 19 3 3 33400000 0 0
+9263.50 8 18 3 5 15600000 0 0
+9265.10 9 19 5 3 11100000 0 0
+9265.20 9 18 5 5 26000000 0 0
+9265.30 9 17 5 7 29700000 0 0
+9268.40 10 18 7 5 2970000 0 0
+9268.50 10 17 7 7 14800000 0 0
+9268.50 10 16 7 9 44500000 0 0
+9485.50 35 235 5 3 23400000 0 0
+9624.80 42 238 5 3 52200 0 0
+9624.80 43 238 3 3 157000 0 0
+9627.90 41 237 7 5 32500 0 0
+9627.90 41 236 7 7 185000 0 0
+9628.00 42 237 5 5 145000 0 0
+9628.00 42 236 5 7 23200 0 0
+9628.00 43 237 3 5 31300 0 0
+9697.30 14 78 5 7 45400 0 0
+9697.60 14 77 5 5 45400 0 0
+9697.70 14 76 5 3 45400 0 0
+9828.50 16 122 9 9 224000 0 0
+9828.50 16 120 9 7 19200 0 0
+9828.50 16 118 9 11 1340000 0 0
+9828.60 17 121 7 5 53700 0 0
+9828.60 17 120 7 7 403000 0 0
+9828.60 17 122 7 9 1120000 0 0
+9828.70 18 119 5 3 89500 0 0
+9828.70 18 121 5 5 537000 0 0
+9828.70 18 120 5 7 921000 0 0
+9828.80 19 121 3 5 752000 0 0
+9828.80 19 119 3 3 627000 0 0
+9828.80 20 119 1 3 627000 0 0
+9894.40 21 125 3 5 1080000 0 0
+9894.40 22 124 5 7 1140000 0 0
+9894.40 22 125 5 5 200000 0 0
+9894.50 23 125 7 5 5630 0 0
+9894.50 23 123 7 9 1280000 0 0
+9894.50 23 124 7 7 143000 0 0
+10170.00 7 9 3 5 361 0 0
+10172.00 7 8 3 3 197 0 0
+10679.00 16 92 9 9 395000 0 0
+10679.00 16 93 9 7 33900 0 0
+10679.00 16 96 9 11 2370000 0 0
+10679.00 17 94 7 5 94900 0 0
+10679.00 17 92 7 9 1980000 0 0
+10679.00 17 93 7 7 712000 0 0
+10679.00 18 95 5 3 158000 0 0
+10679.00 18 93 5 7 1630000 0 0
+10679.00 18 94 5 5 949000 0 0
+10679.00 19 95 3 3 1110000 0 0
+10679.00 19 94 3 5 1330000 0 0
+10679.00 20 95 1 3 1110000 0 0
+10756.00 21 98 3 5 1910000 0 0
+10756.00 22 97 5 7 2020000 0 0
+10756.00 22 98 5 5 355000 0 0
+10757.00 23 99 7 9 2280000 0 0
+10757.00 23 97 7 7 254000 0 0
+10757.00 23 98 7 5 10000 0 0
+11095.00 24 132 3 1 287000 0 0
+11095.00 24 131 3 3 215000 0 0
+11095.00 24 130 3 5 100000 0 0
+11096.00 25 131 5 3 71700 0 0
+11096.00 25 130 5 5 167000 0 0
+11096.00 25 129 5 7 191000 0 0
+11097.00 26 130 7 5 19100 0 0
+11097.00 26 129 7 7 95500 0 0
+11097.00 26 128 7 9 287000 0 0
+11289.00 11 22 3 5 23200000 0 0
+11289.00 11 21 3 3 12900000 0 0
+11290.00 12 23 5 7 30900000 0 0
+11290.00 12 22 5 5 7740000 0 0
+11290.00 12 21 5 3 860000 0 0
+11290.00 13 21 1 3 17200000 0 0
+11298.00 8 14 3 5 5340000 0 0
+11301.00 9 14 5 5 8900000 0 0
+11305.00 10 14 7 5 12500000 0 0
+11377.00 13 19 1 3 398 0 0
+11377.00 12 17 5 7 1010 0 0
+11792.00 24 114 3 1 470000 0 0
+11792.00 24 113 3 3 353000 0 0
+11792.00 24 112 3 5 165000 0 0
+11793.00 25 113 5 3 118000 0 0
+11793.00 25 112 5 5 274000 0 0
+11793.00 25 111 5 7 313000 0 0
+11794.00 26 112 7 5 31300 0 0
+11794.00 26 111 7 7 157000 0 0
+11794.00 26 110 7 9 470000 0 0
+11858.00 27 133 3 5 102000 0 0
+11858.00 27 134 3 3 56500 0 0
+11858.00 28 135 5 7 136000 0 0
+11858.00 28 134 5 3 3770 0 0
+11858.00 28 133 5 5 33900 0 0
+11859.00 29 134 1 3 75400 0 0
+11871.00 21 80 3 5 852 0 0
+11871.00 21 81 3 3 21300 0 0
+11871.00 21 79 3 1 85200 0 0
+11871.00 22 80 5 5 12800 0 0
+11871.00 22 81 5 3 63900 0 0
+11872.00 23 80 7 5 71500 0 0
+11950.00 16 78 9 7 16100 0 0
+11950.00 17 78 7 7 4170 0 0
+11950.00 18 78 5 7 595 0 0
+11950.00 17 77 7 5 11700 0 0
+11951.00 18 77 5 5 7290 0 0
+11951.00 19 77 3 5 1880 0 0
+11951.00 18 76 5 3 7290 0 0
+11951.00 19 76 3 3 9380 0 0
+11951.00 20 76 1 3 4170 0 0
+11972.00 24 108 3 5 124000 0 0
+11973.00 25 108 5 5 206000 0 0
+11974.00 26 108 7 5 289000 0 0
+12270.00 14 54 5 7 235000 0 0
+12271.00 14 53 5 5 235000 0 0
+12271.00 14 52 5 3 235000 0 0
+12467.00 16 69 9 9 827000 0 0
+12467.00 16 71 9 7 70900 0 0
+12467.00 16 72 9 11 4960000 0 0
+12467.00 17 69 7 9 4140000 0 0
+12467.00 17 68 7 5 198000 0 0
+12467.00 17 71 7 7 1490000 0 0
+12468.00 18 68 5 5 1980000 0 0
+12468.00 18 71 5 7 3410000 0 0
+12468.00 18 70 5 3 331000 0 0
+12468.00 19 68 3 5 2780000 0 0
+12468.00 19 70 3 3 2320000 0 0
+12468.00 20 70 1 3 2320000 0 0
+12573.00 21 74 3 5 4050000 0 0
+12573.00 22 75 5 7 4280000 0 0
+12573.00 22 74 5 5 752000 0 0
+12574.00 23 74 7 5 21200 0 0
+12574.00 23 73 7 9 4820000 0 0
+12574.00 23 75 7 7 537000 0 0
+12655.00 27 116 3 3 97500 0 0
+12655.00 27 115 3 5 176000 0 0
+12655.00 28 115 5 5 58500 0 0
+12655.00 28 116 5 3 6500 0 0
+12655.00 28 117 5 7 234000 0 0
+12656.00 29 116 1 3 130000 0 0
+12794.00 27 109 3 3 177000 0 0
+12794.00 28 109 5 3 295000 0 0
+12794.00 29 109 1 3 58900 0 0
+13057.00 24 88 3 1 865000 0 0
+13057.00 24 87 3 3 649000 0 0
+13057.00 24 86 3 5 303000 0 0
+13059.00 25 87 5 3 216000 0 0
+13059.00 25 86 5 5 505000 0 0
+13059.00 25 85 5 7 577000 0 0
+13061.00 26 86 7 5 57700 0 0
+13061.00 26 85 7 7 288000 0 0
+13061.00 26 84 7 9 865000 0 0
+13080.00 15 57 3 1 286000 0 0
+13080.00 15 56 3 3 286000 0 0
+13081.00 15 55 3 5 286000 0 0
+13167.00 11 15 3 3 7140000 0 0
+13168.00 12 15 5 3 11900000 0 0
+13169.00 13 15 1 3 2380000 0 0
+13419.00 24 82 3 5 208000 0 0
+13420.00 25 82 5 5 346000 0 0
+13422.00 26 82 7 5 484000 0 0
+14115.00 27 90 3 5 349000 0 0
+14115.00 27 89 3 3 194000 0 0
+14115.00 28 91 5 7 465000 0 0
+14115.00 28 90 5 5 116000 0 0
+14115.00 28 89 5 3 12900 0 0
+14115.00 29 89 1 3 258000 0 0
+14395.00 27 83 3 3 296000 0 0
+14395.00 28 83 5 3 493000 0 0
+14395.00 29 83 1 3 98600 0 0
+15480.00 30 125 7 5 68.2 0 0
+15480.00 30 123 7 9 15500 0 0
+15480.00 30 124 7 7 1730 0 0
+15510.00 31 125 5 5 2400 0 0
+15510.00 31 124 5 7 13700 0 0
+15529.00 32 125 3 5 12900 0 0
+15669.00 21 57 3 1 183000 0 0
+15670.00 21 56 3 3 45700 0 0
+15670.00 21 55 3 5 1830 0 0
+15670.00 22 56 5 3 137000 0 0
+15670.00 22 55 5 5 27400 0 0
+15670.00 23 55 7 5 154000 0 0
+15892.00 24 64 3 1 1930000 0 0
+15892.00 24 63 3 3 1450000 0 0
+15892.00 24 62 3 5 675000 0 0
+15894.00 25 63 5 3 482000 0 0
+15894.00 25 62 5 5 1130000 0 0
+15894.00 25 61 5 7 1290000 0 0
+15897.00 26 62 7 5 129000 0 0
+15897.00 26 61 7 7 643000 0 0
+15897.00 26 60 7 9 1930000 0 0
+16113.00 16 54 9 7 31200 0 0
+16114.00 17 54 7 7 8080 0 0
+16114.00 18 54 5 7 1150 0 0
+16115.00 17 53 7 5 22600 0 0
+16115.00 18 53 5 5 14100 0 0
+16116.00 19 53 3 5 3630 0 0
+16116.00 18 52 5 3 14100 0 0
+16117.00 19 52 3 3 18200 0 0
+16117.00 20 52 1 3 8070 0 0
+16874.00 24 58 3 5 399000 0 0
+16876.00 25 58 5 5 664000 0 0
+16879.00 26 58 7 5 930000 0 0
+17458.00 27 67 3 3 492000 0 0
+17458.00 27 65 3 5 885000 0 0
+17458.00 28 67 5 3 32800 0 0
+17458.00 28 65 5 5 295000 0 0
+17458.00 28 66 5 7 1180000 0 0
+17459.00 29 67 1 3 656000 0 0
+17700.00 30 99 7 9 25200 0 0
+17700.00 30 98 7 5 111 0 0
+17700.00 30 97 7 7 2810 0 0
+17738.00 31 98 5 5 3900 0 0
+17738.00 31 97 5 7 22200 0 0
+17763.00 32 98 3 5 20900 0 0
+18026.00 16 44 9 11 14800000 0 0
+18026.00 16 45 9 9 2460000 0 0
+18026.00 16 46 9 7 211000 0 0
+18026.00 17 47 7 5 591000 0 0
+18026.00 17 45 7 9 12300000 0 0
+18026.00 17 46 7 7 4430000 0 0
+18026.00 18 47 5 5 5910000 0 0
+18026.00 18 48 5 3 985000 0 0
+18026.00 18 46 5 7 10100000 0 0
+18027.00 19 47 3 5 8270000 0 0
+18027.00 19 48 3 3 6900000 0 0
+18027.00 20 48 1 3 6900000 0 0
+18234.00 27 59 3 3 568000 0 0
+18234.00 28 59 5 3 947000 0 0
+18235.00 29 59 1 3 189000 0 0
+18248.00 21 50 3 5 12400000 0 0
+18249.00 22 50 5 5 2300000 0 0
+18249.00 22 49 5 7 13100000 0 0
+18249.00 23 50 7 5 64800 0 0
+18249.00 23 49 7 7 1640000 0 0
+18249.00 23 51 7 9 14700000 0 0
+19463.00 48 132 3 1 9020 0 0
+19463.00 47 131 5 3 6020 0 0
+19463.00 48 131 3 3 3010 0 0
+19463.00 46 130 7 5 6190 0 0
+19463.00 48 130 3 5 258 0 0
+19463.00 47 130 5 5 2580 0 0
+19463.00 47 129 5 7 184 0 0
+19463.00 46 129 7 7 1930 0 0
+19463.00 45 129 9 7 6910 0 0
+19463.00 45 128 9 9 1070 0 0
+19463.00 44 128 11 9 7880 0 0
+19463.00 46 128 7 9 71.6 0 0
+21143.00 36 122 9 9 131000 0 0
+21143.00 36 120 9 7 11300 0 0
+21143.00 36 118 9 11 788000 0 0
+21143.00 37 121 7 5 31500 0 0
+21143.00 37 120 7 7 236000 0 0
+21143.00 37 122 7 9 657000 0 0
+21144.00 38 120 5 7 540000 0 0
+21144.00 38 121 5 5 315000 0 0
+21144.00 38 119 5 3 52500 0 0
+21144.00 39 121 3 5 441000 0 0
+21144.00 39 119 3 3 368000 0 0
+21144.00 40 119 1 3 368000 0 0
+21337.00 41 123 7 9 760000 0 0
+21337.00 41 124 7 7 84700 0 0
+21337.00 41 125 7 5 3340 0 0
+21337.00 42 125 5 5 119000 0 0
+21337.00 42 124 5 7 675000 0 0
+21337.00 43 125 3 5 638000 0 0
+21714.00 48 114 3 1 15000 0 0
+21714.00 48 113 3 3 4990 0 0
+21714.00 47 113 5 3 9980 0 0
+21714.00 47 112 5 5 4280 0 0
+21714.00 46 112 7 5 10300 0 0
+21714.00 48 112 3 5 428 0 0
+21714.00 45 111 9 7 11500 0 0
+21714.00 46 111 7 7 3210 0 0
+21714.00 47 111 5 7 305 0 0
+21714.00 44 110 11 9 13100 0 0
+21714.00 45 110 9 9 1780 0 0
+21714.00 46 110 7 9 119 0 0
+23222.00 30 74 7 5 192 0 0
+23222.00 30 75 7 7 4870 0 0
+23222.00 30 73 7 9 43700 0 0
+23287.00 31 74 5 5 6760 0 0
+23287.00 31 75 5 7 38500 0 0
+23330.00 32 74 3 5 36200 0 0
+25512.00 36 93 9 7 19500 0 0
+25512.00 36 96 9 11 1370000 0 0
+25512.00 36 92 9 9 228000 0 0
+25513.00 37 94 7 5 54600 0 0
+25513.00 37 92 7 9 1140000 0 0
+25513.00 37 93 7 7 410000 0 0
+25513.00 38 95 5 3 91100 0 0
+25513.00 38 93 5 7 937000 0 0
+25513.00 38 94 5 5 546000 0 0
+25513.00 39 95 3 3 637000 0 0
+25513.00 39 94 3 5 765000 0 0
+25514.00 40 95 1 3 637000 0 0
+25794.00 41 98 7 5 5890 0 0
+25794.00 41 97 7 7 149000 0 0
+25794.00 41 99 7 9 1340000 0 0
+25795.00 42 97 5 7 1190000 0 0
+25795.00 42 98 5 5 209000 0 0
+25795.00 43 98 3 5 1120000 0 0
+26209.00 24 42 3 5 92.3 0 0
+26214.00 25 41 5 7 847 0 0
+26432.00 48 88 3 1 28100 0 0
+26432.00 48 87 3 3 9370 0 0
+26432.00 47 87 5 3 18700 0 0
+26432.00 48 86 3 5 803 0 0
+26432.00 47 86 5 5 8030 0 0
+26432.00 46 86 7 5 19300 0 0
+26433.00 46 85 7 7 6030 0 0
+26433.00 47 85 5 7 574 0 0
+26433.00 45 85 9 7 21500 0 0
+26433.00 45 84 9 9 3350 0 0
+26433.00 44 84 11 9 24500 0 0
+26433.00 46 84 7 9 223 0 0
+26506.00 24 40 3 1 6450000 0 0
+26506.00 24 39 3 3 4840000 0 0
+26507.00 24 38 3 5 2260000 0 0
+26511.00 25 39 5 3 1610000 0 0
+26511.00 25 38 5 5 3760000 0 0
+26512.00 25 37 5 7 4300000 0 0
+26520.00 26 38 7 5 429000 0 0
+26520.00 26 37 7 7 2150000 0 0
+26520.00 26 36 7 9 6440000 0 0
+27639.00 14 26 5 7 4300000 0 0
+27648.00 14 25 5 5 4290000 0 0
+27653.00 14 24 5 3 4290000 0 0
+28933.00 15 29 3 1 4100000 0 0
+28935.00 15 28 3 5 4100000 0 0
+28936.00 15 27 3 3 4100000 0 0
+30984.00 27 43 3 3 2100000 0 0
+30984.00 27 42 3 5 3780000 0 0
+30984.00 28 43 5 3 140000 0 0
+30985.00 28 42 5 5 1260000 0 0
+30985.00 28 41 5 7 5040000 0 0
+30987.00 29 43 1 3 2800000 0 0
+31401.00 27 38 3 5 32.5 0 0
+31402.00 28 38 5 5 72.4 0 0
+31402.00 28 37 5 7 697 0 0
+31404.00 29 39 1 3 62.7 0 0
+33072.00 24 33 3 5 1100000 0 0
+33079.00 25 33 5 5 1840000 0 0
+33092.00 26 33 7 5 2570000 0 0
+33293.00 41 80 7 5 57000 0 0
+33294.00 42 81 5 3 50900 0 0
+33294.00 42 80 5 5 10200 0 0
+33294.00 43 79 3 1 67800 0 0
+33294.00 43 81 3 3 17000 0 0
+34207.00 36 78 9 7 10400 0 0
+34208.00 37 78 7 7 2710 0 0
+34208.00 38 78 5 7 386 0 0
+34211.00 37 77 7 5 7570 0 0
+34212.00 38 77 5 5 4730 0 0
+34212.00 39 77 3 5 1220 0 0
+34213.00 38 76 5 3 4730 0 0
+34214.00 39 76 3 3 6080 0 0
+34214.00 40 76 1 3 2700 0 0
+34860.00 15 25 3 5 62 0 0
+34868.00 15 24 3 3 47.2 0 0
+36569.00 30 55 7 5 22000 0 0
+36616.00 27 34 3 3 1610000 0 0
+36617.00 28 34 5 3 2680000 0 0
+36621.00 29 34 1 3 535000 0 0
+36731.00 31 56 5 3 19300 0 0
+36732.00 31 55 5 5 3870 0 0
+36835.00 32 57 3 1 25600 0 0
+36838.00 32 56 3 3 6390 0 0
+38818.00 36 72 9 11 2680000 0 0
+38818.00 36 71 9 7 38300 0 0
+38818.00 36 69 9 9 447000 0 0
+38818.00 37 71 7 7 805000 0 0
+38818.00 37 68 7 5 107000 0 0
+38818.00 37 69 7 9 2240000 0 0
+38819.00 38 70 5 3 179000 0 0
+38819.00 38 68 5 5 1070000 0 0
+38819.00 38 71 5 7 1840000 0 0
+38820.00 39 68 3 5 1500000 0 0
+38820.00 39 70 3 3 1250000 0 0
+38820.00 40 70 1 3 1250000 0 0
+39473.00 41 73 7 9 2720000 0 0
+39473.00 41 75 7 7 303000 0 0
+39473.00 41 74 7 5 12000 0 0
+39474.00 42 74 5 5 425000 0 0
+39474.00 42 75 5 7 2420000 0 0
+39475.00 43 74 3 5 2290000 0 0
+41370.00 48 64 3 1 64400 0 0
+41370.00 48 63 3 3 21500 0 0
+41370.00 47 63 5 3 43000 0 0
+41371.00 47 62 5 5 18400 0 0
+41371.00 46 62 7 5 44100 0 0
+41371.00 48 62 3 5 1840 0 0
+41371.00 47 61 5 7 1310 0 0
+41371.00 46 61 7 7 13800 0 0
+41371.00 45 61 9 7 49300 0 0
+41372.00 46 60 7 9 511 0 0
+41372.00 45 60 9 9 7670 0 0
+41372.00 44 60 11 9 56200 0 0
+45601.00 21 29 3 1 986000 0 0
+45606.00 21 28 3 5 9860 0 0
+45608.00 22 28 5 5 148000 0 0
+45608.00 21 27 3 3 246000 0 0
+45610.00 22 27 5 3 739000 0 0
+45610.00 23 28 7 5 828000 0 0
+54557.00 30 49 7 7 1760 0 0
+54557.00 30 51 7 9 15800 0 0
+54557.00 30 50 7 5 69.7 0 0
+54920.00 31 50 5 5 2420 0 0
+54920.00 31 49 5 7 13800 0 0
+55160.00 32 50 3 5 12900 0 0
+59730.00 16 26 9 7 384000 0 0
+59733.00 17 26 7 7 99500 0 0
+59737.00 18 26 5 7 14200 0 0
+59776.00 17 25 7 5 278000 0 0
+59780.00 18 25 5 5 174000 0 0
+59784.00 19 25 3 5 44700 0 0
+59804.00 18 24 5 3 174000 0 0
+59808.00 19 24 3 3 223000 0 0
+59809.00 20 24 1 3 99200 0 0
+62301.00 23 25 7 5 17.1 0 0
+103980.00 43 57 3 1 364000 0 0
+103990.00 41 55 7 5 306000 0 0
+104000.00 42 56 5 3 273000 0 0
+104000.00 43 56 3 3 90900 0 0
+104000.00 42 55 5 5 54600 0 0
+131390.00 36 54 9 7 156000 0 0
+131400.00 37 54 7 7 40400 0 0
+131410.00 38 54 5 7 5770 0 0
+131480.00 37 53 7 5 113000 0 0
+131490.00 38 53 5 5 70500 0 0
+131500.00 39 53 3 5 18100 0 0
+131550.00 38 52 5 3 70400 0 0
+131560.00 39 52 3 3 90600 0 0
+131570.00 40 52 1 3 40200 0 0
+440570.00 1 3 5 1 1.34E-10 0 0
+631850.00 1 2 5 3 8.91E-05 0 0
+631850.00 1 2 5 3 1.66E-11 0 0
+973300.00 36 46 9 7 3.43 0 0
+973300.00 36 45 9 9 40 0 0
+973300.00 36 44 9 11 240 0 0
+973690.00 37 45 7 9 200 0 0
+973690.00 37 46 7 7 72 0 0
+973690.00 37 47 7 5 9.6 0 0
+974250.00 38 48 5 3 16 0 0
+974250.00 38 46 5 7 164 0 0
+974250.00 38 47 5 5 95.8 0 0
+974720.00 39 48 3 3 112 0 0
+974720.00 39 47 3 5 134 0 0
+974940.00 40 48 1 3 112 0 0
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Radiation_Emission_Absorption_reference.csv b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Radiation_Emission_Absorption_reference.csv
new file mode 100644
index 000000000..1c0357466
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/Radiation_Emission_Absorption_reference.csv
@@ -0,0 +1,501 @@
+ wavelength,emission_coefficient,absorption_coefficient
+ 777.25000000000000 , 3.1968060123628655E-002 , 4.0890890385911388E-016
+ 777.25140280561129 , 179446758321.17886 , 2.2951214764027881E-003
+ 777.25280561122258 , 2404150543.9202070 , 3.0749544540706553E-005
+ 777.25420841683376 , 2444408972.9612322 , 3.1264428842299363E-005
+ 777.25561122244494 , 2486257986.6301126 , 3.1799655398764961E-005
+ 777.25701402805612 , 2583573512.6053462 , 3.3045169570829830E-005
+ 777.25841683366741 , 2667033123.4267702 , 3.4113230685242179E-005
+ 777.25981963927859 , 2712332018.9269042 , 3.4692587303031361E-005
+ 777.26122244488988 , 2758853765.8955450 , 3.5287583206660397E-005
+ 777.26262525050106 , 2806643535.6253428 , 3.5898796092645501E-005
+ 777.26402805611224 , 2855963302.9150825 , 3.6529576492468917E-005
+ 777.26543086172353 , 2907222149.5329175 , 3.7185156302723921E-005
+ 777.26683366733471 , 2959172134.4547157 , 3.7849574944762890E-005
+ 777.26823647294600 , 3012594121.9163141 , 3.8532819236664444E-005
+ 777.26963927855718 , 3067548183.4770966 , 3.9235657466009769E-005
+ 777.27104208416847 , 3124094393.6978045 , 3.9958857926422428E-005
+ 777.27244488977954 , 3182300839.6892905 , 4.0703291469250326E-005
+ 777.27384769539083 , 3243131259.3218932 , 4.1481283468040536E-005
+ 777.27525050100201 , 3305188802.7847862 , 4.2274969329691386E-005
+ 777.27665330661330 , 3368847741.3232460 , 4.3089135446851740E-005
+ 777.27805611222448 , 3434453053.8582273 , 4.3928193980296558E-005
+ 777.27945891783577 , 3502086036.4111300 , 4.4793184623624470E-005
+ 777.28086172344695 , 3571832811.1048980 , 4.5685208800225679E-005
+ 777.28226452905812 , 3644246368.0880919 , 4.6611338894952301E-005
+ 777.28366733466942 , 3719524044.4779205 , 4.7574098656920126E-005
+ 777.28507014028060 , 3796274320.8112788 , 4.8555691313783391E-005
+ 777.28647294589189 , 3875536324.5824018 , 4.9569406679934912E-005
+ 777.28787575150307 , 3957422243.7641678 , 5.0616679524064674E-005
+ 777.28927855711424 , 4042050598.6932335 , 5.1699025599016282E-005
+ 777.29068136272542 , 4129554973.3508997 , 5.2818153446868881E-005
+ 777.29208416833671 , 4221619544.6618772 , 5.3995602081133397E-005
+ 777.29348697394801 , 4315610758.2554293 , 5.5197690566399698E-005
+ 777.29488977955918 , 4412681419.7088337 , 5.6439162139845156E-005
+ 777.29629258517048 , 4513209723.4525280 , 5.7724853693298498E-005
+ 777.29769539078154 , 4617363556.4038448 , 5.9056912325165642E-005
+ 777.29909819639283 , 4725324495.9866180 , 6.0437660278484643E-005
+ 777.30050100200401 , 4838231955.9941711 , 6.1881669661897630E-005
+ 777.30190380761530 , 4955781391.8661098 , 6.3385045534175718E-005
+ 777.30330661322648 , 5076526759.7180281 , 6.4929293962329049E-005
+ 777.30470941883777 , 5201924027.9323587 , 6.6533035678599365E-005
+ 777.30611222444895 , 5332217278.7633181 , 6.8199392237592384E-005
+ 777.30751503006013 , 5467666776.3903542 , 6.9931692143253347E-005
+ 777.30891783567142 , 5608562621.6509094 , 7.1733645688682303E-005
+ 777.31032064128260 , 5758046214.0646763 , 7.3645428198104731E-005
+ 777.31172344689389 , 5911029770.4789371 , 7.5601971496288685E-005
+ 777.31312625250507 , 6070364915.9931498 , 7.7639745201463396E-005
+ 777.31452905811636 , 6236476959.2622709 , 7.9764188659487478E-005
+ 777.31593186372743 , 6409758211.5453062 , 8.1980319113504540E-005
+ 777.31733466933872 , 6590636782.9278164 , 8.4293611754121780E-005
+ 777.31873747494990 , 6781572734.1626596 , 8.6735528340120096E-005
+ 777.32014028056119 , 6981076242.1273117 , 8.9287015261632616E-005
+ 777.32154308617248 , 7187977150.8850336 , 9.1933107114116854E-005
+ 777.32294589178366 , 7404538488.0870466 , 9.4702745995686301E-005
+ 777.32434869739484 , 7631375620.8959942 , 9.7603801792370311E-005
+ 777.32575150300602 , 7869155209.0274754 , 1.0064480038264161E-004
+ 777.32715430861731 , 8119032668.3212910 , 1.0384051854074141E-004
+ 777.32855711422849 , 8385816262.2829771 , 1.0725244901261722E-004
+ 777.32995991983978 , 8661585889.5202293 , 1.1077930097792130E-004
+ 777.33136272545096 , 8951644651.0037098 , 1.1448889614194444E-004
+ 777.33276553106214 , 9257011619.3218784 , 1.1839426734397387E-004
+ 777.33416833667343 , 9578800897.0657959 , 1.2250966275356750E-004
+ 777.33557114228461 , 9918244303.1684036 , 1.2685083620117367E-004
+ 777.33697394789590 , 10281296962.678839 , 1.3149394753942509E-004
+ 777.33837675350708 , 10663559767.753349 , 1.3638273622002179E-004
+ 777.33977955911837 , 11065513423.977751 , 1.4152334988662836E-004
+ 777.34118236472943 , 11491465265.779562 , 1.4697087501999828E-004
+ 777.34258517034073 , 11943412302.345348 , 1.5275085120298521E-004
+ 777.34398797595190 , 12423570607.508503 , 1.5889161970036248E-004
+ 777.34539078156320 , 12936358975.201866 , 1.6544969235110637E-004
+ 777.34679358717449 , 13489931227.571226 , 1.7252934771136097E-004
+ 777.34819639278567 , 14072181657.448610 , 1.7997576579397741E-004
+ 777.34959919839685 , 14694450539.119207 , 1.8793397715774596E-004
+ 777.35100200400802 , 15360524028.198063 , 1.9645240261705974E-004
+ 777.35240480961932 , 16074623038.655046 , 2.0558502307135932E-004
+ 777.35380761523049 , 16841475498.733173 , 2.1539230387523914E-004
+ 777.35521042084179 , 17678986387.362633 , 2.2610323053576708E-004
+ 777.35661322645296 , 18574719292.269241 , 2.3755875362705393E-004
+ 777.35801603206426 , 19537372014.543049 , 2.4987010896278976E-004
+ 777.35941883767532 , 20578743203.221432 , 2.6318818864743716E-004
+ 777.36082164328661 , 21707786727.086895 , 2.7762750290717301E-004
+ 777.36222444889790 , 22935403297.068954 , 2.9332746012502404E-004
+ 777.36362725450908 , 24284026961.845058 , 3.1057496762763073E-004
+ 777.36503006012038 , 25782008988.873817 , 3.2973260687403996E-004
+ 777.36643286573155 , 27430822766.084148 , 3.5081921995533762E-004
+ 777.36783567134273 , 29309705279.715382 , 3.7484816220880357E-004
+ 777.36923847695391 , 31533644560.885338 , 4.0329000501294557E-004
+ 777.37064128256520 , 34323975641.865116 , 4.3897538179130433E-004
+ 777.37204408817638 , 38105950985.251091 , 4.8734280750533239E-004
+ 777.37344689378767 , 43829772798.957199 , 5.6054433147011118E-004
+ 777.37484969939896 , 52952651082.437279 , 6.7721607614239243E-004
+ 777.37625250501003 , 68330769186.333984 , 8.7388550886499769E-004
+ 777.37765531062132 , 94955510298.651367 , 1.2143869702024026E-003
+ 777.37905811623250 , 141245720107.14014 , 1.8063883032942299E-003
+ 777.38046092184379 , 220958084315.60208 , 2.8258224965393361E-003
+ 777.38186372745497 , 357475486771.85126 , 4.5717311010818450E-003
+ 777.38326653306626 , 586940126988.10559 , 7.5063333811417532E-003
+ 777.38466933867733 , 955355879021.32019 , 1.2217968649987938E-002
+ 777.38607214428862 , 1533976688363.1853 , 1.9617897063097651E-002
+ 777.38747494989991 , 2416091211046.2407 , 3.0899178661526274E-002
+ 777.38887775551109 , 3720540124029.2769 , 4.7581655931727640E-002
+ 777.39028056112238 , 5590635502328.0107 , 7.1498133819115128E-002
+ 777.39168336673356 , 8253187201240.3145 , 0.10554926270106306
+ 777.39308617234474 , 11794290087681.904 , 0.15083610190881444
+ 777.39448897795592 , 16394812034815.463 , 0.20967175403698748
+ 777.39589178356721 , 22172425292450.738 , 0.28356111866458211
+ 777.39729458917839 , 29172768764794.012 , 0.37308786753952788
+ 777.39869739478968 , 37342728905705.727 , 0.47757273640627196
+ 777.40010020040086 , 46600789875674.711 , 0.59597322669202335
+ 777.40150300601204 , 56547698833188.539 , 0.72318333052942163
+ 777.40290581162333 , 66607587024350.141 , 0.85183831539536747
+ 777.40430861723451 , 76310247245056.281 , 0.97592474460831913
+ 777.40571142284580 , 85038789562422.469 , 1.0875532695601242
+ 777.40711422845698 , 92179749188377.625 , 1.1788783455048502
+ 777.40851703406827 , 97194393717760.859 , 1.2430101732676408
+ 777.40991983967933 , 99662066485807.219 , 1.2745690134562211
+ 777.41132264529062 , 99743425396470.078 , 1.2756095052242766
+ 777.41272545090180 , 97598381769733.938 , 1.2481767397355301
+ 777.41412825651310 , 92895643454345.859 , 1.1880338521409528
+ 777.41553106212439 , 86001058796778.125 , 1.0998596432918246
+ 777.41693386773557 , 77439045679594.781 , 0.99036084525115908
+ 777.41833667334686 , 67700934164766.648 , 0.86582103298872126
+ 777.41973947895792 , 57569860908095.422 , 0.73625566915680063
+ 777.42114228456921 , 47677769795140.391 , 0.60974662598121787
+ 777.42254509018039 , 38411504741313.812 , 0.49124121471345178
+ 777.42394789579168 , 30102737036508.320 , 0.38498114897186081
+ 777.42535070140286 , 22946909966220.973 , 0.29346593495769463
+ 777.42675350701415 , 17000030941722.342 , 0.21741184630269655
+ 777.42815631262533 , 12204585875139.293 , 0.15608334062650392
+ 777.42955911823651 , 8578932322728.6768 , 0.10971519102598240
+ 777.43096192384780 , 5872419054276.6641 , 7.5101841975191652E-002
+ 777.43236472945898 , 3916711827785.3916 , 5.0090482337223637E-002
+ 777.43376753507027 , 2547987875884.4390 , 3.2585997809401870E-002
+ 777.43517034068145 , 1619732384887.8877 , 2.0714623916726790E-002
+ 777.43657314629263 , 1004315924039.5377 , 1.2844119611205015E-002
+ 777.43797595190381 , 617671699912.84180 , 7.8993623990237603E-003
+ 777.43937875751510 , 379252030162.02576 , 4.8502353827982658E-003
+ 777.44078156312628 , 234793231664.76971 , 3.0027653105370021E-003
+ 777.44218436873757 , 149327666095.73187 , 1.9097542722509488E-003
+ 777.44358717434886 , 99726867879.521576 , 1.2754144499119090E-003
+ 777.44498997995993 , 71186949740.542862 , 9.1042029213497973E-004
+ 777.44639278557122 , 54759453732.660004 , 7.0033079077111795E-004
+ 777.44779559118240 , 45263385595.624733 , 5.7888668650139536E-004
+ 777.44919839679369 , 39363996319.592766 , 5.0344018247632395E-004
+ 777.45060120240487 , 35426842797.181770 , 4.5308853628817878E-004
+ 777.45200400801616 , 32566606783.549286 , 4.1650949489602506E-004
+ 777.45340681362723 , 30315642287.613953 , 3.8772237744812116E-004
+ 777.45480961923852 , 28405795120.595936 , 3.6329778609587996E-004
+ 777.45621242484981 , 26762243557.702999 , 3.4227882738697155E-004
+ 777.45761523046099 , 25298492723.006172 , 3.2355932978935052E-004
+ 777.45901803607228 , 23972083600.598579 , 3.0659628904461194E-004
+ 777.46042084168346 , 22761279754.931416 , 2.9111172016654888E-004
+ 777.46182364729464 , 21651253280.607662 , 2.7691599125784352E-004
+ 777.46322645290581 , 20624425422.136799 , 2.6378429207755651E-004
+ 777.46462925851711 , 19674394994.710712 , 2.5163475250926555E-004
+ 777.46603206412829 , 18809287498.554173 , 2.4057129092308570E-004
+ 777.46743486973958 , 18009516578.954460 , 2.3034342046370567E-004
+ 777.46883767535076 , 17269101350.523594 , 2.2087465239064875E-004
+ 777.47024048096205 , 16582752593.100908 , 2.1209734430079760E-004
+ 777.47164328657323 , 15945845932.961529 , 2.0395235703024673E-004
+ 777.47304609218440 , 15343961073.338617 , 1.9625527039752541E-004
+ 777.47444889779570 , 14793465344.235275 , 1.8921540011416330E-004
+ 777.47585170340687 , 14281618381.218412 , 1.8266981471213583E-004
+ 777.47725450901817 , 13804290778.645285 , 1.7656570392896511E-004
+ 777.47865731462934 , 13358768208.079798 , 1.7086835513726868E-004
+ 777.48006012024052 , 12942598909.451345 , 1.6554641345679420E-004
+ 777.48146292585170 , 12550587997.210127 , 1.6053344823904628E-004
+ 777.48286573146299 , 12183204298.689791 , 1.5583544295090626E-004
+ 777.48426853707429 , 11843421933.806316 , 1.5149043996501733E-004
+ 777.48567134268546 , 11525255084.902044 , 1.4742188784034097E-004
+ 777.48707414829676 , 11227250089.920891 , 1.4361119627475589E-004
+ 777.48847695390782 , 10948153949.358646 , 1.4004234232329783E-004
+ 777.48987975951911 , 10687003508.314106 , 1.3670301155224406E-004
+ 777.49128256513029 , 10437286193.527388 , 1.3350991128641010E-004
+ 777.49268537074158 , 10208525925.193943 , 1.3058483957209356E-004
+ 777.49408817635276 , 9994401424.3906250 , 1.2784695843247846E-004
+ 777.49549098196405 , 9794103661.6748600 , 1.2528592186346663E-004
+ 777.49689378757523 , 9606934824.0841599 , 1.2289280690207620E-004
+ 777.49829659318641 , 9432309457.3595467 , 1.2066012767121115E-004
+ 777.49969939879770 , 9267931334.2597904 , 1.1855852439641317E-004
+ 777.50110220440888 , 9114842519.6726456 , 1.1660130889828357E-004
+ 777.50250501002017 , 8974250189.8374271 , 1.1480392902578079E-004
+ 777.50390781563135 , 8843905102.0924149 , 1.1313762023701427E-004
+ 777.50531062124253 , 8723399780.5279827 , 1.1159717239130868E-004
+ 777.50671342685371 , 8612411738.6122494 , 1.1017846310399866E-004
+ 777.50811623246500 , 8510935769.8068209 , 1.0888143385553871E-004
+ 777.50951903807618 , 8415659040.0107718 , 1.0766370481586652E-004
+ 777.51092184368747 , 8331362578.5814085 , 1.0658642288499983E-004
+ 777.51232464929876 , 8255327535.2833757 , 1.0561482152632988E-004
+ 777.51372745490983 , 8187337416.9272137 , 1.0474613322818225E-004
+ 777.51513026052112 , 8127271659.1149397 , 1.0397881855310096E-004
+ 777.51653306613230 , 8075292782.1864023 , 1.0331496047891875E-004
+ 777.51793587174359 , 8029939363.5791292 , 1.0273587259213086E-004
+ 777.51933867735477 , 7992003084.4255714 , 1.0225166401820664E-004
+ 777.52074148296606 , 7962189154.0554609 , 1.0187136594579733E-004
+ 777.52214428857724 , 7939646891.9103899 , 1.0158410081558892E-004
+ 777.52354709418842 , 7924365611.7647953 , 1.0138973437879279E-004
+ 777.52494989979971 , 7916327594.6219425 , 1.0128804206515942E-004
+ 777.52635270541089 , 7916670350.4213219 , 1.0129359053870074E-004
+ 777.52775551102218 , 7921999542.2666578 , 1.0136293935424896E-004
+ 777.52915831663336 , 7935881604.7230492 , 1.0154171472914013E-004
+ 777.53056112224465 , 7957102217.4988995 , 1.0181439147389608E-004
+ 777.53196392785571 , 7985752907.4188356 , 1.0218214281544719E-004
+ 777.53336673346701 , 8022062522.2642145 , 1.0264790028572398E-004
+ 777.53476953907818 , 8067091657.7611322 , 1.0322524029117665E-004
+ 777.53617234468948 , 8119131852.9545870 , 1.0389230822973350E-004
+ 777.53757515030065 , 8178920299.2249689 , 1.0465851945778340E-004
+ 777.53897795591195 , 8247332911.2212734 , 1.0553509331252463E-004
+ 777.54038076152312 , 8324287858.4022064 , 1.0652098740659131E-004
+ 777.54178356713430 , 8410146853.7084541 , 1.0762083335153347E-004
+ 777.54318637274559 , 8505360248.7749596 , 1.0884039649419621E-004
+ 777.54458917835677 , 8612514454.5775452 , 1.1021278909865191E-004
+ 777.54599198396807 , 8726500496.3010979 , 1.1167261518254694E-004
+ 777.54739478957924 , 8851705431.5349483 , 1.1327601833016125E-004
+ 777.54879759519042 , 8987809161.6546555 , 1.1501891147271564E-004
+ 777.55020040080160 , 9135386071.4945965 , 1.1690864794042469E-004
+ 777.55160320641289 , 9295145715.3149319 , 1.1895431167586208E-004
+ 777.55300601202418 , 9470396051.0033607 , 1.2119824543279609E-004
+ 777.55440881763536 , 9657412463.6010571 , 1.2359278342272703E-004
+ 777.55581162324665 , 9858110654.4856358 , 1.2616242988540790E-004
+ 777.55721442885772 , 10074241802.461239 , 1.2892960873326034E-004
+ 777.55861723446901 , 10306709379.080608 , 1.3190588687785412E-004
+ 777.56002004008019 , 10556786523.876724 , 1.3510756242196515E-004
+ 777.56142284569148 , 10826996148.019247 , 1.3856692919393841E-004
+ 777.56282565130266 , 11120786623.589634 , 1.4232813258001727E-004
+ 777.56422845691395 , 11431839094.029589 , 1.4631028622509576E-004
+ 777.56563126252513 , 11766946057.128613 , 1.5060033124292556E-004
+ 777.56703406813631 , 12127591178.741936 , 1.5521726519894069E-004
+ 777.56843687374760 , 12516026900.713009 , 1.6018992123628488E-004
+ 777.56983967935878 , 12934689775.119696 , 1.6554948880521139E-004
+ 777.57124248497007 , 13394240055.854496 , 1.7143242332913618E-004
+ 777.57264529058125 , 13884117670.747164 , 1.7770355969248886E-004
+ 777.57404809619254 , 14412548776.372900 , 1.8446818169625965E-004
+ 777.57545090180361 , 14984372882.183212 , 1.9178824519290182E-004
+ 777.57685370741490 , 15603881156.277542 , 1.9971867966736179E-004
+ 777.57825651302608 , 16276171685.697912 , 2.0832474460309223E-004
+ 777.57965931863737 , 17012761461.099546 , 2.1775386070770072E-004
+ 777.58106212424866 , 17818742373.454121 , 2.2807121138971960E-004
+ 777.58246492985984 , 18689473868.036297 , 2.3921739175079644E-004
+ 777.58386773547102 , 19644665796.903698 , 2.5144469466741747E-004
+ 777.58527054108220 , 20700147770.355648 , 2.6495574990513028E-004
+ 777.58667334669349 , 21882576015.426460 , 2.8009177051834200E-004
+ 777.58807615230467 , 23239221578.099216 , 2.9745784687349439E-004
+ 777.58947895791596 , 24899190382.768223 , 3.1870659393814761E-004
+ 777.59088176352714 , 26986125835.415104 , 3.4542070901077770E-004
+ 777.59228456913831 , 29877123959.348377 , 3.8242718375049942E-004
+ 777.59368737474961 , 34236672934.945213 , 4.3823177619254521E-004
+ 777.59509018036078 , 41291307739.726105 , 5.2853469508152618E-004
+ 777.59649298597208 , 53238413532.095505 , 6.8146347592035628E-004
+ 777.59789579158326 , 74293209494.957581 , 9.5097484785976443E-004
+ 777.59929859719455 , 111208608079.32823 , 1.4235091809549503E-003
+ 777.60070140280561 , 174526206443.64102 , 2.2340037316933114E-003
+ 777.60210420841690 , 281484143197.51776 , 3.6031145513416951E-003
+ 777.60350701402808 , 457831125261.70618 , 5.8604368567793481E-003
+ 777.60490981963937 , 740881287784.16870 , 9.4836086309897701E-003
+ 777.60631262525055 , 1184566056479.2271 , 1.5162976765325572E-002
+ 777.60771543086184 , 1872191763478.0144 , 2.3964900380421674E-002
+ 777.60911823647302 , 2874209434315.1270 , 3.6791184799211521E-002
+ 777.61052104208420 , 4303368422478.8735 , 5.5085073262621756E-002
+ 777.61192384769549 , 6277209497325.2900 , 8.0351141333943304E-002
+ 777.61332665330667 , 8915502530922.9316 , 0.11412249810717148
+ 777.61472945891796 , 12325895162293.543 , 0.15777708255290984
+ 777.61613226452914 , 16660089498905.951 , 0.21325675096661467
+ 777.61753507014032 , 21848423605144.664 , 0.27966979874420544
+ 777.61893787575150 , 27832386616168.988 , 0.35626726007419351
+ 777.62034068136279 , 34486299411698.148 , 0.44144038478754444
+ 777.62174348697408 , 41566196865552.648 , 0.53206630778764685
+ 777.62314629258526 , 48736829743226.977 , 0.62385368568012578
+ 777.62454909819655 , 55630777958826.977 , 0.71209937346278129
+ 777.62595190380762 , 61772484552325.750 , 0.79071602473970448
+ 777.62735470941891 , 66605712211448.664 , 0.85258354773525791
+ 777.62875751503009 , 69851716495478.195 , 0.89413388622923673
+ 777.63016032064138 , 71265925396487.359 , 0.91223640676279327
+ 777.63156312625256 , 71116527525664.516 , 0.91032404611385698
+ 777.63296593186385 , 69301979849099.961 , 0.88709700704491978
+ 777.63436873747503 , 65589378716333.352 , 0.83957401640089702
+ 777.63577154308621 , 60398278998508.234 , 0.77312556825769185
+ 777.63717434869750 , 54108168878467.547 , 0.69260928476344830
+ 777.63857715430868 , 47152669947158.945 , 0.60357572043298835
+ 777.63997995991997 , 39970242888837.172 , 0.51163737238652052
+ 777.64138276553115 , 32955154564216.414 , 0.42184103660958011
+ 777.64278557114244 , 26369822466826.965 , 0.33754577692705051
+ 777.64418837675350 , 20520850126749.004 , 0.26267625863584043
+ 777.64559118236480 , 15575695533705.887 , 0.19937602052650247
+ 777.64699398797597 , 11503258270672.023 , 0.14724696304793702
+ 777.64839679358727 , 8266844368460.1426 , 0.10581938662909203
+ 777.64979959919856 , 5781935836940.4287 , 7.4011422380670808E-002
+ 777.65120240480974 , 3934927570020.0796 , 5.0368873024034456E-002
+ 777.65260521042092 , 2595311145503.5454 , 3.3221171120097752E-002
+ 777.65400801603209 , 1685197907640.0071 , 2.1571306287613390E-002
+ 777.65541082164339 , 1070562904710.1622 , 1.3703697896974476E-002
+ 777.65681362725456 , 667845287018.61499 , 8.5487288908892220E-003
+ 777.65821643286586 , 411667666290.05933 , 5.2695388288838902E-003
+ 777.65961923847703 , 253294006599.80643 , 3.2422841814050756E-003
+ 777.66102204408821 , 157289216311.06223 , 2.0133795762294431E-003
+ 777.66242484969951 , 101704684941.04984 , 1.3018727770902527E-003
+ 777.66382765531068 , 69800489862.630997 , 8.9348512527263489E-004
+ 777.66523046092198 , 51471987823.689339 , 6.5887257022571898E-004
+ 777.66663326653315 , 40908017521.493828 , 5.2364959454762397E-004
+ 777.66803607214445 , 34679754849.270096 , 4.4392569652198176E-004
+ 777.66943887775551 , 30811610404.370468 , 3.9441240894467567E-004
+ 777.67084168336680 , 28227456460.461826 , 3.6133481742683905E-004
+ 777.67224448897798 , 26387787835.518669 , 3.3778701338005790E-004
+ 777.67364729458927 , 24946489687.702309 , 3.1933856775337433E-004
+ 777.67505010020045 , 23752519769.658897 , 3.0405607539081987E-004
+ 777.67645290581174 , 22729309370.055531 , 2.9095943455200699E-004
+ 777.67785571142292 , 21833486956.424618 , 2.7949346262984873E-004
+ 777.67925851703410 , 21026925551.074459 , 2.6917011502787644E-004
+ 777.68066132264539 , 20324790547.502945 , 2.6018352756890814E-004
+ 777.68206412825657 , 19706335447.104717 , 2.5226813880864854E-004
+ 777.68346693386786 , 19161889437.863491 , 2.4530016265356526E-004
+ 777.68486973947904 , 18686858765.249092 , 2.3922080752938738E-004
+ 777.68627254509033 , 18279337323.364044 , 2.3400569385746022E-004
+ 777.68767535070140 , 17924904210.538677 , 2.2947019880180343E-004
+ 777.68907815631269 , 17628019726.702255 , 2.2567144272802973E-004
+ 777.69048096192398 , 17393173495.861294 , 2.2266690431138115E-004
+ 777.69188376753516 , 17212461993.791393 , 2.2035542204366931E-004
+ 777.69328657314645 , 17084713864.129509 , 2.1872201404088746E-004
+ 777.69468937875763 , 17015009274.478453 , 2.1783175155707106E-004
+ 777.69609218436881 , 16994736155.613285 , 2.1757436240753676E-004
+ 777.69749498997999 , 17019842545.522089 , 2.1789800405453528E-004
+ 777.69889779559128 , 17106511421.965288 , 2.1900985217698457E-004
+ 777.70030060120246 , 17249367850.475441 , 2.2084112352770984E-004
+ 777.70170340681375 , 17451141749.216301 , 2.2342678623136917E-004
+ 777.70310621242493 , 17720371202.151562 , 2.2687618712935936E-004
+ 777.70450901803611 , 18063379171.040771 , 2.3127030492109242E-004
+ 777.70591182364740 , 18477857676.096119 , 2.3657960516820049E-004
+ 777.70731462925858 , 18994345104.582848 , 2.4319514556971875E-004
+ 777.70871743486987 , 19651436493.771725 , 2.5161117493293771E-004
+ 777.71012024048105 , 20520908854.574512 , 2.6274688039955649E-004
+ 777.71152304609234 , 21745168505.182350 , 2.7842591786091320E-004
+ 777.71292585170340 , 23658120767.661175 , 3.0292427064781930E-004
+ 777.71432865731470 , 26731492243.225746 , 3.4228285933683218E-004
+ 777.71573146292587 , 31972031056.061554 , 4.0939407440207965E-004
+ 777.71713426853717 , 41124908204.150589 , 5.2660648948133198E-004
+ 777.71853707414846 , 57166494585.143959 , 7.3203541777850799E-004
+ 777.71993987975964 , 85024504822.228958 , 1.0887849956151988E-003
+ 777.72134268537081 , 133488642684.12531 , 1.7094158502924455E-003
+ 777.72274549098199 , 215153872767.35095 , 2.7552186393804403E-003
+ 777.72414829659328 , 347880029813.14124 , 4.4549057647549194E-003
+ 777.72555110220446 , 558514847126.85107 , 7.1522882999313329E-003
+ 777.72695390781575 , 883073412719.00671 , 1.1308574149508911E-002
+ 777.72835671342693 , 1368294242357.7671 , 1.7522295038102719E-002
+ 777.72975951903811 , 2075475936972.9209 , 2.6578438606688730E-002
+ 777.73116232464940 , 3088441452715.9517 , 3.9550438563114021E-002
+ 777.73256513026058 , 4452372039442.0869 , 5.7016884343206564E-002
+ 777.73396793587187 , 6247637099688.5391 , 8.0006983572464774E-002
+ 777.73537074148305 , 8531164285714.4082 , 0.10924974967361882
+ 777.73677354709434 , 11335124565651.766 , 0.14515716289198627
+ 777.73817635270552 , 14654109937119.967 , 0.18765996854922795
+ 777.73957915831670 , 18497834834451.246 , 0.23688256933671270
+ 777.74098196392788 , 22649000033197.699 , 0.29004223934581252
+ 777.74238476953917 , 26950263860947.527 , 0.34512406689061609
+ 777.74378757515046 , 31192512978264.926 , 0.39945015419180652
+ 777.74519038076164 , 35118494893188.254 , 0.44972613526658312
+ 777.74659318637293 , 38461798765904.695 , 0.49254036265822743
+ 777.74799599198400 , 40986718872661.156 , 0.52487439750264631
+ 777.74939879759529 , 42456390029030.867 , 0.54369495292406067
+ 777.75080160320647 , 42818320938720.547 , 0.54832982730857915
+ 777.75220440881776 , 42299202901250.102 , 0.54168202113179476
+ 777.75360721442894 , 40684795489888.125 , 0.52100797933484044
+ 777.75501002004023 , 38062092430033.961 , 0.48742174038024266
+ 777.75641282565141 , 34634014762233.898 , 0.44352190368281114
+ 777.75781563126259 , 30567766918756.684 , 0.39144968307864536
+ 777.75921843687388 , 26296969209835.109 , 0.33675800437989706
+ 777.76062124248506 , 22008514460367.586 , 0.28184021026094314
+ 777.76202404809635 , 17918373105775.727 , 0.22946201019995149
+ 777.76342685370753 , 14190606020206.930 , 0.18172436174684084
+ 777.76482965931871 , 10931197233362.008 , 0.13998449250421224
+ 777.76623246492989 , 8164141748510.9502 , 0.10454968160593632
+ 777.76763527054118 , 5941251132636.5527 , 7.6083426081470215E-002
+ 777.76903807615236 , 4219501961827.7769 , 5.4034769543159764E-002
+ 777.77044088176365 , 2917751823195.1987 , 3.7364605219145509E-002
+ 777.77184368737494 , 1965384256211.8828 , 2.5168621303725682E-002
+ 777.77324649298600 , 1290755705834.6528 , 1.6529353054875556E-002
+ 777.77464929859730 , 826593472719.15076 , 1.0585308749887978E-002
+ 777.77605210420847 , 516685773940.28040 , 6.6166423556536375E-003
+ 777.77745490981977 , 320771741894.50580 , 4.1077746774105615E-003
+ 777.77885771543095 , 197583239518.11722 , 2.5302274641086121E-003
+ 777.78026052104224 , 122208371047.81599 , 1.5649798877672265E-003
+ 777.78166332665330 , 77229346931.163910 , 9.8898037518276158E-004
+ 777.78306613226459 , 50950762604.588081 , 6.5245800404942753E-004
+ 777.78446893787589 , 35689618392.319962 , 4.5702456242163953E-004
+ 777.78587174348706 , 27097066226.146954 , 3.4698886138615983E-004
+ 777.78727454909836 , 22082466067.417023 , 2.8277228045932502E-004
+ 777.78867735470953 , 19021809170.400909 , 2.4357781874601755E-004
+ 777.79008016032083 , 17028648322.288954 , 2.1805366798490009E-004
+ 777.79148296593189 , 15618134581.985918 , 1.9999086973566469E-004
+ 777.79288577154318 , 14525146144.730209 , 1.8599428473043219E-004
+ 777.79428857715436 , 13622422650.520210 , 1.7443422159027876E-004
+ 777.79569138276565 , 12849277332.535809 , 1.6453352902936650E-004
+ 777.79709418837683 , 12159355903.779200 , 1.5569859495141708E-004
+ 777.79849699398812 , 11533942526.572571 , 1.4768974417424732E-004
+ 777.79989979959930 , 10961637209.129580 , 1.4036098925911768E-004
+ 777.80130260521048 , 10434938539.419123 , 1.3361626776224681E-004
+ 777.80270541082177 , 9940741116.2048721 , 1.2728775269663388E-004
+ 777.80410821643295 , 9492045056.8285751 , 1.2154192324754379E-004
+ 777.80551102204424 , 9075380967.7462234 , 1.1620629285728902E-004
+ 777.80691382765542 , 8688412309.6651344 , 1.1125093612465938E-004
+ 777.80831663326660 , 8328039002.9310827 , 1.0663615579975137E-004
+ 777.80971943887778 , 7991896373.7675047 , 1.0233166922212018E-004
+ 777.81112224448907 , 7674519794.4801025 , 9.8267497192144849E-005
+ 777.81252505010036 , 7379115101.1127539 , 9.4484693606748681E-005
+ 777.81392785571154 , 7103946986.8072224 , 9.0961037380544635E-005
+ 777.81533066132283 , 6845603525.6378651 , 8.7652833990809864E-005
+ 777.81673346693390 , 6602705807.1554785 , 8.4542425625134317E-005
+ 777.81813627254519 , 6373946002.8422117 , 8.1613063889817461E-005
+ 777.81953907815637 , 6157373280.4537811 , 7.8839767013908613E-005
+ 777.82094188376766 , 5951046029.3153038 , 7.6197670962709549E-005
+ 777.82234468937884 , 5758645328.5517178 , 7.3733915876590192E-005
+ 777.82374749499013 , 5576261851.3815451 , 7.1398439721106257E-005
+ 777.82515030060131 , 5403540008.3634377 , 6.9186686952142520E-005
+ 777.82655310621249 , 5239579674.2975054 , 6.7087131775632036E-005
+ 777.82795591182378 , 5083797731.5369930 , 6.5092306358147217E-005
+ 777.82935871743496 , 4933608512.9357576 , 6.3169099193680211E-005
+ 777.83076152304625 , 4792324035.8036737 , 6.1359923903853196E-005
+ 777.83216432865743 , 4657885436.1033173 , 5.9638415872092270E-005
+ 777.83356713426861 , 4529767970.7211227 , 5.7997853401597952E-005
+ 777.83496993987978 , 4407450712.0519819 , 5.6431566702197730E-005
+ 777.83637274549108 , 4290592733.0377331 , 5.4935188991953138E-005
+ 777.83777555110225 , 4178056407.9057655 , 5.3494152511269232E-005
+ 777.83917835671355 , 4070177500.4023008 , 5.2112757098208885E-005
+ 777.84058116232484 , 3967791220.5078969 , 5.0801698906914233E-005
+ 777.84198396793590 , 3869585378.6703014 , 4.9544173963619564E-005
+ 777.84338677354719 , 3775495492.7647572 , 4.8339355795179362E-005
+ 777.84478957915837 , 3685176846.4958563 , 4.7182830448085166E-005
+ 777.84619238476967 , 3598393313.7765965 , 4.6071573879651387E-005
+ 777.84759519038084 , 3513753770.5785189 , 4.4987771730516942E-005
+ 777.84899799599214 , 3433687015.3467846 , 4.3962527137111593E-005
+ 777.85040080160331 , 3356448786.0000873 , 4.2973504182908209E-005
+ 777.85180360721449 , 3282245493.0389709 , 4.2023344217615587E-005
+ 777.85320641282578 , 3210733311.6951270 , 4.1107645650720826E-005
+ 777.85460921843696 , 3141825857.6817579 , 4.0225301318481981E-005
+ 777.85601202404825 , 3074710731.5555077 , 3.9365908222567614E-005
+ 777.85741482965943 , 3010267293.0665789 , 3.8540727438899211E-005
+ 777.85881763527073 , 2948330408.7755961 , 3.7747644809940851E-005
+ 777.86022044088179 , 2888513624.9286532 , 3.6981710840610377E-005
+ 777.86162324649308 , 2830761499.3640642 , 3.6242215551813204E-005
+ 777.86302605210426 , 2774927853.8024487 , 3.5527286987858710E-005
+ 777.86442885771555 , 2720733549.2663064 , 3.4833350468202443E-005
+ 777.86583166332673 , 2667887337.9400449 , 3.4156676508202677E-005
+ 777.86723446893802 , 2617330562.7219005 , 3.3509320037010104E-005
+ 777.86863727454920 , 2568245605.0490346 , 3.2880811202176934E-005
+ 777.87004008016038 , 2520809292.7532797 , 3.2273413182217411E-005
+ 777.87144288577167 , 2474805009.7491803 , 3.1684353010825836E-005
+ 777.87284569138285 , 2430214415.9166393 , 3.1113395107256827E-005
+ 777.87424849699414 , 2386415196.9659629 , 3.0552570574926961E-005
+ 777.87565130260532 , 2344369972.8592234 , 3.0014206708708365E-005
+ 777.87705410821650 , 2303554300.9540868 , 2.9491588065762016E-005
+ 777.87845691382768 , 2263970416.4850464 , 2.8984742421331727E-005
+ 777.87985971943897 , 2225531019.4265971 , 2.8492552287028902E-005
+ 777.88126252505026 , 2188184137.9117222 , 2.8014351788635277E-005
+ 777.88266533066144 , 2151647720.8431048 , 2.7546529099344795E-005
+ 777.88406813627273 , 2116073857.1625340 , 2.7091032010404034E-005
+ 777.88547094188380 , 2081724305.5246379 , 2.6651212808261050E-005
+ 777.88687374749509 , 2048246764.7888191 , 2.6222560020993799E-005
+ 777.88827655310627 , 2015736830.1329618 , 2.5806297220427577E-005
+ 777.88967935871756 , 1984068805.5958760 , 2.5400815320582093E-005
+ 777.89108216432874 , 1953221217.1551826 , 2.5005838822586205E-005
+ 777.89248496994003 , 1922781172.7953341 , 2.4616080585619574E-005
+ 777.89388777555121 , 1893535883.1872215 , 2.4241621614220530E-005
+ 777.89529058116239 , 1864928859.9342394 , 2.3875336084426705E-005
+ 777.89669338677368 , 1837117760.8570518 , 2.3519241959225194E-005
+ 777.89809619238486 , 1809984407.5772476 , 2.3171826614756515E-005
+ 777.89949899799615 , 1783528694.5768898 , 2.2833088153394045E-005
+ 777.90090180360733 , 1757482047.9053822 , 2.2499587452157309E-005
+ 777.90230460921862 , 1732176948.8166296 , 2.2175582337394303E-005
+ 777.90370741482968 , 1488023027.4427178 , 1.9052750955410570E-005
+ 777.90511022044097 , 1465206874.4666777 , 1.8760597065394216E-005
+ 777.90651302605215 , 1442991633.6446748 , 1.8476137699601461E-005
+ 777.90791583166344 , 1421304469.9692471 , 1.8198440446554514E-005
+ 777.90931863727474 , 1400050910.2666931 , 1.7926295494671579E-005
+ 777.91072144288592 , 1379150961.5900378 , 1.7658678465411408E-005
+ 777.91212424849709 , 1358959367.0101688 , 1.7400132217448052E-005
+ 777.91352705410827 , 1339148742.4760077 , 1.7146464715940637E-005
+ 777.91492985971956 , 1319874943.1037614 , 1.6899670905338557E-005
+ 777.91633266533074 , 1301035202.1543396 , 1.6658435255147742E-005
+ 777.91773547094203 , 1282616139.2461879 , 1.6422586423937130E-005
+ 777.91913827655321 , 1264386236.8868024 , 1.6189159614251937E-005
+ 777.92054108216439 , 1246745769.4626887 , 1.5963280732129156E-005
+ 777.92194388777568 , 1229473715.5931551 , 1.5742119680837492E-005
+ 777.92334669338686 , 1212597089.4117062 , 1.5526021989010168E-005
+ 777.92474949899815 , 1196111850.1659923 , 1.5314935879212048E-005
+ 777.92615230460933 , 1179976521.8887813 , 1.5108330388261463E-005
+ 777.92755511022062 , 1164079523.9516885 , 1.4904776624843301E-005
+ 777.92895791583169 , 1148502119.2878058 , 1.4705315245076140E-005
+ 777.93036072144298 , 1133350923.6182668 , 1.4511311662753716E-005
+ 777.93176352705416 , 1118468981.2683074 , 1.4320756053547617E-005
+ 777.93316633266545 , 1103949608.1982255 , 1.4134842861859424E-005
+ 777.93456913827663 , 1089723946.1550822 , 1.3952690629648411E-005
+ 777.93597194388792 , 1075771994.3994958 , 1.3774043233501232E-005
+ 777.93737474949910 , 1061933731.6417975 , 1.3596851451837189E-005
+ 777.93877755511028 , 1048550313.1929077 , 1.3425484112157469E-005
+ 777.94018036072157 , 1035373991.0435011 , 1.3256768872381696E-005
+ 777.94158316633275 , 1022496562.7693988 , 1.3091880749546049E-005
+ 777.94298597194404 , 1009881578.7145305 , 1.2930353138721874E-005
+ 777.94438877755522 , 997508608.16100752 , 1.2771924485869735E-005
+ 777.94579158316640 , 985261650.13786399 , 1.2615109291342849E-005
+ 777.94719438877758 , 973304667.08939195 , 1.2462007256631782E-005
+ 777.94859719438887 , 961602900.83343136 , 1.2312173409860198E-005
+ 777.95000000000016 , 950105493.60960257 , 1.2164956409510973E-005
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/analyze.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/analyze.ini
new file mode 100644
index 000000000..87ca3c7ce
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/analyze.ini
@@ -0,0 +1,5 @@
+compare_data_file_name = Radiation_Emission_Absorption.csv
+compare_data_file_reference = Radiation_Emission_Absorption_reference.csv
+compare_data_file_tolerance = 1E-5
+compare_data_file_tolerance_type = relative
+
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/command_line.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/command_line.ini
new file mode 100644
index 000000000..0100a3584
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/command_line.ini
@@ -0,0 +1 @@
+MPI=1
diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/cube_mesh.h5 b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/cube_mesh.h5
similarity index 86%
rename from regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/cube_mesh.h5
rename to regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/cube_mesh.h5
index cebf62bca..5a856e349 100644
Binary files a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/cube_mesh.h5 and b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/cube_mesh.h5 differ
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/parameter.ini b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/parameter.ini
new file mode 100644
index 000000000..184179e42
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/parameter.ini
@@ -0,0 +1,97 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = RadLas = T
+CalcKineticEnergy = TRUE
+CalcTemp = TRUE
+CalcNumSpec = TRUE
+CalcInternalEnergy = TRUE
+CalcReacRates=FALSE ! Compile with TimeDisc=42
+Logging = F
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 5E-5 ! End time
+Analyze_dt = 5E-5 ! Timestep of analyze outputs
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=10
+Part-nSpecies=1
+Part-nBounds=1
+Part-Boundary1-SourceName=BC_reflective
+Part-Boundary1-Condition=reflective
+Part-FIBGMdeltas=(/4.64E-4,4.64E-4,4.64E-4/)
+! =============================================================================== !
+! Species1 - O
+! =============================================================================== !
+Part-Species1-MacroParticleFactor=4E10
+Part-Species1-MassIC=2.65700E-26 ! O Molecular Mass
+
+Part-Species1-SpeciesName=O
+Part-Species1-InteractionID = 1
+Part-Species1-Tref =273
+Part-Species1-dref = 3.0E-10
+Part-Species1-omega=0.24
+
+Part-Species1-RadiationTtrans=20000.0
+Part-Species1-RadiationTelec=10000.0
+Part-Species1-RadiationNumDens=1.0E+21
+Part-Species1-RadiationIonizationEn = 109837.1
+Part-Species1-RadiationRadius_A = 0.66
+Part-Species1-Starkex = 0.0
+Part-Species1-NuclCharge = 1
+Radiation-Species1-SpectraFileName = Oi_NIST.dat
+! =============================================================================== !
+! Electrons
+! =============================================================================== !
+Radiation-NumDensElectrons=1.0E+21
+Radiation-TElectrons =10000.0
+
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC=true
+Particles-DSMCReservoirSim=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds =2
+Particles-RandomSeed1= 1
+Particles-RandomSeed2= 2
+Particles-DSMC-CalcQualityFactors=TRUE
+
+Particles-ManualTimeStep=5E-5
+
+! =============================================================================== !
+! Radiation
+! =============================================================================== !
+Radiation-RadType = 3 ! 1:particle radiation, 2:black body radiation, 3:rad solver
+
+Radiation-bb-atoms = t ! atomic line radiation (t,f)
+Radiation-bb-molecules = f ! molecular band radiation (t,f)
+Radiation-bf = f ! bound-free radiation
+Radiation-ff = f ! free-free radiation
+
+Radiation-MinWaveLen =777.25 ! minimum wavelength [nm]
+Radiation-MaxWaveLen =777.95 ! maximum Wavelength [nm]
+Radiation-WaveLenDiscr =500 ! number of discretization points
+
+
diff --git a/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md
new file mode 100644
index 000000000..27fa5e718
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/Rad_Emission_SingleCell_O/readme.md
@@ -0,0 +1,3 @@
+# Radiation - Emission and absorption
+* Testing cell local emission and absorption coefficient of radiation solver
+* Comparison: emission and absorption coefficient of atomic bound-bound transitions of atomic oxygen (777 nm triplet)
diff --git a/regressioncheck/NIG_Radiation/builds.ini b/regressioncheck/NIG_Radiation/builds.ini
new file mode 100644
index 000000000..984795462
--- /dev/null
+++ b/regressioncheck/NIG_Radiation/builds.ini
@@ -0,0 +1,18 @@
+! relative binary path in build directory
+binary=./bin/piclas
+
+! fixed compiler flags
+CMAKE_BUILD_TYPE = RELEASE
+LIBS_BUILD_HDF5 = OFF
+PICLAS_POLYNOMIAL_DEGREE = N
+PICLAS_EQNSYSNAME = maxwell
+PICLAS_TIMEDISCMETHOD = Radiation
+LIBS_USE_MPI = ON
+PICLAS_NODETYPE = GAUSS
+PICLAS_INTKIND8 = ON,OFF
+PICLAS_DEBUG_MEMORY = ON
+
+!PICLAS_MEASURE_MPI_WAIT = ON
+
+! exclude combinations
+!EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_TIMEDISCMETHOD=DSMC
diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/analyze.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/analyze.ini
index e5cb111ae..53ec60b79 100644
--- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/analyze.ini
+++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/analyze.ini
@@ -1,6 +1,6 @@
! compare the last row in FieldAnalyze.csv or PartAnalyze.csv with a reference file
compare_data_file_name = PartAnalyze.csv
compare_data_file_reference = Database_Tvib_15000_ref.csv,Database_Tvib_20000_ref.csv,Database_Tvib_25000_ref.csv,Database_Tvib_30000_ref.csv,Database_Tvib_35000_ref.csv
-compare_data_file_tolerance = 0.1
+compare_data_file_tolerance = 0.15
compare_data_file_tolerance_type = relative
compare_data_file_max_differences = 1
\ No newline at end of file
diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/externals.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/externals.ini
new file mode 100644
index 000000000..0bdc5a5c4
--- /dev/null
+++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/externals.ini
@@ -0,0 +1,6 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
\ No newline at end of file
diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/hopr.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/hopr.ini
index 52ea18fef..06baf766c 100644
--- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/hopr.ini
+++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/hopr.ini
@@ -1,46 +1,25 @@
-!=============================================================================== !
-! MAKEFILE PARAMETER (put a "#" in front, NO blanks!)
-!=============================================================================== !
-! This is only a dummy parameter needed for the regression check
-#MPI=
-
!=============================================================================== !
! OUTPUT
!=============================================================================== !
- ProjectName =cube ! name of the project (used for filenames)
- Debugvisu =F ! Write debug mesh to tecplot file
- Logging =F ! Write log files
-
+ProjectName =cube ! name of the project (used for filenames)
+Debugvisu =F
+Logging =F
!=============================================================================== !
! MESH
!=============================================================================== !
- Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
- nZones =1 ! number of zones
- Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0. ,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/) ! [0,1.0]x[0,]x[0,0.05]
- nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128)
- BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries
- elemtype =108 ! Elementform (108: Hexaeder)
- useCurveds =F ! T if curved boundaries defined
- SpaceQuandt =0.5 ! characteristic length of the mesh
- ConformConnect=T
-
- postScaleMesh=T
- meshScale=4.64E-6
-
+Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones =1 ! number of zones
+Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0. ,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/) ! [0,1.0]x[0,]x[0,0.05]
+nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128)
+BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries
+elemtype =108 ! Elementform (108: Hexaeder)
+useCurveds =F ! T if curved boundaries defined
+SpaceQuandt =0.5 ! characteristic length of the mesh
+ConformConnect=T
+postScaleMesh=T
+meshScale=4.64E-6
!=============================================================================== !
! BOUNDARY CONDITIONS
!=============================================================================== !
- nUserDefinedBoundaries=1
- BoundaryName=BC_wall ! Outflow: open (absorbing) [for MAXWELL]
- BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL]
-
-!=============================================================================== !
-! BASIS
-!=============================================================================== !
- NVisu = 7
-
-!=============================================================================== !
-! SEARCH
-!=============================================================================== !
-! nElemsNodeSearch=50
-! RefineSideSearch=50
+BoundaryName=BC_wall
+BoundaryType=(/4,0,0,0/)
diff --git a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/parameter.ini b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/parameter.ini
index c8b5e6d04..bc8d2ed7d 100644
--- a/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/parameter.ini
+++ b/regressioncheck/NIG_Reservoir/CHEM_RATES_QK_diss_N2/parameter.ini
@@ -1,8 +1,8 @@
IniExactFunc = 0
-ManualTimeStep= 2.0E-9
-tend = 4.0e-7
-Analyze_dt = 4.0e-7
+ManualTimeStep = 2.0E-9
+tend = 4.0e-7
+Analyze_dt = 4.0e-7
! Polynomial degree
N = 1
@@ -19,11 +19,8 @@ CalcReacRates = TRUE
! =============================================================================== !
MeshFile = cube_mesh.h5
useCurveds = F
-TrackingMethod = tracing
+TrackingMethod = TriaTracking
Particles-HaloEpsVelo = 5000
-!TriaTracking = T
-! if boundaries have to be changed (else they are used from Mesh directly):
-
! =============================================================================== !
! OUTPUT / VISUALIZATION
! =============================================================================== !
@@ -31,13 +28,10 @@ ProjectName = Reservoir
Logging = F
WriteErrorFiles = F
printRandomSeeds= F
-
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-!CFLscale = 0.16 ! Scaling of theoretical CFL number should give a timestep of 7.33e-15 fs
CFLscale = 0.2432432404 ! Scaling of theoretical CFL number should give a timestep of 7.33e-15 fs
-DoWriteStateToHDF5 = T
! =============================================================================== !
! DSMC
! =============================================================================== !
@@ -47,7 +41,7 @@ Particles-DSMCReservoirSim = T
Particles-DSMCReservoirSimRate = T
Particles-DSMCReservoirStatistic = T
-Particles-DSMC-CollisMode = 3 !(0: No Collisions (0:free molecular flow with DSMC-Sampling-Routines, 1:elast coll, 2: elast + rela, 3:chem)
+Particles-DSMC-CollisMode = 3
Particles-DSMC-ElectronicModel = 0
Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK = true
@@ -65,7 +59,6 @@ Particles-DSMC-CalcQualityFactors = F
! =============================================================================== !
! PARTICLES
! =============================================================================== !
-Part-maxParticleNumber = 500000
! Boundaries
Part-nBounds = 1
Part-Boundary1-SourceName = BC_wall
@@ -73,12 +66,12 @@ Part-Boundary1-Condition = reflective
Part-FIBGMdeltas = (/4.64E-6,4.64E-6,4.64E-6/)
Part-nSpecies = 2
+Part-Species$-MacroParticleFactor = 5E2
! =============================================================================== !
! Species1 | N2
! =============================================================================== !
Part-Species1-MassIC = 4.65200E-26 ! N_2 Molecular Mass: 2 x 2.32600 × 10^-26 kg
Part-Species1-ChargeIC = 0
-Part-Species1-MacroParticleFactor = 5E2
Part-Species1-nInits=1
Part-Species1-Init1-SpaceIC = cuboid
@@ -100,7 +93,6 @@ Part-Species1-Init1-VeloVecIC = (/0.,0.,1./)
! =============================================================================== !
Part-Species2-MassIC = 2.32600E-26
Part-Species2-ChargeIC = 0.0
-Part-Species2-MacroParticleFactor = 5E2
Part-Species2-nInits=1
Part-Species2-Init1-SpaceIC = cuboid
diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2/externals.ini b/regressioncheck/NIG_Reservoir/RELAX_N2/externals.ini
new file mode 100644
index 000000000..0bdc5a5c4
--- /dev/null
+++ b/regressioncheck/NIG_Reservoir/RELAX_N2/externals.ini
@@ -0,0 +1,6 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
\ No newline at end of file
diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2/hopr.ini b/regressioncheck/NIG_Reservoir/RELAX_N2/hopr.ini
index 52ea18fef..a24a495c2 100644
--- a/regressioncheck/NIG_Reservoir/RELAX_N2/hopr.ini
+++ b/regressioncheck/NIG_Reservoir/RELAX_N2/hopr.ini
@@ -1,46 +1,25 @@
-!=============================================================================== !
-! MAKEFILE PARAMETER (put a "#" in front, NO blanks!)
-!=============================================================================== !
-! This is only a dummy parameter needed for the regression check
-#MPI=
-
!=============================================================================== !
! OUTPUT
!=============================================================================== !
- ProjectName =cube ! name of the project (used for filenames)
- Debugvisu =F ! Write debug mesh to tecplot file
- Logging =F ! Write log files
-
+ProjectName =cube ! name of the project (used for filenames)
+Debugvisu =F ! Write debug mesh to tecplot file
+Logging =F ! Write log files
!=============================================================================== !
! MESH
!=============================================================================== !
- Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
- nZones =1 ! number of zones
- Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0. ,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/) ! [0,1.0]x[0,]x[0,0.05]
- nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128)
- BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries
- elemtype =108 ! Elementform (108: Hexaeder)
- useCurveds =F ! T if curved boundaries defined
- SpaceQuandt =0.5 ! characteristic length of the mesh
- ConformConnect=T
-
- postScaleMesh=T
- meshScale=4.64E-6
-
+Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones =1 ! number of zones
+Corner =(/0.,0.,0.,,1.0,0.,0.,,1.0,1.0,0.,,0.,1.0,0. ,,0.,0.,1.0,,1.0,0.,1.0,,1.0,1.0,1.0,,0.,1.0,1.0/) ! [0,1.0]x[0,]x[0,0.05]
+nElems =(/1,1,1/) ! Anzahl der Elemente in jede Richtung (nfine 4:16 5:32 6:64 7:128)
+BCIndex =(/1,1,1,1,1,1/) ! Indices of UserDefinedBoundaries
+elemtype =108 ! Elementform (108: Hexaeder)
+useCurveds =F ! T if curved boundaries defined
+SpaceQuandt =0.5 ! characteristic length of the mesh
+ConformConnect=T
+postScaleMesh=T
+meshScale=4.64E-6
!=============================================================================== !
! BOUNDARY CONDITIONS
!=============================================================================== !
- nUserDefinedBoundaries=1
- BoundaryName=BC_wall ! Outflow: open (absorbing) [for MAXWELL]
- BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL]
-
-!=============================================================================== !
-! BASIS
-!=============================================================================== !
- NVisu = 7
-
-!=============================================================================== !
-! SEARCH
-!=============================================================================== !
-! nElemsNodeSearch=50
-! RefineSideSearch=50
+BoundaryName=BC_wall ! Outflow: open (absorbing) [for MAXWELL]
+BoundaryType=(/4,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL]
\ No newline at end of file
diff --git a/regressioncheck/NIG_Reservoir/RELAX_N2/parameter.ini b/regressioncheck/NIG_Reservoir/RELAX_N2/parameter.ini
index 3811659a1..7492dda51 100644
--- a/regressioncheck/NIG_Reservoir/RELAX_N2/parameter.ini
+++ b/regressioncheck/NIG_Reservoir/RELAX_N2/parameter.ini
@@ -5,7 +5,7 @@ N = 1
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-ManualTimeStep= 4.0E-9
+ManualTimeStep = 4.0E-9
tend = 6.0e-6
Analyze_dt = 1E-2
@@ -14,15 +14,11 @@ Part-AnalyzeStep = 20
Field-AnalyzeStep = 20
IterDisplayStep = 1000
! =============================================================================== !
-! DISCRETIZATION
-! =============================================================================== !
-CFLscale = 0.2432432404 ! Scaling of theoretical CFL number should give a timestep of 7.33e-15 fs
-! =============================================================================== !
! MESH
! =============================================================================== !
MeshFile = cube_mesh.h5
useCurveds = F
-TrackingMethod = tracing
+TrackingMethod = triatracking
! Boundaries
Part-nBounds = 1
Part-Boundary1-SourceName = BC_wall
@@ -49,10 +45,10 @@ Particles-DSMCReservoirSim = T
Particles-DSMCReservoirSimRate = F
Particles-DSMCReservoirStatistic = F
-Particles-DSMC-CollisMode = 2 !(0: No Collisions (0:free molecular flow with DSMC-Sampling-Routines, 1:elast coll, 2: elast + rela, 3:chem)
+Particles-DSMC-CollisMode = 2
Particles-DSMC-ElectronicModel = 1,2,4
-Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK = true
+Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5
EpsMergeElectronicState = 0, 1.e-2 ! merge electronic energy levels when difference falls below eps
! Relaxation probabilities
diff --git a/regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/parameter.ini b/regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/parameter.ini
index 4b3cd0495..1ca1c6723 100644
--- a/regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/parameter.ini
+++ b/regressioncheck/NIG_Reservoir/VarRelaxProb_Restart/parameter.ini
@@ -131,4 +131,4 @@ Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
Particles-RandomSeed2 = 2
Particles-DSMC-UseOctree = F
-Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-UseNearestNeighbour = F
diff --git a/regressioncheck/NIG_Reservoir/VarRelaxProb_hot/parameter.ini b/regressioncheck/NIG_Reservoir/VarRelaxProb_hot/parameter.ini
index 5038e4f79..0f2ad7245 100644
--- a/regressioncheck/NIG_Reservoir/VarRelaxProb_hot/parameter.ini
+++ b/regressioncheck/NIG_Reservoir/VarRelaxProb_hot/parameter.ini
@@ -92,6 +92,6 @@ Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
Particles-RandomSeed2=2
Particles-DSMC-UseOctree=F
-Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-UseNearestNeighbour = F
Particles-DSMCReservoirSim = T
diff --git a/regressioncheck/NIG_Reservoir/builds.ini b/regressioncheck/NIG_Reservoir/builds.ini
index 3bd7c1fa7..ae811b804 100644
--- a/regressioncheck/NIG_Reservoir/builds.ini
+++ b/regressioncheck/NIG_Reservoir/builds.ini
@@ -6,7 +6,7 @@ CMAKE_BUILD_TYPE=RELEASE
LIBS_BUILD_HDF5 =OFF
PICLAS_POLYNOMIAL_DEGREE=N
PICLAS_EQNSYSNAME=maxwell
-PICLAS_TIMEDISCMETHOD=RESERVOIR
+PICLAS_TIMEDISCMETHOD=DSMC
LIBS_USE_MPI =ON
PICLAS_NODETYPE=GAUSS
diff --git a/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/parameter.ini b/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/parameter.ini
old mode 100755
new mode 100644
index 74000c0d2..3770fdac1
--- a/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/parameter.ini
+++ b/regressioncheck/NIG_code_analyze/CHEM_CONS_XSec_diss_ion_H2/parameter.ini
@@ -55,10 +55,6 @@ Particles-DSMCElectronicDatabase = Electronic-State-Database.h5
EpsMergeElectronicState = 1E-3
Part-Species$-ElecRelaxProb = 1.
-Particles-DSMCReservoirSim = T
-Particles-DSMCReservoirSimRate = F
-Particles-DSMCReservoirStatistic = F
-
Particles-DSMC-VibRelaxProb = 0.
! =============================================================================== !
! PARTICLES
diff --git a/regressioncheck/NIG_code_analyze/FieldIonization/parameter.ini b/regressioncheck/NIG_code_analyze/FieldIonization/parameter.ini
index 6ff35513b..ff7fe3954 100644
--- a/regressioncheck/NIG_code_analyze/FieldIonization/parameter.ini
+++ b/regressioncheck/NIG_code_analyze/FieldIonization/parameter.ini
@@ -72,7 +72,6 @@ Particles-DSMC-CollisMode = 0 !(0: No Collisions (0:free molecular flow w
Particles-DSMC-ElectronicModel = 1
Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK = true
EpsMergeElectronicState = 1.e-2 ! merge QK levels when difference falls below eps
-Particles-DSMCReservoirSim = F
Particles-NumberForDSMCOutputs = 0
Part-TimeFracForSampling = 0.0
Part-NumberOfRandomSeeds = 2
diff --git a/regressioncheck/NIG_code_analyze/Semicircle/parameter.ini b/regressioncheck/NIG_code_analyze/Semicircle/parameter.ini
index d187db88e..d23e36c6f 100644
--- a/regressioncheck/NIG_code_analyze/Semicircle/parameter.ini
+++ b/regressioncheck/NIG_code_analyze/Semicircle/parameter.ini
@@ -66,7 +66,6 @@ printDiffVec =(/0.21145302115002,0.18723754743135,0.,-0.26787840265560,-
! DSMC
! =============================================================================== !
UseDSMC=true
-Particles-DSMCReservoirSim=false
Particles-DSMC-CollisMode=0 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds =2
Particles-RandomSeed1= 1
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/analyze.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/analyze.ini
new file mode 100644
index 000000000..a8f0480ab
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/analyze.ini
@@ -0,0 +1,11 @@
+analyze_L2=2000
+
+
+! h-convergence test
+analyze_Convtest_h_cells=1,2,4,8,16,32,64
+
+analyze_Convtest_h_rate=1.0
+analyze_Convtest_h_tolerance=14e-2 ! gives order 2.6 due to N=N_Geo=2
+
+! for plotting directly in python
+use_matplot_lib=True
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/command_line.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/command_line.ini
new file mode 100644
index 000000000..7c23cf5c9
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/command_line.ini
@@ -0,0 +1 @@
+MPI=1,2,7
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/excludeBuild.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/excludeBuild.ini
new file mode 100644
index 000000000..f188e39f6
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/excludeBuild.ini
@@ -0,0 +1,6 @@
+! run only with PICLAS_PARTICLES = ON
+PICLAS_PARTICLES = OFF
+! run only with PICLAS_CODE_ANALYZE = ON
+PICLAS_CODE_ANALYZE = OFF
+! run only with PICLAS_PETSC = ON
+PICLAS_PETSC = OFF
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/externals.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/externals.ini
new file mode 100644
index 000000000..30e58e552
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/externals.ini
@@ -0,0 +1,7 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+
+!nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/hopr.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/hopr.ini
new file mode 100644
index 000000000..4823f61ac
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/hopr.ini
@@ -0,0 +1,103 @@
+!====================================================================================================================================================
+! Variables
+!====================================================================================================================================================
+
+DEFVAR=(INT):i0 = 1 , 2 , 4 , 8 , 16 , 32 , 64
+DEFVAR=(INT):i1 = 1 , 2 , 4 , 8 , 16 , 32 , 64
+DEFVAR=(INT):ix = 48 , 96 , 192 , 384 , 768 , 1536 , 3072
+
+DEFVAR = (REAL): f1 = 0.0
+DEFVAR = (REAL): f2 = 0.0
+DEFVAR = (REAL): f3 = 0.0
+
+nocrosscombination:DEFVAR=(INT):i0,DEFVAR=(INT):i1,DEFVAR=(INT):ix
+
+DEFVAR=(INT): iy = 1
+DEFVAR=(INT): iz = 1
+
+DEFVAR = (REAL): x0 = -10e-9
+!DEFVAR = (REAL): zero = 10000e-9
+DEFVAR = (REAL): zero = 0.0
+!DEFVAR = (REAL): x1 = 20000e-9
+DEFVAR = (REAL): x1 = 10e-9
+!DEFVAR = (REAL): x1 = 0.25e-3
+DEFVAR = (REAL): x2 = 1.0e-3
+
+DEFVAR = (REAL): y0 = 0.0
+DEFVAR = (REAL): y1 = 0.05e-3
+
+DEFVAR = (REAL): z0 = 0.0
+DEFVAR = (REAL): z1 = 0.05e-3
+!====================================================================================================================================================
+! General
+!====================================================================================================================================================
+ProjectName = 1D_mortonZ_ix
+Debugvisu = T
+DebugVisuLevel = 1
+NVisu = 1
+Mode = 1
+postscalemesh = T
+meshscale = 1.0
+!jacobiantolerance = 1e-20
+useCurveds = F
+SpaceQuandt = 1.0
+jacobianTolerance = 1e-19
+
+sfc_type = mortonZ
+
+!====================================================================================================================================================
+! Boundary Conditions
+!====================================================================================================================================================
+BoundaryName = BC_LEFT
+BoundaryType = (/4,0,0,0/)
+BoundaryName = BC_RIGHT
+BoundaryType = (/4,0,0,0/)
+
+BoundaryName = BC_periodicy+ ! Periodic (+vv2)
+BoundaryType = (/1,0,0,1/) ! Periodic (+vv2)
+BoundaryName = BC_periodicy- ! Periodic (-vv2)
+BoundaryType = (/1,0,0,-1/) ! Periodic (-vv2)
+
+BoundaryName = BC_periodicz+ ! Periodic (+vv3)
+BoundaryType = (/1,0,0,2/) ! Periodic (+vv3)
+BoundaryName = BC_periodicz- ! Periodic (-vv3)
+BoundaryType = (/1,0,0,-2/) ! Periodic (-vv3)
+
+nVV = 2 ! Anzahl der Verschiebungsvektoren für periodische RB ( = Anzahl periodische Ränder)
+VV = (/0. , y1 , 0./) ! Verschiebungsvektor 2 (y-Richtung)
+VV = (/0. , 0. , z1/) ! Verschiebungsvektor 3 (z-Richtung)
+
+! Inner BC
+BoundaryName = BC_DIELECTRIC ! BC index 7
+!BoundaryType = (/100,0,0,0/)
+BoundaryType = (/20,0,0,0/)
+
+
+!====================================================================================================================================================
+nZones = 3
+!====================================================================================================================================================
+
+! Dielectric
+Corner =(/x0,y0,z0,, zero,y0,z0,, zero,y1,z0,, x0,y1,z0,, x0,y0,z1,, zero,y0,z1,, zero,y1,z1,, x0,y1,z1 /)
+nElems =(/i0,iy,iz/)
+factor =(/f1,f2,f3/)
+BCIndex =(/5 ,3 ,7 ,4 ,1 ,6/) !
+! =(/z-,y-,x+,y+,x-,z+/) ! Indices of Boundary Conditions
+elemtype =108
+!====================================================================================================================================================
+! BL (for particle deposition)
+Corner =(/zero,y0,z0,, x1,y0,z0,, x1,y1,z0,, zero,y1,z0,, zero,y0,z1,, x1,y0,z1,, x1,y1,z1,, zero,y1,z1 /)
+nElems =(/i1,iy,iz/)
+factor =(/f1,f2,f3/)
+BCIndex =(/5 ,3 ,0 ,4 ,7 ,6/) !
+! =(/z-,y-,x+,y+,x-,z+/) ! Indices of Boundary Conditions
+elemtype =108
+!====================================================================================================================================================
+! Space between electrode (right) and dielectric layer
+Corner =(/x1,y0,z0,, x2,y0,z0,, x2,y1,z0,, x1,y1,z0,, x1,y0,z1,, x2,y0,z1,, x2,y1,z1,, x1,y1,z1 /)
+nElems =(/ix,iy,iz/)
+factor =(/f1,f2,f3/)
+BCIndex =(/5 ,3 ,2 ,4 ,0 ,6/) !
+! =(/z-,y-,x+,y+,x-,z+/) ! Indices of Boundary Conditions
+elemtype =108
+!====================================================================================================================================================
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/parameter.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/parameter.ini
new file mode 100644
index 000000000..3ac22eb57
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_slab_FPC/parameter.ini
@@ -0,0 +1,144 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 800
+DoCalcErrorNorms = T
+OutputErrorNormsToH5 = T
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+!NVisu = 1 ! Number of visualization points
+VisuParticles = T
+
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = 1D_mortonZ_48_mesh.h5 , 1D_mortonZ_96_mesh.h5 , 1D_mortonZ_192_mesh.h5 , 1D_mortonZ_384_mesh.h5 , 1D_mortonZ_768_mesh.h5 , 1D_mortonZ_1536_mesh.h5 , 1D_mortonZ_3072_mesh.h5
+useCurveds = F
+
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = 1D_ALD
+
+! =============================================================================== !
+! ANALYZE
+! =============================================================================== !
+IterDisplayStep = 1
+Part-AnalyzeStep = 1
+Field-AnalyzeStep = 1
+Surface-AnalyzeStep = 1
+
+PIC-OutputSource = T
+
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+ManualTimeStep = 1.0e-10
+tend = 1.0e-10
+Analyze_dt = 1.0e-10
+
+! =============================================================================== !
+! Field boundary conditions
+! =============================================================================== !
+! Change boundary condition on wall from Neumann to Dirichlet with Phi = 0 V
+BoundaryName = BC_RIGHT
+BoundaryType = (/6,1/) ! Dirichlet with ExactFunc + Nbr of RefState (5: +-, 6: always positive)
+RefState = (/ -10.0 , 0.0 , 0.0 /) ! RefState Nbr 1: Voltage, Frequency and Phase shift
+
+! FPC
+BoundaryName = BC_DIELECTRIC
+BoundaryType = (/20,1/) ! 20: activate FPC, 2: Group #1
+
+
+! =============================================================================== !
+! Dielectric
+! =============================================================================== !
+DoDielectric = T
+DielectricEpsR = 10.0
+!DielectricEpsR = 10000.0
+DielectricMuR = 1.0
+xyzDielectricMinMax = (/-1.0,0.0,-1.0,1.0,-1.0,1.0/) !
+!xyzDielectricMinMax = (/-1.0,10000.0e-9,-1.0,1.0,-1.0,1.0/) !
+
+DielectricNoParticles = F
+
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+
+Part-nSpecies = 1
+Part-maxParticleNumber = 20000
+
+! =============================================================================== !
+! PARTICLE BOUNDARIES
+! =============================================================================== !
+Part-FIBGMdeltas = (/ 1.000010e-3 , 0.05e-3 , 0.05e-3 /)
+Part-FactorFIBGM = (/ 100 , 1 , 1 /)
+
+Part-nBounds = 7
+
+Part-Boundary1-SourceName = BC_LEFT
+Part-Boundary1-Condition = open
+
+Part-Boundary2-SourceName = BC_RIGHT
+Part-Boundary2-Condition = open
+
+Part-Boundary3-SourceName = BC_periodicy+
+Part-Boundary3-Condition = periodic
+
+Part-Boundary4-SourceName = BC_periodicy-
+Part-Boundary4-Condition = periodic
+
+Part-Boundary5-SourceName = BC_periodicz+
+Part-Boundary5-Condition = periodic
+
+Part-Boundary6-SourceName = BC_periodicz-
+Part-Boundary6-Condition = periodic
+
+Part-nPeriodicVectors = 2
+
+Part-Boundary7-SourceName = BC_DIELECTRIC
+Part-Boundary7-Condition = reflective
+
+! =============================================================================== !
+! Species1
+! =============================================================================== !
+Part-Species1-ChargeIC = 2.5e-11 ! calculated to acquire sigma = 1e-2 C/m2
+Part-Species1-MassIC = 1.0 ! make super heavy
+Part-Species1-MacroParticleFactor = 1.0e-4
+
+Part-Species1-nInits = 0
+
+!Part-Species1-Init1-SpaceIC = point
+!Part-Species1-Init1-velocityDistribution = maxwell
+!Part-Species1-Init1-MWTemperatureIC = 1
+!Part-Species1-Init1-ParticleNumber = 1
+!Part-Species1-Init1-RadiusIC = 0.!20E-6
+!Part-Species1-Init1-BasePointIC = (/0.01e-9 , 2.5e-5 , 2.5e-5/)
+!Part-Species1-Init1-BaseVector1IC = (/0.0 , 0.0 , 0.0/)
+!Part-Species1-Init1-BaseVector2IC = (/0.0 , 0.0 , 0.0/)
+!Part-Species1-Init1-CylinderHeightIC = 0.!0E-6
+!Part-Species1-Init1-VeloIC = 0
+!Part-Species1-Init1-VeloVecIC = (/0.,0.,1./)
+!Part-Species1-Init1-Tempelec = 1
+
+Part-Species1-Init1-SpaceIC = cuboid
+Part-Species1-Init1-velocityDistribution = maxwell_lpn
+Part-Species1-Init1-MWTemperatureIC = 1.0
+Part-Species1-Init1-ParticleNumber = 10000
+
+!Part-Species1-Init1-BasePointIC = (/-1e-12 , 0. , 0./)
+!Part-Species1-Init1-BasePointIC = (/-5e-11 , 0. , 0./)
+Part-Species1-Init1-BasePointIC = (/0. , 0. , 0./)
+!Part-Species1-Init1-BasePointIC = (/5e-11 , 0. , 0./)
+!Part-Species1-Init1-BasePointIC = (/10010e-9 , 0. , 0./)
+
+Part-Species1-Init1-BaseVector1IC = (/0. , 5e-5 , 0./)
+Part-Species1-Init1-BaseVector2IC = (/0. , 0. , 5e-5/)
+Part-Species1-Init1-NormalIC = (/1. , 0. , 0./)
+Part-Species1-Init1-CuboidHeightIC = 1e-15
+Part-Species1-Init1-VeloIC = 0.
+Part-Species1-Init1-VeloVecIC = (/0.,1.,0./)
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/excludeBuild.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/excludeBuild.ini
index 4a99af81d..2169008ef 100644
--- a/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/excludeBuild.ini
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/excludeBuild.ini
@@ -1,4 +1,2 @@
-! Deactivate reggie for now
-! Fix by implementing dielectric <-> vacuum mortar interfaces correctly
-! Delete this file afterwards
-PICLAS_EQNSYSNAME = poisson
+! run only with particles
+PICLAS_PARTICLES=OFF
diff --git a/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/parameter.ini b/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/parameter.ini
index b6d217335..e308ae6d6 100644
--- a/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/parameter.ini
+++ b/regressioncheck/NIG_convtest_poisson/Dielectric_sphere_in_sphere_curved_mortar/parameter.ini
@@ -6,16 +6,11 @@ maxIterCG = 12000
crossProductMetrics = F ! bad for hyperbolic equations (free stream preservation), maybe good for HDG??
-
MeshFile = MESH3_sphere_center_004_002_NGeo2_mesh.h5, MESH3_sphere_center_008_004_NGeo2_mesh.h5 ! --> NGeo=2
-
-
useCurveds = T
-!MeshFile = sphere_004_NGeo4_mesh.h5
DielectricRadiusValue = 1.0
-
! =============================================================================== !
! EQUATION (linearscalaradvection)
! =============================================================================== !
@@ -26,56 +21,24 @@ TrackingMethod = refmapping
! OUTPUT / VISUALIZATION
! =============================================================================== !
ProjectName = sphere
-!NVisu = 4 ! Number of visualization points
-!NodeType_visu = VISU ! VISU... Equidistant points
-!VarName = ElectricFieldX
-!VarName = ElectricFieldY
-!VarName = ElectricFieldZ
-!Visu3D = T
Logging = F
WriteErrorFiles= F
printRandomSeeds = F
DoCalcErrorNorms = T
! =============================================================================== !
-! ANALYZE
-! =============================================================================== !
-CalcKineticEnergy = T
-CalcPotentialEnergy = T
-CalcNumSpec = T
-CalcInternalEnergy = T
-
-CalcTemp = T
-CalcTransTemp = T ! noch nicht im trunk
-
-CalcPartBalance = T! T -> defekt
-
-CalcVelos = F! T
-VelocityDirections = (/1,1,1,1/) ! x,y,z,abs
-
-CalcCollRates = T
-CalcReacRates = T
-Particles-DSMC-CalcQualityFactors = T
-
-Part-WriteMacroValues = T
-Part-IterationForMacroVal = 100
-Part-WriteFieldsToVTK = T
-! =============================================================================== !
! HDF5-Output
! =============================================================================== !
PIC-OutputSource = T
-
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-tend = 0.1!100.0E-12
-Analyze_dt = 0.1!100.0E-12
+tend = 0.1
+Analyze_dt = 0.1
Part-DelayTime = 1 ! delay time for particle push
-!ManualTimeStep=1.12E-13
-ManualTimestep=1!e-13 ! 1E21: 1.12E-13
-! 1E23: 1E-14
-Particles-HaloEpsVelo=1!300E6
+ManualTimestep=1
+Particles-HaloEpsVelo=1
CFLscale = 0.1 ! Scaling of theoretical CFL number
! =============================================================================== !
@@ -86,7 +49,6 @@ DielectricMuR = 1
xyzDielectricMinMax = (/-1.0,1.0,-1.0,1.0,-1.0,1.0/) !
DielectricCheckRadius = T
Dielectric_E_0 = -1.
-
! =============================================================================== !
! Field Boundaries
! =============================================================================== !
@@ -97,124 +59,32 @@ BoundaryType=(/2,200/)
! =============================================================================== !
! PARTICLES
! =============================================================================== !
-Part-maxParticleNumber=5!7000000
-Part-nSpecies=1!7
-PIC-externalField=(/0.,0.,0.,0.,0.,0./)
+Part-maxParticleNumber=5
+Part-nSpecies=1
Part-FIBGMdeltas=(/0.1,0.1,0.1/)
PIC-Deposition-Type = shape_function
PIC-shapefunction-radius = 0.3
-PIC-Depo-Periodic = FALSE
Part-nBounds = 1
Part-Boundary1-SourceName = BC_outer
Part-Boundary1-Condition = open
-
! =============================================================================== !
! DSMC
! =============================================================================== !
UseDSMC=F
-Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
-Particles-NumberForDSMCOutputs=0
-Part-TimeFracForSampling=0.0
-Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
-Part-NumberOfRandomSeeds =2
-Particles-RandomSeed1= 1
-Particles-RandomSeed2= 2
-
-! for chem reac + HDG
-Particles-DSMC-UseOctree=T
-Particles-DSMC-UseNearestNeighbour = T
-Particles-OctreePartNumNode=80
-Particles-OctreePartNumNodeMin=50
-
-EpsMergeElectronicState = 1.e-2 ! merge QK levels when difference falls below eps
-Particles-DSMC-BackwardReacRate = T ! automatic reaction backward rate calculation (when foward rate is defined)
-Particles-DSMC-PartitionMaxTemp = 1e9! maximale temperatur für allocation von kb=f(T), sonst abort
-Particles-DSMC-PartitionInterval = 50 ! dT for Intervall generation of kb
-
! =============================================================================== !
! Species1 | Al
! =============================================================================== !
Part-Species1-ChargeIC = 1
-Part-Species1-MassIC = 100000!4.47908080018E-26
+Part-Species1-MassIC = 100000
Part-Species1-MacroParticleFactor = 88
Part-Species1-nInits = 1
Part-Species1-Init1-SpaceIC = point
-Part-Species1-Init1-velocityDistribution = maxwell
Part-Species1-Init1-MWTemperatureIC = 400
Part-Species1-Init1-ParticleNumber = 1
-Part-Species1-Init1-RadiusIC = 0.!20E-6
Part-Species1-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-BaseVector1IC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-BaseVector2IC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-CylinderHeightIC = 0.!0E-6
Part-Species1-Init1-VeloIC = 0
Part-Species1-Init1-VeloVecIC = (/0.,0.,1./)
-Part-Species1-Init1-Tempelec = 400
-! =============================================================================== !
-! Species2, e-
-! =============================================================================== !
-Part-Species2-ChargeIC = -1.60217653E-19
-Part-Species2-MassIC = 9.1093826E-31
-Part-Species2-MacroParticleFactor = 88
-Part-Species2-nInits = 1
-
-Part-Species2-Init1-SpaceIC = cylinder
-Part-Species2-Init1-velocityDistribution = maxwell
-Part-Species2-Init1-MWTemperatureIC = 1.160e7
-Part-Species2-Init1-ParticleNumber = 2000000
-Part-Species2-Init1-RadiusIC = 20E-6
-Part-Species2-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species2-Init1-BaseVector1IC = (/1.0,0.0,0.0/)
-Part-Species2-Init1-BaseVector2IC = (/0.0,1.0,0.0/)
-Part-Species2-Init1-CylinderHeightIC = 70E-6
-Part-Species2-Init1-VeloIC = 0
-Part-Species2-Init1-VeloVecIC = (/0.,0.,1./)
-! =============================================================================== !
-! Species3, Al+
-! =============================================================================== !
-Part-Species3-ChargeIC=1.60217653E-19
-Part-Species3-MassIC=4.4789897064E-26
-Part-Species3-MacroParticleFactor=88
-! =============================================================================== !
-! Species4, Al+2
-! =============================================================================== !
-Part-Species4-ChargeIC = 3.20435306000000E-19
-Part-Species4-MassIC = 4.4788986125E-26
-Part-Species4-MacroParticleFactor = 88
-Part-Species4-nInits = 1
-
-Part-Species4-Init1-SpaceIC = cylinder
-Part-Species4-Init1-velocityDistribution = maxwell
-Part-Species4-Init1-MWTemperatureIC = 1.160e5
-Part-Species4-Init1-ParticleNumber = 1000000
-Part-Species4-Init1-RadiusIC = 20E-6
-Part-Species4-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species4-Init1-BaseVector1IC = (/1.0,0.0,0.0/)
-Part-Species4-Init1-BaseVector2IC = (/0.0,1.0,0.0/)
-Part-Species4-Init1-CylinderHeightIC = 70E-6
-Part-Species4-Init1-VeloIC = 0
-Part-Species4-Init1-VeloVecIC = (/0.,0.,1./)
-Part-Species4-Init1-Tempelec = 1.160e5
-! =============================================================================== !
-! Species5, Al+3
-! =============================================================================== !
-Part-Species5-ChargeIC=4.80652959000000E-19
-Part-Species5-MassIC=4.4788075187E-26
-Part-Species5-MacroParticleFactor=88
-! =============================================================================== !
-! Species6, Al+4
-! =============================================================================== !
-Part-Species6-ChargeIC= 6.40870612000000E-19
-Part-Species6-MassIC=4.4787164249E-26
-Part-Species6-MacroParticleFactor=88
-! =============================================================================== !
-! Species7, Al+5
-! =============================================================================== !
-Part-Species7-ChargeIC= 8.010882650000E-19
-Part-Species7-MassIC=4.4786253311E-26
-Part-Species7-MacroParticleFactor=88
diff --git a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_002_mesh.h5 b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_002_mesh.h5
deleted file mode 100644
index 78e3744d3..000000000
Binary files a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_002_mesh.h5 and /dev/null differ
diff --git a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_004_mesh.h5 b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_004_mesh.h5
deleted file mode 100644
index 8b7bca95e..000000000
Binary files a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_004_mesh.h5 and /dev/null differ
diff --git a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_008_mesh.h5 b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_008_mesh.h5
deleted file mode 100644
index 0d26a81e5..000000000
Binary files a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/CART_HEX_PERIODIC_MORTAR_FLIPPED_008_mesh.h5 and /dev/null differ
diff --git a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/excludeBuild.ini b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/excludeBuild.ini
new file mode 100644
index 000000000..2160ac999
--- /dev/null
+++ b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/excludeBuild.ini
@@ -0,0 +1,2 @@
+! run only with PICLAS_PETSC = OFF
+PICLAS_PETSC = ON
diff --git a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/parameter.ini b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/parameter.ini
index b2949c3e5..c4d04fef2 100644
--- a/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/parameter.ini
+++ b/regressioncheck/NIG_convtest_poisson/Laplace_h_N1_mortar/parameter.ini
@@ -6,14 +6,8 @@ maxIterCG = 12000
crossProductMetrics = F ! bad for hyperbolic equations (free stream preservation), maybe good for HDG??
-!MeshFile = CART_HEX_PERIODIC_002_3D_mesh.h5,CART_HEX_PERIODIC_004_3D_mesh.h5,CART_HEX_PERIODIC_008_3D_mesh.h5
MeshFile = CART_HEX_PERIODIC_MORTAR_002_3D_mesh.h5, CART_HEX_PERIODIC_MORTAR_004_3D_mesh.h5, CART_HEX_PERIODIC_MORTAR_008_3D_mesh.h5
-! Cannot be used, if the periodic boundaries are changed here!
-!MeshFile = CART_HEX_PERIODIC_MORTAR_FLIPPED_002_mesh.h5, CART_HEX_PERIODIC_MORTAR_FLIPPED_004_mesh.h5, CART_HEX_PERIODIC_MORTAR_FLIPPED_008_mesh.h5
-!MeshFile = CART_HEX_PERIODIC_MORTAR_FLIPPED_001_mesh.h5, CART_HEX_PERIODIC_MORTAR_FLIPPED_002_mesh.h5, CART_HEX_PERIODIC_MORTAR_FLIPPED_004_mesh.h5, CART_HEX_PERIODIC_MORTAR_FLIPPED_008_mesh.h5
-
-
useCurveds = F
DielectricRadiusValue = 1.0
@@ -45,33 +39,9 @@ WriteErrorFiles = F
printRandomSeeds = F
DoCalcErrorNorms = T
! =============================================================================== !
-! ANALYZE
-! =============================================================================== !
-CalcKineticEnergy = T
-CalcPotentialEnergy = T
-CalcNumSpec = T
-CalcInternalEnergy = T
-
-CalcTemp = T
-CalcTransTemp = T ! noch nicht im trunk
-
-CalcPartBalance = T! T -> defekt
-
-CalcVelos = F! T
-VelocityDirections = (/1,1,1,1/) ! x,y,z,abs
-
-CalcCollRates = T
-CalcReacRates = T
-Particles-DSMC-CalcQualityFactors = T
-
-Part-WriteMacroValues = T
-Part-IterationForMacroVal = 100
-Part-WriteFieldsToVTK = T
-! =============================================================================== !
! HDF5-Output
! =============================================================================== !
PIC-OutputSource = T
-
! =============================================================================== !
! CALCULATION
! =============================================================================== !
@@ -82,31 +52,18 @@ ManualTimestep = 1
Particles-HaloEpsVelo = 1
CFLscale = 0.1 ! Scaling of theoretical CFL number
-! =============================================================================== !
-! Dielectric
-! =============================================================================== !
-DoDielectric = F
-!DielectricTestCase = FishEyeLens ! Greenwood 1999: A field picture of wave propagation (Maxwell 1860)
-DielectricMuR = 1
-xyzDielectricMinMax = (/-1.0,1.0,-1.0,1.0,-1.0,1.0/) !
-DielectricCheckRadius = T
-Dielectric_E_0 = -1.
-
! =============================================================================== !
! PARTICLES
! =============================================================================== !
Part-maxParticleNumber=5
Part-nSpecies=1
-PIC-externalField=(/0.,0.,0.,0.,0.,0./)
Part-FIBGMdeltas=(/0.1,0.1,0.1/)
-
PIC-Deposition-Type = shape_function
PIC-shapefunction-radius = 0.3
-PIC-Depo-Periodic = FALSE
-Part-nBounds = 6
+Part-nBounds = 7
Part-Boundary1-SourceName = BC_z-
Part-Boundary1-Condition = open
Part-Boundary2-SourceName = BC_y-
@@ -118,47 +75,15 @@ Part-Boundary4-Condition = open
Part-Boundary5-SourceName = BC_x-
Part-Boundary5-Condition = open
Part-Boundary6-SourceName = BC_z+
+Part-Boundary6-Condition = open
+Part-Boundary7-SourceName = inner
-! =============================================================================== !
-! DSMC
-! =============================================================================== !
UseDSMC=F
-Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
-Particles-NumberForDSMCOutputs=0
-Part-TimeFracForSampling=0.0
-Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
-Part-NumberOfRandomSeeds =2
-Particles-RandomSeed1= 1
-Particles-RandomSeed2= 2
-
-
-
-! HDG
-
-! for chem reac + HDG
-Particles-DSMC-UseOctree=T
-Particles-DSMC-UseNearestNeighbour = T
-Particles-OctreePartNumNode=80
-Particles-OctreePartNumNodeMin=50
-
-
-!xyzPhysicalMinMax = (/-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,/) !
-
-
-EpsMergeElectronicState = 1.e-2 ! merge QK levels when difference falls below eps
-Particles-DSMC-BackwardReacRate = T ! automatic reaction backward rate calculation (when foward rate is defined)
-Particles-DSMC-PartitionMaxTemp = 1e9! maximale temperatur für allocation von kb=f(T), sonst abort
-Particles-DSMC-PartitionInterval = 50 ! dT for Intervall generation of kb
-
-
-
-
! =============================================================================== !
! Species1 | Al
! =============================================================================== !
Part-Species1-ChargeIC = 1
-Part-Species1-MassIC = 100000!4.47908080018E-26
+Part-Species1-MassIC = 100000
Part-Species1-MacroParticleFactor = 88
Part-Species1-nInits = 1
@@ -166,75 +91,6 @@ Part-Species1-Init1-SpaceIC = point
Part-Species1-Init1-velocityDistribution = maxwell
Part-Species1-Init1-MWTemperatureIC = 400
Part-Species1-Init1-ParticleNumber = 1
-Part-Species1-Init1-RadiusIC = 0.!20E-6
Part-Species1-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-BaseVector1IC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-BaseVector2IC = (/0.0,0.0,0.0/)
-Part-Species1-Init1-CylinderHeightIC = 0.!0E-6
Part-Species1-Init1-VeloIC = 0
Part-Species1-Init1-VeloVecIC = (/0.,0.,1./)
-Part-Species1-Init1-Tempelec = 400
-! =============================================================================== !
-! Species2, e-
-! =============================================================================== !
-Part-Species2-VeloVecIC = (/0.,0.,1./)
-Part-Species2-ChargeIC = -1.60217653E-19
-Part-Species2-MassIC = 9.1093826E-31
-Part-Species2-nInits = 1
-
-Part-Species2-Init1-SpaceIC = cylinder
-Part-Species2-Init1-velocityDistribution = maxwell
-Part-Species2-Init1-MWTemperatureIC = 1.160e7
-Part-Species2-Init1-ParticleNumber = 2000000
-Part-Species2-Init1-RadiusIC = 20E-6
-Part-Species2-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species2-Init1-BaseVector1IC = (/1.0,0.0,0.0/)
-Part-Species2-Init1-BaseVector2IC = (/0.0,1.0,0.0/)
-Part-Species2-Init1-CylinderHeightIC = 70E-6
-Part-Species2-Init1-VeloIC = 0
-Part-Species2-Init1-MacroParticleFactor = 88
-! =============================================================================== !
-! Species3, Al+
-! =============================================================================== !
-Part-Species3-ChargeIC=1.60217653E-19
-Part-Species3-MassIC=4.4789897064E-26
-Part-Species3-MacroParticleFactor=88
-Part-Species3-Tempelec=1.160e5
-! =============================================================================== !
-! Species4, Al+2
-! =============================================================================== !
-Part-Species4-ChargeIC = 3.20435306000000E-19
-Part-Species4-MassIC = 4.4788986125E-26
-Part-Species4-MacroParticleFactor = 88
-Part-Species4-nInits = 1
-
-Part-Species4-Init1-SpaceIC = cylinder
-Part-Species4-Init1-velocityDistribution = maxwell
-Part-Species4-Init1-MWTemperatureIC = 1.160e5
-Part-Species4-Init1-ParticleNumber = 1000000
-Part-Species4-Init1-RadiusIC = 20E-6
-Part-Species4-Init1-BasePointIC = (/0.0,0.0,0.0/)
-Part-Species4-Init1-BaseVector1IC = (/1.0,0.0,0.0/)
-Part-Species4-Init1-BaseVector2IC = (/0.0,1.0,0.0/)
-Part-Species4-Init1-CylinderHeightIC = 70E-6
-Part-Species4-Init1-VeloIC = 0
-Part-Species4-Init1-VeloVecIC = (/0.,0.,1./)
-Part-Species4-Init1-Tempelec = 1.160e5
-! =============================================================================== !
-! Species5, Al+3
-! =============================================================================== !
-Part-Species5-ChargeIC=4.80652959000000E-19
-Part-Species5-MassIC=4.4788075187E-26
-Part-Species5-MacroParticleFactor=88
-! =============================================================================== !
-! Species6, Al+4
-! =============================================================================== !
-Part-Species6-ChargeIC= 6.40870612000000E-19
-Part-Species6-MassIC=4.4787164249E-26
-Part-Species6-MacroParticleFactor=88
-! =============================================================================== !
-! Species7, Al+5
-! =============================================================================== !
-Part-Species7-ChargeIC= 8.010882650000E-19
-Part-Species7-MassIC=4.4786253311E-26
-Part-Species7-MacroParticleFactor=88
diff --git a/regressioncheck/NIG_convtest_poisson/builds.ini b/regressioncheck/NIG_convtest_poisson/builds.ini
index ca6975ed5..ec646131a 100644
--- a/regressioncheck/NIG_convtest_poisson/builds.ini
+++ b/regressioncheck/NIG_convtest_poisson/builds.ini
@@ -2,10 +2,13 @@
binary=./bin/piclas
! fixed compiler flags
-CMAKE_BUILD_TYPE = Release
+CMAKE_BUILD_TYPE = Debug,Release
LIBS_BUILD_HDF5 = OFF
PICLAS_POLYNOMIAL_DEGREE = N
PICLAS_EQNSYSNAME = poisson
PICLAS_TIMEDISCMETHOD = RK3
LIBS_USE_MPI = ON
PICLAS_NODETYPE = GAUSS
+PICLAS_PARTICLES = ON,OFF
+PICLAS_CODE_ANALYZE = ON,OFF
+PICLAS_PETSC = ON,OFF
diff --git a/regressioncheck/NIG_convtest_t_maxwell/builds.ini b/regressioncheck/NIG_convtest_t_maxwell/builds.ini
index 337356014..30d2a5b72 100644
--- a/regressioncheck/NIG_convtest_t_maxwell/builds.ini
+++ b/regressioncheck/NIG_convtest_t_maxwell/builds.ini
@@ -1,18 +1,18 @@
! relative binary path in build directory
binary=./bin/piclas
-! fixed important compiler flags
-PICLAS_TIMEDISCMETHOD=RK3,RK4,CN,ImplicitO3,ImplicitO4,ROS46
-PICLAS_CODE_ANALYZE=ON
-PICLAS_PARTICLES=ON
+! variable compiler flags
+PICLAS_TIMEDISCMETHOD = RK3,RK4,CN,ImplicitO3,ImplicitO4,ROS46
-! other
-CMAKE_BUILD_TYPE=Release
-LIBS_BUILD_HDF5 =OFF
-PICLAS_POLYNOMIAL_DEGREE=N
-PICLAS_EQNSYSNAME=maxwell
-LIBS_USE_MPI =ON
-PICLAS_NODETYPE=GAUSS
+! fixed compiler flags
+PICLAS_CODE_ANALYZE = ON
+PICLAS_PARTICLES = ON
+CMAKE_BUILD_TYPE = Release
+LIBS_BUILD_HDF5 = OFF
+PICLAS_POLYNOMIAL_DEGREE = N
+PICLAS_EQNSYSNAME = maxwell
+LIBS_USE_MPI = ON
+PICLAS_NODETYPE = GAUSS
! do not mix multiple definitions for PICLAS_TIMEDISCMETHOD and PICLAS_EQNSYSNAME
nocrosscombination:PICLAS_TIMEDISCMETHOD,PICLAS_EQNSYSNAME
diff --git a/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini b/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini
index c420f9033..7d6e6a64a 100644
--- a/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini
+++ b/regressioncheck/NIG_dielectric/HDG_cylinder/parameter.ini
@@ -122,7 +122,6 @@ Part-nPeriodicVectors=2
! =============================================================================== !
UseDSMC=F
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini b/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini
index 1afa7ca79..a2fb4ea30 100644
--- a/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini
+++ b/regressioncheck/NIG_dielectric/HDG_slab/parameter.ini
@@ -127,7 +127,6 @@ Part-nPeriodicVectors=2
! =============================================================================== !
UseDSMC=F
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini
index fab85c66e..0cc1a8e77 100644
--- a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini
+++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_analytical_BC/parameter.ini
@@ -123,7 +123,6 @@ Part-Boundary6-Condition = open
! =============================================================================== !
UseDSMC=F
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini
index fe7fb8648..3f2e1095e 100644
--- a/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini
+++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_box_potential_BC/parameter.ini
@@ -133,7 +133,6 @@ Part-nPeriodicVectors=2
! =============================================================================== !
UseDSMC=F
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini b/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini
index a4a1d9041..e40b6f32d 100644
--- a/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini
+++ b/regressioncheck/NIG_dielectric/HDG_sphere_in_sphere_analytical_BC/parameter.ini
@@ -96,7 +96,6 @@ Part-Boundary1-Condition = open
! =============================================================================== !
UseDSMC=F
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_poisson_PETSC/poisson/analyze.ini b/regressioncheck/NIG_poisson_PETSC/poisson/analyze.ini
index 029e97b63..33d062d8f 100644
--- a/regressioncheck/NIG_poisson_PETSC/poisson/analyze.ini
+++ b/regressioncheck/NIG_poisson_PETSC/poisson/analyze.ini
@@ -21,7 +21,7 @@ integrate_line_tolerance_type = relative ! relative or absolute
! compare the last row in SurfaceAnalyze.csv with a reference file
compare_data_file_name = SurfaceAnalyze.csv
compare_data_file_reference = SurfaceAnalyze_reference.csv
-compare_data_file_tolerance = 80e-2 ! 1e-2
+compare_data_file_tolerance = 85e-2 ! 1e-2
compare_data_file_tolerance_type = relative
! ===================================================================================================================
diff --git a/regressioncheck/NIG_sanitize/poisson/parameter.ini b/regressioncheck/NIG_sanitize/poisson/parameter.ini
index 1ff1e4470..0772af05f 100644
--- a/regressioncheck/NIG_sanitize/poisson/parameter.ini
+++ b/regressioncheck/NIG_sanitize/poisson/parameter.ini
@@ -121,29 +121,9 @@ Part-PartLorentzType = 3 ! old
! =============================================================================== !
! DSMC
! =============================================================================== !
-! UseDSMC=false
-! Particles-DSMCReservoirSim=false
-! Particles-NumberForDSMCOutputs=0
-! Part-TimeFracForSampling=0.0
-! Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
-! Part-NumberOfRandomSeeds =2
-! Particles-RandomSeed1= 1
-! Particles-RandomSeed2= 2
-! !ManualTimeStep=3.3E-13
-!
-! Particles-HaloEpsVelo=300E6
-! epsCG=1e-6 ! 1.0E-6
-! maxIterCG=2000 !'500'
-! ! MISC
-!
-! xyzPhysicalMinMax = (/-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,/) !
-
-
-
UseDSMC=T ! yolo
Particles-DSMC-ElectronicModel= 1
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/regressioncheck/NIG_tracking_DSMC/ANSA_box/hopr.ini b/regressioncheck/NIG_tracking_DSMC/ANSA_box/hopr.ini
index d0200dadd..ea0bcdca1 100644
--- a/regressioncheck/NIG_tracking_DSMC/ANSA_box/hopr.ini
+++ b/regressioncheck/NIG_tracking_DSMC/ANSA_box/hopr.ini
@@ -1,38 +1,25 @@
!=============================================================================== !
! OUTPUT
!=============================================================================== !
- ProjectName =tildbox ! name of the project (used for filenames)
- Debugvisu =F ! Write debug mesh to tecplot file
- Logging =F ! Write log files
+ProjectName = tildbox ! name of the project (used for filenames)
+Debugvisu = F ! Write debug mesh to tecplot file
+Logging = F ! Write log files
!=============================================================================== !
! MESH
!=============================================================================== !
- Mode =4 ! 1 Cartesian 2 gambit file 3 CGNS
- nZones =1 ! number of zones
- nMeshFiles =1 ! number of meshfiles
- FileName =tildbox ! name of mesh file
- useCurveds =F ! T if curved boundaries defined
- SpaceQuandt =1. !
- ConformConnect=T
- !meshscale =0.001
- meshscale =1.0
+Mode = 4 ! 1 Cartesian 2 gambit file 3 CGNS
+nZones = 1 ! number of zones
+nMeshFiles = 1 ! number of meshfiles
+FileName = tildbox ! name of mesh file
+useCurveds = F ! T if curved boundaries defined
+SpaceQuandt = 1. !
+ConformConnect = T
+meshscale = 1.0
!=============================================================================== !
! BOUNDARY CONDITIONS
!=============================================================================== !
- nUserDefinedBoundaries=1
- BoundaryName=BC_Open ! Outflow: open (absorbing) [for MAXWELL]
- BoundaryType=(/3,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL]
-
-!=============================================================================== !
-! BASIS
-!=============================================================================== !
- NVisu = 7
-
-!=============================================================================== !
-! SEARCH
-!=============================================================================== !
-! nElemsNodeSearch=50
-! RefineSideSearch=50
-
+nUserDefinedBoundaries = 1
+BoundaryName = BC_Open ! Outflow: open (absorbing) [for MAXWELL]
+BoundaryType = (/3,0,0,0/) ! Outflow: open (absorbing) [for MAXWELL]
diff --git a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini
index 0174d1da7..4744331ee 100644
--- a/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini
+++ b/regressioncheck/NIG_tracking_DSMC/ANSA_box/parameter.ini
@@ -1,13 +1,10 @@
! =============================================================================== !
-! EQUATION (linearscalaradvection)
-! =============================================================================== !
-IniExactFunc = 0
-! =============================================================================== !
! DISCRETIZATION
! =============================================================================== !
N = 1 ! Polynomial degree
GeometricNGeo = 1 ! Degree of mesh representation
NAnalyze = 10 ! Number of analyze points
+IniExactFunc = 0
! =============================================================================== !
! MESH
! =============================================================================== !
@@ -20,13 +17,17 @@ BoundaryType=(/4,0/)
! OUTPUT / VISUALIZATION
! =============================================================================== !
ProjectName = tildbox
-NVisu = 4 ! Number of visualization points
+NVisu = 1 ! Number of visualization points
CalcKineticEnergy = TRUE
CalcTransTemp = TRUE
Logging = F
printRandomSeeds = F
DoCalcErrorNorms = T
FlushInitialState = T
+
+Part-WriteMacroSurfaceValues = T
+DSMC-nSurfSample = 2
+Part-IterationForMacroVal = 100
! =============================================================================== !
! CALCULATION
! =============================================================================== !
diff --git a/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini b/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini
index 4d9d4567c..ec94670d7 100644
--- a/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini
+++ b/regressioncheck/NIG_tracking_DSMC/curved/parameter.ini
@@ -21,6 +21,7 @@ RefMappingEps = 1e-5
RefMappingGuess = 3
BezierNewtonTolerance = 1e-4
BezierSplitLimit = 0.8
+Part-MPI-UNFP-afterPartSend = true
! =============================================================================== !
! OUTPUT / VISUALIZATION
! =============================================================================== !
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/DSMC.ini b/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/DSMC.ini
deleted file mode 100644
index 996695049..000000000
--- a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/DSMC.ini
+++ /dev/null
@@ -1,21 +0,0 @@
-! =============================================================================== !
-! Species1, N2
-! =============================================================================== !
-Part-Species1-SpeciesName = N2
-Part-Species1-InteractionID = 2
-Part-Species1-Tref = 273
-Part-Species1-dref = 4.17E-10
-Part-Species1-omega = 0.24
-Part-Species1-CharaTempVib = 3393.3
-Part-Species1-Ediss_eV = 9.79
-! =============================================================================== !
-! Species2, O2
-! =============================================================================== !
-Part-Species2-SpeciesName = O2
-Part-Species2-InteractionID = 2
-Part-Species2-Tref = 273
-Part-Species2-dref = 3.98E-10
-Part-Species2-omega = 0.24
-Part-Species2-CharaTempVib = 2272.8
-Part-Species2-Ediss_eV = 5.16
-
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/readme.md b/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/readme.md
deleted file mode 100644
index 7d59cfd97..000000000
--- a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# BGK-Flow - Hypersonic flow around a 70° Cone (Axisymmetric)
-* Simulation of a hypersonic N2/O2 flow around a 70° blunted cone at M = 20
-* Test case based on Allègre, J., Bisch, D., & Lengrand, J. C. (1997). Experimental Rarefied Heat Transfer at Hypersonic Conditions over 70-Degree Blunted Cone. Journal of Spacecraft and Rockets, 34(6), 724–728. https://doi.org/10.2514/2.3302
-* Comparison of the heat flux with a reference surface state file (produced with DSMC)
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini
index ed443a8a9..124d03216 100644
--- a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini
+++ b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini
@@ -32,6 +32,7 @@ PartWeightLoadBalance = T
DoInitialAutoRestart = T
InitialAutoRestart-PartWeightLoadBalance = T
LoadBalanceMaxSteps = 2 ! one initial and one at 5E-4
+UseH5IOLoadBalance = T
CalcSurfaceImpact = F
! =============================================================================== !
@@ -91,7 +92,6 @@ Particles-NumberForDSMCOutputs = 1
Part-TimeFracForSampling = 0.5
Particles-DSMC-CalcSurfaceVal = T
Particles-DSMC-CalcQualityFactors = T
-Particles-DSMCReservoirSim = F
Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_CollInt_ref.h5 b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_CollInt_ref.h5
index 6091c7653..a4322bc38 100644
Binary files a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_CollInt_ref.h5 and b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_CollInt_ref.h5 differ
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_Wilke_ref.h5 b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_Wilke_ref.h5
index 6aa323bb9..3cc6b5f34 100644
Binary files a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_Wilke_ref.h5 and b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/CouetteFlow_DSMCState_001.000000_Wilke_ref.h5 differ
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/CouetteFlow_DSMCState_001.000000_ref.h5 b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/CouetteFlow_DSMCState_001.000000_ref.h5
new file mode 100644
index 000000000..7a1197320
Binary files /dev/null and b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/CouetteFlow_DSMCState_001.000000_ref.h5 differ
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/DSMC.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/DSMC.ini
new file mode 100644
index 000000000..e606a8d77
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/DSMC.ini
@@ -0,0 +1,26 @@
+! =============================================================================== !
+! Species1, CO2
+! =============================================================================== !
+Part-Species1-SpeciesName = CO2
+Part-Species1-PolyatomicMol = true
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 5.10E-10
+Part-Species1-omega = 0.24
+Part-Species1-NumOfAtoms = 3
+Part-Species1-LinearMolec = true
+Part-Species1-CharaTempVib1 = 959.66
+Part-Species1-CharaTempVib2 = 959.66
+Part-Species1-CharaTempVib3 = 1918.6
+Part-Species1-CharaTempVib4 = 3382
+Part-Species1-Ediss_eV = 5.45
+! =============================================================================== !
+! Species2, N2
+! =============================================================================== !
+Part-Species2-SpeciesName = N2
+Part-Species2-InteractionID = 2
+Part-Species2-Tref = 273
+Part-Species2-dref = 4.17E-10
+Part-Species2-omega = 0.24
+Part-Species2-CharaTempVib = 3393.3
+Part-Species2-Ediss_eV = 9.79
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/analyze.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/analyze.ini
new file mode 100644
index 000000000..550e3909b
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/analyze.ini
@@ -0,0 +1,8 @@
+! hdf5 diff
+h5diff_file = CouetteFlow_DSMCState_001.000000.h5
+h5diff_reference_file = CouetteFlow_DSMCState_001.000000_ref.h5
+h5diff_data_set = ElemData
+h5diff_tolerance_value = 4
+h5diff_tolerance_type = absolute
+h5diff_max_differences = 600 ! Allowed differences for 3x100 densities and 3x100 vibrational temperatures
+h5diff_one_diff_per_run = T
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/command_line.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/command_line.ini
new file mode 100644
index 000000000..a2534cbf8
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/command_line.ini
@@ -0,0 +1,2 @@
+MPI=5
+cmd_suffix=DSMC.ini
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/externals.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/externals.ini
new file mode 100644
index 000000000..38d2ee749
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/externals.ini
@@ -0,0 +1,9 @@
+! --- Externals Tool Reggie
+MPI = 1 , 1 ! Single execution
+externalbinary = ./bin/piclas2vtk , ./bin/hopr ! Relative binary path in build directory
+externaldirectory = post-vtk-DSMC-conversion , ./pre-hopr ! Directory name, where the files are located for the external tool reggie
+externalruntime = post , pre ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = ../CouetteFlow_DSMCState_001.000000.h5 , ! Suffix for the binary execution
+cmd_pre_execute = cp\s-r\s../pre-hopr\s. , ! "\s" resembles a white space character in the command (simply using " " is not allowed)
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix,cmd_pre_execute
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/parameter.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/parameter.ini
new file mode 100644
index 000000000..aa3a184ae
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/parameter.ini
@@ -0,0 +1,136 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! =============================================================================== !
+! POSTI
+! =============================================================================== !
+NVisu = 1 ! Number of visualization points
+TimeStampLength = 10
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = pre-hopr/tunnel_mesh.h5
+useCurveds = F
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = CouetteFlow
+Logging = F
+WriteErrorFiles = F
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+IterDisplayStep = 1000
+Part-AnalyzeStep = 1000
+
+tend = 1.0
+Analyze_dt = 0.25
+
+ManualTimeStep = 1E-5
+
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.75
+! =============================================================================== !
+! LOAD BALANCE
+! =============================================================================== !
+DoLoadBalance = T
+PartWeightLoadBalance = T
+
+! Initial load balance
+DoInitialAutoRestart = T
+InitialAutoRestart-PartWeightLoadBalance = T
+LoadBalanceMaxSteps = 2
+Load-DeviationThreshold = 1E-9
+! =============================================================================== !
+! ESBGK
+! =============================================================================== !
+Particles-BGK-CollModel = 1 ! 1: ESBGK, 2: SBGK, 3: BGK
+Particles-BGK-MixtureModel = 2
+! =============================================================================== !
+! BOUNDARIES
+! =============================================================================== !
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_periodicx+
+Part-Boundary1-Condition=periodic
+Part-Boundary2-SourceName=BC_periodicx-
+Part-Boundary2-Condition=periodic
+Part-Boundary3-SourceName=BC_periodicy+
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-WallTemp=273.
+Part-Boundary3-WallVelo=(/350,0.,0./)
+Part-Boundary4-SourceName=BC_periodicy-
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-WallTemp=273.
+Part-Boundary4-WallVelo=(/-350,0.,0./)
+Part-Boundary5-SourceName=BC_periodicz+
+Part-Boundary5-Condition=periodic
+Part-Boundary6-SourceName=BC_periodicz-
+Part-Boundary6-Condition=periodic
+Part-nPeriodicVectors=2
+Part-FIBGMdeltas=(/0.005,0.005,0.005/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=50000
+Part-nSpecies=2
+Part-Species1-MacroParticleFactor=1E11
+Part-Species2-MacroParticleFactor=1E11
+! =============================================================================== !
+! Species1 CO2
+! =============================================================================== !
+Part-Species1-MassIC = 7.306E-26
+Part-Species1-ChargeIC=0
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cuboid
+Part-Species1-Init1-PartDensity=6.5E19
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-MWTemperatureIC=273.
+Part-Species1-Init1-TempVib=273.
+Part-Species1-Init1-TempRot=273.
+Part-Species1-Init1-BasePointIC=(/0.0,-0.5,0.0/)
+Part-Species1-Init1-BaseVector1IC=(/0.005,0.0,0.0/)
+Part-Species1-Init1-BaseVector2IC=(/0.,1.0,0.0/)
+Part-Species1-Init1-CuboidHeightIC=0.005
+Part-Species1-Init1-VeloIC=0.0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+! =============================================================================== !
+! Species2 N2
+! =============================================================================== !
+Part-Species2-ChargeIC=0
+Part-Species2-MassIC=4.65E-26 ! N2 Molecular Mass
+
+Part-Species2-nInits=1
+Part-Species2-Init1-SpaceIC=cuboid
+Part-Species2-Init1-PartDensity=6.5E19
+Part-Species2-Init1-velocityDistribution=maxwell_lpn
+Part-Species2-Init1-MWTemperatureIC=273.
+Part-Species2-Init1-TempVib=273.
+Part-Species2-Init1-TempRot=273.
+Part-Species2-Init1-BasePointIC=(/0.0,-0.5,0.0/)
+Part-Species2-Init1-BaseVector1IC=(/0.005,0.0,0.0/)
+Part-Species2-Init1-BaseVector2IC=(/0.,1.0,0.0/)
+Part-Species2-Init1-CuboidHeightIC=0.005
+Part-Species2-Init1-VeloIC=0.0
+Part-Species2-Init1-VeloVecIC=(/1.,0.,0./)
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-DSMC-CalcQualityFactors=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds =2
+Particles-RandomSeed1= 1
+Particles-RandomSeed2= 2
+Particles-HaloEpsVelo = 9000
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/post-vtk-DSMC-conversion/parameter.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/post-vtk-DSMC-conversion/parameter.ini
new file mode 100644
index 000000000..26b9fd923
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/post-vtk-DSMC-conversion/parameter.ini
@@ -0,0 +1 @@
+NVisu = 1
\ No newline at end of file
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/pre-hopr/hopr.ini b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/pre-hopr/hopr.ini
new file mode 100755
index 000000000..17388af01
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/pre-hopr/hopr.ini
@@ -0,0 +1,39 @@
+! =============================================================================== !
+! PREPROC
+! =============================================================================== !
+projectname=tunnel
+mode=1 ! 1 Cartesian 2 gambit file 3 CGNS
+useCurveds=F
+DebugVisu=T
+!=============================================================================== !
+! MESH
+!=============================================================================== !
+ Mode =1 ! 1 Cartesian 2 gambit file 3 CGNS
+ nZones =1 ! number of zones
+ Corner =(/0.,-0.5,0.,,0.005,-0.5,0.,,0.005,0.5,0.,,0.,0.5,0.,,0.,-0.5,0.005,,0.005,-0.5,0.005,,0.005,0.5,0.005,,0.,0.5,0.005/)
+ nElems =(/1,100,1/)
+ BCIndex =(/5,3,2,4,1,6/) ! Indices of UserDefinedBoundaries
+ elemtype =108 ! Elementform (108: Hexaeder)
+ useCurveds =F ! T if curved boundaries defined
+ SpaceQuandt =1. ! characteristic length of the mesh
+ ConformConnect=T
+
+!=============================================================================== !
+! BOUNDARY CONDITIONS
+!=============================================================================== !
+ nUserDefinedBoundaries=6
+ BoundaryName=BC_periodicx+ ! Periodic (+vv1)
+ BoundaryType=(/1,0,0,1/) ! Periodic (+vv1)
+ BoundaryName=BC_periodicx- ! Periodic (-vv1)
+ BoundaryType=(/1,0,0,-1/) ! Periodic (-vv1)
+ BoundaryName=BC_periodicy+ ! Periodic (+vv2)
+ BoundaryType=(/4,0,0,0/) ! Periodic (+vv2)
+ BoundaryName=BC_periodicy- ! Periodic (-vv2)
+ BoundaryType=(/4,0,0,0/) ! Periodic (-vv2)
+ BoundaryName=BC_periodicz+ ! Periodic (+vv3)
+ BoundaryType=(/1,0,0,2/) ! Periodic (+vv3)
+ BoundaryName=BC_periodicz- ! Periodic (-vv3)
+ BoundaryType=(/1,0,0,-2/) ! Periodic (-vv3)
+ nVV=2 ! Anzahl der Verschiebungsvektoren für periodische RB (=Anzahl periodische Ränder)
+ VV=(/0.005,0.,0./) ! Verschiebungsvektor 1 (x-Richtung)
+ VV=(/0.,0.,0.005/) ! Verschiebungsvektor 3 (z-Richtung)
diff --git a/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/readme.md b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/readme.md
new file mode 100644
index 000000000..21d214e4d
--- /dev/null
+++ b/regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/readme.md
@@ -0,0 +1,3 @@
+# BGK Multispecies - Supersonic Couette flow
+* Simulation of supersonic Couette flow: upper (y+) and lower (y-) boundaries with a wall velocity of +/-350 m/s, periodic boundary conditions in x and z
+* CO2-N2 mixture
diff --git a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/command_line.ini b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/command_line.ini
index 2df6de114..11fbc4524 100644
--- a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/command_line.ini
+++ b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/command_line.ini
@@ -1,2 +1,2 @@
-MPI=1
+MPI=6
cmd_suffix=DSMC.ini
diff --git a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini
index bc7e81ec5..35c1431c8 100644
--- a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini
+++ b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini
@@ -2,7 +2,7 @@
! =============================================================================== !
! DISCRETIZATION
! =============================================================================== !
-N = 2 ! Polynomial degree
+N = 1 ! Polynomial degree
NAnalyze = 1 ! Number of analyze points
IniExactFunc = 0
CFLscale = 0.2 ! Scaling of theoretical CFL number
@@ -22,8 +22,15 @@ IterDisplayStep = 500
! CALCULATION
! =============================================================================== !
tend = 2.25E-5
-Analyze_dt = 2.25E-5
+Analyze_dt = 7.5E-6
Particles-Symmetry-Order=1
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+DoInitialAutoRestart = T
+InitialAutoRestart-PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 3
! =============================================================================== !
! PARTICLES
! =============================================================================== !
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/PartAnalyze_ref.csv
new file mode 100644
index 000000000..956174e00
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/PartAnalyze_ref.csv
@@ -0,0 +1,22 @@
+001-TIME,002-NumDens-Spec-001,003-Massflow-Spec-001-SF-001,004-Pressure-Spec-001-SF-001,005-Massflow-Spec-001-SF-002,006-Pressure-Spec-001-SF-002
+0.00E+00,6.00E+20,0.00E+00,0.00E+00,0.00E+00,0.00E+00
+1.00E-06,6.07E+20,5.74E-09,3.68E+00,8.00E-11,2.53E+00
+2.00E-06,6.16E+20,6.90E-09,4.15E+00,8.77E-11,2.51E+00
+3.00E-06,6.25E+20,6.73E-09,4.74E+00,1.45E-10,2.49E+00
+4.00E-06,6.33E+20,6.16E-09,5.08E+00,7.25E-11,2.51E+00
+5.00E-06,6.39E+20,5.24E-09,5.25E+00,7.52E-11,2.53E+00
+6.00E-06,6.45E+20,4.55E-09,5.28E+00,3.99E-11,2.54E+00
+7.00E-06,6.50E+20,3.92E-09,5.27E+00,7.47E-11,2.54E+00
+8.00E-06,6.54E+20,3.43E-09,5.24E+00,8.42E-11,2.53E+00
+9.00E-06,6.58E+20,2.96E-09,5.22E+00,7.68E-11,2.52E+00
+1.00E-05,6.61E+20,2.59E-09,5.19E+00,0.00E+00,2.52E+00
+1.10E-05,6.64E+20,2.37E-09,5.16E+00,-3.85E-11,2.53E+00
+1.20E-05,6.67E+20,2.10E-09,5.13E+00,-1.51E-11,2.52E+00
+1.30E-05,6.70E+20,1.99E-09,5.09E+00,3.91E-11,2.51E+00
+1.40E-05,6.72E+20,1.92E-09,5.05E+00,3.06E-11,2.53E+00
+1.50E-05,6.74E+20,1.78E-09,5.06E+00,5.21E-11,2.53E+00
+1.60E-05,6.76E+20,1.69E-09,5.06E+00,3.24E-11,2.52E+00
+1.70E-05,6.79E+20,1.70E-09,5.04E+00,4.73E-11,2.52E+00
+1.80E-05,6.81E+20,1.66E-09,5.03E+00,-1.33E-11,2.53E+00
+1.90E-05,6.83E+20,1.64E-09,5.05E+00,1.94E-11,2.53E+00
+2.00E-05,6.85E+20,1.54E-09,5.05E+00,5.84E-12,2.53E+00
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini
new file mode 100644
index 000000000..b9c801897
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini
@@ -0,0 +1,6 @@
+! compare columns in a data file
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = PartAnalyze_ref.csv ! reference data file name
+compare_column_index = 2,3,5 ! Comparison of mass flow (only at SF=1) and pressure values at BCs
+compare_column_tolerance_value = 20e-2 ! tolerance
+compare_column_tolerance_type = relative ! absolute or relative comparison
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/command_line.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/externals.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/externals.ini
new file mode 100644
index 000000000..5d0519c91
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1
+externalbinary = ./hopr/build/bin/hopr
+externaldirectory = hopr.ini
+externalruntime = pre
+cmd_suffix =
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini
new file mode 100644
index 000000000..ae6663d54
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini
@@ -0,0 +1,39 @@
+ProjectName = channel_axi
+Debugvisu = T
+DebugVisuLevel=2
+NVisu =1
+Mode =1
+
+DEFVAR = (REAL): minus_x = 0.0
+DEFVAR = (REAL): plus_x = 10.0
+
+DEFVAR = (REAL): minus_y = 0.0
+DEFVAR = (REAL): plus_y = 0.564189583547756
+
+DEFVAR = (REAL): minus_z = -0.1
+DEFVAR = (REAL): plus_z = 0.1
+
+Corner =(/minus_x,minus_y,minus_z ,, plus_x,minus_y,minus_z ,, plus_x,plus_y,minus_z ,, minus_x,plus_y,minus_z ,, minus_x,minus_y,plus_z ,, plus_x,minus_y,plus_z ,, plus_x,plus_y,plus_z ,, minus_x,plus_y,plus_z /)
+nElems =(/100,10,1/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+nZones = 1
+nUserDefinedBoundaries=6
+BoundaryName=BC_Xplus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/3,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zminus
+BoundaryType=(/4,0,0,0/)
+
+postscalemesh=true
+meshscale=1e-3
+jacobiantolerance=1e-27
diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini
new file mode 100644
index 000000000..bfee0a2b4
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini
@@ -0,0 +1,142 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = channel_axi_mesh.h5
+useCurveds = F
+TrackingMethod = triatracking
+TimeStampLength = 14
+VisuParticles = T
+VisuAdaptiveInfo = T
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure_2DAxi
+IterDisplayStep = 10
+Part-AnalyzeStep = 5
+CalcSurfFluxInfo = TRUE
+CalcNumDens = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 2.0E-5
+Analyze_dt = 1.0E-5
+ManualTimeStep = 2.0E-7
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=symmetric_axis
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=symmetric
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=symmetric
+Part-FIBGMdeltas=(/2.5e-4,1e-3,1e-4/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=5E6
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=20
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=20
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-SamplingIteration = 10
+AdaptiveBC-TruncateRunningAverage = T
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.1
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=1
+Particles-RandomSeed2=2
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+! Symmetry
+Particles-Symmetry-Order = 2
+Particles-Symmetry2DAxisymmetric = T
+! Radial Weighting
+Particles-RadialWeighting = F,T
+Particles-RadialWeighting-PartScaleFactor = 3
+Particles-RadialWeighting-CloneMode = 2
+Particles-RadialWeighting-CloneDelay = 5
+Particles-RadialWeighting-SurfFluxSubSides = 2
+
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md
similarity index 86%
rename from regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md
rename to regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md
index 012a99941..9fa42a427 100644
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/readme.md
+++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/readme.md
@@ -1,4 +1,4 @@
-# DSMC - Pressure driven channel flow
+# DSMC - Pressure driven axisymmetric channel flow
* Simulation of a subsonic channel flow with O2
* Testing the adaptive surface flux boundary conditions (Type=1: Inflow, constant pressure and temperature and Type=2: Outflow with constant pressure)
* Inlet: 5 Pa, 300K, Outlet: 2.5 Pa, 300K
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/parameter.ini
index e5f06d50d..75243fdf6 100644
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/parameter.ini
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/parameter.ini
@@ -105,7 +105,7 @@ Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
! Continuous sample, where the current value is added partially, multiplied the relaxation factor
AdaptiveBC-RelaxationFactor = 0.1
! Sample is reset every given number of iterations
-AdaptiveBC-SamplingIteration = 0,10,10,10
+AdaptiveBC-SamplingIteration = 0,20,20,20
! Sample is not reset, current value replaces the oldest (DEFAULT: TRUE)
AdaptiveBC-TruncateRunningAverage = F,F,T,T
! Average the sample over the whole BC
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini
deleted file mode 100644
index 37bc4124e..000000000
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/DSMC.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-! =============================================================================== !
-! Species1, O2
-! =============================================================================== !
-Part-Species1-InteractionID = 2
-Part-Species1-Tref = 273
-Part-Species1-dref = 4.07E-10
-Part-Species1-omega=0.27
-Part-Species1-SymmetryFactor=2
-Part-Species1-CharaTempRot=2.1
-Part-Species1-CharaTempVib=2272.18
-Part-Species1-Ediss_eV=5.17
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/PartAnalyze_ref.csv
deleted file mode 100644
index 371d2937f..000000000
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/PartAnalyze_ref.csv
+++ /dev/null
@@ -1,52 +0,0 @@
-001-TIME,002-Massflow-Spec-001-SF-001,003-Pressure-Spec-001-SF-001,004-Massflow-Spec-001-SF-002,005-Pressure-Spec-001-SF-002
-0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
-0.1000000000000000E-005,0.1407551448000000E-012,0.2490906382378177E+001,0.5366655199999914E-015,0.2432101393652234E+001
-0.2000000000000000E-005,0.7561138959999994E-013,0.2590032809060696E+001,-.1235659076000000E-013,0.2454502334258208E+001
-0.3000000000000000E-005,0.5843277944000005E-013,0.2733879858690370E+001,-.2770469328000001E-013,0.2475825509865952E+001
-0.4000000000000000E-005,0.5059799419999997E-013,0.2927629921620722E+001,-.3500546976000000E-013,0.2481023695772101E+001
-0.5000000000000000E-005,0.4765164736000001E-013,0.3125960280547306E+001,-.4000017856000001E-013,0.2486569671222123E+001
-0.6000000000000001E-005,0.4443696776000004E-013,0.3318983684942288E+001,-.4170050495999999E-013,0.2494265145572775E+001
-0.7000000000000002E-005,0.4381528591999997E-013,0.3510783739326978E+001,-.4369573172000002E-013,0.2507254002553679E+001
-0.8000000000000001E-005,0.4449275971999997E-013,0.3689320427924668E+001,-.4467341940000001E-013,0.2517701470270561E+001
-0.9000000000000002E-005,0.4367182087999999E-013,0.3849659542467866E+001,-.4423771075999998E-013,0.2522248198463247E+001
-0.1000000000000000E-004,0.4233281384000012E-013,0.4009700372013185E+001,-.4465747884000012E-013,0.2530756512894340E+001
-0.1100000000000000E-004,0.4313811931816325E-013,0.4142587645480774E+001, NaN,0.2534356564300231E+001
-0.1200000000000000E-004,0.4328393392000002E-013,0.4258700719275140E+001,-.4460700040000000E-013,0.2542594719009637E+001
-0.1300000000000000E-004,0.4454855168000001E-013,0.4370880745492689E+001,-.4433069735999999E-013,0.2527021615812964E+001
-0.1400000000000000E-004,0.4303685524000002E-013,0.4462654070534977E+001,-.4346990712000001E-013,0.2532323716149372E+001
-0.1500000000000000E-004,0.4423771076000000E-013,0.4558279688327426E+001,-.4450604352000000E-013,0.2530781622725552E+001
-0.1600000000000000E-004,0.4259051955999997E-013,0.4624844128004400E+001,-.4507459015999999E-013,0.2536891403647415E+001
-0.1700000000000000E-004,0.4470530052000000E-013,0.4678660029754859E+001,-.4437851904000000E-013,0.2536364846958991E+001
-0.1800000000000000E-004,0.4252410056000001E-013,0.4735917313072325E+001,-.4508256044000002E-013,0.2542062252583417E+001
-0.1899999999999999E-004,0.4480360063999998E-013,0.4778029276902938E+001,-.4551029879999999E-013,0.2545212537963385E+001
-0.2000000000000000E-004,0.4193695659999926E-013,0.4813073637422776E+001,-.4526322011999920E-013,0.2535682115332173E+001
-0.2100000000000000E-004,0.4427756215999996E-013,0.4834928721981281E+001,-.4502942523999999E-013,0.2537207740932983E+001
-0.2200000000000000E-004,0.4203259996000002E-013,0.4849129074786056E+001,-.4416863500000000E-013,0.2551604627248110E+001
-0.2299999999999999E-004,0.4501348467999997E-013,0.4874941902327376E+001,-.4476109248000000E-013,0.2546905731572128E+001
-0.2399999999999999E-004,0.4239657608000002E-013,0.4891913016104239E+001,-.4390561576000001E-013,0.2531829368679717E+001
-0.2499999999999999E-004,0.4396937799999999E-013,0.4904955448039130E+001,-.4414472416000000E-013,0.2535768737378268E+001
-0.2599999999999998E-004,0.4500285764000002E-013,0.4916501352048824E+001,-.4348319092000000E-013,0.2527287747757919E+001
-0.2699999999999998E-004,0.4678288683999997E-013,0.4931845557781502E+001,-.4483548176000001E-013,0.2532055330016479E+001
-0.2799999999999998E-004,0.4382325620000000E-013,0.4923289626756192E+001,-.4382325620000000E-013,0.2523135357397364E+001
-0.2899999999999998E-004,0.4339817459999999E-013,0.4929993872464354E+001,-.4342474220000002E-013,0.2517473351245646E+001
-0.3000000000000000E-004,0.4298106327999751E-013,0.4942654931517663E+001,-.4380997239999745E-013,0.2515154069471571E+001
-0.3100000000000000E-004,0.4664739208000001E-013,0.4949959321726838E+001,-.4487533316000001E-013,0.2508224049938256E+001
-0.3200000000000000E-004,0.4303685523999999E-013,0.4961971425609685E+001,-.4589552900000000E-013,0.2505386057988473E+001
-0.3300000000000000E-004,0.4530307151999995E-013,0.4982368490599124E+001,-.4564579356000001E-013,0.2502293858993603E+001
-0.3399999999999999E-004,0.4463622475999998E-013,0.4986772237012213E+001,-.4440508664000000E-013,0.2504270993077120E+001
-0.3499999999999999E-004,0.4403314024000002E-013,0.4992578026636430E+001,-.4574409368000001E-013,0.2506529154978744E+001
-0.3599999999999999E-004,0.4768618523999996E-013,0.5007250674490085E+001,-.4349381796000000E-013,0.2502542158220145E+001
-0.3699999999999998E-004,0.4686524639999998E-013,0.4989217662064908E+001,-.4462559772000001E-013,0.2500423292097051E+001
-0.3799999999999998E-004,0.4297840652000000E-013,0.4989744980083459E+001,-.4483016824000000E-013,0.2499974138029126E+001
-0.3899999999999998E-004,0.4538277432000000E-013,0.4994232858795607E+001,-.4472655460000001E-013,0.2507952475041070E+001
-0.4000000000000000E-004,0.4342474219999772E-013,0.5008074900601144E+001,-.4366119383999775E-013,0.2514882427519038E+001
-0.4100000000000000E-004,0.4658628659999996E-013,0.5000693168248506E+001,-.4476109248000001E-013,0.2510032105507848E+001
-0.4200000000000000E-004,0.4587693167999997E-013,0.5012942943000840E+001,-.4368776144000000E-013,0.2505637955488610E+001
-0.4299999999999999E-004,0.4359477484000000E-013,0.4995621797199504E+001,-.4404642404000001E-013,0.2517036749184847E+001
-0.4399999999999999E-004,0.4369838847999999E-013,0.4995678022796347E+001,-.4477437628000002E-013,0.2513648991944137E+001
-0.4499999999999999E-004,0.4410487276000000E-013,0.5014420127032785E+001,-.4473186812000001E-013,0.2508885093847573E+001
-0.4599999999999999E-004,0.4566704764000000E-013,0.5020934185067342E+001,-.4454855168000000E-013,0.2517454085507660E+001
-0.4699999999999998E-004,0.4576003423999999E-013,0.5012401073775985E+001,-.4440508664000000E-013,0.2531486755600524E+001
-0.4799999999999998E-004,0.4621434019999998E-013,0.5001739494532067E+001,-.4580254240000000E-013,0.2537031559843018E+001
-0.4899999999999998E-004,0.4671381108000000E-013,0.5001713760738435E+001,-.4656768928000001E-013,0.2542998346733964E+001
-0.5000000000000000E-004,0.4503208199999768E-013,0.5010815383033106E+001,-.4590349927999764E-013,0.2538281782822818E+001
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/analyze.ini
deleted file mode 100644
index 94c18c8a9..000000000
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/analyze.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-compare_data_file_name = PartAnalyze.csv
-compare_data_file_reference = PartAnalyze_ref.csv
-compare_data_file_tolerance = 0.15
-compare_data_file_tolerance_type = relative
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/command_line.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/command_line.ini
deleted file mode 100644
index 9f0daafaf..000000000
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/command_line.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-MPI = 6
-cmd_suffix = DSMC.ini
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/cube_mesh.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/cube_mesh.h5
deleted file mode 100644
index 977eebcdb..000000000
Binary files a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/cube_mesh.h5 and /dev/null differ
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/PartAnalyze_ref.csv
new file mode 100644
index 000000000..8cd9b6036
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/PartAnalyze_ref.csv
@@ -0,0 +1,14 @@
+001-TIME,002-Massflow-Spec-001-SF-001,003-Pressure-Spec-001-SF-001,004-Massflow-Spec-001-SF-002,005-Pressure-Spec-001-SF-002
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.5000000000000000E-005,0.7275484124799999E-013,0.2304994726639544E+001,-.2191720729600000E-013,0.2656966335989959E+001
+0.1000000000000000E-004,0.4544334844800011E-013,0.4949660829542395E+001,-.4267181641600012E-013,0.2734585668114748E+001
+0.1500000000000000E-004,0.4325842902400000E-013,0.5148645716100196E+001,-.4456555494399999E-013,0.2702634896367288E+001
+0.2000000000000000E-004,0.4392368172799927E-013,0.5045000015180033E+001,-.4503527011199922E-013,0.2452395415772349E+001
+0.2499999999999999E-004,0.4248265510400000E-013,0.5031663993922057E+001,-.4447628780800000E-013,0.2608604989997243E+001
+0.3000000000000000E-004,0.4464419503999741E-013,0.4895827472057147E+001,-.4511391020799738E-013,0.2493630742367481E+001
+0.3499999999999999E-004,0.4645716806400000E-013,0.5025552778694175E+001,-.4495450460800000E-013,0.2463565311175626E+001
+0.4000000000000000E-004,0.4284184905599780E-013,0.5007078491993546E+001,-.4566864169599765E-013,0.2462903245527397E+001
+0.4499999999999999E-004,0.4644866643200002E-013,0.5094983506369541E+001,-.4395343744000000E-013,0.2428584439763453E+001
+0.5000000000000000E-004,0.4505652419199768E-013,0.5038708206558857E+001,-.4561125567999765E-013,0.2584083888908722E+001
+0.5499999999999999E-004,0.4365375491199999E-013,0.5038708206558857E+001,-.4349009849599999E-013,0.2584083888908722E+001
+0.6000000000000000E-004,0.4149434038399786E-013,0.4976432903989231E+001,-.4296618542399780E-013,0.2629462215338533E+001
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini
new file mode 100644
index 000000000..c86bdbbad
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini
@@ -0,0 +1,6 @@
+! compare columns in a data file
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = PartAnalyze_ref.csv ! reference data file name
+compare_column_index = 2,4 ! Comparison of pressure values at BCs
+compare_column_tolerance_value = 20e-2 ! tolerance
+compare_column_tolerance_type = relative ! absolute or relative comparison
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/command_line.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/externals.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/externals.ini
new file mode 100644
index 000000000..a1777069f
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 6
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas
+externaldirectory = hopr.ini , parameter_macrorestart.ini
+externalruntime = pre , post
+cmd_suffix = , ConstPressure_State_000.00005000000000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/hopr.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/hopr.ini
similarity index 100%
rename from regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/hopr.ini
rename to regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/hopr.ini
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini
new file mode 100644
index 000000000..e8648cfeb
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini
@@ -0,0 +1,141 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcSurfFluxInfo = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 5.0E-5
+Analyze_dt = 1.0E-5
+ManualTimeStep = 5.0E-7
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber=200000
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-WallTemp=300.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-VibACC=1.
+Part-Boundary4-RotACC=1.
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=reflective
+Part-Boundary5-MomentumACC=1.
+Part-Boundary5-WallTemp=300.
+Part-Boundary5-TransACC=1.
+Part-Boundary5-VibACC=1.
+Part-Boundary5-RotACC=1.
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=reflective
+Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=5E2
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=5
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=5
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-SamplingIteration = 10
+AdaptiveBC-TruncateRunningAverage = F
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.1
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=3
+Particles-RandomSeed2=4
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini
new file mode 100644
index 000000000..c7355f1db
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini
@@ -0,0 +1,144 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcSurfFluxInfo = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 6.0E-5
+Analyze_dt = 1.0E-5
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-WallTemp=300.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-VibACC=1.
+Part-Boundary4-RotACC=1.
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=reflective
+Part-Boundary5-MomentumACC=1.
+Part-Boundary5-WallTemp=300.
+Part-Boundary5-TransACC=1.
+Part-Boundary5-VibACC=1.
+Part-Boundary5-RotACC=1.
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=reflective
+Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=2.5E2
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=5
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=5
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-SamplingIteration = 10
+AdaptiveBC-TruncateRunningAverage = F
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+ManualTimeStep=5.0000E-7
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.25
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=1
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+! =============================================================================== !
+! Macroscopic Restart
+! =============================================================================== !
+Particles-MacroscopicRestart = T
+Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.00005000000000000.h5
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md
new file mode 100644
index 000000000..ba6ab29b0
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/readme.md
@@ -0,0 +1,6 @@
+# DSMC - Pressure driven channel flow
+* Simulation of a subsonic channel flow with O2
+* Testing the adaptive surface flux boundary conditions (Type=1: Inflow, constant pressure and temperature and Type=2: Outflow with constant pressure)
+* Inlet: 5 Pa, 300K, Outlet: 2.5 Pa, 300K
+* Temporal evolution of the channel is sensitive to the chosen sampling method for the adaptive BC
+* Testing macroscopic restart with weighting factor change with post external
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/PartAnalyze_ref.csv
new file mode 100644
index 000000000..0ab345dcd
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/PartAnalyze_ref.csv
@@ -0,0 +1,14 @@
+001-TIME,002-Massflow-Spec-001-SF-001,003-Pressure-Spec-001-SF-001,004-Massflow-Spec-001-SF-002,005-Pressure-Spec-001-SF-002
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.5000000000000000E-005,0.7308853030400000E-013,0.3047418308502871E+001,-.2355377145600001E-013,0.2608331042460211E+001
+0.1000000000000000E-004,0.4280571712000012E-013,0.3939825955010785E+001,-.4172813526400011E-013,0.2596176961367860E+001
+0.1500000000000000E-004,0.4268669427200002E-013,0.4478825364269253E+001,-.4307564393600000E-013,0.2584401102818590E+001
+0.2000000000000000E-004,0.4551348691199922E-013,0.4795084294395991E+001,-.4337532646399924E-013,0.2590852966040118E+001
+0.2499999999999999E-004,0.4275683273600000E-013,0.5009594385883915E+001,-.4467607616000000E-013,0.2569893185825930E+001
+0.3000000000000000E-004,0.4051877811199767E-013,0.4963360726123262E+001,-.4434663791999743E-013,0.2535185590191635E+001
+0.3499999999999999E-004,0.4307776934400001E-013,0.4942743606514933E+001,-.4202569238399999E-013,0.2557125395080740E+001
+0.4000000000000000E-004,0.4397681692799774E-013,0.4846822113599464E+001,-.4245502479999781E-013,0.2541189057320661E+001
+0.4499999999999999E-004,0.4598957830400003E-013,0.4884181334636695E+001,-.4553474099200000E-013,0.2510860761072681E+001
+0.5000000000000000E-004,0.4325205279999779E-013,0.4967581926418702E+001,-.4645504265599761E-013,0.2500421596090820E+001
+0.5499999999999999E-004,0.4394812391999997E-013,0.4975527200561242E+001,-.4454217545600000E-013,0.2499362406502649E+001
+0.6000000000000000E-004,0.4587161815999762E-013,0.4973044248261038E+001,-.4489924399999769E-013,0.2520570904190151E+001
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini
new file mode 100644
index 000000000..c86bdbbad
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini
@@ -0,0 +1,6 @@
+! compare columns in a data file
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = PartAnalyze_ref.csv ! reference data file name
+compare_column_index = 2,4 ! Comparison of pressure values at BCs
+compare_column_tolerance_value = 20e-2 ! tolerance
+compare_column_tolerance_type = relative ! absolute or relative comparison
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/command_line.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/externals.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/externals.ini
new file mode 100644
index 000000000..a1777069f
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 6
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas
+externaldirectory = hopr.ini , parameter_macrorestart.ini
+externalruntime = pre , post
+cmd_suffix = , ConstPressure_State_000.00005000000000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/hopr.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/hopr.ini
new file mode 100644
index 000000000..a9a5d3e98
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/hopr.ini
@@ -0,0 +1,31 @@
+ProjectName = cube
+Debugvisu = T
+DebugVisuLevel=2
+NVisu =1
+Mode =1
+
+Corner =(/0.0,0.0,0.0 ,, 15.0,0.0,0.0 ,, 15.0,1.0,0.0 ,, 0.0,1.0,0.0 ,, 0.0,0.0,1.0 ,, 15.0,0.0,1.0 ,, 15.0,1.0,1.0 ,, 0.0,1.0,1.0 /)
+nElems =(/100,4,4/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+
+nZones = 1
+nUserDefinedBoundaries=6
+BoundaryName=BC_Xplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zminus
+BoundaryType=(/4,0,0,0/)
+
+postscalemesh=true
+meshscale=1e-5
+jacobiantolerance=1e-27
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini
similarity index 88%
rename from regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/parameter.ini
rename to regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini
index 49da29b43..8fb227814 100644
--- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure/parameter.ini
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini
@@ -8,6 +8,7 @@ IniExactFunc = 0
! =============================================================================== !
N = 1 ! Polynomial degree
NAnalyze = 1 ! Number of analyze points
+NVisu = 1
! =============================================================================== !
! MESH
! =============================================================================== !
@@ -25,8 +26,9 @@ CalcSurfFluxInfo = TRUE
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-tend = 5.0E-5
-Analyze_dt = 1.0E-5
+tend = 5.0E-5
+Analyze_dt = 1.0E-5
+ManualTimeStep = 5.0E-7
CFLscale = 0.2 ! Scaling of theoretical CFL number
! Load balancing
DoLoadBalance = T
@@ -72,7 +74,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
! Species1 - O2
! =============================================================================== !
Part-Species1-MassIC=5.31352E-26
-Part-Species1-MacroParticleFactor=2E2
+Part-Species1-MacroParticleFactor=1E3
Part-Species1-nInits=1
Part-Species1-Init1-SpaceIC=cell_local
@@ -110,24 +112,29 @@ Part-Species1-Surfaceflux2-Adaptive-Type=2
Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
AdaptiveBC-RelaxationFactor = 0.1
-! If SamplingIteration is 0, then the RelaxationFactor is used
-AdaptiveBC-SamplingIteration = 0,10,10
-AdaptiveBC-TruncateRunningAverage = F,F,T
! =============================================================================== !
! DSMC
! =============================================================================== !
-ManualTimeStep=5.0000E-7
Particles-HaloEpsVelo=2.0E+03
Particles-NumberForDSMCOutputs=1
-Part-TimeFracForSampling=0.25
+Part-TimeFracForSampling=0.1
Particles-DSMC-CalcSurfaceVal=true
UseDSMC=true
Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds=2
-Particles-RandomSeed1=2
-Particles-RandomSeed2=1
+Particles-RandomSeed1=3
+Particles-RandomSeed2=4
Particles-DSMC-UseOctree = T
Particles-DSMC-UseNearestNeighbour = T
Particles-DSMC-CalcQualityFactors= F
-nocrosscombination:AdaptiveBC-SamplingIteration,AdaptiveBC-TruncateRunningAverage
\ No newline at end of file
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini
new file mode 100644
index 000000000..f003c312f
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini
@@ -0,0 +1,143 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcSurfFluxInfo = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 6.0E-5
+Analyze_dt = 1.0E-5
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-WallTemp=300.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-VibACC=1.
+Part-Boundary4-RotACC=1.
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=reflective
+Part-Boundary5-MomentumACC=1.
+Part-Boundary5-WallTemp=300.
+Part-Boundary5-TransACC=1.
+Part-Boundary5-VibACC=1.
+Part-Boundary5-RotACC=1.
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=reflective
+Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=5E2
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=5
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=5
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-RelaxationFactor = 0.1
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+ManualTimeStep=5.0000E-7
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.25
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=1
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+! =============================================================================== !
+! Macroscopic Restart
+! =============================================================================== !
+Particles-MacroscopicRestart = T
+Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.00005000000000000.h5
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md
new file mode 100644
index 000000000..ba6ab29b0
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/readme.md
@@ -0,0 +1,6 @@
+# DSMC - Pressure driven channel flow
+* Simulation of a subsonic channel flow with O2
+* Testing the adaptive surface flux boundary conditions (Type=1: Inflow, constant pressure and temperature and Type=2: Outflow with constant pressure)
+* Inlet: 5 Pa, 300K, Outlet: 2.5 Pa, 300K
+* Temporal evolution of the channel is sensitive to the chosen sampling method for the adaptive BC
+* Testing macroscopic restart with weighting factor change with post external
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/PartAnalyze_ref.csv b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/PartAnalyze_ref.csv
new file mode 100644
index 000000000..1565529a6
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/PartAnalyze_ref.csv
@@ -0,0 +1,14 @@
+001-TIME,002-Massflow-Spec-001-SF-001,003-Pressure-Spec-001-SF-001,004-Massflow-Spec-001-SF-002,005-Pressure-Spec-001-SF-002
+0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000,0.0000000000000000E+000
+0.5000000000000000E-005,0.7477610425600000E-013,0.4970754893976260E+001,-.2129233734400001E-013,0.2639399569399952E+001
+0.1000000000000000E-004,0.4376852694400013E-013,0.5084035356444570E+001,-.4482272931200012E-013,0.2571263038986332E+001
+0.1500000000000000E-004,0.4241039123200002E-013,0.4983504135967654E+001,-.4523080764800000E-013,0.2570549579978157E+001
+0.2000000000000000E-004,0.4772816204799920E-013,0.5068431425865561E+001,-.4528394284799921E-013,0.2516304401222617E+001
+0.2499999999999999E-004,0.4166649843200003E-013,0.4954759460553283E+001,-.4417235446400001E-013,0.2549925327988054E+001
+0.3000000000000000E-004,0.4515854377599739E-013,0.4996929639801362E+001,-.4203206860799756E-013,0.2625198721544424E+001
+0.3499999999999999E-004,0.4462294096000000E-013,0.5183803175400553E+001,-.4410009059200000E-013,0.2606628090571610E+001
+0.4000000000000000E-004,0.4630201327999762E-013,0.5119660533071672E+001,-.4692050700799757E-013,0.2497502087941249E+001
+0.4499999999999999E-004,0.4172175904000002E-013,0.5121548728360188E+001,-.4647842214400000E-013,0.2479939091815085E+001
+0.5000000000000000E-004,0.4507777827199764E-013,0.4981995448560597E+001,-.4525631254399767E-013,0.2484813283601566E+001
+0.5499999999999999E-004,0.4344865303999995E-013,0.4750148158262571E+001,-.4280359171200001E-013,0.2451795009881932E+001
+0.6000000000000000E-004,0.4066011774399788E-013,0.4949469650593784E+001,-.4341039569599777E-013,0.2568297889540754E+001
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini
new file mode 100644
index 000000000..c86bdbbad
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini
@@ -0,0 +1,6 @@
+! compare columns in a data file
+compare_column_file = PartAnalyze.csv ! data file name
+compare_column_reference_file = PartAnalyze_ref.csv ! reference data file name
+compare_column_index = 2,4 ! Comparison of pressure values at BCs
+compare_column_tolerance_value = 20e-2 ! tolerance
+compare_column_tolerance_type = relative ! absolute or relative comparison
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/command_line.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/command_line.ini
new file mode 100644
index 000000000..c2fd94b17
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/command_line.ini
@@ -0,0 +1 @@
+MPI = 6
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/externals.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/externals.ini
new file mode 100644
index 000000000..a1777069f
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/externals.ini
@@ -0,0 +1,8 @@
+! --- Externals Tool Reggie
+MPI = 1 , 6
+externalbinary = ./hopr/build/bin/hopr , ./bin/piclas
+externaldirectory = hopr.ini , parameter_macrorestart.ini
+externalruntime = pre , post
+cmd_suffix = , ConstPressure_State_000.00005000000000000.h5
+
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/hopr.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/hopr.ini
new file mode 100644
index 000000000..a9a5d3e98
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/hopr.ini
@@ -0,0 +1,31 @@
+ProjectName = cube
+Debugvisu = T
+DebugVisuLevel=2
+NVisu =1
+Mode =1
+
+Corner =(/0.0,0.0,0.0 ,, 15.0,0.0,0.0 ,, 15.0,1.0,0.0 ,, 0.0,1.0,0.0 ,, 0.0,0.0,1.0 ,, 15.0,0.0,1.0 ,, 15.0,1.0,1.0 ,, 0.0,1.0,1.0 /)
+nElems =(/100,4,4/)
+elemtype =108
+
+BCIndex =(/6 ,4 ,1 ,3 ,2 ,5/)
+! =(/z-,y-,x+,y+,x-,z+/)
+
+nZones = 1
+nUserDefinedBoundaries=6
+BoundaryName=BC_Xplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Xminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Yminus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zplus
+BoundaryType=(/4,0,0,0/)
+BoundaryName=BC_Zminus
+BoundaryType=(/4,0,0,0/)
+
+postscalemesh=true
+meshscale=1e-5
+jacobiantolerance=1e-27
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini
new file mode 100644
index 000000000..f1b2a36ce
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini
@@ -0,0 +1,140 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcSurfFluxInfo = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 5.0E-5
+Analyze_dt = 1.0E-5
+ManualTimeStep = 5.0E-7
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-WallTemp=300.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-VibACC=1.
+Part-Boundary4-RotACC=1.
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=reflective
+Part-Boundary5-MomentumACC=1.
+Part-Boundary5-WallTemp=300.
+Part-Boundary5-TransACC=1.
+Part-Boundary5-VibACC=1.
+Part-Boundary5-RotACC=1.
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=reflective
+Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=5E2
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=20
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=20
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-SamplingIteration = 10
+AdaptiveBC-TruncateRunningAverage = T
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.1
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=1
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini
new file mode 100644
index 000000000..136b1257a
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini
@@ -0,0 +1,144 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+NVisu = 1
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = cube_mesh.h5
+useCurveds = F
+! if boundaries have to be changed (else they are used from Mesh directly):
+TrackingMethod = triatracking
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = ConstPressure
+IterDisplayStep = 10
+Part-AnalyzeStep = 10
+CalcSurfFluxInfo = TRUE
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 6.0E-5
+Analyze_dt = 1.0E-5
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+! Load balancing
+DoLoadBalance = T
+PartWeightLoadBalance = T
+Load-DeviationThreshold = 0.01
+LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-nSpecies=1
+Part-nBounds=6
+Part-Boundary1-SourceName=BC_Xplus
+Part-Boundary1-Condition=open
+Part-Boundary2-SourceName=BC_Xminus
+Part-Boundary2-Condition=open
+Part-Boundary3-SourceName=BC_Yplus
+Part-Boundary3-Condition=reflective
+Part-Boundary3-MomentumACC=1.
+Part-Boundary3-WallTemp=300.
+Part-Boundary3-TransACC=1.
+Part-Boundary3-VibACC=1.
+Part-Boundary3-RotACC=1.
+Part-Boundary4-SourceName=BC_Yminus
+Part-Boundary4-Condition=reflective
+Part-Boundary4-MomentumACC=1.
+Part-Boundary4-WallTemp=300.
+Part-Boundary4-TransACC=1.
+Part-Boundary4-VibACC=1.
+Part-Boundary4-RotACC=1.
+Part-Boundary5-SourceName=BC_Zplus
+Part-Boundary5-Condition=reflective
+Part-Boundary5-MomentumACC=1.
+Part-Boundary5-WallTemp=300.
+Part-Boundary5-TransACC=1.
+Part-Boundary5-VibACC=1.
+Part-Boundary5-RotACC=1.
+Part-Boundary6-SourceName=BC_Zminus
+Part-Boundary6-Condition=reflective
+Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/)
+! =============================================================================== !
+! Species1 - O2
+! =============================================================================== !
+Part-Species1-MassIC=5.31352E-26
+Part-Species1-MacroParticleFactor=2.5E2
+
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=6E+20
+Part-Species1-Init1-VeloIC=0
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=300
+Part-Species1-Init1-TempVib=300
+Part-Species1-Init1-TempRot=300
+
+Part-Species1-nSurfaceFluxBCs=2
+! Inlet: Constant pressure, Type 1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=5
+Part-Species1-Surfaceflux1-VeloVecIC=(/-1.0,0.0,0.0/)
+Part-Species1-Surfaceflux1-MWTemperatureIC=300.
+Part-Species1-Surfaceflux1-TempVib=300.
+Part-Species1-Surfaceflux1-TempRot=300.
+Part-Species1-Surfaceflux1-Adaptive=TRUE
+Part-Species1-Surfaceflux1-Adaptive-Type=1
+Part-Species1-Surfaceflux1-Adaptive-Pressure=5.0
+
+! Outlet: Constant pressure, Type 2
+Part-Species1-Surfaceflux2-BC=2
+Part-Species1-Surfaceflux2-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux2-VeloIC=5
+Part-Species1-Surfaceflux2-VeloVecIC=(/1.0,0.0,0.0/)
+Part-Species1-Surfaceflux2-MWTemperatureIC=300.
+Part-Species1-Surfaceflux2-TempVib=300.
+Part-Species1-Surfaceflux2-TempRot=300.
+Part-Species1-Surfaceflux2-Adaptive=TRUE
+Part-Species1-Surfaceflux2-Adaptive-Type=2
+Part-Species1-Surfaceflux2-Adaptive-Pressure=2.5
+
+AdaptiveBC-SamplingIteration = 10
+AdaptiveBC-TruncateRunningAverage = T
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+ManualTimeStep=5.0000E-7
+Particles-HaloEpsVelo=2.0E+03
+Particles-NumberForDSMCOutputs=1
+Part-TimeFracForSampling=0.25
+Particles-DSMC-CalcSurfaceVal=true
+UseDSMC=true
+Particles-DSMC-CollisMode=2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds=2
+Particles-RandomSeed1=2
+Particles-RandomSeed2=1
+Particles-DSMC-UseOctree = T
+Particles-DSMC-UseNearestNeighbour = T
+Particles-DSMC-CalcQualityFactors= F
+! =============================================================================== !
+! Macroscopic Restart
+! =============================================================================== !
+Particles-MacroscopicRestart = T
+Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.00005000000000000.h5
+! =============================================================================== !
+! Species1, O2
+! =============================================================================== !
+Part-Species1-InteractionID = 2
+Part-Species1-Tref = 273
+Part-Species1-dref = 4.07E-10
+Part-Species1-omega=0.27
+Part-Species1-CharaTempRot=2.1
+Part-Species1-CharaTempVib=2272.18
+Part-Species1-Ediss_eV=5.17
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md
new file mode 100644
index 000000000..ba6ab29b0
--- /dev/null
+++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/readme.md
@@ -0,0 +1,6 @@
+# DSMC - Pressure driven channel flow
+* Simulation of a subsonic channel flow with O2
+* Testing the adaptive surface flux boundary conditions (Type=1: Inflow, constant pressure and temperature and Type=2: Outflow with constant pressure)
+* Inlet: 5 Pa, 300K, Outlet: 2.5 Pa, 300K
+* Temporal evolution of the channel is sensitive to the chosen sampling method for the adaptive BC
+* Testing macroscopic restart with weighting factor change with post external
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/parameter.ini b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/parameter.ini
index 28b062893..43f26cfd3 100644
--- a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/parameter.ini
+++ b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_Curved/parameter.ini
@@ -88,7 +88,6 @@ Particles-NumberForDSMCOutputs=100
Particles-DSMC-CalcSurfaceVal=true
Particles-DSMC-CalcQualityFactors=true
UseDSMC=true
-Particles-DSMCReservoirSim=false
Particles-DSMC-CollisMode=1 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/mesh_cylinder_Kn0250_half_mesh.h5 b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/mesh_cylinder_Kn0250_half_mesh.h5
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini
index bdc2c4bd1..347f5951b 100644
--- a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini
+++ b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini
@@ -81,7 +81,6 @@ Part-TimeFracForSampling=0.75
Particles-DSMC-CalcSurfaceVal=T
Particles-DSMC-CalcQualityFactors=T
UseDSMC=true
-Particles-DSMCReservoirSim=false
Particles-DSMC-CollisMode=1 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds=2
Particles-RandomSeed1=1
diff --git a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/mesh_70degCone2D_Set1_noWake_mesh.h5 b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/mesh_70degCone2D_Set1_noWake_mesh.h5
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini
old mode 100755
new mode 100644
index d7d9e7d37..d415cecb7
--- a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini
+++ b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini
@@ -34,6 +34,8 @@ PartWeightLoadBalance = T
DoInitialAutoRestart = T
InitialAutoRestart-PartWeightLoadBalance = T
LoadBalanceMaxSteps = 2
+UseH5IOLoadBalance = T
+
CalcSurfaceImpact = T
! =============================================================================== !
! BOUNDARIES
@@ -98,7 +100,6 @@ Particles-NumberForDSMCOutputs = 1
Part-TimeFracForSampling = 0.5
Particles-DSMC-CalcSurfaceVal = T
Particles-DSMC-CalcQualityFactors = T
-Particles-DSMCReservoirSim = F
Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/DSMC.ini b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/DSMC.ini
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/Species_Database.h5 b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/Species_Database.h5
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/channel_mesh.h5 b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/channel_mesh.h5
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini b/regressioncheck/WEK_DSMC/Surface_Sticking_Coefficient/parameter.ini
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_DSMCSurfState_000.00020000000000000_reference.h5 b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_DSMCSurfState_000.00020000000000000_reference.h5
new file mode 100644
index 000000000..20dd2dc7b
Binary files /dev/null and b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_DSMCSurfState_000.00020000000000000_reference.h5 differ
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMC.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMC.ini
new file mode 100644
index 000000000..434e170bd
--- /dev/null
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMC.ini
@@ -0,0 +1,24 @@
+! =======================================================================
+! Data for air taken from
+! Species: G. A. Bird, Nonequilibrium radiation during re-entry at 10 km/s, AIAA-Paper 87-1543
+! Reactions: Iain D. Boyd, Phys. Fluids 19, 096102 (2007)
+! =======================================================================
+! =============================================================================== !
+! Species1, N
+! =============================================================================== !
+Part-Species1-SpeciesName=N
+Part-Species1-InteractionID = 1
+Part-Species1-Tref =273 ! K
+Part-Species1-dref = 3.0E-10 ! m
+Part-Species1-omega=0.24
+! =============================================================================== !
+! Species2, N2
+! =============================================================================== !
+Part-Species2-SpeciesName=N2
+Part-Species2-InteractionID = 2
+Part-Species2-Tref =273
+Part-Species2-dref = 4.07E-10
+Part-Species2-omega=0.24
+Part-Species2-CharaTempVib=3393.3
+Part-Species2-Ediss_eV=9.759
+Part-Species2-CharaTempRot = 2.87
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMCSpecies_electronic_state_N2-N.h5 b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMCSpecies_electronic_state_N2-N.h5
new file mode 100644
index 000000000..60791be40
Binary files /dev/null and b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/DSMCSpecies_electronic_state_N2-N.h5 differ
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/analyze.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/analyze.ini
similarity index 52%
rename from regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/analyze.ini
rename to regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/analyze.ini
index 030f7f682..ef867fb0f 100644
--- a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/analyze.ini
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/analyze.ini
@@ -1,6 +1,6 @@
! hdf5 diff
-h5diff_file = 70degCone2D_Set1_DSMCSurfState_000.00200000000000000.h5
-h5diff_reference_file = 70degCone2D_Set1_DSMCSurfState_000.00200000000000000_reference.h5
+h5diff_file = 70degCone2D_Set1_ConeHot_DSMCSurfState_000.00020000000000000.h5
+h5diff_reference_file = 70degCone2D_Set1_DSMCSurfState_000.00020000000000000_reference.h5
h5diff_data_set = SurfaceData
h5diff_tolerance_value = 15E-2
h5diff_tolerance_type = relative
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/command_line.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/command_line.ini
similarity index 100%
rename from regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/command_line.ini
rename to regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/command_line.ini
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/externals.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/externals.ini
new file mode 100644
index 000000000..14e9f525b
--- /dev/null
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/externals.ini
@@ -0,0 +1,7 @@
+! --- Externals Tool Reggie
+MPI = 1 ! Single execution
+externalbinary = ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = post-vtk-DSMC-conversion ! Directory name, where the files are located for the external tool reggie
+externalruntime = post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = ../70degCone2D_Set1_ConeHot_DSMCSurfState_000.00020000000000000.h5 ! Suffix for the binary execution
+cmd_pre_execute = ln\s-s\s../mesh_70degCone2D_Set1_noWake_mesh.h5 ! "\s" resembles a white space character in the command (simply using " " is not allowed)
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/mesh_70degCone2D_Set1_noWake_mesh.h5 b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/mesh_70degCone2D_Set1_noWake_mesh.h5
old mode 100755
new mode 100644
similarity index 100%
rename from regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/mesh_70degCone2D_Set1_noWake_mesh.h5
rename to regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/mesh_70degCone2D_Set1_noWake_mesh.h5
diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/parameter.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini
similarity index 58%
rename from regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/parameter.ini
rename to regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini
index 03ab0e44e..e27641770 100644
--- a/regressioncheck/WEK_BGKFlow/Flow_N2-O2_70degCone/parameter.ini
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini
@@ -12,36 +12,34 @@ NAnalyze = 1 ! Number of analyze points
! =============================================================================== !
! MESH
! =============================================================================== !
-MeshFile = mesh_70degCone2D_Set1_noWake_mesh.h5
-useCurveds = F
-TrackingMethod = triatracking
+MeshFile = mesh_70degCone2D_Set1_noWake_mesh.h5
+useCurveds = F
+TrackingMethod = triatracking
+WeightDistributionMethod = 1
! =============================================================================== !
! OUTPUT / VISUALIZATION
! =============================================================================== !
-ProjectName = 70degCone2D_Set1
+ProjectName = 70degCone2D_Set1_ConeHot
Logging = F
printRandomSeeds = F
IterDisplayStep = 100
! =============================================================================== !
! CALCULATION
! =============================================================================== !
-tend = 2.0E-3 ! End time
-Analyze_dt = 5.0E-4 ! Timestep of analyze outputs
+tend = 2.0E-4 ! End time
+Analyze_dt = 2.5E-4 ! Timestep of analyze outputs
CFLscale = 0.2 ! Scaling of theoretical CFL number
-c0 = 299792458.
-eps = 8.8541878176E-12
-mu = 12.566370614e-7
-! =============================================================================== !
-! LOAD BALANCE
-! =============================================================================== !
DoLoadBalance = T
PartWeightLoadBalance = T
DoInitialAutoRestart = T
InitialAutoRestart-PartWeightLoadBalance = T
-LoadBalanceMaxSteps = 2 ! one initial and one at 5E-4
+LoadBalanceMaxSteps = 2
+CalcSurfaceImpact = T
+UseH5IOLoadBalance = T
! =============================================================================== !
! BOUNDARIES
! =============================================================================== !
+Part-AdaptWallTemp = T
Part-nBounds = 5
Part-Boundary1-SourceName = IN
Part-Boundary1-Condition = open
@@ -54,6 +52,9 @@ Part-Boundary3-TransACC = 1.
Part-Boundary3-MomentumACC = 1.
Part-Boundary3-VibACC = 1.
Part-Boundary3-RotACC = 1.
+Part-Boundary3-ElecACC = 1.
+Part-Boundary3-UseAdaptedWallTemp = T
+Part-Boundary3-RadiativeEmissivity = 1.0
Part-Boundary4-SourceName = SYMAXIS
Part-Boundary4-Condition = symmetric_axis
Part-Boundary5-SourceName = ROTSYM
@@ -65,92 +66,84 @@ Part-FIBGMdeltas = (/0.001,0.001,0.01/)
Part-maxParticleNumber = 500000
Part-nSpecies = 2
! =============================================================================== !
-! Species1 N2
+! Species1 - N
! =============================================================================== !
-Part-Species1-ChargeIC=0
-Part-Species1-MassIC=4.65E-26
-Part-Species1-MacroParticleFactor = 1E10
+Part-Species1-MacroParticleFactor=2E11
+Part-Species1-MassIC=2.32600E-26
-Part-Species1-nInits = 1
-Part-Species1-Init1-SpaceIC = cell_local
-Part-Species1-Init1-velocityDistribution = maxwell_lpn
-Part-Species1-Init1-VeloIC = 1502.57
-Part-Species1-Init1-VeloVecIC = (/1.,0.,0./)
-Part-Species1-Init1-PartDensity = 2.775E+020
-Part-Species1-Init1-MWTemperatureIC = 13.3
-Part-Species1-Init1-TempVib = 13.3
-Part-Species1-Init1-TempRot = 13.3
+Part-Species1-nInits=1
+Part-Species1-Init1-SpaceIC=cell_local
+Part-Species1-Init1-velocityDistribution=maxwell_lpn
+Part-Species1-Init1-PartDensity=5.96E+020
+Part-Species1-Init1-VeloIC=11360
+Part-Species1-Init1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Init1-MWTemperatureIC=195
+Part-Species1-Init1-TempElec=195
-Part-Species1-nSurfaceFluxBCs = 1
-Part-Species1-Surfaceflux1-BC = 1
-Part-Species1-Surfaceflux1-velocityDistribution = maxwell_lpn
-Part-Species1-Surfaceflux1-VeloIC = 1502.57
-Part-Species1-Surfaceflux1-VeloVecIC = (/1.,0.,0./)
-Part-Species1-Surfaceflux1-PartDensity = 2.775E+020
-Part-Species1-Surfaceflux1-MWTemperatureIC = 13.3
-Part-Species1-Surfaceflux1-TempVib = 13.3
-Part-Species1-Surfaceflux1-TempRot = 13.3
-! =============================================================================== !
-! Species2 O2
-! =============================================================================== !
-Part-Species2-ChargeIC=0
-Part-Species2-MassIC=5.31400E-26
-Part-Species2-MacroParticleFactor = 1E10
+Part-Species1-nSurfaceFluxBCs=1
+Part-Species1-Surfaceflux1-BC=1
+Part-Species1-Surfaceflux1-velocityDistribution=maxwell_lpn
+Part-Species1-Surfaceflux1-VeloIC=11360
+Part-Species1-Surfaceflux1-VeloVecIC=(/1.,0.,0./)
+Part-Species1-Surfaceflux1-MWTemperatureIC=195
+Part-Species1-Surfaceflux1-TempElec=195
+Part-Species1-Surfaceflux1-PartDensity=5.96E+020
+! =============================================================================== !
+! Species2 - N2
+! =============================================================================== !
+Part-Species2-MacroParticleFactor = 2E11
+Part-Species2-MassIC = 4.652E-26 ! N2 Molecular Mass
Part-Species2-nInits = 1
Part-Species2-Init1-SpaceIC = cell_local
Part-Species2-Init1-velocityDistribution = maxwell_lpn
-Part-Species2-Init1-VeloIC = 1502.57
+Part-Species2-Init1-PartDensity = 5.96E+020
+Part-Species2-Init1-VeloIC = 11360
Part-Species2-Init1-VeloVecIC = (/1.,0.,0./)
-Part-Species2-Init1-PartDensity = 0.925E+020
-Part-Species2-Init1-MWTemperatureIC = 13.3
-Part-Species2-Init1-TempVib = 13.3
-Part-Species2-Init1-TempRot = 13.3
+Part-Species2-Init1-MWTemperatureIC = 195
+Part-Species2-Init1-TempVib = 195
+Part-Species2-Init1-TempRot = 195
+Part-Species2-Init1-TempElec = 195
Part-Species2-nSurfaceFluxBCs = 1
Part-Species2-Surfaceflux1-BC = 1
Part-Species2-Surfaceflux1-velocityDistribution = maxwell_lpn
-Part-Species2-Surfaceflux1-VeloIC = 1502.57
+Part-Species2-Surfaceflux1-VeloIC = 11360
Part-Species2-Surfaceflux1-VeloVecIC = (/1.,0.,0./)
-Part-Species2-Surfaceflux1-PartDensity = 0.925E+020
-Part-Species2-Surfaceflux1-MWTemperatureIC = 13.3
-Part-Species2-Surfaceflux1-TempVib = 13.3
-Part-Species2-Surfaceflux1-TempRot = 13.3
+Part-Species2-Surfaceflux1-MWTemperatureIC = 195
+Part-Species2-Surfaceflux1-TempVib = 195
+Part-Species2-Surfaceflux1-TempRot = 195
+Part-Species2-Surfaceflux1-TempElec = 195
+Part-Species2-Surfaceflux1-PartDensity = 5.96E+020
! =============================================================================== !
! DSMC
! =============================================================================== !
UseDSMC = T
-ManualTimeStep= 2.0000E-07
-Particles-HaloEpsVelo = 12.000E+03
+ManualTimeStep = 2.0000E-07
+Particles-HaloEpsVelo = 8.000E+04
Particles-NumberForDSMCOutputs = 1
Part-TimeFracForSampling = 0.5
Particles-DSMC-CalcSurfaceVal = T
Particles-DSMC-CalcQualityFactors = T
Particles-DSMCReservoirSim = F
Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
+!Particles-DSMC-ElecRelaxProb = 0.01
+Particles-DSMC-ElectronicModel = 1
+Particles-DSMCElectronicDatabase = DSMCSpecies_electronic_state_N2-N.h5
+EpsMergeElectronicState = 3E-2
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
Particles-RandomSeed2 = 2
-Particles-ModelForVibrationEnergy = 0 !(0:SHO, 1:TSHO)
Particles-DSMC-UseOctree = T
Particles-DSMC-UseNearestNeighbour = T
Particles-OctreePartNumNode = 40
Particles-OctreePartNumNodeMin = 28
Particles-MPIWeight = 1000
! Symmetry
-Particles-Symmetry-Order = 2
+Particles-Symmetry2D = T
Particles-Symmetry2DAxisymmetric = T
! Radial Weighting
Particles-RadialWeighting = T
-Particles-RadialWeighting-PartScaleFactor = 60
+Particles-RadialWeighting-PartScaleFactor = 10 !initially 60
Particles-RadialWeighting-CloneMode = 2
Particles-RadialWeighting-CloneDelay = 5
-! BGK-Flow
-Particles-BGK-CollModel = 1
-Particles-BGK-MixtureModel = 1
-Particles-BGK-DoVibRelaxation = T
-Particles-BGK-UseQuantVibEn = F
-! BGK Refinement
-Particles-BGK-DoCellAdaptation = T
-Particles-BGK-MinPartsPerCell = 12
-Particles-BGK-SplittingDens = 3.8E20
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/post-vtk-DSMC-conversion/parameter.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/post-vtk-DSMC-conversion/parameter.ini
new file mode 100644
index 000000000..26b9fd923
--- /dev/null
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/post-vtk-DSMC-conversion/parameter.ini
@@ -0,0 +1 @@
+NVisu = 1
\ No newline at end of file
diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/readme.md b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/readme.md
new file mode 100644
index 000000000..f8a3451e4
--- /dev/null
+++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/readme.md
@@ -0,0 +1,6 @@
+# DSMC - Hypersonic flow around a 70° Cone (Axisymmetric) - Radiation pipeline
+* Simulation of a hypersonic N2-N flow around a 70° blunted cone
+* Test case based on 70degCone-Reggie, however, since the radiation tool chain shall be tested, this one has the FIRE II inflow conditions at 76 km altitude. In addition, N was added as an inflow species
+* Comparison of the heat flux with a reference surface state file
+* The wake of the heat shield was not included due to strong fluctuations and long sampling duration prohibiting the use of the test case as a regression test
+* Additionally, the "Particles-RadialWeighting-PartScaleFactor" is reduced to safe computational time
diff --git a/regressioncheck/WEK_DSMC_Radiation/builds.ini b/regressioncheck/WEK_DSMC_Radiation/builds.ini
new file mode 100644
index 000000000..a12b643a7
--- /dev/null
+++ b/regressioncheck/WEK_DSMC_Radiation/builds.ini
@@ -0,0 +1,18 @@
+! relative binary path in build directory
+binary=./bin/piclas
+
+! fixed compiler flags
+CMAKE_BUILD_TYPE = RELEASE
+LIBS_BUILD_HDF5 = OFF
+PICLAS_POLYNOMIAL_DEGREE = N
+PICLAS_EQNSYSNAME = maxwell
+PICLAS_TIMEDISCMETHOD = DSMC
+LIBS_USE_MPI = ON
+PICLAS_NODETYPE = GAUSS
+
+! exclude combinations
+EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_TIMEDISCMETHOD=DSMC
+EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_TIMEDISCMETHOD=ImplicitO3
+EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_TIMEDISCMETHOD=ImplicitO4
+EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_NODETYPE=GAUSS-LOBATTO
+EXCLUDE:PICLAS_TIMEDISCMETHOD=DSMC,PICLAS_NODETYPE=GAUSS-LOBATTO
diff --git a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini
index c71b25f7e..8c6c7b6a4 100644
--- a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini
+++ b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini
@@ -32,6 +32,7 @@ PartWeightLoadBalance = T
DoInitialAutoRestart = T
InitialAutoRestart-PartWeightLoadBalance = T
LoadBalanceMaxSteps = 2 ! one initial and one at 5E-4
+UseH5IOLoadBalance = T
CalcSurfaceImpact = F
! =============================================================================== !
@@ -91,7 +92,6 @@ Particles-NumberForDSMCOutputs = 1
Part-TimeFracForSampling = 0.5
Particles-DSMC-CalcSurfaceVal = T
Particles-DSMC-CalcQualityFactors = T
-Particles-DSMCReservoirSim = F
Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
Part-NumberOfRandomSeeds = 2
Particles-RandomSeed1 = 1
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_reference_RadiationSurfState.h5 b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_reference_RadiationSurfState.h5
new file mode 100644
index 000000000..86d3986bd
Binary files /dev/null and b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/70degCone2D_Set1_reference_RadiationSurfState.h5 differ
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/N2i.dat b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/N2i.dat
new file mode 100644
index 000000000..58e7f09d6
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/N2i.dat
@@ -0,0 +1,8677 @@
+c========================================================================
+c
+c program: PARADE
+c file : N2ihl.dat
+c species: Molecular Nitrogen (N2)
+c ($Revision: 2.2.4.2 $)
+c purpose: PARADE molecule radiation data file
+c last mod.: 2010/01/10 Heiko Liebhart
+c remarks: Data from various sources as stated in comments VUV transitions mostly based on data from spelsberg and meyer
+c
+c========================================================================
+c
+c Format of the input file:
+c
+c [Keyword]
+c nL nl nc ni nr
+c l_1 l_2 .. l_nl c_1 c_2 .. c_nc i_1 i_2 .. i_ni r_1 r_2 .. r_nr
+c
+c Legend:
+c nL : number of lines
+c nl : number of logical values per line
+c nc : number of strings per line
+c ni : number of integers per line
+c nr : number of floats per line
+c l_(x) : logical value with index x
+c c_(x) : string with index
+c i_(x) : integer with index x
+c r_(x) : float with index x
+c
+c========================================================================
+[Version]
+1 0 0 1 0
+20100110
+c
+ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c
+[base]
+1 0 1 3 2
+c molek. no. of phase no. of molar ionization
+c name atoms ( ) ( ) charges ( ) mass [kg/kmol] energy [cm^-1]
+ N2 2 1 0 28.01348 125668.22
+c
+c remark:
+c phase: 1:gaseous, 2:liquid, 3:solid
+c
+ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c
+[Energy-Levels]
+ 14 0 1 0 0
+ X1Sigma
+ A3Sigma
+ B3Pi
+ Bprime3Sigma
+ aprime1Sigma
+ a1Pi
+ w1Delta
+ C3Pi
+ b1Pi
+ bprime1Sigma
+ 1c1Pi !c1Pi
+ 1cprime1Sigma !cprime1Sigma
+ o1Pi
+ eprime1Sigma
+c
+[band-N21p]
+1 0 0 3 1
+c 1st-positive band, transitions from B3Pi to A3Sigma
+c up level, low level, Type Index, smf
+ 3 2 2 1.
+c
+[band-N22p]
+1 0 0 3 1
+c 2nd-positive band, transitions from C3Pi to B3Pi
+c up level, low level, Type Index, smf
+ 8 3 6 1.
+c
+[band-N2bh2]
+1 0 0 3 1
+c Birge-Hopfield II band, transitions from bprime1Sigma to X1Sigma
+c up level, low level, Type Index, smf
+ 10 1 1 1.
+c
+[band-N2bh]
+1 0 0 3 1
+c Birge-Hopfield band, transitions from b1Pi to X1Sigma
+c up level, low level, Type Index, smf
+ 9 1 2 1.
+c
+[band-N2lbh]
+1 0 0 3 1
+c Lyman-Birge-Hopfield band, transitions from a1Pi to X1Sigma
+c up level, low level, Type Index, smf
+ 6 1 2 1.
+c
+[band-N2cy]
+1 0 0 3 1
+c Carroll-Yoshino band, transitions from cprime1Sigma to X1Sigma
+c up level, low level, Type Index, smf
+ 12 1 1 1.
+c
+[band-N2wj]
+1 0 0 3 1
+c Worley-Jenkins band, transitions from cPi to X1Sigma
+c up level, low level, Type Index, smf
+ 11 1 2 1.
+c
+[band-N2w]
+1 0 0 3 1
+c Worley band, transitions from o3Pi to X1Sigma
+c up level, low level, Type Index, smf
+ 13 1 2 1.
+c
+c[band-N2eX]
+1 0 0 3 1
+c vuv band, transitions from eprimeSigma to X1Sigma
+c up level, low level, Type Index, smf
+ 14 1 1 1.
+ccccccccccccccccccccccccccccccccccccccc
+ccccccccccccccccccccccccccccccccccccccc
+[X1Sigma]
+17 0 0 0 1
+1.0 degen
+0 Te
+78670. D0 (Roncin et al. phys.ref.let.53 (1984))
+cccc vibrational constants ccccccc
+2358.5337387 we (Le Roy et al. j.chem.phys. 125 (2006))
+14.3005660 wexe (Le Roy et al. j.chem.phys. 125 (2006))
+-65.22140e-4 weye (Le Roy et al. j.chem.phys. 125 (2006))
+0.6012e-4 weze (Le Roy et al. j.chem.phys. 125 (2006))
+c -0.071535e-4 weae=Y_50 (Le Roy et al. j.chem.phys. 125 (2006))
+cccc rotational constants cccccccc
+1.9982596 B_e (Le Roy et al. j.chem.phys. 125 (2006))
+0.017324317 alpha_e (Le Roy et al. j.chem.phys. 125 (2006))
+c -2.277e-5 gamma_e (Le Roy et al. j.chem.phys. 125 (2006))
+c -0.0535e-5 delta_e=Y_31 (Le Roy et al. j.chem.phys. 125 (2006))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be validated)
+1.0 altnat (to be validated)
+5.752E-6 D_e (Le Roy et al. j.chem.phys. 125 (2006))
+9.88e-9 beta_e (Le Roy et al. j.chem.phys. 125 (2006))
+1.097679454e-8 R_equ (Le Roy et al. j.chem.phys. 125(2006))
+0.0 A
+0. Lambda
+cccccccccccccccccccccccccccccccccccccccc
+[A3Sigma]
+17 0 0 0 1
+3.0 degen (Laux)
+50203.66 Te (Laux)
+28960.1 D0 (Laux)
+cccc vibrational constants ccccccc
+1460.941 we (Laux)
+13.980 wexe (Laux)
+0.024 weye (Laux)
+-2.56E-3 weze (Laux)
+cccc rotational constants cccccccc
+1.4539 B_e (Laux)
+0.0175 alpha_e (Laux)
+7.00153700240 mu (FORT4 from Neqair 85)
+1.0 nuspin (FORT4 from Neqair 85)
+1.0 altnat (FORT4 from Neqair 85)
+5.84E-6 D_e (Laux)
+3.0E-8 beta_e (Laux)
+1.293E-08 R_equ (FORT4 from Neqair 85)
+0.0 A (FORT4 from Neqair 85)
+0. Lambda (FORT4 from Neqair 85)
+cccccccccccccccccccccccccccccccccccccccc
+[B3Pi]
+17 0 0 0 1
+6.0 degen (FORT4 from Neqair 85)
+59619.09 Te (Laux)
+38636. D0 (Laux)
+cccc vibrational constants ccccccc
+1734.025 we
+14.412 wexe (Laux)
+-0.0033 weye (Laux)
+-7.9E-4 weze (Laux)
+c 4.2e-5 weae (Laux)
+c -1.68e-6 webe (Laux)
+cccc rotational constants cccccccc
+1.63772 B_e (Laux)
+0.01793 alpha_e (Laux)
+c -1.04e-4 gamma_e (Laux)
+c 4.882e-6 delta_e (Laux)
+c -2.12e-7 eta_e (Laux)
+7.00153700240 mu (FORT4 from Neqair 85)
+1.0 nuspin (FORT4 from Neqair 85)
+1.0 altnat (FORT4 from Neqair 85)
+5.527E-6 D_e (Laux)
+9.5840E-9 beta_e (Laux)
+1.212E-08 R_equ (FORT4 from Neqair 85)
+00.0 A (FORT4 from Neqair 85)
+1. Lambda (FORT4 from Neqair 85)
+cccccccccccccccccccccccccccccccccccccccc
+[C3Pi]
+17 0 0 0 1
+6.0 degen (Laux)
+89136.88 T_e (Laux)
+8964.9 D0 (Laux)
+cccc vibrational constants ccccccc
+2047.78 we (Laux)
+28.9488 wexe (Laux)
+2.24731 weye (Laux)
+-0.55145 weze (Laux)
+cccc rotational constants cccccccc
+1.82677 B_e (Laux)
+0.024 alpha_e (Laux)
+c 1.9e-3 gamma_e (Laux)
+c -6e-4 delta_e (Laux)
+7.00153700240 mu (FORT4 from Neqair 85)
+1.0 nuspin (FORT4 from Neqair 85)
+1.0 altnat (FORT4 from Neqair 85)
+5.147E-6 D_e (Laux)
+2.137E-6 beta_e (Laux)
+c 1.2989e-6 Y_22 (Laux)
+c -2.417e-7 Y_32 (Laux)
+1.148E-08 R_equ (FORT4 from Neqair 85)
+00.0 A (FORT4 from Neqair 85)
+1. Lambda (FORT4 from Neqair 85)
+cccccccccccccccccccccccccccccccccccccccc
+[bprime1Sigma]
+17 0 0 0 1
+1.0 degen
+104482.3 Te (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+23806 D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+cccc vibrational constants ccccccc
+7.462e+02 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+2.5 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0. weye
+0. weze
+cccc rotational constants cccccccc
+1.152 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+6.3e-3 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (FORT4 from Neqair 85)
+2.0 altnat (FORT4 from Neqair 85)
+0 D_e
+0 beta_e
+1.441250643E-08 R_equ (calculated at v_00=-0.49977 via Le Roys RKR)
+00.0 A
+0. Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[aprime1Sigma]
+17 0 0 0 1
+1.0 degen
+66977.2 Te (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+49424. D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+cccc vibrational constants ccccccc
+1530.245 we (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+12.0747 wexe (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+0.041292 weye (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+-2.896E-4 weze (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+cccc rotational constants cccccccc
+1.47988 B_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+0.016574 alpha_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+c 2.41e-5 gamma_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin
+1.0 altnat
+5.536274E-6 D_e calculated via Kratzer Relation
+3.19261983E-7 beta_e calculated via Pekeris Relation
+1.1275518E-08 R_equ (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+0.0 A
+0. Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[a1Pi]
+17 0 0 0 1
+2.0 degen
+68107.6 Te (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+48212 D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+ccccccc vibrational constants ccccccccccccccccc
+1694.208 we (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+13.9491 wexe (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+0.0079346 weye (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+2.911E-4 weze (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+ccccccc rotational constants cccccccccccccccccc
+1.61688 B_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+0.017933 alpha_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+c -2.93e-5 gamma_e (Laher & Gilmore J.Phys.Chem.Ref.Data.20no.4(1991))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin
+1.0 altnat
+5.890605E-6 D_e calculated via Kratzer Relation
+3.560497E-7 beta_e calculated via Pekeris Relation
+1.220281356E-8 R_equ (calculated at v_00=-0,5 via Le Roys RKR code)
+0.0 A
+1. Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[Bprime3Sigma]
+17 0 0 0 1
+6.0 degen (FORT4 from Neqair 85)
+65852.4 Te
+41701. D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+cccc vibrational constants ccccccc
+1516.883 we (FORT4 from Neqair 85)
+12.1811 wexe (FORT4 from Neqair 85)
+0.041858 weye (FORT4 from Neqair 85)
+-7.323E-4 weze (FORT4 from Neqair 85)
+cccc rotational constants cccccccc
+1.47359 B_e (FORT4 from Neqair 85)
+0.016861 alpha_e (FORT4 from Neqair 85)
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be validated)
+1.0 altnat (to be validated)
+5.562702E-6 D_e calculated via Kratzer Relation
+3.258178E-7 beta_e calculated via Pekeris Relation
+1.116E-08 R_equ (Herzberg)
+0.0 A (to be validated)
+0. Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[w1Delta]
+17 0 0 0 1
+2.0 degen (FORT4 from Neqair 85)
+71698.8 Te (wrong! is T_0 from (Lofthus j.Phys.Chem.RefDat.6(1977))
+45465. D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+cccc vibrational constants ccccccc
+1559.236 we (FORT4 from Neqair 85)
+11.8874 wexe (FORT4 from Neqair 85)
+0.003225 weye (FORT4 from Neqair 85)
+0.0E-4 weze (FORT4 from Neqair 85)
+cccc rotational constants cccccccc
+1.498 B_e (FORT4 from Neqair 85)
+0.0166 alpha_e (FORT4 from Neqair 85)
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be validated)
+1.0 altnat (to be validated)
+5.530593E-6 D_e calculated via Kratzer Relation
+3.075668E-7 beta_e calculated via Pekeris Relation
+1.116E-08 R_equ (Herzberg)
+0.0 A (to be validated)
+2. Lambda
+cccccccccccccccccccccccccccccccccccccc
+[b1Pi]
+17 0 0 0 1
+2.0 degen
+101703.8 Te (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+16345 D0 (Lofthus j.Phys.Chem.RefDat.6(1977))
+cccc vibrational constants ccccccc
+681.1 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+-8.8 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0. weye
+0. weze
+cccc rotational constants cccccccc
+1.437 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0308 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+c 0. gamma_e
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be valdiated)
+2.0 altnat (to be valdiated)
+0. D_e
+0. beta_e
+1.317469042E-08 R_equ (calculated at v_00=-0.51028 via Le Roys RKR code)
+00.0 A
+1 Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[1cprime1Sigma]
+17 0 0 0 1
+1.0 degen
+104839.1 Te (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+ 19744.96 D0 first ionization energy more reasonable than extapolated D_0 (87946.59) from RKR
+cccc vibrational constants ccccccc
+2174.8 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+15.9 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0. weye
+0. weze
+cccc rotational constants cccccccc
+1.909 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0190 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be valdiated)
+2.0 altnat (to be valdiated)
+0. D_e
+0. beta_e
+1.117354525E-08 R_equ (calculated at v_00 via Le Roys RKR)
+00.0 A
+0 Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[1c1Pi]
+17 0 0 0 1
+2.0 degen
+104599.2 Te (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+1.9959E+004 D0 first ionization energy more reasonable than extapolated D_0 (47196.90) from RKR
+cccc vibrational constants ccccccc
+2228.2 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+17.7 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0e+00 weye
+0.0e+00 weze
+cccc rotational constants cccccccc
+1.931e+00 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0204e+00 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be valdiated)
+2.0 altnat (to be valdiated)
+0 D_e
+0 beta_e
+1.103826152E-08 R_equ (calculated at v_00 via Le Roys RKR)
+00.0 A
+1 Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[o1Pi]
+17 0 0 0 1
+2.0 degen
+105969.3 Te (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+27764.93 D0 first ionization energy more reasonable than extapolated D_0 (88858.51) from RKR
+cccc vibrational constants ccccccc
+1905.9 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+13.1 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0e+00 weye
+0.0e+00 weze
+cccc rotational constants cccccccc
+1.730 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0165 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be valdiated)
+2.0 altnat (to be valdiated)
+0 D_e
+0 beta_e
+1.179718810E-08 R_equ (calculated at v_00 via Le Roys RKR)
+00.0 A
+1 Lambda
+ccccccccccccccccccccccccccccccccccccccc
+[eprime1Sigma]
+17 0 0 0 1
+1.0 degen
+115926.7 Te (Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001))
+1.76534774E+04 D0 converges A2Pi of N2+ ion, energy (= T0_A2Pi-T0eprimeSigma) more reasonable than extrapolated D_0 (70163) from RKR
+cccc vibrational constants ccccccc
+2216.2 we (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+17.5 wexe (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0 weye
+0. weze
+cccc rotational constants cccccccc
+1.932e+00 B_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+0.0203e+00 alpha_e (Spelsberg & Meyer j.chem.phys., vol.115, no.14, (2001))
+7.00153700240 mu (Audi et al. Nucl.Phys.A_729 (2003) via Le Roys RKR)
+1.0 nuspin (to be valdiated)
+2.0 altnat (to be valdiated)
+0 D_e
+0 beta_e
+1.116343880E-08 R_equ (calculated at v_00 via Le Roys RKR)
+00.0 A
+0 Lambda
+cccccccccccccccccccccccccccccccccccccc
+[transition-N21p]
+293 0 0 0 5
+c from phd thesis of laux
+c vu vl sumre2/fcf FCF SRe2
+0 0 3.63E-01 3.98E-01 1.45E-01
+0 1 3.85E-01 3.31E-01 1.27E-01
+0 2 4.03E-01 1.67E-01 6.74E-02
+0 3 4.18E-01 6.74E-02 2.82E-02
+0 4 4.31E-01 2.40E-02 1.04E-02
+0 5 4.42E-01 7.98E-03 3.53E-03
+0 6 4.52E-01 2.56E-03 1.16E-03
+1 0 3.38E-01 4.00E-01 1.35E-01
+1 1 3.07E-01 2.53E-03 7.78E-04
+1 2 3.77E-01 1.58E-01 5.96E-02
+1 3 3.97E-01 1.97E-01 7.82E-02
+1 4 4.13E-01 1.31E-01 5.40E-02
+1 5 4.27E-01 6.56E-02 2.80E-02
+1 6 4.38E-01 2.84E-02 1.24E-02
+1 7 4.48E-01 1.12E-02 5.04E-03
+2 0 3.09E-01 1.63E-01 5.03E-02
+2 1 3.30E-01 2.73E-01 9.00E-02
+2 2 3.66E-01 6.98E-02 2.55E-02
+2 3 3.58E-01 2.17E-02 7.76E-03
+2 4 3.90E-01 1.25E-01 4.86E-02
+2 5 4.08E-01 1.43E-01 5.84E-02
+2 6 4.22E-01 1.01E-01 4.27E-02
+2 7 4.34E-01 5.61E-02 2.44E-02
+2 8 4.44E-01 2.72E-02 1.21E-02
+2 9 4.53E-01 1.22E-02 5.51E-03
+3 0 2.74E-01 3.47E-02 9.53E-03
+3 1 3.02E-01 2.78E-01 8.40E-02
+3 2 3.18E-01 9.42E-02 3.00E-02
+3 3 3.55E-01 1.52E-01 5.39E-02
+3 4 4.16E-01 5.27E-03 2.19E-03
+3 5 3.78E-01 4.22E-02 1.60E-02
+3 6 4.01E-01 1.08E-01 4.33E-02
+3 7 4.17E-01 1.11E-01 4.65E-02
+3 8 4.30E-01 8.00E-02 3.44E-02
+3 9 4.40E-01 4.73E-02 2.08E-02
+3 10 4.49E-01 2.49E-02 1.12E-02
+4 0 2.34E-01 4.16E-03 9.72E-04
+4 1 2.68E-01 9.80E-02 2.63E-02
+4 2 2.95E-01 2.97E-01 8.77E-02
+4 3 2.78E-01 7.27E-03 2.02E-03
+4 4 3.46E-01 1.51E-01 5.21E-02
+4 5 3.79E-01 5.14E-02 1.95E-02
+4 6 3.25E-01 2.16E-03 7.02E-04
+4 7 3.92E-01 5.47E-02 2.15E-02
+4 8 4.11E-01 9.36E-02 3.85E-02
+4 9 4.25E-01 8.95E-02 3.80E-02
+4 10 4.36E-01 6.49E-02 2.83E-02
+4 11 4.45E-01 4.02E-02 1.79E-02
+4 12 4.53E-01 2.26E-02 1.02E-02
+5 0 1.87E-01 2.80E-04 5.23E-05
+5 1 2.28E-01 1.65E-02 3.77E-03
+5 2 2.62E-01 1.70E-01 4.45E-02
+5 3 2.87E-01 2.42E-01 6.97E-02
+5 4 3.61E-01 1.06E-02 3.81E-03
+5 5 3.36E-01 9.51E-02 3.19E-02
+5 6 3.68E-01 9.48E-02 3.49E-02
+5 7 4.14E-01 8.89E-03 3.68E-03
+5 8 3.74E-01 1.38E-02 5.15E-03
+5 9 4.03E-01 5.89E-02 2.38E-02
+5 10 4.19E-01 8.07E-02 3.38E-02
+5 11 4.31E-01 7.35E-02 3.17E-02
+5 12 4.41E-01 5.40E-02 2.38E-02
+5 13 4.49E-01 3.49E-02 1.57E-02
+6 0 1.35E-01 1.01E-05 1.36E-06
+6 1 1.81E-01 1.44E-03 2.62E-04
+6 2 2.22E-01 3.92E-02 8.72E-03
+6 3 2.56E-01 2.30E-01 5.89E-02
+6 4 2.78E-01 1.56E-01 4.33E-02
+6 5 3.29E-01 5.80E-02 1.91E-02
+6 6 3.20E-01 3.53E-02 1.13E-02
+6 7 3.59E-01 1.04E-01 3.75E-02
+6 8 3.90E-01 3.98E-02 1.55E-02
+6 10 3.91E-01 2.43E-02 9.52E-03
+6 11 4.12E-01 5.77E-02 2.38E-02
+6 12 4.25E-01 6.93E-02 2.95E-02
+6 13 4.36E-01 6.15E-02 2.68E-02
+6 14 4.44E-01 4.60E-02 2.05E-02
+6 15 4.52E-01 3.09E-02 1.40E-02
+7 1 1.29E-01 6.38E-05 8.21E-06
+7 2 1.76E-01 4.32E-03 7.61E-04
+7 3 2.16E-01 7.19E-02 1.56E-02
+7 4 2.49E-01 2.66E-01 6.62E-02
+7 5 2.65E-01 7.43E-02 1.97E-02
+7 6 3.16E-01 1.06E-01 3.34E-02
+7 7 2.61E-01 3.04E-03 7.94E-04
+7 8 3.49E-01 8.13E-02 2.84E-02
+7 9 3.78E-01 6.81E-02 2.58E-02
+7 10 4.15E-01 1.12E-02 4.64E-03
+7 11 3.57E-01 3.43E-03 1.23E-03
+7 12 4.02E-01 3.04E-02 1.22E-02
+7 13 4.19E-01 5.38E-02 2.25E-02
+7 14 4.31E-01 5.98E-02 2.57E-02
+7 15 4.40E-01 5.25E-02 2.31E-02
+7 16 4.47E-01 4.01E-02 1.80E-02
+8 2 1.23E-01 2.31E-04 2.83E-05
+8 3 1.70E-01 9.87E-03 1.68E-03
+8 4 2.10E-01 1.12E-01 2.36E-02
+8 5 2.42E-01 2.71E-01 6.56E-02
+8 6 2.39E-01 1.99E-02 4.77E-03
+8 7 3.06E-01 1.28E-01 3.92E-02
+8 8 3.93E-01 4.84E-03 1.90E-03
+8 9 3.37E-01 4.42E-02 1.49E-02
+8 10 3.69E-01 7.74E-02 2.85E-02
+8 11 3.96E-01 3.41E-02 1.35E-02
+8 12 4.78E-01 1.33E-03 6.34E-04
+8 13 3.84E-01 8.93E-03 3.43E-03
+8 14 4.10E-01 3.25E-02 1.33E-02
+8 15 4.24E-01 4.88E-02 2.07E-02
+8 16 4.34E-01 5.19E-02 2.26E-02
+8 17 4.43E-01 4.57E-02 2.02E-02
+8 18 4.50E-01 3.57E-02 1.61E-02
+9 3 1.17E-01 6.27E-04 7.34E-05
+9 4 1.64E-01 1.90E-02 3.12E-03
+9 5 2.04E-01 1.56E-01 3.18E-02
+9 6 2.34E-01 2.49E-01 5.82E-02
+9 7 8.98E-03 1.66E-04 1.49E-06
+9 8 2.96E-01 1.20E-01 3.55E-02
+9 9 3.46E-01 2.97E-02 1.03E-02
+9 10 3.13E-01 1.30E-02 4.07E-03
+9 11 3.59E-01 6.53E-02 2.34E-02
+9 12 3.85E-01 5.36E-02 2.06E-02
+9 13 4.14E-01 1.39E-02 5.78E-03
+9 14 2.00E-01 1.18E-04 2.36E-05
+9 15 3.97E-01 1.31E-02 5.18E-03
+9 16 4.16E-01 3.21E-02 1.34E-02
+9 17 4.29E-01 4.38E-02 1.88E-02
+9 18 4.38E-01 4.55E-02 1.99E-02
+9 19 4.45E-01 4.03E-02 1.79E-02
+9 20 4.52E-01 3.22E-02 1.46E-02
+10 3 5.36E-02 1.71E-05 9.16E-07
+10 4 1.12E-01 1.42E-03 1.59E-04
+10 5 1.59E-01 3.24E-02 5.13E-03
+10 6 1.97E-01 1.98E-01 3.91E-02
+10 7 2.25E-01 2.05E-01 4.62E-02
+10 8 3.23E-01 1.06E-02 3.41E-03
+10 9 2.85E-01 8.89E-02 2.54E-02
+10 10 3.30E-01 5.98E-02 1.98E-02
+10 11 7.87E-02 1.42E-04 1.12E-05
+10 12 3.46E-01 4.06E-02 1.41E-02
+10 13 3.75E-01 5.96E-02 2.23E-02
+10 14 3.98E-01 3.17E-02 1.26E-02
+10 15 4.38E-01 4.49E-03 1.97E-03
+10 16 3.55E-01 1.70E-03 6.03E-04
+10 17 4.05E-01 1.52E-02 6.17E-03
+10 18 4.21E-01 3.04E-02 1.28E-02
+10 19 4.32E-01 3.90E-02 1.68E-02
+10 20 4.40E-01 4.01E-02 1.76E-02
+10 21 4.47E-01 3.59E-02 1.61E-02
+11 4 4.92E-02 4.42E-05 2.18E-06
+11 5 1.06E-01 2.84E-03 3.01E-04
+11 6 1.53E-01 5.05E-02 7.70E-03
+11 7 1.91E-01 2.34E-01 4.47E-02
+11 8 2.15E-01 1.50E-01 3.23E-02
+11 9 2.86E-01 3.97E-02 1.14E-02
+11 10 2.71E-01 5.06E-02 1.37E-02
+11 11 3.18E-01 8.01E-02 2.55E-02
+11 12 3.86E-01 6.97E-03 2.69E-03
+11 13 3.27E-01 1.59E-02 5.20E-03
+11 14 3.64E-01 5.06E-02 1.84E-02
+11 15 3.87E-01 4.46E-02 1.73E-02
+11 16 4.11E-01 1.71E-02 7.04E-03
+11 17 4.87E-01 9.45E-04 4.60E-04
+11 18 3.80E-01 3.51E-03 1.33E-03
+11 19 4.11E-01 1.58E-02 6.49E-03
+11 20 4.24E-01 2.78E-02 1.18E-02
+11 21 4.34E-01 3.44E-02 1.49E-02
+12 5 4.50E-02 1.00E-04 4.50E-06
+12 6 1.00E-01 5.16E-03 5.19E-04
+12 7 1.47E-01 7.33E-02 1.07E-02
+12 8 1.84E-01 2.60E-01 4.78E-02
+12 9 2.03E-01 9.45E-02 1.92E-02
+12 10 2.69E-01 7.40E-02 1.99E-02
+12 11 2.48E-01 1.85E-02 4.57E-03
+12 12 3.08E-01 8.28E-02 2.55E-02
+12 13 3.51E-01 2.62E-02 9.22E-03
+12 14 2.58E-01 1.67E-03 4.31E-04
+12 15 3.51E-01 3.21E-02 1.13E-02
+12 16 3.77E-01 4.66E-02 1.75E-02
+12 17 3.98E-01 3.04E-02 1.21E-02
+12 18 4.23E-01 8.81E-03 3.73E-03
+12 19 7.97E-01 4.50E-05 3.59E-05
+12 20 3.92E-01 4.64E-03 1.82E-03
+12 21 4.14E-01 1.51E-02 6.25E-03
+13 6 4.07E-02 2.05E-04 8.33E-06
+13 7 9.50E-02 8.70E-03 8.27E-04
+13 8 1.40E-01 1.00E-01 1.41E-02
+13 9 1.77E-01 2.73E-01 4.81E-02
+13 10 1.86E-01 4.74E-02 8.82E-03
+13 11 2.57E-01 1.02E-01 2.61E-02
+13 12 1.59E-01 1.67E-03 2.65E-04
+13 13 2.96E-01 6.87E-02 2.03E-02
+13 14 3.35E-01 4.70E-02 1.58E-02
+13 15 4.42E-01 1.90E-03 8.39E-04
+13 16 3.31E-01 1.31E-02 4.33E-03
+13 17 3.65E-01 3.75E-02 1.37E-02
+13 18 3.87E-01 3.75E-02 1.45E-02
+13 19 4.06E-01 2.01E-02 8.14E-03
+13 20 4.35E-01 4.54E-03 1.97E-03
+14 7 3.66E-02 3.87E-04 1.42E-05
+14 8 8.95E-02 1.38E-02 1.24E-03
+14 9 1.34E-01 1.31E-01 1.76E-02
+14 10 1.69E-01 2.71E-01 4.57E-02
+14 11 1.54E-01 1.53E-02 2.35E-03
+14 12 2.46E-01 1.15E-01 2.82E-02
+14 13 3.92E-01 2.63E-03 1.03E-03
+14 14 2.82E-01 4.48E-02 1.26E-02
+14 15 3.23E-01 5.96E-02 1.93E-02
+14 16 3.69E-01 1.39E-02 5.10E-03
+14 17 2.64E-01 1.60E-03 4.21E-04
+14 18 3.50E-01 2.22E-02 7.79E-03
+14 19 3.75E-01 3.54E-02 1.33E-02
+14 20 3.94E-01 2.86E-02 1.13E-02
+14 21 4.12E-01 1.35E-02 5.57E-03
+15 8 3.27E-02 6.86E-04 2.24E-05
+15 9 8.41E-02 2.09E-02 1.76E-03
+15 10 1.28E-01 1.64E-01 2.09E-02
+15 11 1.61E-01 2.54E-01 4.09E-02
+15 12 2.55E-02 8.64E-04 2.20E-05
+15 13 2.35E-01 1.11E-01 2.61E-02
+15 14 3.06E-01 1.77E-02 5.42E-03
+15 15 2.62E-01 2.05E-02 5.37E-03
+15 16 3.11E-01 5.93E-02 1.84E-02
+15 17 3.47E-01 3.02E-02 1.05E-02
+15 18 4.68E-01 1.22E-03 5.72E-04
+15 19 3.25E-01 7.92E-03 2.57E-03
+15 20 3.62E-01 2.55E-02 9.21E-03
+15 21 3.82E-01 3.04E-02 1.16E-02
+16 9 2.90E-02 1.15E-03 3.34E-05
+16 10 7.87E-02 3.02E-02 2.38E-03
+16 11 1.21E-01 1.97E-01 2.38E-02
+16 12 1.52E-01 2.26E-01 3.43E-02
+16 13 3.48E-01 3.60E-03 1.25E-03
+16 14 2.23E-01 9.29E-02 2.07E-02
+16 15 2.81E-01 3.94E-02 1.11E-02
+16 16 2.13E-01 4.23E-03 9.04E-04
+16 17 2.98E-01 4.71E-02 1.40E-02
+16 18 3.32E-01 4.30E-02 1.43E-02
+16 19 3.76E-01 1.03E-02 3.88E-03
+16 20 2.02E-01 4.47E-04 9.02E-05
+16 21 3.43E-01 1.27E-02 4.35E-03
+17 10 2.55E-02 1.84E-03 4.71E-05
+17 11 7.34E-02 4.21E-02 3.09E-03
+17 12 1.15E-01 2.28E-01 2.62E-02
+17 13 1.43E-01 1.88E-01 2.69E-02
+17 14 2.47E-01 1.98E-02 4.90E-03
+17 15 2.09E-01 6.61E-02 1.38E-02
+17 16 2.65E-01 5.94E-02 1.58E-02
+17 17 7.40E-01 2.21E-04 1.64E-04
+17 18 2.81E-01 2.87E-02 8.07E-03
+17 19 3.19E-01 4.64E-02 1.48E-02
+17 20 3.52E-01 2.33E-02 8.20E-03
+17 21 4.31E-01 2.10E-03 9.07E-04
+18 11 2.22E-02 2.83E-03 6.30E-05
+18 12 6.81E-02 5.66E-02 3.86E-03
+18 13 1.08E-01 2.56E-01 2.77E-02
+18 14 1.32E-01 1.46E-01 1.93E-02
+18 15 2.18E-01 4.38E-02 9.55E-03
+18 16 1.90E-01 3.80E-02 7.23E-03
+18 17 2.52E-01 7.09E-02 1.79E-02
+18 18 3.30E-01 7.93E-03 2.62E-03
+18 19 2.55E-01 1.13E-02 2.89E-03
+18 20 3.05E-01 3.96E-02 1.21E-02
+18 21 3.35E-01 3.35E-02 1.12E-02
+19 11 1.33E-02 3.90E-05 5.20E-07
+19 12 1.91E-02 4.19E-03 8.00E-05
+19 13 6.28E-02 7.40E-02 4.65E-03
+19 14 1.01E-01 2.79E-01 2.83E-02
+19 15 1.20E-01 1.03E-01 1.24E-02
+19 16 2.00E-01 6.93E-02 1.39E-02
+19 17 1.62E-01 1.52E-02 2.45E-03
+19 18 2.38E-01 7.08E-02 1.69E-02
+19 19 2.93E-01 2.28E-02 6.68E-03
+19 20 1.68E-01 1.28E-03 2.15E-04
+19 21 2.88E-01 2.59E-02 7.45E-03
+20 12 2.08E-02 5.59E-05 1.16E-06
+20 13 1.61E-02 5.99E-03 9.62E-05
+20 14 5.76E-02 9.41E-02 5.43E-03
+20 15 9.46E-02 2.96E-01 2.80E-02
+20 16 1.06E-01 6.51E-02 6.88E-03
+20 17 1.86E-01 9.05E-02 1.68E-02
+20 18 8.23E-02 2.27E-03 1.87E-04
+20 19 2.24E-01 5.98E-02 1.34E-02
+20 20 2.73E-01 3.84E-02 1.05E-02
+20 21 4.33E-01 1.24E-03 5.37E-04
+21 13 3.23E-02 7.48E-05 2.42E-06
+21 14 1.32E-02 8.27E-03 1.09E-04
+21 15 5.25E-02 1.17E-01 6.13E-03
+21 16 8.77E-02 3.05E-01 2.67E-02
+21 17 8.59E-02 3.44E-02 2.96E-03
+21 18 1.73E-01 1.03E-01 1.79E-02
+21 19 5.64E-01 7.03E-04 3.97E-04
+21 20 2.08E-01 4.19E-02 8.71E-03
+21 21 2.56E-01 4.85E-02 1.24E-02
+[transition-N22p]
+83 0 0 0 5
+c from phd thesis of laux
+c vu vl sumre2/fcf FCF SRe2
+0 0 3.36E+00 4.52E-01 1.52E+00
+0 1 3.68E+00 3.28E-01 1.21E+00
+0 2 3.93E+00 1.47E-01 5.76E-01
+0 3 4.13E+00 5.20E-02 2.15E-01
+0 4 4.32E+00 1.61E-02 6.95E-02
+0 5 4.48E+00 4.57E-03 2.05E-02
+0 6 4.63E+00 1.23E-03 5.67E-03
+0 7 4.75E+00 3.17E-04 1.51E-03
+0 8 4.84E+00 8.10E-05 3.92E-04
+0 9 4.90E+00 2.08E-05 1.02E-04
+0 10 4.94E+00 5.50E-06 2.72E-05
+0 11 4.98E+00 1.50E-06 7.46E-06
+1 0 2.99E+00 3.94E-01 1.18E+00
+1 1 2.92E+00 2.18E-02 6.38E-02
+1 2 3.59E+00 2.04E-01 7.31E-01
+1 3 3.87E+00 1.98E-01 7.66E-01
+1 4 4.08E+00 1.10E-01 4.49E-01
+1 5 4.27E+00 4.68E-02 2.00E-01
+1 6 4.43E+00 1.71E-02 7.57E-02
+1 7 4.58E+00 5.64E-03 2.58E-02
+1 8 4.70E+00 1.75E-03 8.21E-03
+1 9 4.81E+00 5.20E-04 2.50E-03
+1 10 4.88E+00 1.52E-04 7.43E-04
+1 11 4.94E+00 4.44E-05 2.19E-04
+1 12 4.98E+00 1.31E-05 6.50E-05
+1 13 5.00E+00 3.87E-06 1.93E-05
+1 14 5.06E+00 1.13E-06 5.70E-06
+2 0 2.54E+00 1.33E-01 3.37E-01
+2 1 2.84E+00 3.42E-01 9.71E-01
+2 2 3.83E+00 2.37E-02 9.08E-02
+2 3 3.45E+00 6.41E-02 2.21E-01
+2 4 3.80E+00 1.61E-01 6.11E-01
+2 5 4.03E+00 1.39E-01 5.59E-01
+2 6 4.22E+00 7.91E-02 3.33E-01
+2 7 4.38E+00 3.61E-02 1.58E-01
+2 8 4.53E+00 1.44E-02 6.52E-02
+2 9 4.66E+00 5.24E-03 2.44E-02
+2 10 4.77E+00 1.79E-03 8.54E-03
+2 11 4.85E+00 5.90E-04 2.86E-03
+2 12 4.92E+00 1.90E-04 9.37E-04
+2 13 4.98E+00 6.05E-05 3.02E-04
+2 14 5.03E+00 1.90E-05 9.56E-05
+2 15 5.06E+00 5.84E-06 2.96E-05
+2 16 5.10E+00 1.70E-06 8.66E-06
+3 0 1.90E+00 2.02E-02 3.82E-02
+3 1 2.39E+00 2.53E-01 6.04E-01
+3 2 2.62E+00 2.11E-01 5.51E-01
+3 3 3.54E+00 8.86E-02 3.14E-01
+3 4 2.96E+00 4.98E-03 1.48E-02
+3 5 3.72E+00 9.39E-02 3.49E-01
+3 6 3.97E+00 1.31E-01 5.20E-01
+3 7 4.17E+00 9.88E-02 4.12E-01
+3 8 4.34E+00 5.54E-02 2.40E-01
+3 9 4.48E+00 2.62E-02 1.17E-01
+3 10 4.61E+00 1.10E-02 5.09E-02
+3 11 4.73E+00 4.28E-03 2.02E-02
+3 12 4.83E+00 1.57E-03 7.58E-03
+3 13 4.90E+00 5.56E-04 2.72E-03
+3 14 4.95E+00 1.92E-04 9.52E-04
+3 15 5.02E+00 6.43E-05 3.23E-04
+3 16 5.11E+00 2.05E-05 1.05E-04
+3 17 5.19E+00 6.14E-06 3.18E-05
+3 18 5.23E+00 1.64E-06 8.55E-06
+4 0 7.76E-01 9.58E-04 7.43E-04
+4 1 1.70E+00 5.37E-02 9.12E-02
+4 2 2.21E+00 3.30E-01 7.30E-01
+4 3 2.27E+00 1.20E-01 2.71E-01
+4 4 3.50E+00 1.14E-01 3.99E-01
+4 5 4.25E+00 3.65E-03 1.55E-02
+4 6 3.61E+00 4.05E-02 1.46E-01
+4 7 3.92E+00 1.01E-01 3.95E-01
+4 8 4.12E+00 1.01E-01 4.15E-01
+4 9 4.30E+00 6.80E-02 2.93E-01
+4 10 4.45E+00 3.73E-02 1.66E-01
+4 11 4.57E+00 1.79E-02 8.18E-02
+4 12 4.69E+00 7.80E-03 3.66E-02
+4 13 4.80E+00 3.15E-03 1.51E-02
+4 14 4.90E+00 1.20E-03 5.90E-03
+4 15 4.95E+00 4.47E-04 2.21E-03
+4 16 4.98E+00 1.61E-04 8.03E-04
+4 17 5.05E+00 5.48E-05 2.77E-04
+4 18 5.22E+00 1.67E-05 8.70E-05
+4 19 5.48E+00 4.28E-06 2.35E-05
+[transition-N2bh2]
+2186 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 1.468565E+00 2.796400E-07 4.106695E-07
+ 0 1 1.453286E+00 3.734672E-06 5.427545E-06
+ 0 2 1.423217E+00 2.612273E-05 3.717832E-05
+ 0 3 1.381913E+00 1.263369E-04 1.745867E-04
+ 0 4 1.331689E+00 4.715912E-04 6.280126E-04
+ 0 5 1.274560E+00 1.440062E-03 1.835445E-03
+ 0 6 1.212423E+00 3.726890E-03 4.518566E-03
+ 0 7 1.146959E+00 8.368146E-03 9.597920E-03
+ 0 8 1.079582E+00 1.657006E-02 1.788874E-02
+ 0 9 1.011458E+00 2.927922E-02 2.961470E-02
+ 0 10 9.435581E-01 4.657204E-02 4.394342E-02
+ 0 11 8.766828E-01 6.712035E-02 5.884326E-02
+ 0 12 8.114419E-01 8.807772E-02 7.146995E-02
+ 0 13 7.482498E-01 1.056154E-01 7.902672E-02
+ 0 14 6.873951E-01 1.160273E-01 7.975659E-02
+ 0 15 6.291767E-01 1.169808E-01 7.360159E-02
+ 0 16 5.740129E-01 1.083472E-01 6.219267E-02
+ 0 17 5.224392E-01 9.221513E-02 4.817681E-02
+ 0 18 4.750181E-01 7.209790E-02 3.424781E-02
+ 0 19 4.322293E-01 5.173154E-02 2.235989E-02
+ 0 20 3.943288E-01 3.400860E-02 1.341057E-02
+ 0 21 3.611685E-01 2.043615E-02 7.380893E-03
+ 0 22 3.322270E-01 1.118954E-02 3.717467E-03
+ 0 23 3.071276E-01 5.559659E-03 1.707525E-03
+ 0 24 2.861611E-01 2.493683E-03 7.135951E-04
+ 0 25 2.697126E-01 1.003067E-03 2.705399E-04
+ 0 26 2.568990E-01 3.588395E-04 9.218550E-05
+ 0 27 2.461257E-01 1.129688E-04 2.780454E-05
+ 0 28 2.385897E-01 3.087403E-05 7.366224E-06
+ 0 29 2.385096E-01 7.195323E-06 1.716154E-06
+ 0 30 2.424911E-01 1.395895E-06 3.384922E-07
+ 0 31 2.332230E-01 2.178929E-07 5.081764E-08
+ 0 32 2.354023E-01 2.600801E-08 6.122345E-09
+ 0 33 4.045719E-01 2.180890E-09 8.823269E-10
+ 0 34 2.631751E-01 1.087849E-10 2.862948E-11
+ 0 35 6.762841E+00 1.988100E-12 1.344520E-11
+ 0 36 9.693570E+03 1.600000E-15 1.550971E-11
+ 0 37 1.503545E+02 3.600000E-15 5.412760E-13
+ 0 38 1.889993E+05 1.000000E-16 1.889993E-11
+ 1 0 1.473134E+00 4.021509E-06 5.924221E-06
+ 1 1 1.463218E+00 4.682364E-05 6.851320E-05
+ 1 2 1.437310E+00 2.836742E-04 4.077276E-04
+ 1 3 1.399466E+00 1.177569E-03 1.647967E-03
+ 1 4 1.352061E+00 3.728922E-03 5.041731E-03
+ 1 5 1.297114E+00 9.517220E-03 1.234492E-02
+ 1 6 1.236576E+00 2.020410E-02 2.498390E-02
+ 1 7 1.172225E+00 3.633287E-02 4.259029E-02
+ 1 8 1.105555E+00 5.585728E-02 6.175331E-02
+ 1 9 1.037787E+00 7.351288E-02 7.629075E-02
+ 1 10 9.699489E-01 8.219616E-02 7.972607E-02
+ 1 11 9.029476E-01 7.644500E-02 6.902583E-02
+ 1 12 8.375805E-01 5.635529E-02 4.720209E-02
+ 1 13 7.745317E-01 2.920150E-02 2.261748E-02
+ 1 14 7.148743E-01 6.917395E-03 4.945068E-03
+ 1 15 6.401146E-01 2.468154E-04 1.579902E-04
+ 1 16 5.963013E-01 1.292929E-02 7.709754E-03
+ 1 17 5.446816E-01 3.961509E-02 2.157761E-02
+ 1 18 4.962435E-01 6.883569E-02 3.415927E-02
+ 1 19 4.518435E-01 8.903159E-02 4.022834E-02
+ 1 20 4.118533E-01 9.386801E-02 3.865985E-02
+ 1 21 3.764526E-01 8.400753E-02 3.162485E-02
+ 1 22 3.456589E-01 6.513063E-02 2.251298E-02
+ 1 23 3.192165E-01 4.419885E-02 1.410900E-02
+ 1 24 2.966980E-01 2.637083E-02 7.824172E-03
+ 1 25 2.779263E-01 1.383820E-02 3.845998E-03
+ 1 26 2.630353E-01 6.367906E-03 1.674984E-03
+ 1 27 2.518084E-01 2.554083E-03 6.431396E-04
+ 1 28 2.435919E-01 8.844658E-04 2.154487E-04
+ 1 29 2.386046E-01 2.608742E-04 6.224578E-05
+ 1 30 2.379339E-01 6.429730E-05 1.529851E-05
+ 1 31 2.409921E-01 1.288796E-05 3.105896E-06
+ 1 32 2.468880E-01 2.018531E-06 4.983511E-07
+ 1 33 2.595347E-01 2.318904E-07 6.018360E-08
+ 1 34 2.897483E-01 1.745305E-08 5.056991E-09
+ 1 35 3.857669E-01 6.656400E-10 2.567819E-10
+ 1 36 1.804779E-02 4.202500E-12 7.584582E-14
+ 1 37 8.307354E-01 3.600000E-13 2.990647E-13
+ 1 38 8.994134E+01 3.610000E-14 3.246882E-12
+ 1 39 3.731630E+04 1.000000E-16 3.731630E-12
+ 1 40 1.396956E+03 1.000000E-16 1.396956E-13
+ 2 0 1.476093E+00 2.920019E-05 4.310220E-05
+ 2 1 1.471944E+00 2.938982E-04 4.326018E-04
+ 2 2 1.450432E+00 1.525888E-03 2.213196E-03
+ 2 3 1.416296E+00 5.361536E-03 7.593524E-03
+ 2 4 1.371996E+00 1.413307E-02 1.939053E-02
+ 2 5 1.319515E+00 2.936130E-02 3.874267E-02
+ 2 6 1.260856E+00 4.920218E-02 6.203688E-02
+ 2 7 1.197931E+00 6.685744E-02 8.009062E-02
+ 2 8 1.132383E+00 7.269265E-02 8.231595E-02
+ 2 9 1.065591E+00 6.057477E-02 6.454795E-02
+ 2 10 9.989446E-01 3.447579E-02 3.443941E-02
+ 2 11 9.355041E-01 8.895238E-03 8.321531E-03
+ 2 12 8.085196E-01 1.873485E-04 1.514749E-04
+ 2 13 7.910618E-01 1.402085E-02 1.109136E-02
+ 2 14 7.317368E-01 3.952207E-02 2.891975E-02
+ 2 15 6.731655E-01 5.658561E-02 3.809148E-02
+ 2 16 6.165254E-01 5.156053E-02 3.178838E-02
+ 2 17 5.616203E-01 2.836624E-02 1.593105E-02
+ 2 18 5.046859E-01 5.471500E-03 2.761389E-03
+ 2 19 4.944254E-01 1.404986E-03 6.946606E-04
+ 2 20 4.345717E-01 2.106269E-02 9.153248E-03
+ 2 21 3.948812E-01 5.338934E-02 2.108245E-02
+ 2 22 3.612277E-01 8.060505E-02 2.911678E-02
+ 2 23 3.324407E-01 9.023768E-02 2.999868E-02
+ 2 24 3.080539E-01 8.102194E-02 2.495913E-02
+ 2 25 2.876136E-01 6.043249E-02 1.738120E-02
+ 2 26 2.708234E-01 3.806395E-02 1.030861E-02
+ 2 27 2.577180E-01 2.036999E-02 5.249714E-03
+ 2 28 2.481910E-01 9.254005E-03 2.296761E-03
+ 2 29 2.417005E-01 3.544962E-03 8.568189E-04
+ 2 30 2.384248E-01 1.130563E-03 2.695543E-04
+ 2 31 2.396260E-01 2.941839E-04 7.049412E-05
+ 2 32 2.444345E-01 6.056793E-05 1.480489E-05
+ 2 33 2.515942E-01 9.405017E-06 2.366248E-06
+ 2 34 2.736455E-01 1.016044E-06 2.780358E-07
+ 2 35 3.155709E-01 6.513214E-08 2.055381E-08
+ 2 36 2.770808E-01 1.586429E-09 4.395690E-10
+ 2 37 9.982743E+00 4.225000E-13 4.217709E-12
+ 2 38 5.572753E-03 3.802500E-12 2.119039E-14
+ 2 39 8.848338E+01 4.840000E-14 4.282596E-12
+ 2 40 1.252364E+02 8.100000E-15 1.014415E-12
+ 2 41 6.742539E+02 1.000000E-16 6.742539E-14
+ 3 0 1.477364E+00 1.426610E-04 2.107622E-04
+ 3 1 1.479462E+00 1.229013E-03 1.818278E-03
+ 3 2 1.462600E+00 5.398058E-03 7.895199E-03
+ 3 3 1.432455E+00 1.576993E-02 2.258972E-02
+ 3 4 1.391626E+00 3.371513E-02 4.691884E-02
+ 3 5 1.342032E+00 5.478333E-02 7.352097E-02
+ 3 6 1.285760E+00 6.787802E-02 8.727484E-02
+ 3 7 1.225050E+00 6.193826E-02 7.587747E-02
+ 3 8 1.162376E+00 3.715557E-02 4.318875E-02
+ 3 9 1.103211E+00 9.572934E-03 1.056097E-02
+ 3 10 9.454941E-01 3.098846E-04 2.929941E-04
+ 3 11 9.446516E-01 1.599052E-02 1.510547E-02
+ 3 12 8.829244E-01 4.008476E-02 3.539182E-02
+ 3 13 8.197885E-01 4.749909E-02 3.893921E-02
+ 3 14 7.582393E-01 3.012815E-02 2.284435E-02
+ 3 15 7.002946E-01 6.209282E-03 4.348327E-03
+ 3 16 6.349378E-01 1.578972E-03 1.002549E-03
+ 3 17 5.850327E-01 2.196363E-02 1.284944E-02
+ 3 18 5.342092E-01 4.654307E-02 2.486374E-02
+ 3 19 4.858553E-01 4.996800E-02 2.427722E-02
+ 3 20 4.398875E-01 2.883248E-02 1.268305E-02
+ 3 21 3.893634E-01 4.788651E-03 1.864525E-03
+ 3 22 3.986136E-01 2.775644E-03 1.106409E-03
+ 3 23 3.507542E-01 2.808751E-02 9.851814E-03
+ 3 24 3.218506E-01 6.380633E-02 2.053610E-02
+ 3 25 2.987876E-01 8.724187E-02 2.606679E-02
+ 3 26 2.800519E-01 8.729474E-02 2.444706E-02
+ 3 27 2.650115E-01 6.862860E-02 1.818737E-02
+ 3 28 2.535053E-01 4.369122E-02 1.107596E-02
+ 3 29 2.455467E-01 2.277680E-02 5.592769E-03
+ 3 30 2.408230E-01 9.716335E-03 2.339917E-03
+ 3 31 2.392259E-01 3.356642E-03 8.029957E-04
+ 3 32 2.418095E-01 9.196814E-04 2.223877E-04
+ 3 33 2.491070E-01 1.929577E-04 4.806710E-05
+ 3 34 2.601104E-01 2.923478E-05 7.604272E-06
+ 3 35 2.833926E-01 2.874212E-06 8.145304E-07
+ 3 36 3.434752E-01 1.441341E-07 4.950650E-08
+ 3 37 3.968409E-01 1.388308E-09 5.509372E-10
+ 3 38 1.505757E-01 9.006010E-11 1.356086E-11
+ 3 39 1.228228E-06 1.260250E-11 1.547874E-17
+ 3 40 1.245678E+02 3.610000E-14 4.496899E-12
+ 3 41 1.067448E+01 5.290000E-14 5.646799E-13
+ 3 45 4.513600E+02 1.000000E-16 4.513600E-14
+ 3 46 5.587825E+03 1.000000E-16 5.587825E-13
+ 4 0 1.476860E+00 5.272994E-04 7.787472E-04
+ 4 1 1.485792E+00 3.843156E-03 5.710130E-03
+ 4 2 1.473852E+00 1.405261E-02 2.071147E-02
+ 4 3 1.448041E+00 3.332886E-02 4.826156E-02
+ 4 4 1.411220E+00 5.563097E-02 7.850753E-02
+ 4 5 1.365295E+00 6.613762E-02 9.029735E-02
+ 4 6 1.312768E+00 5.299952E-02 6.957605E-02
+ 4 7 1.258207E+00 2.306770E-02 2.902395E-02
+ 4 8 1.239883E+00 1.346939E-03 1.670047E-03
+ 4 9 1.091171E+00 7.255811E-03 7.917329E-03
+ 4 10 1.038542E+00 3.131037E-02 3.251712E-02
+ 4 11 9.757782E-01 4.335243E-02 4.230235E-02
+ 4 12 9.124251E-01 2.798953E-02 2.553835E-02
+ 4 13 8.549041E-01 4.542871E-03 3.883719E-03
+ 4 14 7.685352E-01 3.204789E-03 2.462994E-03
+ 4 15 7.162627E-01 2.564044E-02 1.836529E-02
+ 4 16 6.594260E-01 4.210064E-02 2.776225E-02
+ 4 17 6.039772E-01 3.055900E-02 1.845694E-02
+ 4 18 5.472367E-01 6.321387E-03 3.459295E-03
+ 4 19 5.229277E-01 2.186057E-03 1.143150E-03
+ 4 20 4.663258E-01 2.538078E-02 1.183571E-02
+ 4 21 4.229722E-01 4.801756E-02 2.031010E-02
+ 4 22 3.842334E-01 4.250738E-02 1.633276E-02
+ 4 23 3.468282E-01 1.562012E-02 5.417496E-03
+ 4 24 5.664928E-01 9.145671E-07 5.180956E-07
+ 4 25 3.173821E-01 1.695576E-02 5.381455E-03
+ 4 26 2.920471E-01 5.536622E-02 1.616954E-02
+ 4 27 2.740891E-01 8.612015E-02 2.360459E-02
+ 4 28 2.604376E-01 9.017362E-02 2.348460E-02
+ 4 29 2.504252E-01 7.054760E-02 1.766690E-02
+ 4 30 2.439114E-01 4.291511E-02 1.046749E-02
+ 4 31 2.407378E-01 2.054426E-02 4.945782E-03
+ 4 32 2.409008E-01 7.698992E-03 1.854693E-03
+ 4 33 2.452133E-01 2.212013E-03 5.424149E-04
+ 4 34 2.545778E-01 4.678768E-04 1.191110E-04
+ 4 35 2.697644E-01 6.766576E-05 1.825382E-05
+ 4 36 3.003246E-01 5.766242E-06 1.731744E-06
+ 4 37 3.819562E-01 1.926595E-07 7.358752E-08
+ 4 38 9.706487E+01 5.184000E-13 5.031843E-11
+ 4 39 1.870503E-01 5.697769E-10 1.065769E-10
+ 4 40 3.496633E-01 1.115560E-11 3.900704E-12
+ 4 41 1.160037E+00 1.988100E-12 2.306270E-12
+ 4 42 5.773147E+01 1.024000E-13 5.911702E-12
+ 4 43 3.398499E+02 4.900000E-15 1.665265E-12
+ 4 44 2.106828E+01 9.000000E-16 1.896146E-14
+ 4 45 3.716445E+02 9.000000E-16 3.344801E-13
+ 4 46 8.552692E+02 9.000000E-16 7.697422E-13
+ 5 0 1.474485E+00 1.571809E-03 2.317610E-03
+ 5 1 1.490981E+00 9.558171E-03 1.425105E-02
+ 5 2 1.484270E+00 2.850741E-02 4.231271E-02
+ 5 3 1.463248E+00 5.309070E-02 7.768487E-02
+ 5 4 1.431380E+00 6.509617E-02 9.317734E-02
+ 5 5 1.391126E+00 4.962425E-02 6.903360E-02
+ 5 6 1.349277E+00 1.735016E-02 2.341017E-02
+ 5 7 2.030578E+00 1.831686E-05 3.719381E-05
+ 5 8 1.184828E+00 1.408808E-02 1.669195E-02
+ 5 9 1.131328E+00 3.716082E-02 4.204108E-02
+ 5 10 1.069966E+00 3.570953E-02 3.820799E-02
+ 5 11 1.010546E+00 1.168472E-02 1.180794E-02
+ 5 12 8.652875E-01 2.893210E-04 2.503459E-04
+ 5 13 8.619236E-01 1.786988E-02 1.540247E-02
+ 5 14 8.025051E-01 3.669246E-02 2.944588E-02
+ 5 15 7.427044E-01 2.720239E-02 2.020334E-02
+ 5 16 6.858044E-01 4.206766E-03 2.885019E-03
+ 5 17 6.255267E-01 4.236827E-03 2.650248E-03
+ 5 18 5.738551E-01 2.816515E-02 1.616271E-02
+ 5 19 5.234679E-01 3.918116E-02 2.051008E-02
+ 5 20 4.737143E-01 2.005734E-02 9.501448E-03
+ 5 21 3.819070E-01 4.940422E-04 1.886782E-04
+ 5 22 4.127223E-01 1.221343E-02 5.040755E-03
+ 5 23 3.719144E-01 4.087910E-02 1.520353E-02
+ 5 24 3.393223E-01 4.670883E-02 1.584935E-02
+ 5 25 3.091085E-01 2.154759E-02 6.660544E-03
+ 5 26 2.225048E-01 3.696245E-04 8.224321E-05
+ 5 27 2.912858E-01 1.530743E-02 4.458838E-03
+ 5 28 2.702511E-01 5.733201E-02 1.549404E-02
+ 5 29 2.571909E-01 9.041030E-02 2.325270E-02
+ 5 30 2.483829E-01 9.127647E-02 2.267152E-02
+ 5 31 2.432423E-01 6.621049E-02 1.610520E-02
+ 5 32 2.415542E-01 3.587761E-02 8.666388E-03
+ 5 33 2.433701E-01 1.459328E-02 3.551568E-03
+ 5 34 2.495963E-01 4.369121E-03 1.090516E-03
+ 5 35 2.615647E-01 9.178737E-04 2.400833E-04
+ 5 36 2.812017E-01 1.228393E-04 3.454263E-05
+ 5 37 3.229167E-01 8.389481E-06 2.709103E-06
+ 5 38 4.967694E-01 1.255214E-07 6.235519E-08
+ 5 39 2.150197E-01 5.908997E-09 1.270551E-09
+ 5 40 2.658406E-01 1.291684E-09 3.433819E-10
+ 5 41 8.830730E-02 3.534400E-12 3.121133E-13
+ 5 42 1.767314E-01 1.030410E-11 1.821058E-12
+ 5 43 4.926350E+03 2.500000E-15 1.231588E-11
+ 5 44 4.585687E+01 1.089000E-13 4.993813E-12
+ 5 45 7.584582E+00 4.900000E-15 3.716445E-14
+ 5 46 1.708413E+02 8.100000E-15 1.383815E-12
+ 6 0 1.470129E+00 3.933333E-03 5.782509E-03
+ 6 1 1.495117E+00 1.962338E-02 2.933924E-02
+ 6 2 1.494005E+00 4.647162E-02 6.942882E-02
+ 6 3 1.478470E+00 6.465695E-02 9.559337E-02
+ 6 4 1.453690E+00 5.208510E-02 7.571561E-02
+ 6 5 1.427874E+00 1.778956E-02 2.540125E-02
+ 6 6 3.469535E-01 8.157821E-06 2.830385E-06
+ 6 7 1.268920E+00 1.680794E-02 2.132794E-02
+ 6 8 1.221601E+00 3.781513E-02 4.619499E-02
+ 6 9 1.164614E+00 2.850086E-02 3.319250E-02
+ 6 10 1.118261E+00 4.183339E-03 4.678067E-03
+ 6 11 1.002169E+00 4.678278E-03 4.688426E-03
+ 6 12 9.529390E-01 2.742635E-02 2.613564E-02
+ 6 13 8.922755E-01 3.192244E-02 2.848361E-02
+ 6 14 8.337724E-01 1.015310E-02 8.465373E-03
+ 6 15 7.405243E-01 8.330560E-04 6.168982E-04
+ 6 16 7.017639E-01 2.075142E-02 1.456260E-02
+ 6 17 6.464897E-01 3.436072E-02 2.221385E-02
+ 6 18 5.914702E-01 1.710782E-02 1.011877E-02
+ 6 19 4.654121E-01 5.494812E-05 2.557352E-05
+ 6 20 5.026525E-01 1.496809E-02 7.523749E-03
+ 6 21 4.555197E-01 3.705754E-02 1.688044E-02
+ 6 22 4.117974E-01 2.784508E-02 1.146653E-02
+ 6 23 3.566466E-01 3.211028E-03 1.145202E-03
+ 6 24 3.701582E-01 7.378166E-03 2.731089E-03
+ 6 25 3.310416E-01 3.757423E-02 1.243863E-02
+ 6 26 3.039780E-01 4.720344E-02 1.434881E-02
+ 6 27 2.789010E-01 2.097929E-02 5.851147E-03
+ 6 28 6.098781E-02 3.125458E-05 1.906149E-06
+ 6 29 2.705046E-01 2.185547E-02 5.912005E-03
+ 6 30 2.555223E-01 6.974738E-02 1.782201E-02
+ 6 31 2.474279E-01 9.834460E-02 2.433320E-02
+ 6 32 2.434769E-01 8.750586E-02 2.130565E-02
+ 6 33 2.432238E-01 5.416804E-02 1.317496E-02
+ 6 34 2.467346E-01 2.388913E-02 5.894277E-03
+ 6 35 2.549949E-01 7.382473E-03 1.882493E-03
+ 6 36 2.700016E-01 1.508473E-03 4.072900E-04
+ 6 37 2.959345E-01 1.784164E-04 5.279957E-05
+ 6 38 3.588299E-01 8.463968E-06 3.037125E-06
+ 6 39 2.615035E+00 4.964612E-09 1.298263E-08
+ 6 40 2.915306E-01 3.098656E-08 9.033531E-09
+ 6 41 4.189294E-01 8.473921E-10 3.549975E-10
+ 6 42 2.099935E-01 1.948816E-10 4.092387E-11
+ 6 43 2.893426E-02 1.156000E-11 3.344801E-13
+ 6 44 1.007402E+00 3.097600E-12 3.120529E-12
+ 6 45 2.559868E+01 2.500000E-13 6.399669E-12
+ 6 46 1.253778E+01 1.444000E-13 1.810455E-12
+ 7 0 1.463656E+00 8.492738E-03 1.243045E-02
+ 7 1 1.498358E+00 3.404789E-02 5.101593E-02
+ 7 2 1.503331E+00 6.169772E-02 9.275208E-02
+ 7 3 1.494604E+00 5.908031E-02 8.830167E-02
+ 7 4 1.484060E+00 2.412316E-02 3.580020E-02
+ 7 5 1.822118E+00 1.666707E-04 3.036936E-04
+ 7 6 1.338916E+00 1.539895E-02 2.061790E-02
+ 7 7 1.305230E+00 3.692225E-02 4.819204E-02
+ 7 8 1.256670E+00 2.518758E-02 3.165249E-02
+ 7 9 1.239558E+00 1.811728E-03 2.245742E-03
+ 7 10 1.094927E+00 8.684676E-03 9.509083E-03
+ 7 11 1.044446E+00 3.028187E-02 3.162779E-02
+ 7 12 9.847892E-01 2.406543E-02 2.369937E-02
+ 7 13 9.385593E-01 2.265212E-03 2.126036E-03
+ 7 14 8.397850E-01 7.535889E-03 6.328527E-03
+ 7 15 7.853829E-01 2.899306E-02 2.277065E-02
+ 7 16 7.274794E-01 2.368106E-02 1.722748E-02
+ 7 17 6.722682E-01 2.168846E-03 1.458046E-03
+ 7 18 6.144933E-01 7.999150E-03 4.915425E-03
+ 7 19 5.628813E-01 3.044368E-02 1.713618E-02
+ 7 20 5.122391E-01 2.494067E-02 1.277558E-02
+ 7 21 4.486247E-01 2.293059E-03 1.028723E-03
+ 7 22 4.450741E-01 8.694436E-03 3.869669E-03
+ 7 23 3.988527E-01 3.408865E-02 1.359635E-02
+ 7 24 3.608125E-01 2.995667E-02 1.080874E-02
+ 7 25 3.133183E-01 3.931241E-03 1.231730E-03
+ 7 26 3.325331E-01 7.772210E-03 2.584517E-03
+ 7 27 2.987421E-01 3.984993E-02 1.190485E-02
+ 7 28 2.767858E-01 4.534724E-02 1.255147E-02
+ 7 29 2.544128E-01 1.420001E-02 3.612665E-03
+ 7 30 2.996848E-01 1.639638E-03 4.913745E-04
+ 7 31 2.561039E-01 3.985048E-02 1.020586E-02
+ 7 32 2.476128E-01 9.053305E-02 2.241714E-02
+ 7 33 2.446288E-01 1.025467E-01 2.508587E-02
+ 7 34 2.457326E-01 7.316818E-02 1.797981E-02
+ 7 35 2.509741E-01 3.485436E-02 8.747540E-03
+ 7 36 2.615524E-01 1.096123E-02 2.866936E-03
+ 7 37 2.803238E-01 2.113858E-03 5.925646E-04
+ 7 38 3.155221E-01 2.054375E-04 6.482006E-05
+ 7 39 4.387939E-01 4.869966E-06 2.136911E-06
+ 7 40 1.262752E-01 1.550469E-07 1.957858E-08
+ 7 41 3.726961E-01 5.658689E-08 2.108972E-08
+ 7 42 6.730113E-02 2.286144E-10 1.538601E-11
+ 7 43 2.424043E-01 6.996025E-10 1.695866E-10
+ 7 44 8.706791E-02 9.985600E-12 8.694253E-13
+ 7 45 1.688333E-05 1.466890E-11 2.476598E-16
+ 7 46 4.682319E+00 1.488400E-12 6.969163E-12
+ 8 0 1.454903E+00 1.613907E-02 2.348078E-02
+ 8 1 1.500980E+00 5.065117E-02 7.602640E-02
+ 8 2 1.512787E+00 6.654082E-02 1.006621E-01
+ 8 3 1.514191E+00 3.746422E-02 5.672798E-02
+ 8 4 1.580425E+00 2.636423E-03 4.166669E-03
+ 8 5 1.385017E+00 1.039443E-02 1.439646E-02
+ 8 6 1.376481E+00 3.518174E-02 4.842698E-02
+ 8 7 1.340668E+00 2.592624E-02 3.475849E-02
+ 8 8 1.348601E+00 1.680773E-03 2.266692E-03
+ 8 9 1.179600E+00 9.796520E-03 1.155597E-02
+ 8 10 1.134885E+00 3.010574E-02 3.416656E-02
+ 8 11 1.078847E+00 1.891163E-02 2.040274E-02
+ 8 12 1.112217E+00 2.216061E-04 2.464741E-04
+ 8 13 9.295473E-01 1.339915E-02 1.245515E-02
+ 8 14 8.731135E-01 2.905793E-02 2.537087E-02
+ 8 15 8.154130E-01 1.296160E-02 1.056906E-02
+ 8 16 7.127764E-01 3.063085E-04 2.183294E-04
+ 8 17 6.880525E-01 1.904527E-02 1.310414E-02
+ 8 18 6.339121E-01 2.835626E-02 1.797537E-02
+ 8 19 5.783417E-01 7.683247E-03 4.443542E-03
+ 8 20 5.460984E-01 2.761036E-03 1.507797E-03
+ 8 21 4.913704E-01 2.587659E-02 1.271499E-02
+ 8 22 4.448353E-01 2.739675E-02 1.218704E-02
+ 8 23 3.877948E-01 3.748795E-03 1.453763E-03
+ 8 24 3.955156E-01 7.533657E-03 2.979678E-03
+ 8 25 3.520871E-01 3.392530E-02 1.194466E-02
+ 8 26 3.195435E-01 2.797709E-02 8.939898E-03
+ 8 27 2.657933E-01 1.845867E-03 4.906192E-04
+ 8 28 2.991779E-01 1.340413E-02 4.010220E-03
+ 8 29 2.738990E-01 4.615341E-02 1.264137E-02
+ 8 30 2.563018E-01 3.782168E-02 9.693766E-03
+ 8 31 2.257691E-01 3.765153E-03 8.500550E-04
+ 8 32 2.617305E-01 1.448212E-02 3.790412E-03
+ 8 33 2.490741E-01 7.251367E-02 1.806128E-02
+ 8 34 2.466776E-01 1.097653E-01 2.707663E-02
+ 8 35 2.490915E-01 9.091730E-02 2.264673E-02
+ 8 36 2.561408E-01 4.639992E-02 1.188491E-02
+ 8 37 2.693761E-01 1.454148E-02 3.917125E-03
+ 8 38 2.932646E-01 2.531436E-03 7.423807E-04
+ 8 39 3.451732E-01 1.778625E-04 6.139338E-05
+ 8 40 1.013279E+00 5.086542E-07 5.154088E-07
+ 8 41 2.503106E-01 7.958424E-07 1.992078E-07
+ 8 42 5.892276E-01 2.982874E-08 1.757592E-08
+ 8 43 2.887424E-01 8.613696E-09 2.487139E-09
+ 8 44 3.992804E-01 3.139984E-10 1.253734E-10
+ 8 45 2.535568E-01 2.856100E-10 7.241835E-11
+ 8 46 6.906985E+00 2.500000E-13 1.726746E-12
+ 9 0 1.443674E+00 2.740097E-02 3.955806E-02
+ 9 1 1.503474E+00 6.507321E-02 9.783588E-02
+ 9 2 1.523546E+00 5.688185E-02 8.666209E-02
+ 9 3 1.548571E+00 1.258640E-02 1.949093E-02
+ 9 4 1.380130E+00 3.395618E-03 4.686393E-03
+ 9 5 1.428494E+00 3.087901E-02 4.411049E-02
+ 9 6 1.410256E+00 2.995393E-02 4.224271E-02
+ 9 7 1.418836E+00 3.387246E-03 4.805948E-03
+ 9 8 1.252572E+00 7.997739E-03 1.001774E-02
+ 9 9 1.221666E+00 2.902571E-02 3.545971E-02
+ 9 10 1.171860E+00 1.730172E-02 2.027520E-02
+ 9 11 2.252492E+00 4.755016E-06 1.071063E-05
+ 9 12 1.018119E+00 1.593106E-02 1.621971E-02
+ 9 13 9.626421E-01 2.670280E-02 2.570524E-02
+ 9 14 9.090249E-01 6.994454E-03 6.358133E-03
+ 9 15 8.158616E-01 3.121724E-03 2.546895E-03
+ 9 16 7.690635E-01 2.403172E-02 1.848192E-02
+ 9 17 7.128058E-01 2.019796E-02 1.439722E-02
+ 9 18 6.593636E-01 6.586270E-04 4.342747E-04
+ 9 19 6.032071E-01 1.228958E-02 7.413161E-03
+ 9 20 5.519472E-01 2.833988E-02 1.564212E-02
+ 9 21 4.992150E-01 1.072992E-02 5.356538E-03
+ 9 22 4.955961E-01 1.489543E-03 7.382117E-04
+ 9 23 4.303991E-01 2.444497E-02 1.052109E-02
+ 9 24 3.879377E-01 2.670147E-02 1.035851E-02
+ 9 25 3.299445E-01 2.645685E-03 8.729292E-04
+ 9 26 3.500683E-01 1.053510E-02 3.688006E-03
+ 9 27 3.142006E-01 3.608256E-02 1.133716E-02
+ 9 28 2.860188E-01 2.128640E-02 6.088309E-03
+ 9 29 8.300391E-01 1.961728E-05 1.628311E-05
+ 9 30 2.734085E-01 2.651290E-02 7.248852E-03
+ 9 31 2.556880E-01 5.006389E-02 1.280074E-02
+ 9 32 2.397430E-01 2.035011E-02 4.878797E-03
+ 9 33 2.982586E-01 1.532245E-03 4.570052E-04
+ 9 34 2.521133E-01 5.126788E-02 1.292531E-02
+ 9 35 2.496316E-01 1.104024E-01 2.755993E-02
+ 9 36 2.532874E-01 1.064232E-01 2.695567E-02
+ 9 37 2.623059E-01 5.734220E-02 1.504120E-02
+ 9 38 2.787683E-01 1.736477E-02 4.840749E-03
+ 9 39 3.101634E-01 2.547269E-03 7.900697E-04
+ 9 40 4.031703E-01 9.870482E-05 3.979486E-05
+ 9 41 9.600695E-02 1.801662E-06 1.729721E-07
+ 9 42 3.330651E-01 1.290087E-06 4.296830E-07
+ 9 43 1.039956E-02 6.206288E-09 6.454269E-11
+ 9 44 3.946474E-01 2.073024E-08 8.181135E-09
+ 9 45 2.174454E-01 1.031694E-09 2.243372E-10
+ 9 46 3.384482E-01 3.265249E-10 1.105118E-10
+ 10 0 1.429726E+00 4.205144E-02 6.012203E-02
+ 10 1 1.506749E+00 7.219252E-02 1.087760E-01
+ 10 2 1.538724E+00 3.594589E-02 5.531080E-02
+ 10 3 1.955525E+00 1.921218E-04 3.756989E-04
+ 10 4 1.457080E+00 2.121115E-02 3.090634E-02
+ 10 5 1.458618E+00 3.506756E-02 5.115019E-02
+ 10 6 1.466629E+00 8.446196E-03 1.238744E-02
+ 10 7 1.295594E+00 4.100134E-03 5.312111E-03
+ 10 8 1.300800E+00 2.699132E-02 3.511029E-02
+ 10 9 1.260239E+00 1.882225E-02 2.372054E-02
+ 10 10 1.593040E+00 5.162063E-05 8.223372E-05
+ 10 11 1.104732E+00 1.558790E-02 1.722045E-02
+ 10 12 1.052641E+00 2.502793E-02 2.634541E-02
+ 10 13 1.005024E+00 4.708946E-03 4.732602E-03
+ 10 14 9.032594E-01 5.400386E-03 4.877950E-03
+ 10 15 8.543400E-01 2.474757E-02 2.114283E-02
+ 10 16 7.982088E-01 1.376684E-02 1.098881E-02
+ 10 17 6.978367E-01 2.375396E-04 1.657639E-04
+ 10 18 6.749787E-01 1.870710E-02 1.262689E-02
+ 10 19 6.216224E-01 2.265804E-02 1.408475E-02
+ 10 20 5.613824E-01 1.965720E-03 1.103521E-03
+ 10 21 5.307237E-01 9.832378E-03 5.218276E-03
+ 10 22 4.809701E-01 2.759894E-02 1.327427E-02
+ 10 23 4.306922E-01 1.025648E-02 4.417387E-03
+ 10 24 4.396794E-01 2.204779E-03 9.693958E-04
+ 10 25 3.783117E-01 2.636070E-02 9.972562E-03
+ 10 26 3.404208E-01 2.294708E-02 7.811666E-03
+ 10 27 2.311978E-01 3.329910E-04 7.698679E-05
+ 10 28 3.117052E-01 1.860437E-02 5.799079E-03
+ 10 29 2.840993E-01 3.646143E-02 1.035867E-02
+ 10 30 2.555459E-01 9.474548E-03 2.421182E-03
+ 10 31 2.828590E-01 6.444540E-03 1.822896E-03
+ 10 32 2.556531E-01 4.486730E-02 1.147046E-02
+ 10 33 2.425544E-01 3.862281E-02 9.368132E-03
+ 10 34 1.890803E-01 1.162125E-03 2.197349E-04
+ 10 35 2.572527E-01 3.249351E-02 8.359043E-03
+ 10 36 2.534939E-01 1.074366E-01 2.723451E-02
+ 10 37 2.583422E-01 1.197854E-01 3.094562E-02
+ 10 38 2.695613E-01 6.654046E-02 1.793674E-02
+ 10 39 2.902325E-01 1.861191E-02 5.401781E-03
+ 10 40 3.344729E-01 2.051877E-03 6.862973E-04
+ 10 41 6.471872E-01 1.784361E-05 1.154816E-05
+ 10 42 2.423153E-01 1.098187E-05 2.661075E-06
+ 10 43 5.017341E-01 6.316911E-07 3.169410E-07
+ 10 44 2.201927E-01 1.881998E-07 4.144022E-08
+ 10 45 1.019085E+00 4.389062E-09 4.472830E-09
+ 10 46 3.719029E-01 8.372250E-09 3.113664E-09
+ 11 0 1.412765E+00 5.887305E-02 8.317378E-02
+ 11 1 1.512619E+00 6.849221E-02 1.036026E-01
+ 11 2 1.570592E+00 1.359995E-02 2.135998E-02
+ 11 3 1.450028E+00 6.689004E-03 9.699244E-03
+ 11 4 1.485915E+00 3.575562E-02 5.312983E-02
+ 11 5 1.494923E+00 1.871581E-02 2.797868E-02
+ 11 6 1.140880E+00 3.936272E-04 4.490812E-04
+ 11 7 1.364271E+00 2.244160E-02 3.061642E-02
+ 11 8 1.339715E+00 2.275272E-02 3.048216E-02
+ 11 9 1.396133E+00 7.969504E-04 1.112649E-03
+ 11 10 1.185265E+00 1.285158E-02 1.523253E-02
+ 11 11 1.141537E+00 2.465763E-02 2.814760E-02
+ 11 12 1.099654E+00 4.742359E-03 5.214955E-03
+ 11 13 9.882361E-01 5.710864E-03 5.643682E-03
+ 11 14 9.413802E-01 2.397055E-02 2.256540E-02
+ 11 15 8.874768E-01 1.054932E-02 9.362274E-03
+ 11 16 7.900272E-01 1.328415E-03 1.049484E-03
+ 11 17 7.535668E-01 2.094612E-02 1.578430E-02
+ 11 18 6.986790E-01 1.682439E-02 1.175485E-02
+ 11 19 6.530019E-01 9.889138E-06 6.457626E-06
+ 11 20 5.920586E-01 1.629415E-02 9.647089E-03
+ 11 21 5.410660E-01 2.250112E-02 1.217459E-02
+ 11 22 4.754496E-01 1.807275E-03 8.592684E-04
+ 11 23 4.670343E-01 1.091537E-02 5.097850E-03
+ 11 24 4.198112E-01 2.690928E-02 1.129682E-02
+ 11 25 3.695436E-01 6.652626E-03 2.458435E-03
+ 11 26 3.803920E-01 5.714353E-03 2.173694E-03
+ 11 27 3.345738E-01 2.974482E-02 9.951838E-03
+ 11 28 3.002333E-01 1.473813E-02 4.424876E-03
+ 11 29 3.403863E-01 1.586940E-03 5.401725E-04
+ 11 30 2.821064E-01 3.084250E-02 8.700866E-03
+ 11 31 2.598379E-01 2.742152E-02 7.125150E-03
+ 11 32 8.449227E-02 7.625027E-05 6.442558E-06
+ 11 33 2.574461E-01 2.922178E-02 7.523033E-03
+ 11 34 2.441586E-01 4.993945E-02 1.219315E-02
+ 11 35 2.241800E-01 8.774187E-03 1.966997E-03
+ 11 36 2.654510E-01 1.894922E-02 5.030088E-03
+ 11 37 2.582330E-01 1.042973E-01 2.693300E-02
+ 11 38 2.642835E-01 1.318458E-01 3.484466E-02
+ 11 39 2.781030E-01 7.286042E-02 2.026270E-02
+ 11 40 3.047132E-01 1.760837E-02 5.365503E-03
+ 11 41 3.769527E-01 1.171189E-03 4.414829E-04
+ 11 42 3.372697E-02 8.213612E-06 2.770202E-07
+ 11 43 3.217166E-01 1.768859E-05 5.690712E-06
+ 11 44 3.223544E-02 6.037340E-08 1.946163E-09
+ 11 45 3.464365E-01 3.647918E-07 1.263772E-07
+ 11 46 1.218494E-01 2.972521E-08 3.621997E-09
+ 12 0 1.392435E+00 7.574348E-02 1.054679E-01
+ 12 1 1.525133E+00 5.415064E-02 8.258692E-02
+ 12 2 1.782072E+00 8.910380E-04 1.587894E-03
+ 12 3 1.495886E+00 2.414575E-02 3.611929E-02
+ 12 4 1.509909E+00 3.224272E-02 4.868358E-02
+ 12 5 1.613735E+00 2.000058E-03 3.227564E-03
+ 12 6 1.398934E+00 1.380234E-02 1.930857E-02
+ 12 7 1.402723E+00 2.714222E-02 3.807301E-02
+ 12 8 1.416297E+00 4.036487E-03 5.716863E-03
+ 12 9 1.251469E+00 8.018533E-03 1.003495E-02
+ 12 10 1.225601E+00 2.474356E-02 3.032572E-02
+ 12 11 1.188962E+00 6.808186E-03 8.094673E-03
+ 12 12 1.065220E+00 4.170348E-03 4.442339E-03
+ 12 13 1.028865E+00 2.282131E-02 2.348006E-02
+ 12 14 9.768934E-01 1.002603E-02 9.794367E-03
+ 12 15 8.700946E-01 1.691861E-03 1.472079E-03
+ 12 16 8.361458E-01 2.087173E-02 1.745181E-02
+ 12 17 7.818861E-01 1.343910E-02 1.050785E-02
+ 12 18 6.948687E-01 3.602620E-04 2.503348E-04
+ 12 19 6.623185E-01 1.887383E-02 1.250049E-02
+ 12 20 6.094177E-01 1.691348E-02 1.030737E-02
+ 12 21 3.125500E-01 3.595423E-06 1.123749E-06
+ 12 22 5.194020E-01 1.696312E-02 8.810676E-03
+ 12 23 4.702527E-01 2.048428E-02 9.632788E-03
+ 12 24 3.714972E-01 4.668141E-04 1.734201E-04
+ 12 25 4.100430E-01 1.532592E-02 6.284285E-03
+ 12 26 3.673292E-01 2.441598E-02 8.968701E-03
+ 12 27 3.005806E-01 1.649322E-03 4.957540E-04
+ 12 28 3.323198E-01 1.415107E-02 4.702683E-03
+ 12 29 2.988848E-01 2.938068E-02 8.781436E-03
+ 12 30 2.562245E-01 3.654500E-03 9.363726E-04
+ 12 31 2.844993E-01 1.356336E-02 3.858768E-03
+ 12 32 2.598316E-01 3.703008E-02 9.621583E-03
+ 12 33 2.330099E-01 7.437539E-03 1.733020E-03
+ 12 34 2.633652E-01 1.329095E-02 3.500374E-03
+ 12 35 2.458857E-01 5.236821E-02 1.287660E-02
+ 12 36 2.319969E-01 1.899701E-02 4.407247E-03
+ 12 37 2.780067E-01 1.076779E-02 2.993518E-03
+ 12 38 2.638056E-01 1.040549E-01 2.745025E-02
+ 12 39 2.711542E-01 1.435519E-01 3.892470E-02
+ 12 40 2.882559E-01 7.501214E-02 2.162269E-02
+ 12 41 3.243686E-01 1.412296E-02 4.581045E-03
+ 12 42 5.003507E-01 3.145331E-04 1.573769E-04
+ 12 43 2.302565E-01 8.843728E-05 2.036326E-05
+ 12 44 4.561647E-01 9.291706E-06 4.238548E-06
+ 12 45 2.262587E-01 2.467947E-06 5.583944E-07
+ 12 46 9.304472E-01 5.356910E-08 4.984322E-08
+ 13 0 1.368315E+00 9.009225E-02 1.232746E-01
+ 13 1 1.555133E+00 3.357198E-02 5.220889E-02
+ 13 2 1.379349E+00 3.316829E-03 4.575064E-03
+ 13 3 1.518791E+00 3.714127E-02 5.640982E-02
+ 13 4 1.541354E+00 1.506454E-02 2.321980E-02
+ 13 5 1.378616E+00 3.220308E-03 4.439569E-03
+ 13 6 1.440783E+00 2.746775E-02 3.957507E-02
+ 13 7 1.453561E+00 1.174791E-02 1.707630E-02
+ 13 8 1.262918E+00 2.424811E-03 3.062338E-03
+ 13 9 1.301154E+00 2.325823E-02 3.026254E-02
+ 13 10 1.269929E+00 1.126341E-02 1.430374E-02
+ 13 11 1.114278E+00 1.632680E-03 1.819259E-03
+ 13 12 1.113812E+00 2.095711E-02 2.334229E-02
+ 13 13 1.066008E+00 1.171495E-02 1.248823E-02
+ 13 14 9.393485E-01 1.023459E-03 9.613843E-04
+ 13 15 9.206148E-01 1.962805E-02 1.806988E-02
+ 13 16 8.678447E-01 1.254733E-02 1.088913E-02
+ 13 17 7.627092E-01 6.203731E-04 4.731643E-04
+ 13 18 7.389508E-01 1.900642E-02 1.404481E-02
+ 13 19 6.850249E-01 1.354791E-02 9.280653E-03
+ 13 20 6.338121E-01 3.932622E-04 2.492544E-04
+ 13 21 5.811094E-01 1.907812E-02 1.108648E-02
+ 13 22 5.297889E-01 1.462888E-02 7.750216E-03
+ 13 23 5.550106E-01 3.044365E-04 1.689655E-04
+ 13 24 4.549863E-01 1.999400E-02 9.096997E-03
+ 13 25 4.079958E-01 1.575520E-02 6.428056E-03
+ 13 26 4.827370E-01 3.486148E-04 1.682893E-04
+ 13 27 3.604657E-01 2.209496E-02 7.964474E-03
+ 13 28 3.219243E-01 1.692286E-02 5.447881E-03
+ 13 29 3.912092E-01 6.127001E-04 2.396940E-04
+ 13 30 2.963909E-01 2.604905E-02 7.720702E-03
+ 13 31 2.685743E-01 1.823478E-02 4.897393E-03
+ 13 32 3.196300E-01 1.384057E-03 4.423859E-04
+ 13 33 2.600757E-01 3.331238E-02 8.663742E-03
+ 13 34 2.406866E-01 2.040473E-02 4.911146E-03
+ 13 35 2.840507E-01 3.244545E-03 9.216155E-04
+ 13 36 2.480954E-01 4.842392E-02 1.201375E-02
+ 13 37 2.360006E-01 2.806969E-02 6.624461E-03
+ 13 38 2.951098E-01 6.746267E-03 1.990890E-03
+ 13 39 2.701267E-01 1.092506E-01 2.951149E-02
+ 13 40 2.790549E-01 1.551426E-01 4.329331E-02
+ 13 41 3.006134E-01 7.143635E-02 2.147472E-02
+ 13 42 3.551807E-01 8.751094E-03 3.108220E-03
+ 13 43 6.858450E-01 4.056478E-06 2.782115E-06
+ 13 44 3.097776E-01 1.600005E-04 4.956457E-05
+ 13 45 8.305344E-01 1.417297E-07 1.177114E-07
+ 13 46 3.479830E-01 4.542482E-06 1.580707E-06
+ 14 0 1.339908E+00 9.958646E-02 1.334367E-01
+ 14 1 1.643362E+00 1.383343E-02 2.273333E-02
+ 14 2 1.460642E+00 1.754342E-02 2.562465E-02
+ 14 3 1.540935E+00 3.534489E-02 5.446420E-02
+ 14 4 1.663432E+00 1.333391E-03 2.218004E-03
+ 14 5 1.461659E+00 1.826797E-02 2.670154E-02
+ 14 6 1.475023E+00 2.278398E-02 3.360690E-02
+ 14 7 2.143973E+00 1.023541E-04 2.194445E-04
+ 14 8 1.356099E+00 1.762339E-02 2.389907E-02
+ 14 9 1.343973E+00 1.774207E-02 2.384487E-02
+ 14 10 1.313401E-01 4.642948E-06 6.098050E-07
+ 14 11 1.192905E+00 1.718967E-02 2.050563E-02
+ 14 12 1.151582E+00 1.521735E-02 1.752402E-02
+ 14 13 8.695668E-01 9.951878E-05 8.653823E-05
+ 14 14 1.005673E+00 1.721971E-02 1.731740E-02
+ 14 15 9.540385E-01 1.369658E-02 1.306706E-02
+ 14 16 8.097803E-01 2.932595E-04 2.374757E-04
+ 14 17 8.184405E-01 1.778528E-02 1.455620E-02
+ 14 18 7.664396E-01 1.253897E-02 9.610362E-03
+ 14 19 6.904509E-01 6.590162E-04 4.550183E-04
+ 14 20 6.501626E-01 1.894125E-02 1.231489E-02
+ 14 21 5.971286E-01 1.136560E-02 6.786728E-03
+ 14 22 5.673793E-01 1.381131E-03 7.836251E-04
+ 14 23 5.091474E-01 2.073770E-02 1.055855E-02
+ 14 24 4.574537E-01 9.871637E-03 4.515817E-03
+ 14 25 4.573947E-01 2.824785E-03 1.292042E-03
+ 14 26 3.983331E-01 2.318429E-02 9.235069E-03
+ 14 27 3.506619E-01 7.771025E-03 2.725002E-03
+ 14 28 3.645052E-01 5.687187E-03 2.073009E-03
+ 14 29 3.188346E-01 2.612824E-02 8.330588E-03
+ 14 30 2.755185E-01 4.902407E-03 1.350704E-03
+ 14 31 2.986697E-01 1.123381E-02 3.355198E-03
+ 14 32 2.689775E-01 2.906288E-02 7.817259E-03
+ 14 33 2.160553E-01 1.665931E-03 3.599332E-04
+ 14 34 2.621598E-01 2.166045E-02 5.678500E-03
+ 14 35 2.432396E-01 3.122950E-02 7.596249E-03
+ 14 36 1.041415E+00 1.815433E-05 1.890619E-05
+ 14 37 2.508723E-01 4.179329E-02 1.048478E-02
+ 14 38 2.386448E-01 3.423316E-02 8.169567E-03
+ 14 39 3.120610E-01 5.669342E-03 1.769180E-03
+ 14 40 2.770954E-01 1.221105E-01 3.383626E-02
+ 14 41 2.881609E-01 1.652229E-01 4.761079E-02
+ 14 42 3.164420E-01 6.065702E-02 1.919443E-02
+ 14 43 4.231212E-01 3.233366E-03 1.368105E-03
+ 14 44 2.097137E-01 4.256538E-04 8.926545E-05
+ 14 45 4.153939E-01 9.890382E-05 4.108405E-05
+ 14 46 2.226868E-01 2.168001E-05 4.827852E-06
+ 15 0 1.306632E+00 1.027568E-01 1.342653E-01
+ 15 1 2.171167E+00 1.779221E-03 3.862986E-03
+ 15 2 1.487279E+00 3.383163E-02 5.031706E-02
+ 15 3 1.574802E+00 2.095464E-02 3.299942E-02
+ 15 4 1.431735E+00 3.023592E-03 4.328984E-03
+ 15 5 1.493937E+00 2.832952E-02 4.232253E-02
+ 15 6 1.529867E+00 6.971597E-03 1.066562E-02
+ 15 7 1.368371E+00 7.560946E-03 1.034618E-02
+ 15 8 1.398621E+00 2.311774E-02 3.233296E-02
+ 15 9 1.447574E+00 2.382990E-03 3.449555E-03
+ 15 10 1.259931E+00 1.062831E-02 1.339094E-02
+ 15 11 1.232181E+00 1.929602E-02 2.377619E-02
+ 15 12 1.276826E+00 5.846835E-04 7.465391E-04
+ 15 13 1.085227E+00 1.305804E-02 1.417094E-02
+ 15 14 1.040751E+00 1.624951E-02 1.691169E-02
+ 15 15 1.572401E+00 8.829991E-06 1.388429E-05
+ 15 16 9.004304E-01 1.534485E-02 1.381697E-02
+ 15 17 8.488442E-01 1.343920E-02 1.140779E-02
+ 15 18 7.349243E-01 3.320380E-04 2.440228E-04
+ 15 19 7.247686E-01 1.766164E-02 1.280061E-02
+ 15 20 6.717854E-01 1.047136E-02 7.034507E-03
+ 15 21 6.230637E-01 1.725045E-03 1.074813E-03
+ 15 22 5.701887E-01 1.989383E-02 1.134324E-02
+ 15 23 5.170225E-01 7.118032E-03 3.680183E-03
+ 15 24 4.982861E-01 4.677338E-03 2.330653E-03
+ 15 25 4.448383E-01 2.155689E-02 9.589329E-03
+ 15 26 3.853762E-01 3.490111E-03 1.345006E-03
+ 15 27 3.935207E-01 9.896778E-03 3.894587E-03
+ 15 28 3.492862E-01 2.161175E-02 7.548688E-03
+ 15 29 2.490620E-01 5.133863E-04 1.278650E-04
+ 15 30 3.166537E-01 1.794375E-02 5.681955E-03
+ 15 31 2.835607E-01 1.841935E-02 5.223003E-03
+ 15 32 3.469849E-01 8.459337E-04 2.935262E-04
+ 15 33 2.687706E-01 2.810497E-02 7.553788E-03
+ 15 34 2.416366E-01 1.072573E-02 2.591729E-03
+ 15 35 2.688351E-01 9.811277E-03 2.637615E-03
+ 15 36 2.448858E-01 3.650361E-02 8.939216E-03
+ 15 37 1.899244E-01 1.472763E-03 2.797137E-04
+ 15 38 2.540725E-01 3.533886E-02 8.978633E-03
+ 15 39 2.402668E-01 3.700999E-02 8.892273E-03
+ 15 40 3.205987E-01 7.313888E-03 2.344823E-03
+ 15 41 2.846701E-01 1.446022E-01 4.116392E-02
+ 15 42 2.988006E-01 1.698625E-01 5.075502E-02
+ 15 43 3.389086E-01 4.259473E-02 1.443572E-02
+ 15 44 1.109075E+00 1.399454E-04 1.552098E-04
+ 15 45 2.963003E-01 9.945981E-04 2.946997E-04
+ 15 46 7.862894E+00 3.970764E-07 3.122170E-06
+ 16 0 1.267808E+00 9.934532E-02 1.259508E-01
+ 16 1 6.298652E-01 1.286029E-03 8.100247E-04
+ 16 2 1.509814E+00 4.224835E-02 6.378716E-02
+ 16 3 1.670433E+00 5.513210E-03 9.209449E-03
+ 16 4 1.503034E+00 1.652471E-02 2.483720E-02
+ 16 5 1.522192E+00 2.249020E-02 3.423442E-02
+ 16 6 9.199864E-01 8.207074E-05 7.550396E-05
+ 16 7 1.425452E+00 2.109330E-02 3.006750E-02
+ 16 8 1.451780E+00 1.093605E-02 1.587674E-02
+ 16 9 1.263091E+00 2.937336E-03 3.710124E-03
+ 16 10 1.306070E+00 2.089110E-02 2.728523E-02
+ 16 11 1.291996E+00 4.551521E-03 5.880546E-03
+ 16 12 1.155385E+00 7.067894E-03 8.166142E-03
+ 16 13 1.122333E+00 1.880857E-02 2.110948E-02
+ 16 14 1.118994E+00 1.155925E-03 1.293473E-03
+ 16 15 9.819591E-01 1.133282E-02 1.112837E-02
+ 16 16 9.331146E-01 1.559395E-02 1.455094E-02
+ 16 17 2.398071E+00 1.040563E-06 2.495344E-06
+ 16 18 8.011984E-01 1.534426E-02 1.229380E-02
+ 16 19 7.513205E-01 1.143248E-02 8.589456E-03
+ 16 20 6.824432E-01 1.113393E-03 7.598278E-04
+ 16 21 6.384806E-01 1.852841E-02 1.183003E-02
+ 16 22 5.840123E-01 6.601567E-03 3.855397E-03
+ 16 23 5.505928E-01 4.871116E-03 2.682001E-03
+ 16 24 4.990437E-01 1.981939E-02 9.890741E-03
+ 16 25 4.333610E-01 2.039990E-03 8.840522E-04
+ 16 26 4.350362E-01 1.145824E-02 4.984748E-03
+ 16 27 3.872912E-01 1.768434E-02 6.848990E-03
+ 16 28 9.842203E-01 1.555695E-05 1.531147E-05
+ 16 29 3.444897E-01 1.975674E-02 6.805992E-03
+ 16 30 3.041927E-01 1.101149E-02 3.349614E-03
+ 16 31 3.269644E-01 4.431618E-03 1.448981E-03
+ 16 32 2.829552E-01 2.551875E-02 7.220665E-03
+ 16 33 2.328222E-01 2.182446E-03 5.081220E-04
+ 16 34 2.703499E-01 1.855620E-02 5.016665E-03
+ 16 35 2.461125E-01 2.105280E-02 5.181357E-03
+ 16 36 2.925523E-01 2.373686E-03 6.944273E-04
+ 16 37 2.465127E-01 3.664608E-02 9.033723E-03
+ 16 38 2.140454E-01 4.827459E-03 1.033295E-03
+ 16 39 2.573220E-01 3.059999E-02 7.874053E-03
+ 16 40 2.403872E-01 3.630015E-02 8.726089E-03
+ 16 41 3.206990E-01 1.329952E-02 4.265142E-03
+ 16 42 2.929050E-01 1.775816E-01 5.201453E-02
+ 16 43 3.116593E-01 1.622638E-01 5.057104E-02
+ 16 44 3.789866E-01 2.077159E-02 7.872155E-03
+ 16 45 1.735826E-01 1.124539E-03 1.952004E-04
+ 16 46 3.808267E-01 7.715201E-04 2.938155E-04
+ 17 0 1.222659E+00 9.028184E-02 1.103839E-01
+ 17 1 1.056700E+00 1.199084E-02 1.267072E-02
+ 17 2 1.543195E+00 3.836349E-02 5.920235E-02
+ 17 3 3.323873E-01 5.992989E-05 1.991994E-05
+ 17 4 1.533560E+00 2.815115E-02 4.317147E-02
+ 17 5 1.565717E+00 8.034958E-03 1.258047E-02
+ 17 6 1.443183E+00 8.824925E-03 1.273598E-02
+ 17 7 1.460938E+00 2.144256E-02 3.132625E-02
+ 17 8 1.866886E+00 2.653432E-04 4.953655E-04
+ 17 9 1.350826E+00 1.607457E-02 2.171395E-02
+ 17 10 1.355022E+00 1.242423E-02 1.683509E-02
+ 17 11 1.170051E+00 1.332473E-03 1.559062E-03
+ 17 12 1.201046E+00 1.873862E-02 2.250594E-02
+ 17 13 1.169901E+00 5.252694E-03 6.145134E-03
+ 17 14 1.051577E+00 5.900440E-03 6.204765E-03
+ 17 15 1.017186E+00 1.768884E-02 1.799284E-02
+ 17 16 1.001310E+00 9.378637E-04 9.390920E-04
+ 17 17 8.810161E-01 1.159169E-02 1.021246E-02
+ 17 18 8.303327E-01 1.369465E-02 1.137112E-02
+ 17 19 7.080885E-01 1.953775E-04 1.383446E-04
+ 17 20 7.106944E-01 1.655137E-02 1.176297E-02
+ 17 21 6.591358E-01 7.778113E-03 5.126832E-03
+ 17 22 6.122808E-01 3.625477E-03 2.219810E-03
+ 17 23 5.593524E-01 1.863019E-02 1.042084E-02
+ 17 24 4.979910E-01 2.019338E-03 1.005612E-03
+ 17 25 4.837379E-01 1.089718E-02 5.271379E-03
+ 17 26 4.344398E-01 1.566562E-02 6.805768E-03
+ 17 27 5.466510E-01 1.727161E-04 9.441543E-05
+ 17 28 3.799323E-01 1.911174E-02 7.261167E-03
+ 17 29 3.327751E-01 7.485112E-03 2.490859E-03
+ 17 30 3.478113E-01 6.668196E-03 2.319274E-03
+ 17 31 3.044811E-01 2.144057E-02 6.528250E-03
+ 17 32 1.627353E-01 1.852052E-04 3.013942E-05
+ 17 33 2.825720E-01 2.092362E-02 5.912430E-03
+ 17 34 2.524343E-01 1.124708E-02 2.839149E-03
+ 17 35 2.772928E-01 7.904074E-03 2.191743E-03
+ 17 36 2.478937E-01 2.748896E-02 6.814340E-03
+ 17 37 1.339476E+00 1.097504E-05 1.470081E-05
+ 17 38 2.483368E-01 3.376530E-02 8.385168E-03
+ 17 39 2.214235E-01 7.983964E-03 1.767837E-03
+ 17 40 2.599982E-01 2.810322E-02 7.306788E-03
+ 17 41 2.375651E-01 3.181502E-02 7.558138E-03
+ 17 42 3.188616E-01 2.800639E-02 8.930164E-03
+ 17 43 3.019835E-01 2.182036E-01 6.589388E-02
+ 17 44 3.283254E-01 1.347168E-01 4.423095E-02
+ 17 45 5.221467E-01 3.689224E-03 1.926316E-03
+ 17 46 2.827081E-01 4.259255E-03 1.204126E-03
+ 18 0 1.170295E+00 7.732650E-02 9.049484E-02
+ 18 1 1.123278E+00 2.989050E-02 3.357534E-02
+ 18 2 1.612040E+00 2.503981E-02 4.036518E-02
+ 18 3 1.378588E+00 7.188864E-03 9.910482E-03
+ 18 4 1.564350E+00 2.768131E-02 4.330324E-02
+ 18 5 2.309969E+00 5.750219E-05 1.328283E-04
+ 18 6 1.487297E+00 2.098640E-02 3.121301E-02
+ 18 7 1.503568E+00 9.100042E-03 1.368253E-02
+ 18 8 1.346236E+00 5.435141E-03 7.316984E-03
+ 18 9 1.394799E+00 1.960412E-02 2.734380E-02
+ 18 10 1.561204E+00 7.338833E-04 1.145741E-03
+ 18 11 1.268596E+00 1.338339E-02 1.697811E-02
+ 18 12 1.242861E+00 1.217293E-02 1.512926E-02
+ 18 13 1.084348E+00 1.010636E-03 1.095881E-03
+ 18 14 1.094420E+00 1.740420E-02 1.904750E-02
+ 18 15 1.063578E+00 4.527252E-03 4.815085E-03
+ 18 16 9.556025E-01 6.415755E-03 6.130912E-03
+ 18 17 9.132278E-01 1.614396E-02 1.474311E-02
+ 18 18 9.140124E-01 2.444726E-04 2.234510E-04
+ 18 19 7.843355E-01 1.329864E-02 1.043060E-02
+ 18 20 7.358813E-01 1.036469E-02 7.627180E-03
+ 18 21 6.714532E-01 1.628286E-03 1.093318E-03
+ 18 22 6.269805E-01 1.752977E-02 1.099083E-02
+ 18 23 5.689968E-01 3.130688E-03 1.781351E-03
+ 18 24 5.388816E-01 8.788419E-03 4.735918E-03
+ 18 25 4.884371E-01 1.531909E-02 7.482413E-03
+ 18 26 6.239037E-01 7.184732E-05 4.482581E-05
+ 18 27 4.236787E-01 1.750916E-02 7.418260E-03
+ 18 28 3.709531E-01 6.564020E-03 2.434943E-03
+ 18 29 3.801581E-01 6.774167E-03 2.575255E-03
+ 18 30 3.331195E-01 1.869291E-02 6.226971E-03
+ 18 31 5.929474E+00 3.422250E-07 2.029214E-06
+ 18 32 3.029690E-01 2.008219E-02 6.084282E-03
+ 18 33 2.638225E-01 6.944974E-03 1.832240E-03
+ 18 34 2.860900E-01 1.042542E-02 2.982609E-03
+ 18 35 2.556249E-01 2.021478E-02 5.167400E-03
+ 18 36 3.106907E-01 1.385434E-03 4.304414E-04
+ 18 37 2.492441E-01 2.883635E-02 7.187291E-03
+ 18 38 1.850640E-01 1.116141E-03 2.065575E-04
+ 18 39 2.503073E-01 2.995963E-02 7.499116E-03
+ 18 40 2.242930E-01 9.798470E-03 2.197728E-03
+ 18 41 2.612731E-01 2.778063E-02 7.258332E-03
+ 18 42 2.278235E-01 2.316966E-02 5.278592E-03
+ 18 43 3.187892E-01 5.919694E-02 1.887135E-02
+ 18 44 3.122862E-01 2.554069E-01 7.976005E-02
+ 18 45 3.534520E-01 8.539920E-02 3.018452E-02
+ 18 46 8.177454E-02 1.059761E-03 8.666146E-05
+ 19 0 1.109719E+00 6.255933E-02 6.942328E-02
+ 19 1 1.129507E+00 4.925908E-02 5.563847E-02
+ 19 2 1.810473E+00 9.919682E-03 1.795932E-02
+ 19 3 1.452906E+00 2.050827E-02 2.979659E-02
+ 19 4 1.614161E+00 1.643191E-02 2.652375E-02
+ 19 5 1.467816E+00 5.264658E-03 7.727550E-03
+ 19 6 1.518286E+00 2.234731E-02 3.392962E-02
+ 19 7 1.803214E+00 2.132482E-04 3.845321E-04
+ 19 8 1.413557E+00 1.715923E-02 2.425555E-02
+ 19 9 1.450475E+00 8.881032E-03 1.288172E-02
+ 19 10 1.270287E+00 4.202574E-03 5.338476E-03
+ 19 11 1.312822E+00 1.780135E-02 2.337000E-02
+ 19 12 1.380402E+00 7.194535E-04 9.931348E-04
+ 19 13 1.171061E+00 1.250904E-02 1.464885E-02
+ 19 14 1.131470E+00 1.073403E-02 1.214523E-02
+ 19 15 9.986243E-01 1.443985E-03 1.441998E-03
+ 19 16 9.932014E-01 1.665625E-02 1.654301E-02
+ 19 17 9.598887E-01 2.790709E-03 2.678770E-03
+ 19 18 8.620234E-01 8.364410E-03 7.210318E-03
+ 19 19 8.122434E-01 1.363465E-02 1.107465E-02
+ 19 20 6.828293E-01 1.050668E-04 7.174269E-05
+ 19 21 6.964017E-01 1.546940E-02 1.077292E-02
+ 19 22 6.466808E-01 5.634834E-03 3.643939E-03
+ 19 23 6.014472E-01 5.559835E-03 3.343947E-03
+ 19 24 5.485221E-01 1.587409E-02 8.707291E-03
+ 19 25 3.884589E-01 5.805221E-05 2.255090E-05
+ 19 26 4.727607E-01 1.517838E-02 7.175740E-03
+ 19 27 4.213477E-01 7.425722E-03 3.128811E-03
+ 19 28 4.227385E-01 5.241919E-03 2.215961E-03
+ 19 29 3.693067E-01 1.746502E-02 6.449948E-03
+ 19 30 2.673744E-03 9.242755E-06 2.471277E-08
+ 19 31 3.299172E-01 1.812149E-02 5.978590E-03
+ 19 32 2.853029E-01 5.804652E-03 1.656084E-03
+ 19 33 3.054703E-01 1.010056E-02 3.085421E-03
+ 19 34 2.693484E-01 1.654831E-02 4.457261E-03
+ 19 35 3.083448E-01 2.165547E-03 6.677352E-04
+ 19 36 2.566777E-01 2.414860E-02 6.198407E-03
+ 19 37 9.527698E-02 1.116532E-04 1.063798E-05
+ 19 38 2.507791E-01 2.647422E-02 6.639181E-03
+ 19 39 2.113330E-01 3.629327E-03 7.669968E-04
+ 19 40 2.522293E-01 2.660986E-02 6.711787E-03
+ 19 41 2.246439E-01 9.862816E-03 2.215621E-03
+ 19 42 2.601966E-01 2.907307E-02 7.564713E-03
+ 19 43 1.960505E-01 1.114230E-02 2.184452E-03
+ 19 44 3.211617E-01 1.164739E-01 3.740695E-02
+ 19 45 3.245800E-01 2.661881E-01 8.639932E-02
+ 19 46 4.096127E-01 2.924645E-02 1.197972E-02
+ 20 0 1.039829E+00 4.789081E-02 4.979824E-02
+ 20 1 1.111772E+00 6.483554E-02 7.208234E-02
+ 20 2 3.449018E+00 8.312721E-04 2.867073E-03
+ 20 3 1.495095E+00 3.039098E-02 4.543741E-02
+ 20 4 1.761560E+00 4.194920E-03 7.389604E-03
+ 20 5 1.520396E+00 1.709715E-02 2.599444E-02
+ 20 6 1.556511E+00 1.230189E-02 1.914803E-02
+ 20 7 1.433377E+00 4.435042E-03 6.357086E-03
+ 20 8 1.450259E+00 1.905302E-02 2.763180E-02
+ 20 9 1.923955E+00 1.892055E-04 3.640228E-04
+ 20 10 1.345265E+00 1.526353E-02 2.053349E-02
+ 20 11 1.372447E+00 7.714971E-03 1.058839E-02
+ 20 12 1.214374E+00 4.259121E-03 5.172165E-03
+ 20 13 1.210334E+00 1.608779E-02 1.947160E-02
+ 20 14 1.270349E+00 3.012415E-04 3.826820E-04
+ 20 15 1.066380E+00 1.290253E-02 1.375901E-02
+ 20 16 1.030526E+00 8.299082E-03 8.552417E-03
+ 20 17 9.224735E-01 2.823805E-03 2.604886E-03
+ 20 18 8.937285E-01 1.570714E-02 1.403792E-02
+ 20 19 8.613448E-01 8.199838E-04 7.062888E-04
+ 20 20 7.681585E-01 1.141328E-02 8.767208E-03
+ 20 21 7.198850E-01 9.507248E-03 6.844126E-03
+ 20 22 6.591742E-01 2.049911E-03 1.351248E-03
+ 20 23 6.153966E-01 1.608705E-02 9.899917E-03
+ 20 24 5.492833E-01 1.089046E-03 5.981945E-04
+ 20 25 5.285495E-01 1.173897E-02 6.204627E-03
+ 20 26 4.765553E-01 9.662420E-03 4.604678E-03
+ 20 27 4.712148E-01 2.796615E-03 1.317806E-03
+ 20 28 4.138305E-01 1.698703E-02 7.029749E-03
+ 20 29 2.891350E-01 3.094697E-04 8.947850E-05
+ 20 30 3.644695E-01 1.546498E-02 5.636514E-03
+ 20 31 3.160553E-01 6.593073E-03 2.083776E-03
+ 20 32 3.321114E-01 7.944442E-03 2.638440E-03
+ 20 33 2.908957E-01 1.551683E-02 4.513780E-03
+ 20 34 3.343962E-01 1.585206E-03 5.300867E-04
+ 20 35 2.701653E-01 2.115662E-02 5.715784E-03
+ 20 36 9.483067E-02 8.964094E-05 8.500711E-06
+ 20 37 2.576921E-01 2.259455E-02 5.822439E-03
+ 20 38 2.121243E-01 2.484225E-03 5.269646E-04
+ 20 39 2.526510E-01 2.246389E-02 5.675522E-03
+ 20 40 2.192436E-01 6.010757E-03 1.317820E-03
+ 20 41 2.538077E-01 2.436485E-02 6.183987E-03
+ 20 42 2.227097E-01 8.259572E-03 1.839487E-03
+ 20 43 2.553837E-01 3.056804E-02 7.806581E-03
+ 20 44 1.883084E-02 8.850685E-04 1.666658E-05
+ 20 45 3.257561E-01 2.035248E-01 6.629943E-02
+ 20 46 3.407500E-01 2.220604E-01 7.566708E-02
+ 21 0 9.594401E-01 3.473310E-02 3.332433E-02
+ 21 1 1.079808E+00 7.335483E-02 7.920911E-02
+ 21 2 4.291674E-01 2.014806E-03 8.646890E-04
+ 21 3 1.544156E+00 3.072742E-02 4.744792E-02
+ 21 4 2.112946E-01 7.223555E-05 1.526298E-05
+ 21 5 1.553473E+00 2.409499E-02 3.743091E-02
+ 21 6 1.668091E+00 1.942850E-03 3.240851E-03
+ 21 7 1.487136E+00 1.511330E-02 2.247553E-02
+ 21 8 1.488200E+00 9.535812E-03 1.419119E-02
+ 21 9 1.337741E+00 4.529800E-03 6.059698E-03
+ 21 10 1.389027E+00 1.648828E-02 2.290268E-02
+ 21 11 2.562903E+00 3.754687E-05 9.622899E-05
+ 21 12 1.273297E+00 1.458955E-02 1.857683E-02
+ 21 13 1.262884E+00 5.816550E-03 7.345626E-03
+ 21 14 1.137082E+00 5.335693E-03 6.067119E-03
+ 21 15 1.101271E+00 1.410147E-02 1.552955E-02
+ 21 16 2.289598E+00 1.737889E-07 3.979069E-07
+ 21 17 9.679056E-01 1.389614E-02 1.345015E-02
+ 21 18 9.321510E-01 5.050618E-03 4.707939E-03
+ 21 19 8.420380E-01 5.551667E-03 4.674715E-03
+ 21 20 7.946668E-01 1.342680E-02 1.066983E-02
+ 21 21 6.402360E-01 3.012780E-05 1.928890E-05
+ 21 22 6.818025E-01 1.431654E-02 9.761054E-03
+ 21 23 6.338306E-01 4.120490E-03 2.611692E-03
+ 21 24 5.902072E-01 7.052294E-03 4.162315E-03
+ 21 25 5.376208E-01 1.256915E-02 6.757435E-03
+ 21 26 5.457071E-01 5.577018E-04 3.043418E-04
+ 21 27 4.625832E-01 1.600784E-02 7.404957E-03
+ 21 28 3.960936E-01 1.709952E-03 6.773009E-04
+ 21 29 4.066148E-01 1.178551E-02 4.792165E-03
+ 21 30 3.562020E-01 8.841699E-03 3.149431E-03
+ 21 31 3.700706E-01 4.735395E-03 1.752431E-03
+ 21 32 3.185638E-01 1.587777E-02 5.058085E-03
+ 21 33 4.036045E-01 4.440519E-04 1.792214E-04
+ 21 34 2.907225E-01 1.904850E-02 5.537827E-03
+ 21 35 1.985386E-01 5.376500E-04 1.067443E-04
+ 21 36 2.709488E-01 1.881856E-02 5.098865E-03
+ 21 37 2.275669E-01 3.292611E-03 7.492895E-04
+ 21 38 2.594623E-01 1.774792E-02 4.604915E-03
+ 21 39 2.262712E-01 6.243942E-03 1.412824E-03
+ 21 40 2.547836E-01 1.841083E-02 4.690777E-03
+ 21 41 2.222811E-01 7.435946E-03 1.652870E-03
+ 21 42 2.547638E-01 2.336646E-02 5.952929E-03
+ 21 43 2.182540E-01 5.491942E-03 1.198638E-03
+ 21 44 2.436280E-01 2.940658E-02 7.164267E-03
+ 21 45 5.232784E-01 6.926141E-03 3.624300E-03
+ 21 46 3.323665E-01 3.007396E-01 9.995574E-02
+ 22 0 8.673299E-01 2.388004E-02 2.071187E-02
+ 22 1 1.037017E+00 7.402048E-02 7.676051E-02
+ 22 2 8.607367E-01 1.288252E-02 1.108846E-02
+ 22 3 1.631588E+00 2.205807E-02 3.598968E-02
+ 22 4 1.332295E+00 5.836398E-03 7.775801E-03
+ 22 5 1.592326E+00 2.070980E-02 3.297675E-02
+ 22 6 1.329616E+00 9.391301E-04 1.248682E-03
+ 22 7 1.520031E+00 1.973186E-02 2.999303E-02
+ 22 8 1.605003E+00 7.929051E-04 1.272615E-03
+ 22 9 1.406501E+00 1.436130E-02 2.019918E-02
+ 22 10 1.445445E+00 6.968007E-03 1.007187E-02
+ 22 11 1.273839E+00 5.357185E-03 6.824190E-03
+ 22 12 1.317583E+00 1.409000E-02 1.856475E-02
+ 22 13 7.932773E-01 6.141606E-05 4.871996E-05
+ 22 14 1.180500E+00 1.447483E-02 1.708754E-02
+ 22 15 1.147247E+00 3.458454E-03 3.967702E-03
+ 22 16 1.036669E+00 7.368758E-03 7.638960E-03
+ 22 17 1.001112E+00 1.130443E-02 1.131700E-02
+ 22 18 8.636987E-01 6.527974E-04 5.638202E-04
+ 22 19 8.734766E-01 1.444429E-02 1.261675E-02
+ 22 20 8.319412E-01 1.715367E-03 1.427084E-03
+ 22 21 7.524706E-01 9.496666E-03 7.145962E-03
+ 22 22 7.033201E-01 8.971805E-03 6.310051E-03
+ 22 23 6.467975E-01 2.221640E-03 1.436951E-03
+ 22 24 6.033415E-01 1.447902E-02 8.735794E-03
+ 22 25 5.115394E-01 2.074337E-04 1.061105E-04
+ 22 26 5.186744E-01 1.312948E-02 6.809925E-03
+ 22 27 4.619514E-01 4.943064E-03 2.283456E-03
+ 22 28 4.534570E-01 6.981476E-03 3.165800E-03
+ 22 29 4.033033E-01 1.189740E-02 4.798262E-03
+ 22 30 4.271296E-01 1.510673E-03 6.452532E-04
+ 22 31 3.541480E-01 1.617243E-02 5.727431E-03
+ 22 32 1.210517E-01 5.620141E-05 6.803276E-06
+ 22 33 3.168879E-01 1.643048E-02 5.206619E-03
+ 22 34 2.601818E-01 2.208603E-03 5.746384E-04
+ 22 35 2.913242E-01 1.437559E-02 4.187956E-03
+ 22 36 2.504131E-01 5.732740E-03 1.435553E-03
+ 22 37 2.735955E-01 1.237339E-02 3.385304E-03
+ 22 38 2.393799E-01 8.658863E-03 2.072758E-03
+ 22 39 2.625726E-01 1.215132E-02 3.190605E-03
+ 22 40 2.314071E-01 9.708571E-03 2.246632E-03
+ 22 41 2.569116E-01 1.517471E-02 3.898560E-03
+ 22 42 2.227318E-01 7.622851E-03 1.697851E-03
+ 22 43 2.550579E-01 2.344018E-02 5.978604E-03
+ 22 44 2.123511E-01 2.519491E-03 5.350167E-04
+ 22 45 2.147671E-01 2.174282E-02 4.669644E-03
+ 22 46 3.940610E-01 5.490886E-02 2.163744E-02
+ 23 0 7.623260E-01 1.556150E-02 1.186294E-02
+ 23 1 9.846384E-01 6.805742E-02 6.701196E-02
+ 23 2 9.566173E-01 2.923462E-02 2.796634E-02
+ 23 3 1.853535E+00 1.006040E-02 1.864730E-02
+ 23 4 1.438158E+00 1.612101E-02 2.318455E-02
+ 23 5 1.661838E+00 1.063941E-02 1.768097E-02
+ 23 6 1.486372E+00 8.838548E-03 1.313737E-02
+ 23 7 1.557171E+00 1.406448E-02 2.190079E-02
+ 23 8 1.418525E+00 2.093465E-03 2.969632E-03
+ 23 9 1.443201E+00 1.672741E-02 2.414102E-02
+ 23 10 1.980923E+00 1.208300E-04 2.393549E-04
+ 23 11 1.338925E+00 1.412570E-02 1.891325E-02
+ 23 12 1.391755E+00 4.440066E-03 6.179484E-03
+ 23 13 1.224168E+00 6.896105E-03 8.441994E-03
+ 23 14 1.220304E+00 1.134488E-02 1.384421E-02
+ 23 15 1.069552E+00 7.499371E-04 8.020967E-04
+ 23 16 1.073446E+00 1.416377E-02 1.520404E-02
+ 23 17 1.065488E+00 1.185148E-03 1.262762E-03
+ 23 18 9.410677E-01 1.004500E-02 9.453028E-03
+ 23 19 9.066036E-01 7.402539E-03 6.711169E-03
+ 23 20 8.193847E-01 3.112000E-03 2.549925E-03
+ 23 21 7.773600E-01 1.309355E-02 1.017840E-02
+ 23 22 9.645821E-01 2.347667E-06 2.264518E-06
+ 23 23 6.671507E-01 1.304327E-02 8.701825E-03
+ 23 24 6.199000E-01 3.218506E-03 1.995152E-03
+ 23 25 5.786261E-01 7.832291E-03 4.531968E-03
+ 23 26 5.265660E-01 9.560602E-03 5.034288E-03
+ 23 27 5.152576E-01 2.168210E-03 1.117187E-03
+ 23 28 4.525062E-01 1.413263E-02 6.395100E-03
+ 23 29 6.800572E+00 1.176147E-07 7.998473E-07
+ 23 30 3.960057E-01 1.463729E-02 5.796449E-03
+ 23 31 3.273904E-01 1.837531E-03 6.015899E-04
+ 23 32 3.518118E-01 1.208741E-02 4.252492E-03
+ 23 33 3.013662E-01 5.740741E-03 1.730066E-03
+ 23 34 3.187351E-01 8.787326E-03 2.800830E-03
+ 23 35 2.771329E-01 9.600970E-03 2.660745E-03
+ 23 36 2.973299E-01 6.433306E-03 1.912814E-03
+ 23 37 2.572438E-01 1.231340E-02 3.167545E-03
+ 23 38 2.812285E-01 5.769381E-03 1.622514E-03
+ 23 39 2.433037E-01 1.342662E-02 3.266747E-03
+ 23 40 2.676852E-01 7.442551E-03 1.992261E-03
+ 23 41 2.338726E-01 1.206562E-02 2.821818E-03
+ 23 42 2.585879E-01 1.303605E-02 3.370966E-03
+ 23 43 2.207007E-01 6.616059E-03 1.460169E-03
+ 23 44 2.551631E-01 2.418757E-02 6.171777E-03
+ 23 45 2.266128E-01 5.279605E-04 1.196426E-04
+ 23 46 1.188951E-01 7.354915E-03 8.744631E-04
+ 24 0 6.434980E-01 9.599926E-03 6.177533E-03
+ 24 1 9.229896E-01 5.779688E-02 5.334592E-02
+ 24 2 9.777289E-01 4.567077E-02 4.465363E-02
+ 24 3 3.086415E+00 1.519334E-03 4.689294E-03
+ 24 4 1.499651E+00 2.348039E-02 3.521238E-02
+ 24 5 1.909666E+00 1.988232E-03 3.796859E-03
+ 24 6 1.529865E+00 1.760199E-02 2.692866E-02
+ 24 7 1.631276E+00 4.561049E-03 7.440330E-03
+ 24 8 1.484200E+00 1.042792E-02 1.547711E-02
+ 24 9 1.478662E+00 9.578302E-03 1.416307E-02
+ 24 10 1.332587E+00 3.681260E-03 4.905601E-03
+ 24 11 1.381672E+00 1.388154E-02 1.917974E-02
+ 24 12 6.908146E-01 7.095990E-05 4.902014E-05
+ 24 13 1.272419E+00 1.395012E-02 1.775039E-02
+ 24 14 1.302700E+00 2.068661E-03 2.694844E-03
+ 24 15 1.148294E+00 8.957538E-03 1.028588E-02
+ 24 16 1.108424E+00 7.983303E-03 8.848884E-03
+ 24 17 9.997832E-01 2.611153E-03 2.610587E-03
+ 24 18 9.730000E-01 1.273883E-02 1.239488E-02
+ 24 19 1.658624E+00 8.011957E-06 1.328882E-05
+ 24 20 8.518561E-01 1.235463E-02 1.052437E-02
+ 24 21 8.083394E-01 2.999168E-03 2.424346E-03
+ 24 22 7.366560E-01 7.411538E-03 5.459754E-03
+ 24 23 6.866204E-01 8.809362E-03 6.048688E-03
+ 24 24 6.346736E-01 2.040364E-03 1.294965E-03
+ 24 25 5.906686E-01 1.298148E-02 7.667750E-03
+ 24 26 1.920570E-01 2.444063E-06 4.693995E-07
+ 24 27 5.088176E-01 1.313676E-02 6.684216E-03
+ 24 28 4.419021E-01 2.017216E-03 8.914120E-04
+ 24 29 4.421842E-01 1.006590E-02 4.450981E-03
+ 24 30 3.902713E-01 6.240477E-03 2.435479E-03
+ 24 31 3.949794E-01 6.099415E-03 2.409143E-03
+ 24 32 3.432316E-01 1.041709E-02 3.575476E-03
+ 24 33 3.642639E-01 3.050375E-03 1.111141E-03
+ 24 34 3.059359E-01 1.340064E-02 4.099738E-03
+ 24 35 3.463159E-01 1.435311E-03 4.970710E-04
+ 24 36 2.793435E-01 1.522215E-02 4.252208E-03
+ 24 37 3.364231E-01 9.557199E-04 3.215262E-04
+ 24 38 2.594313E-01 1.627847E-02 4.223145E-03
+ 24 39 3.073519E-01 1.486774E-03 4.569628E-04
+ 24 40 2.452614E-01 1.626066E-02 3.988112E-03
+ 24 41 2.756624E-01 4.191066E-03 1.155319E-03
+ 24 42 2.350838E-01 1.314783E-02 3.090843E-03
+ 24 43 2.593151E-01 1.196045E-02 3.101524E-03
+ 24 44 2.145498E-01 4.678600E-03 1.003793E-03
+ 24 45 2.565530E-01 2.509750E-02 6.438839E-03
+ 24 46 6.413301E+00 2.140076E-06 1.372495E-05
+ 25 0 5.105794E-01 5.591362E-03 2.854834E-03
+ 25 1 8.519416E-01 4.575019E-02 3.897649E-02
+ 25 2 9.681241E-01 5.779051E-02 5.594839E-02
+ 25 3 2.443599E-02 7.185675E-04 1.755891E-05
+ 25 4 1.569245E+00 2.355133E-02 3.695781E-02
+ 25 5 7.760847E-01 3.395750E-04 2.635389E-04
+ 25 6 1.564695E+00 1.994606E-02 3.120950E-02
+ 25 7 4.970509E+00 1.082206E-05 5.379115E-05
+ 25 8 1.517964E+00 1.630966E-02 2.475747E-02
+ 25 9 1.551024E+00 1.592009E-03 2.469245E-03
+ 25 10 1.399721E+00 1.174446E-02 1.643896E-02
+ 25 11 1.436782E+00 5.822690E-03 8.365933E-03
+ 25 12 1.273380E+00 5.669171E-03 7.219012E-03
+ 25 13 1.316965E+00 1.082017E-02 1.424979E-02
+ 25 14 1.108192E+00 9.337027E-04 1.034722E-03
+ 25 15 1.184733E+00 1.317148E-02 1.560470E-02
+ 25 16 1.215379E+00 3.720416E-04 4.521717E-04
+ 25 17 1.045287E+00 1.100816E-02 1.150668E-02
+ 25 18 1.010111E+00 4.199438E-03 4.241898E-03
+ 25 19 9.114024E-01 5.775705E-03 5.263991E-03
+ 25 20 8.809496E-01 9.483279E-03 8.354291E-03
+ 25 21 7.895951E-01 1.172026E-03 9.254256E-04
+ 25 22 7.595936E-01 1.250474E-02 9.498518E-03
+ 25 23 7.189426E-01 1.375619E-04 9.889914E-05
+ 25 24 6.524693E-01 1.158528E-02 7.559039E-03
+ 25 25 6.046350E-01 2.870756E-03 1.735760E-03
+ 25 26 5.667850E-01 7.838779E-03 4.442903E-03
+ 25 27 5.151671E-01 7.331555E-03 3.776976E-03
+ 25 28 5.008333E-01 3.694996E-03 1.850577E-03
+ 25 29 4.422147E-01 1.120620E-02 4.955548E-03
+ 25 30 4.634480E-01 9.667448E-04 4.480360E-04
+ 25 31 3.863811E-01 1.339449E-02 5.175379E-03
+ 25 32 8.069746E-01 2.526339E-05 2.038691E-05
+ 25 33 3.415187E-01 1.415828E-02 4.835319E-03
+ 25 34 1.915737E-01 1.838679E-04 3.522425E-05
+ 25 35 3.057674E-01 1.442832E-02 4.411712E-03
+ 25 36 2.110460E-01 4.840013E-04 1.021465E-04
+ 25 37 2.801023E-01 1.508290E-02 4.224755E-03
+ 25 38 1.705788E-01 3.061398E-04 5.222094E-05
+ 25 39 2.608526E-01 1.639444E-02 4.276531E-03
+ 25 40 9.377848E-01 1.742152E-05 1.633764E-05
+ 25 41 2.465725E-01 1.709304E-02 4.214674E-03
+ 25 42 2.872772E-01 2.269995E-03 6.521178E-04
+ 25 43 2.354408E-01 1.309741E-02 3.083664E-03
+ 25 44 2.587506E-01 1.177293E-02 3.046253E-03
+ 25 45 1.969715E-01 2.312096E-03 4.554170E-04
+ 25 46 2.628143E-01 2.591328E-02 6.810381E-03
+ 26 0 3.649820E-01 3.059659E-03 1.116720E-03
+ 26 1 7.711428E-01 3.396561E-02 2.619233E-02
+ 26 2 9.411038E-01 6.335875E-02 5.962716E-02
+ 26 3 6.576939E-01 8.005353E-03 5.265072E-03
+ 26 4 1.687065E+00 1.699713E-02 2.867527E-02
+ 26 5 1.351493E+00 5.475908E-03 7.400650E-03
+ 26 6 1.608056E+00 1.483907E-02 2.386205E-02
+ 26 7 1.410970E+00 3.341010E-03 4.714065E-03
+ 26 8 1.552751E+00 1.437970E-02 2.232809E-02
+ 26 9 1.363105E+00 6.226013E-04 8.486708E-04
+ 26 10 1.435170E+00 1.458268E-02 2.092861E-02
+ 26 11 1.820515E+00 1.744851E-04 3.176527E-04
+ 26 12 1.331602E+00 1.243629E-02 1.656018E-02
+ 26 13 1.402467E+00 2.766100E-03 3.879363E-03
+ 26 14 1.222661E+00 7.947125E-03 9.716640E-03
+ 26 15 1.227747E+00 7.312892E-03 8.978381E-03
+ 26 16 1.104281E+00 2.937887E-03 3.244252E-03
+ 26 17 1.076823E+00 1.118513E-02 1.204441E-02
+ 26 18 8.773944E-01 1.356920E-04 1.190554E-04
+ 26 19 9.450435E-01 1.200230E-02 1.134269E-02
+ 26 20 9.415570E-01 9.978441E-04 9.395271E-04
+ 26 21 8.286337E-01 9.401643E-03 7.790519E-03
+ 26 22 7.858794E-01 4.714146E-03 3.704750E-03
+ 26 23 7.202391E-01 5.107125E-03 3.678351E-03
+ 26 24 6.699640E-01 8.990726E-03 6.023463E-03
+ 26 25 6.233164E-01 1.498289E-03 9.339081E-04
+ 26 26 5.774973E-01 1.175711E-02 6.789698E-03
+ 26 27 6.983070E-01 2.225707E-05 1.554227E-05
+ 26 28 4.987880E-01 1.230977E-02 6.139965E-03
+ 26 29 4.102245E-01 6.558409E-04 2.690420E-04
+ 26 30 4.326005E-01 1.124944E-02 4.866514E-03
+ 26 31 3.711218E-01 2.430629E-03 9.020594E-04
+ 26 32 3.820854E-01 9.700593E-03 3.706455E-03
+ 26 33 3.273828E-01 4.249844E-03 1.391326E-03
+ 26 34 3.420274E-01 8.632543E-03 2.952566E-03
+ 26 35 2.900737E-01 5.326145E-03 1.544975E-03
+ 26 36 3.080250E-01 8.685712E-03 2.675416E-03
+ 26 37 2.623198E-01 5.139684E-03 1.348241E-03
+ 26 38 2.824159E-01 1.032457E-02 2.915822E-03
+ 26 39 2.358244E-01 3.343835E-03 7.885578E-04
+ 26 40 2.626688E-01 1.363043E-02 3.580289E-03
+ 26 41 1.794760E-01 5.888941E-04 1.056924E-04
+ 26 42 2.476216E-01 1.650450E-02 4.086870E-03
+ 26 43 3.016571E-01 1.289600E-03 3.890170E-04
+ 26 44 2.350138E-01 1.212549E-02 2.849657E-03
+ 26 45 2.567068E-01 1.218849E-02 3.128869E-03
+ 26 46 1.119673E-01 3.782453E-04 4.235112E-05
+ 27 0 2.124856E-01 1.559709E-03 3.314157E-04
+ 27 1 6.801657E-01 2.374774E-02 1.615240E-02
+ 27 2 9.019096E-01 6.234771E-02 5.623200E-02
+ 27 3 8.245431E-01 2.054704E-02 1.694192E-02
+ 27 4 1.968574E+00 8.037495E-03 1.582240E-02
+ 27 5 1.460447E+00 1.292368E-02 1.887435E-02
+ 27 6 1.687304E+00 6.711745E-03 1.132475E-02
+ 27 7 1.491216E+00 1.064407E-02 1.587260E-02
+ 27 8 1.607252E+00 7.228365E-03 1.161781E-02
+ 27 9 1.471798E+00 6.218310E-03 9.152096E-03
+ 27 10 1.467212E+00 9.833396E-03 1.442768E-02
+ 27 11 1.311355E+00 2.426328E-03 3.181777E-03
+ 27 12 1.372488E+00 1.197902E-02 1.644107E-02
+ 27 13 9.131762E-01 1.682878E-04 1.536764E-04
+ 27 14 1.265974E+00 1.229517E-02 1.556536E-02
+ 27 15 1.372546E+00 6.439734E-04 8.838830E-04
+ 27 16 1.148115E+00 9.977295E-03 1.145508E-02
+ 27 17 1.116620E+00 3.689529E-03 4.119800E-03
+ 27 18 1.013790E+00 5.912973E-03 5.994516E-03
+ 27 19 9.748594E-01 7.724642E-03 7.530440E-03
+ 27 20 8.729055E-01 2.025759E-03 1.768296E-03
+ 27 21 8.549469E-01 1.070486E-02 9.152086E-03
+ 27 22 7.016565E-01 8.356190E-05 5.863175E-05
+ 27 23 7.409322E-01 1.136646E-02 8.421776E-03
+ 27 24 6.891016E-01 6.553759E-04 4.516205E-04
+ 27 25 6.376941E-01 9.814805E-03 6.258843E-03
+ 27 26 5.889459E-01 3.047073E-03 1.794561E-03
+ 27 27 5.549413E-01 7.123186E-03 3.952951E-03
+ 27 28 5.035690E-01 6.013753E-03 3.028339E-03
+ 27 29 4.897220E-01 4.487901E-03 2.197824E-03
+ 27 30 4.317856E-01 8.558740E-03 3.695540E-03
+ 27 31 4.364935E-01 2.614495E-03 1.141210E-03
+ 27 32 3.767062E-01 1.028306E-02 3.873694E-03
+ 27 33 4.002986E-01 1.640194E-03 6.565675E-04
+ 27 34 3.321289E-01 1.123050E-02 3.729972E-03
+ 27 35 3.684901E-01 1.455423E-03 5.363088E-04
+ 27 36 2.956449E-01 1.146189E-02 3.388650E-03
+ 27 37 3.257163E-01 2.180846E-03 7.103372E-04
+ 27 38 2.686432E-01 1.057165E-02 2.840002E-03
+ 27 39 2.903516E-01 4.590067E-03 1.332733E-03
+ 27 40 2.458173E-01 7.484598E-03 1.839844E-03
+ 27 41 2.655825E-01 9.714172E-03 2.579914E-03
+ 27 42 2.127519E-01 2.084236E-03 4.434251E-04
+ 27 43 2.484737E-01 1.518785E-02 3.773781E-03
+ 27 44 3.133076E-01 8.829474E-04 2.766341E-04
+ 27 45 2.337292E-01 1.041394E-02 2.434040E-03
+ 27 46 2.526791E-01 1.270790E-02 3.211021E-03
+ 28 0 7.127795E-02 7.297746E-04 5.201683E-05
+ 28 1 5.786676E-01 1.567266E-02 9.069263E-03
+ 28 2 8.529191E-01 5.625216E-02 4.797854E-02
+ 28 3 8.775335E-01 3.420696E-02 3.001775E-02
+ 28 4 3.331483E+00 1.471832E-03 4.903383E-03
+ 28 5 1.534327E+00 1.776397E-02 2.725575E-02
+ 28 6 1.996061E+00 9.982352E-04 1.992539E-03
+ 28 7 1.530190E+00 1.589958E-02 2.432938E-02
+ 28 8 1.792549E+00 1.189570E-03 2.132362E-03
+ 28 9 1.508185E+00 1.216808E-02 1.835172E-02
+ 28 10 1.514031E+00 2.932482E-03 4.439870E-03
+ 28 11 1.384567E+00 8.740962E-03 1.210244E-02
+ 28 12 1.422836E+00 5.664125E-03 8.059122E-03
+ 28 13 1.264136E+00 4.803972E-03 6.072873E-03
+ 28 14 1.308840E+00 8.770624E-03 1.147935E-02
+ 28 15 1.130916E+00 1.525770E-03 1.725517E-03
+ 28 16 1.182041E+00 1.084779E-02 1.282254E-02
+ 28 17 7.512243E-01 2.420335E-05 1.818214E-05
+ 28 18 1.045358E+00 1.092087E-02 1.141622E-02
+ 28 19 1.031284E+00 8.443586E-04 8.707734E-04
+ 28 20 9.158212E-01 8.914034E-03 8.163661E-03
+ 28 21 8.887804E-01 3.477941E-03 3.091126E-03
+ 28 22 8.032311E-01 5.752473E-03 4.620565E-03
+ 28 23 7.632040E-01 6.707309E-03 5.119045E-03
+ 28 24 7.028694E-01 2.715516E-03 1.908653E-03
+ 28 25 6.531519E-01 9.342116E-03 6.101821E-03
+ 28 26 6.138830E-01 7.307366E-04 4.485868E-04
+ 28 27 5.640098E-01 1.078886E-02 6.085024E-03
+ 28 28 7.239232E-01 1.642616E-05 1.189128E-05
+ 28 29 4.885649E-01 1.115584E-02 5.450351E-03
+ 28 30 3.610714E-01 2.024405E-04 7.309550E-05
+ 28 31 4.236630E-01 1.097625E-02 4.650231E-03
+ 28 32 3.370118E-01 6.787447E-04 2.287450E-04
+ 28 33 3.726786E-01 1.085684E-02 4.046113E-03
+ 28 34 2.924436E-01 8.998110E-04 2.631440E-04
+ 28 35 3.314783E-01 1.123526E-02 3.724245E-03
+ 28 36 2.367342E-01 5.833177E-04 1.380913E-04
+ 28 37 2.967384E-01 1.216441E-02 3.609648E-03
+ 28 38 4.825898E-02 2.993250E-05 1.444512E-06
+ 28 39 2.706816E-01 1.279529E-02 3.463451E-03
+ 28 40 3.263463E-01 8.582099E-04 2.800736E-04
+ 28 41 2.495449E-01 1.062133E-02 2.650499E-03
+ 28 42 2.703877E-01 6.044671E-03 1.634405E-03
+ 28 43 2.226562E-01 3.613997E-03 8.046789E-04
+ 28 44 2.490593E-01 1.366888E-02 3.404361E-03
+ 28 45 3.139251E-01 8.262474E-04 2.593798E-04
+ 28 46 2.315383E-01 8.140325E-03 1.884797E-03
+ 29 0 2.165716E-04 3.049951E-04 6.605329E-08
+ 29 1 4.666691E-01 9.768545E-03 4.558678E-03
+ 29 2 7.952965E-01 4.719228E-02 3.753186E-02
+ 29 3 8.878818E-01 4.534323E-02 4.025942E-02
+ 29 4 3.936227E-01 2.712457E-04 1.067685E-04
+ 29 5 1.620568E+00 1.757990E-02 2.848943E-02
+ 29 6 9.466861E-01 3.698187E-04 3.501022E-04
+ 29 7 1.563220E+00 1.582016E-02 2.473039E-02
+ 29 8 1.096930E+00 3.642319E-04 3.995369E-04
+ 29 9 1.540400E+00 1.336415E-02 2.058614E-02
+ 29 10 3.764068E+01 5.625910E-08 2.117631E-06
+ 29 11 1.419297E+00 1.225099E-02 1.738779E-02
+ 29 12 1.603111E+00 5.508151E-04 8.830179E-04
+ 29 13 1.319154E+00 1.018283E-02 1.343272E-02
+ 29 14 1.388707E+00 2.397785E-03 3.329821E-03
+ 29 15 1.213377E+00 7.278579E-03 8.831664E-03
+ 29 16 1.226195E+00 5.170418E-03 6.339943E-03
+ 29 17 1.103240E+00 3.996121E-03 4.408681E-03
+ 29 18 1.074850E+00 7.990653E-03 8.588756E-03
+ 29 19 9.668612E-01 1.336089E-03 1.291812E-03
+ 29 20 9.430960E-01 9.857799E-03 9.296851E-03
+ 29 21 7.055049E-01 6.483470E-05 4.574120E-05
+ 29 22 8.282753E-01 1.024853E-02 8.488605E-03
+ 29 23 8.155501E-01 3.699264E-04 3.016935E-04
+ 29 24 7.211703E-01 9.281556E-03 6.693583E-03
+ 29 25 6.684547E-01 1.837356E-03 1.228189E-03
+ 29 26 6.226612E-01 7.553607E-03 4.703338E-03
+ 29 27 5.735359E-01 3.768877E-03 2.161586E-03
+ 29 28 5.433548E-01 5.753160E-03 3.126007E-03
+ 29 29 4.920552E-01 5.543218E-03 2.727569E-03
+ 29 30 4.802064E-01 4.376959E-03 2.101844E-03
+ 29 31 4.215747E-01 6.793478E-03 2.863959E-03
+ 29 32 4.238028E-01 3.669944E-03 1.555332E-03
+ 29 33 3.668600E-01 7.351474E-03 2.696962E-03
+ 29 34 3.773556E-01 3.771571E-03 1.423223E-03
+ 29 35 3.219585E-01 7.044414E-03 2.268009E-03
+ 29 36 3.369782E-01 4.928537E-03 1.660810E-03
+ 29 37 2.827477E-01 5.532240E-03 1.564228E-03
+ 29 38 2.999735E-01 7.499359E-03 2.249609E-03
+ 29 39 2.469794E-01 2.635348E-03 6.508768E-04
+ 29 40 2.726104E-01 1.104173E-02 3.010090E-03
+ 29 41 7.567297E-02 5.280929E-05 3.996236E-06
+ 29 42 2.516495E-01 1.188665E-02 2.991270E-03
+ 29 43 2.783371E-01 3.309824E-03 9.212467E-04
+ 29 44 2.269413E-01 4.687385E-03 1.063761E-03
+ 29 45 2.492546E-01 1.223636E-02 3.049970E-03
+ 29 46 3.033448E-01 1.046603E-03 3.174815E-04
+ 30 0 2.251473E-01 1.077336E-04 2.425593E-05
+ 30 1 3.451750E-01 5.741243E-03 1.981734E-03
+ 30 2 7.296457E-01 3.718050E-02 2.712859E-02
+ 30 3 8.765121E-01 5.183179E-02 4.543119E-02
+ 30 4 4.529263E-01 4.744661E-03 2.148982E-03
+ 30 5 1.759076E+00 1.309753E-02 2.303954E-02
+ 30 6 1.390785E+00 3.916333E-03 5.446777E-03
+ 30 7 1.601684E+00 1.124476E-02 1.801054E-02
+ 30 8 1.417944E+00 4.249366E-03 6.025365E-03
+ 30 9 1.581050E+00 9.556998E-03 1.511009E-02
+ 30 10 1.445688E+00 2.403982E-03 3.475407E-03
+ 30 11 1.447181E+00 1.020952E-02 1.477503E-02
+ 30 12 1.236012E+00 8.799393E-04 1.087615E-03
+ 30 13 1.357161E+00 1.061628E-02 1.440800E-02
+ 30 14 5.367478E-01 3.082959E-05 1.654771E-05
+ 30 15 1.252978E+00 1.039355E-02 1.302289E-02
+ 30 16 1.398762E+00 3.899855E-04 5.454967E-04
+ 30 17 1.139491E+00 9.048815E-03 1.031104E-02
+ 30 18 1.119745E+00 1.947297E-03 2.180477E-03
+ 30 19 1.010647E+00 6.834843E-03 6.907616E-03
+ 30 20 9.725768E-01 4.233502E-03 4.117406E-03
+ 30 21 8.820973E-01 4.312349E-03 3.803912E-03
+ 30 22 8.534214E-01 6.570130E-03 5.607090E-03
+ 30 23 7.729646E-01 2.138339E-03 1.652860E-03
+ 30 24 7.400374E-01 8.380436E-03 6.201836E-03
+ 30 25 6.854744E-01 7.165521E-04 4.911781E-04
+ 30 26 6.359435E-01 9.430265E-03 5.997115E-03
+ 30 27 6.241375E-01 9.036917E-05 5.640279E-05
+ 30 28 5.503991E-01 9.830772E-03 5.410848E-03
+ 30 29 3.227449E-01 1.374481E-05 4.436068E-06
+ 30 30 4.783433E-01 9.902135E-03 4.736620E-03
+ 30 31 3.307272E-01 1.297856E-04 4.292364E-05
+ 30 32 4.151513E-01 9.984414E-03 4.145042E-03
+ 30 33 2.700611E-01 1.471566E-04 3.974127E-05
+ 30 34 3.645486E-01 1.026947E-02 3.743721E-03
+ 30 35 5.608135E-02 1.713033E-05 9.606920E-07
+ 30 36 3.233062E-01 1.058268E-02 3.421446E-03
+ 30 37 4.425831E-01 2.190912E-04 9.696608E-05
+ 30 38 2.879130E-01 1.002336E-02 2.885857E-03
+ 30 39 3.165318E-01 2.105077E-03 6.663238E-04
+ 30 40 2.591035E-01 6.915787E-03 1.791904E-03
+ 30 41 2.764712E-01 7.048360E-03 1.948668E-03
+ 30 42 2.172795E-01 1.423373E-03 3.092697E-04
+ 30 43 2.533230E-01 1.145199E-02 2.901053E-03
+ 30 44 2.916911E-01 1.599518E-03 4.665653E-04
+ 30 45 2.288834E-01 5.145834E-03 1.177796E-03
+ 30 46 2.489274E-01 1.097657E-02 2.732368E-03
+ 31 0 1.989999E+00 2.806796E-05 5.585520E-05
+ 31 1 2.177442E-01 3.167868E-03 6.897850E-04
+ 31 2 6.563270E-01 2.770962E-02 1.818657E-02
+ 31 3 8.517677E-01 5.322103E-02 4.533195E-02
+ 31 4 6.897936E-01 1.311134E-02 9.044119E-03
+ 31 5 2.050856E+00 6.974435E-03 1.430356E-02
+ 31 6 1.498188E+00 8.725174E-03 1.307195E-02
+ 31 7 1.662164E+00 5.380074E-03 8.942566E-03
+ 31 8 1.481525E+00 9.434381E-03 1.397727E-02
+ 31 9 1.655344E+00 4.100046E-03 6.786985E-03
+ 31 10 1.491619E+00 7.095623E-03 1.058397E-02
+ 31 11 1.477039E+00 5.085501E-03 7.511482E-03
+ 31 12 1.352754E+00 5.079269E-03 6.871002E-03
+ 31 13 1.398547E+00 6.433840E-03 8.998024E-03
+ 31 14 1.234664E+00 2.862001E-03 3.533610E-03
+ 31 15 1.290881E+00 7.983553E-03 1.030581E-02
+ 31 16 1.107921E+00 1.097814E-03 1.216291E-03
+ 31 17 1.170413E+00 9.046494E-03 1.058814E-02
+ 31 18 9.349720E-01 1.186899E-04 1.109717E-04
+ 31 19 1.037286E+00 9.323801E-03 9.671446E-03
+ 31 20 1.090123E+00 1.252400E-04 1.365270E-04
+ 31 21 9.106532E-01 8.723696E-03 7.944262E-03
+ 31 22 8.994496E-01 9.904087E-04 8.908227E-04
+ 31 23 8.003215E-01 7.499158E-03 6.001738E-03
+ 31 24 7.644414E-01 2.356562E-03 1.801453E-03
+ 31 25 7.005168E-01 6.041417E-03 4.232114E-03
+ 31 26 6.490835E-01 3.806949E-03 2.471028E-03
+ 31 27 6.076297E-01 4.731412E-03 2.874946E-03
+ 31 28 5.585774E-01 5.010488E-03 2.798745E-03
+ 31 29 5.327231E-01 3.821150E-03 2.035615E-03
+ 31 30 4.810298E-01 5.774164E-03 2.777545E-03
+ 31 31 4.726332E-01 3.448880E-03 1.630055E-03
+ 31 32 4.122858E-01 5.978992E-03 2.465054E-03
+ 31 33 4.153068E-01 3.733886E-03 1.550708E-03
+ 31 34 3.575422E-01 5.466269E-03 1.954422E-03
+ 31 35 3.664197E-01 4.877968E-03 1.787383E-03
+ 31 36 3.106756E-01 3.998408E-03 1.242208E-03
+ 31 37 3.254924E-01 7.056092E-03 2.296704E-03
+ 31 38 2.596014E-01 1.632812E-03 4.238803E-04
+ 31 39 2.900715E-01 9.628879E-03 2.793063E-03
+ 31 40 8.060889E+02 3.100262E-09 2.499087E-06
+ 31 41 2.629547E-01 9.602099E-03 2.524917E-03
+ 31 42 2.860275E-01 3.115176E-03 8.910259E-04
+ 31 43 2.337041E-01 3.615194E-03 8.448855E-04
+ 31 44 2.549795E-01 9.970376E-03 2.542241E-03
+ 31 45 3.146165E-01 6.879127E-04 2.164287E-04
+ 31 46 2.294340E-01 5.027177E-03 1.153405E-03
+ 32 0 2.254723E+01 3.206893E-06 7.230657E-05
+ 32 1 9.487261E-02 1.626743E-03 1.543333E-04
+ 32 2 5.756601E-01 1.964247E-02 1.130738E-02
+ 32 3 8.176870E-01 5.030464E-02 4.113345E-02
+ 32 4 7.794688E-01 2.271553E-02 1.770604E-02
+ 32 5 3.025996E+00 2.034940E-03 6.157721E-03
+ 32 6 1.575015E+00 1.203516E-02 1.895556E-02
+ 32 7 1.823039E+00 1.216041E-03 2.216891E-03
+ 32 8 1.516046E+00 1.263700E-02 1.915828E-02
+ 32 9 1.966098E+00 5.346292E-04 1.051133E-03
+ 32 10 1.522333E+00 1.024427E-02 1.559518E-02
+ 32 11 1.532749E+00 9.753079E-04 1.494902E-03
+ 32 12 1.391690E+00 8.909614E-03 1.239942E-02
+ 32 13 1.477146E+00 1.789353E-03 2.643137E-03
+ 32 14 1.294909E+00 7.098233E-03 9.191566E-03
+ 32 15 1.347633E+00 3.158578E-03 4.256604E-03
+ 32 16 1.192698E+00 5.192324E-03 6.192875E-03
+ 32 17 1.208849E+00 4.774896E-03 5.772128E-03
+ 32 18 1.088758E+00 3.262738E-03 3.552333E-03
+ 32 19 1.063791E+00 6.367035E-03 6.773192E-03
+ 32 20 9.630153E-01 1.653693E-03 1.592531E-03
+ 32 21 9.342659E-01 7.597423E-03 7.098014E-03
+ 32 22 8.202912E-01 5.715643E-04 4.688491E-04
+ 32 23 8.215263E-01 8.319664E-03 6.834823E-03
+ 32 24 6.791915E-01 7.038757E-05 4.780664E-05
+ 32 25 7.163267E-01 8.558555E-03 6.130722E-03
+ 32 26 6.442846E-01 2.081942E-05 1.341363E-05
+ 32 27 6.182292E-01 8.500550E-03 5.255288E-03
+ 32 28 5.464682E-01 1.903843E-04 1.040389E-04
+ 32 29 5.367894E-01 8.385865E-03 4.501444E-03
+ 32 30 4.562826E-01 3.354630E-04 1.530659E-04
+ 32 31 4.684369E-01 8.425968E-03 3.947034E-03
+ 32 32 3.577317E-01 2.882871E-04 1.031294E-04
+ 32 33 4.072306E-01 8.707282E-03 3.545872E-03
+ 32 34 2.182091E-01 6.790156E-05 1.481673E-05
+ 32 35 3.573432E-01 9.038820E-03 3.229961E-03
+ 32 36 5.202925E-01 9.677896E-05 5.035337E-05
+ 32 37 3.161946E-01 8.671480E-03 2.741875E-03
+ 32 38 3.481575E-01 1.467563E-03 5.109429E-04
+ 32 39 2.787843E-01 6.250542E-03 1.742553E-03
+ 32 40 2.952537E-01 5.346834E-03 1.578672E-03
+ 32 41 2.360747E-01 1.670755E-03 3.944230E-04
+ 32 42 2.654835E-01 9.384925E-03 2.491543E-03
+ 32 43 3.199885E-01 6.830544E-04 2.185696E-04
+ 32 44 2.398017E-01 5.518771E-03 1.323410E-03
+ 32 45 2.567536E-01 8.110524E-03 2.082407E-03
+ 32 46 3.534177E-01 2.747896E-04 9.711552E-05
+ 33 0 2.705632E+02 2.678477E-07 7.246972E-05
+ 33 1 7.759766E-03 7.648709E-04 5.935219E-06
+ 33 2 4.881162E-01 1.329890E-02 6.491410E-03
+ 33 3 7.765525E-01 4.449319E-02 3.455129E-02
+ 33 4 8.147013E-01 3.114596E-02 2.537466E-02
+ 33 5 6.448212E+01 1.823213E-05 1.175647E-03
+ 33 6 1.660015E+00 1.254805E-02 2.082996E-02
+ 33 7 1.566993E-02 9.091612E-06 1.424649E-07
+ 33 8 1.542667E+00 1.255480E-02 1.936788E-02
+ 33 9 1.017311E+00 2.914248E-04 2.964697E-04
+ 33 10 1.553438E+00 1.010012E-02 1.568991E-02
+ 33 11 1.290190E+00 9.398508E-05 1.212586E-04
+ 33 12 1.417652E+00 9.611685E-03 1.362603E-02
+ 33 13 7.194792E+01 7.932672E-08 5.707393E-06
+ 33 14 1.330638E+00 8.887114E-03 1.182553E-02
+ 33 15 1.628572E+00 2.079840E-04 3.387169E-04
+ 33 16 1.229955E+00 8.108541E-03 9.973139E-03
+ 33 17 1.302219E+00 8.455336E-04 1.101070E-03
+ 33 18 1.121742E+00 6.977583E-03 7.827050E-03
+ 33 19 1.102050E+00 1.877271E-03 2.068848E-03
+ 33 20 9.969892E-01 5.657353E-03 5.640320E-03
+ 33 21 9.610127E-01 3.104996E-03 2.983940E-03
+ 33 22 8.734188E-01 4.309433E-03 3.763940E-03
+ 33 23 8.446628E-01 4.314397E-03 3.644211E-03
+ 33 24 7.686563E-01 3.142796E-03 2.415730E-03
+ 33 25 7.334483E-01 5.318258E-03 3.900668E-03
+ 33 26 6.796159E-01 2.281713E-03 1.550688E-03
+ 33 27 6.293655E-01 6.023775E-03 3.791156E-03
+ 33 28 5.945384E-01 1.778167E-03 1.057189E-03
+ 33 29 5.436072E-01 6.397591E-03 3.477776E-03
+ 33 30 5.259322E-01 1.646487E-03 8.659407E-04
+ 33 31 4.704427E-01 6.406009E-03 3.013660E-03
+ 33 32 4.695975E-01 1.952446E-03 9.168637E-04
+ 33 33 4.043571E-01 5.918077E-03 2.393016E-03
+ 33 34 4.101582E-01 2.892533E-03 1.186396E-03
+ 33 35 3.500267E-01 4.664759E-03 1.632790E-03
+ 33 36 3.593023E-01 4.743208E-03 1.704245E-03
+ 33 37 3.001738E-01 2.473405E-03 7.424513E-04
+ 33 38 3.182778E-01 7.308726E-03 2.326206E-03
+ 33 39 1.997545E-01 2.471508E-04 4.936949E-05
+ 33 40 2.829718E-01 8.558145E-03 2.421713E-03
+ 33 41 3.192255E-01 1.200459E-03 3.832171E-04
+ 33 42 2.522333E-01 4.859156E-03 1.225641E-03
+ 33 43 2.687431E-01 6.967026E-03 1.872340E-03
+ 33 44 1.056929E+00 9.708752E-07 1.026146E-06
+ 33 45 2.430479E-01 6.593274E-03 1.602481E-03
+ 33 46 2.586221E-01 6.332149E-03 1.637634E-03
+ 34 0 1.653690E+01 3.769267E-06 6.233197E-05
+ 34 1 5.943317E-02 3.191754E-04 1.896961E-05
+ 34 2 3.945827E-01 8.626628E-03 3.403918E-03
+ 34 3 7.298707E-01 3.726637E-02 2.719963E-02
+ 34 4 8.237972E-01 3.687260E-02 3.037554E-02
+ 34 5 5.480791E-02 1.214886E-03 6.658534E-05
+ 34 6 1.778156E+00 1.054247E-02 1.874616E-02
+ 34 7 1.386972E+00 1.268403E-03 1.759239E-03
+ 34 8 1.567714E+00 9.871597E-03 1.547584E-02
+ 34 9 1.363673E+00 2.581725E-03 3.520628E-03
+ 34 10 1.592863E+00 7.366401E-03 1.173367E-02
+ 34 11 1.461549E+00 1.960438E-03 2.865276E-03
+ 34 12 1.439502E+00 7.332851E-03 1.055565E-02
+ 34 13 1.271327E+00 1.360025E-03 1.729037E-03
+ 34 14 1.362741E+00 7.372927E-03 1.004739E-02
+ 34 15 1.129202E+00 6.327207E-04 7.144696E-04
+ 34 16 1.261106E+00 7.648470E-03 9.645533E-03
+ 34 17 9.380349E-01 1.549400E-04 1.453391E-04
+ 34 18 1.148235E+00 7.699783E-03 8.841161E-03
+ 34 19 3.775590E+00 8.015621E-07 3.026370E-06
+ 34 20 1.019812E+00 7.521220E-03 7.670228E-03
+ 34 21 1.043676E+00 1.806742E-04 1.885652E-04
+ 34 22 8.966306E-01 7.102252E-03 6.368097E-03
+ 34 23 8.912130E-01 5.955596E-04 5.307704E-04
+ 34 24 7.892533E-01 6.580850E-03 5.193958E-03
+ 34 25 7.585563E-01 1.086436E-03 8.241230E-04
+ 34 26 6.921283E-01 6.106196E-03 4.226271E-03
+ 34 27 6.389082E-01 1.486699E-03 9.498644E-04
+ 34 28 6.003937E-01 5.835114E-03 3.503366E-03
+ 34 29 5.467869E-01 1.647564E-03 9.008661E-04
+ 34 30 5.236541E-01 5.889158E-03 3.083882E-03
+ 34 31 4.655184E-01 1.461143E-03 6.801889E-04
+ 34 32 4.594286E-01 6.340059E-03 2.912805E-03
+ 34 33 3.819411E-01 9.024725E-04 3.446914E-04
+ 34 34 4.002620E-01 7.113654E-03 2.847326E-03
+ 34 35 2.753024E-01 1.940070E-04 5.341059E-05
+ 34 36 3.511955E-01 7.733373E-03 2.715926E-03
+ 34 37 4.672121E-01 1.488776E-04 6.955741E-05
+ 34 38 3.102944E-01 6.977887E-03 2.165199E-03
+ 34 39 3.318053E-01 2.247182E-03 7.456268E-04
+ 34 40 2.693041E-01 3.564373E-03 9.599003E-04
+ 34 41 2.866855E-01 6.523562E-03 1.870211E-03
+ 34 42 8.669883E-02 4.213983E-05 3.653474E-06
+ 34 43 2.575079E-01 7.009795E-03 1.805077E-03
+ 34 44 2.746884E-01 3.909017E-03 1.073762E-03
+ 34 45 1.964301E-01 5.319306E-04 1.044872E-04
+ 34 46 2.451890E-01 6.791576E-03 1.665220E-03
+ 35 0 6.448443E+00 7.475084E-06 4.820266E-05
+ 35 1 6.715558E-01 1.106420E-04 7.430228E-05
+ 35 2 2.968092E-01 5.373251E-03 1.594830E-03
+ 35 3 6.788194E-01 2.983237E-02 2.025080E-02
+ 35 4 8.182686E-01 3.936971E-02 3.221500E-02
+ 35 5 4.310499E-01 4.798329E-03 2.068319E-03
+ 35 6 1.970079E+00 7.217464E-03 1.421898E-02
+ 35 7 1.515577E+00 3.624022E-03 5.492485E-03
+ 35 8 1.595095E+00 6.193769E-03 9.879650E-03
+ 35 9 1.437753E+00 5.619966E-03 8.080121E-03
+ 35 10 1.655738E+00 3.894993E-03 6.449089E-03
+ 35 11 1.496399E+00 4.691977E-03 7.021068E-03
+ 35 12 1.460899E+00 3.949791E-03 5.770246E-03
+ 35 13 1.342559E+00 4.062580E-03 5.454251E-03
+ 35 14 1.400919E+00 4.193245E-03 5.874398E-03
+ 35 15 1.245765E+00 3.055280E-03 3.806160E-03
+ 35 16 1.295816E+00 4.830577E-03 6.259539E-03
+ 35 17 1.146808E+00 2.133256E-03 2.446435E-03
+ 35 18 1.176347E+00 5.460879E-03 6.423887E-03
+ 35 19 1.054207E+00 1.305824E-03 1.376608E-03
+ 35 20 1.041273E+00 6.032112E-03 6.281076E-03
+ 35 21 9.334609E-01 6.942666E-04 6.480708E-04
+ 35 22 9.162255E-01 6.426695E-03 5.888302E-03
+ 35 23 7.957348E-01 3.072045E-04 2.444533E-04
+ 35 24 8.067766E-01 6.658896E-03 5.372241E-03
+ 35 25 6.942588E-01 1.140120E-04 7.915383E-05
+ 35 26 7.052191E-01 6.765308E-03 4.771024E-03
+ 35 27 6.771720E-01 4.443649E-05 3.009114E-05
+ 35 28 6.091791E-01 6.812984E-03 4.150327E-03
+ 35 29 6.385249E-01 4.166573E-05 2.660461E-05
+ 35 30 5.285136E-01 6.821957E-03 3.605497E-03
+ 35 31 5.652598E-01 1.222301E-04 6.909173E-05
+ 35 32 4.601627E-01 6.702576E-03 3.084276E-03
+ 35 33 4.902964E-01 4.634927E-04 2.272488E-04
+ 35 34 3.975954E-01 6.155648E-03 2.447458E-03
+ 35 35 4.122493E-01 1.478182E-03 6.093794E-04
+ 35 36 3.449316E-01 4.672478E-03 1.611686E-03
+ 35 37 3.551589E-01 3.637606E-03 1.291928E-03
+ 35 38 2.945655E-01 2.052655E-03 6.046416E-04
+ 35 39 3.132651E-01 6.423240E-03 2.012177E-03
+ 35 40 2.367222E-02 1.404653E-05 3.325125E-07
+ 35 41 2.773036E-01 6.617209E-03 1.834976E-03
+ 35 42 2.973004E-01 2.569395E-03 7.638822E-04
+ 35 43 2.362604E-01 1.694210E-03 4.002747E-04
+ 35 44 2.608601E-01 6.990910E-03 1.823650E-03
+ 35 45 2.883970E-01 1.496062E-03 4.314597E-04
+ 35 46 2.220610E-01 1.526108E-03 3.388890E-04
+ 36 0 3.595236E+00 9.559969E-06 3.437035E-05
+ 36 1 4.500390E+00 2.676231E-05 1.204408E-04
+ 36 2 1.982269E-01 3.218294E-03 6.379523E-04
+ 36 3 6.244877E-01 2.299669E-02 1.436115E-02
+ 36 4 8.038456E-01 3.889888E-02 3.126870E-02
+ 36 5 6.067103E-01 9.439102E-03 5.726800E-03
+ 36 6 2.339170E+00 3.888926E-03 9.096859E-03
+ 36 7 1.587569E+00 5.755404E-03 9.137103E-03
+ 36 8 1.630400E+00 2.962811E-03 4.830567E-03
+ 36 9 1.473516E+00 7.881510E-03 1.161353E-02
+ 36 10 1.799491E+00 1.258321E-03 2.264337E-03
+ 36 11 1.521625E+00 6.614113E-03 1.006420E-02
+ 36 12 1.487577E+00 1.273050E-03 1.893761E-03
+ 36 13 1.374348E+00 6.157681E-03 8.462795E-03
+ 36 14 1.468334E+00 1.414370E-03 2.076768E-03
+ 36 15 1.287227E+00 5.311594E-03 6.837224E-03
+ 36 16 1.349969E+00 1.875670E-03 2.532097E-03
+ 36 17 1.190439E+00 4.552903E-03 5.419953E-03
+ 36 18 1.215321E+00 2.426620E-03 2.949122E-03
+ 36 19 1.091133E+00 3.749975E-03 4.091723E-03
+ 36 20 1.065614E+00 3.041704E-03 3.241283E-03
+ 36 21 9.714149E-01 3.037557E-03 2.950729E-03
+ 36 22 9.362584E-01 3.597369E-03 3.368067E-03
+ 36 23 8.517038E-01 2.453851E-03 2.089954E-03
+ 36 24 8.248372E-01 4.037513E-03 3.330291E-03
+ 36 25 7.521435E-01 2.062341E-03 1.551177E-03
+ 36 26 7.190020E-01 4.300397E-03 3.091994E-03
+ 36 27 6.684293E-01 1.896045E-03 1.267372E-03
+ 36 28 6.177545E-01 4.344214E-03 2.683657E-03
+ 36 29 5.849289E-01 2.005221E-03 1.172912E-03
+ 36 30 5.332364E-01 4.095884E-03 2.184074E-03
+ 36 31 5.135857E-01 2.474981E-03 1.271115E-03
+ 36 32 4.603433E-01 3.440807E-03 1.583952E-03
+ 36 33 4.534929E-01 3.428435E-03 1.554771E-03
+ 36 34 3.896608E-01 2.269651E-03 8.843938E-04
+ 36 35 3.952325E-01 4.878507E-03 1.928145E-03
+ 36 36 3.177445E-01 7.655603E-04 2.432526E-04
+ 36 37 3.464765E-01 6.265983E-03 2.171016E-03
+ 36 38 7.594291E-01 1.684610E-05 1.279342E-05
+ 36 39 3.061436E-01 5.888469E-03 1.802717E-03
+ 36 40 3.267305E-01 2.027386E-03 6.624087E-04
+ 36 41 2.621461E-01 2.326912E-03 6.099910E-04
+ 36 42 2.815954E-01 5.971189E-03 1.681459E-03
+ 36 43 3.890824E-01 1.601789E-04 6.232278E-05
+ 36 44 2.498536E-01 4.046723E-03 1.011089E-03
+ 36 45 2.646058E-01 5.248130E-03 1.388686E-03
+ 37 0 2.294155E+00 1.000198E-05 2.294608E-05
+ 37 1 7.087519E+01 2.015548E-06 1.428524E-04
+ 37 2 1.054900E-01 1.854888E-03 1.956721E-04
+ 37 3 5.680240E-01 1.717866E-02 9.757893E-03
+ 37 4 7.838831E-01 3.616512E-02 2.834923E-02
+ 37 5 6.924728E-01 1.385609E-02 9.594963E-03
+ 37 6 3.282129E+00 1.452604E-03 4.767633E-03
+ 37 7 1.651331E+00 6.907452E-03 1.140649E-02
+ 37 8 1.691230E+00 9.115937E-04 1.541714E-03
+ 37 9 1.496186E+00 8.692206E-03 1.300516E-02
+ 37 10 2.761508E+00 8.665469E-05 2.392976E-04
+ 37 11 1.545584E+00 7.047920E-03 1.089316E-02
+ 37 12 1.575737E+00 8.320505E-05 1.311093E-04
+ 37 13 1.395420E+00 6.731950E-03 9.393897E-03
+ 37 14 1.816353E+00 1.048148E-04 1.903807E-04
+ 37 15 1.315050E+00 6.144870E-03 8.080811E-03
+ 37 16 1.536727E+00 2.409660E-04 3.702990E-04
+ 37 17 1.217715E+00 5.751343E-03 7.003499E-03
+ 37 18 1.313665E+00 4.524103E-04 5.943158E-04
+ 37 19 1.113932E+00 5.295585E-03 5.898919E-03
+ 37 20 1.106935E+00 7.448091E-04 8.244555E-04
+ 37 21 9.914601E-01 4.880540E-03 4.838861E-03
+ 37 22 9.638221E-01 1.049164E-03 1.011207E-03
+ 37 23 8.723045E-01 4.513737E-03 3.937353E-03
+ 37 24 8.490569E-01 1.306053E-03 1.108913E-03
+ 37 25 7.693073E-01 4.275449E-03 3.289134E-03
+ 37 26 7.359914E-01 1.436900E-03 1.057546E-03
+ 37 27 6.775474E-01 4.220063E-03 2.859293E-03
+ 37 28 6.245110E-01 1.378565E-03 8.609289E-04
+ 37 29 5.892500E-01 4.404523E-03 2.595365E-03
+ 37 30 5.330836E-01 1.083495E-03 5.775936E-04
+ 37 31 5.140696E-01 4.841954E-03 2.489101E-03
+ 37 32 4.472278E-01 5.752337E-04 2.572605E-04
+ 37 33 4.507705E-01 5.429059E-03 2.447259E-03
+ 37 34 2.900735E-01 7.441133E-05 2.158476E-05
+ 37 35 3.917895E-01 5.757686E-03 2.255801E-03
+ 37 36 4.644021E-01 2.101155E-04 9.757807E-05
+ 37 37 3.416315E-01 4.964327E-03 1.695971E-03
+ 37 38 3.565750E-01 1.927933E-03 6.874525E-04
+ 37 39 2.949411E-01 2.372131E-03 6.996389E-04
+ 37 40 3.103980E-01 4.937508E-03 1.532592E-03
+ 37 41 4.070307E-02 1.559974E-05 6.349570E-07
+ 37 42 2.735246E-01 5.111918E-03 1.398236E-03
+ 37 43 2.903284E-01 2.751566E-03 7.988578E-04
+ 37 44 2.131736E-01 5.247907E-04 1.118715E-04
+ 37 45 2.553110E-01 5.174851E-03 1.321196E-03
+ 37 46 2.706420E-01 2.961112E-03 8.014011E-04
+ 38 0 1.554711E+00 9.320687E-06 1.449098E-05
+ 38 1 1.188308E+02 1.209054E-06 1.436729E-04
+ 38 2 3.137094E-02 1.028867E-03 3.227653E-05
+ 38 3 5.107355E-01 1.250202E-02 6.385227E-03
+ 38 4 7.606523E-01 3.200197E-02 2.434237E-02
+ 38 5 7.372349E-01 1.713931E-02 1.263570E-02
+ 38 6 8.502562E+00 2.203461E-04 1.873506E-03
+ 38 7 1.719414E+00 6.946766E-03 1.194436E-02
+ 38 8 1.950088E+00 7.382659E-05 1.439683E-04
+ 38 9 1.512463E+00 8.159361E-03 1.234073E-02
+ 38 10 8.824924E-01 1.728331E-04 1.525239E-04
+ 38 11 1.571139E+00 6.212841E-03 9.761237E-03
+ 38 12 1.426744E+00 1.808912E-04 2.580854E-04
+ 38 13 1.411594E+00 5.942356E-03 8.388194E-03
+ 38 14 1.083087E+00 1.772288E-04 1.919542E-04
+ 38 15 1.338626E+00 5.533009E-03 7.406630E-03
+ 38 16 9.043924E-01 8.135535E-05 7.357716E-05
+ 38 17 1.240417E+00 5.417640E-03 6.720133E-03
+ 38 18 6.122928E-01 1.898676E-05 1.162546E-05
+ 38 19 1.133411E+00 5.274572E-03 5.978256E-03
+ 38 20 3.865685E+00 5.067019E-07 1.958750E-06
+ 38 21 1.007741E+00 5.168766E-03 5.208775E-03
+ 38 22 1.142306E+00 2.440923E-05 2.788280E-05
+ 38 23 8.877903E-01 5.060072E-03 4.492282E-03
+ 38 24 9.548085E-01 6.142139E-05 5.864567E-05
+ 38 25 7.827428E-01 4.995525E-03 3.910212E-03
+ 38 26 7.928107E-01 7.417378E-05 5.880576E-05
+ 38 27 6.870226E-01 4.989368E-03 3.427809E-03
+ 38 28 6.102044E-01 4.324141E-05 2.638610E-05
+ 38 29 5.954315E-01 5.040761E-03 3.001428E-03
+ 38 30 1.362534E-01 6.938723E-07 9.454246E-08
+ 38 31 5.174301E-01 5.061681E-03 2.619066E-03
+ 38 32 5.607680E-01 9.113089E-05 5.110328E-05
+ 38 33 4.512364E-01 4.820805E-03 2.175323E-03
+ 38 34 4.677949E-01 6.352038E-04 2.971451E-04
+ 38 35 3.889264E-01 3.910581E-03 1.520928E-03
+ 38 36 3.965246E-01 2.046549E-03 8.115070E-04
+ 38 37 3.322190E-01 2.051348E-03 6.814968E-04
+ 38 38 3.441112E-01 4.180167E-03 1.438442E-03
+ 38 39 2.281539E-01 1.593013E-04 3.634520E-05
+ 38 40 3.040073E-01 5.037434E-03 1.531416E-03
+ 38 41 3.314778E-01 1.096184E-03 3.633606E-04
+ 38 42 2.609229E-01 2.068031E-03 5.395968E-04
+ 38 43 2.789149E-01 4.697183E-03 1.310114E-03
+ 38 44 3.423369E-01 2.955686E-04 1.011841E-04
+ 38 45 2.435492E-01 2.325414E-03 5.663527E-04
+ 38 46 2.594637E-01 4.555721E-03 1.182044E-03
+ 39 0 1.083324E+00 8.051690E-06 8.722587E-06
+ 39 1 1.809703E+01 7.196665E-06 1.302382E-04
+ 39 2 4.071199E-05 5.490680E-04 2.235365E-08
+ 39 3 4.541491E-01 8.902643E-03 4.043128E-03
+ 39 4 7.358999E-01 2.715867E-02 1.998606E-02
+ 39 5 7.605995E-01 1.883805E-02 1.432821E-02
+ 39 6 1.353417E+01 3.039526E-05 4.113745E-04
+ 39 7 1.797861E+00 6.147430E-03 1.105222E-02
+ 39 8 1.354117E+00 7.791699E-05 1.055087E-04
+ 39 9 1.524761E+00 6.793945E-03 1.035914E-02
+ 39 10 1.245787E+00 9.192290E-04 1.145164E-03
+ 39 11 1.600363E+00 4.732042E-03 7.572984E-03
+ 39 12 1.475885E+00 9.186143E-04 1.355769E-03
+ 39 13 1.424790E+00 4.457636E-03 6.351195E-03
+ 39 14 1.264174E+00 9.564107E-04 1.209069E-03
+ 39 15 1.361371E+00 4.134685E-03 5.628840E-03
+ 39 16 1.175582E+00 7.648593E-04 8.991551E-04
+ 39 17 1.262027E+00 4.142153E-03 5.227507E-03
+ 39 18 1.085927E+00 5.895500E-04 6.402080E-04
+ 39 19 1.152159E+00 4.153212E-03 4.785159E-03
+ 39 20 1.017737E+00 4.199815E-04 4.274308E-04
+ 39 21 1.022515E+00 4.204795E-03 4.299465E-03
+ 39 22 9.091449E-01 3.059592E-04 2.781613E-04
+ 39 23 9.012889E-01 4.223993E-03 3.807038E-03
+ 39 24 7.911378E-01 2.465415E-04 1.950483E-04
+ 39 25 7.948071E-01 4.217718E-03 3.352272E-03
+ 39 26 7.115686E-01 2.528100E-04 1.798916E-04
+ 39 27 6.962416E-01 4.155297E-03 2.893091E-03
+ 39 28 6.553940E-01 3.495718E-04 2.291073E-04
+ 39 29 6.014257E-01 3.989884E-03 2.399619E-03
+ 39 30 5.781598E-01 6.125699E-04 3.541633E-04
+ 39 31 5.206573E-01 3.605295E-03 1.877123E-03
+ 39 32 5.067557E-01 1.183838E-03 5.999164E-04
+ 39 33 4.511028E-01 2.830710E-03 1.276941E-03
+ 39 34 4.466020E-01 2.224882E-03 9.936371E-04
+ 39 35 3.812595E-01 1.570088E-03 5.986110E-04
+ 39 36 3.883065E-01 3.640719E-03 1.413715E-03
+ 39 37 2.884197E-01 2.521849E-04 7.273509E-05
+ 39 38 3.395113E-01 4.493874E-03 1.525721E-03
+ 39 39 3.879231E-01 3.488341E-04 1.353208E-04
+ 39 40 2.975102E-01 3.049216E-03 9.071730E-04
+ 39 41 3.109047E-01 2.967455E-03 9.225956E-04
+ 39 42 2.042462E-01 1.941001E-04 3.964420E-05
+ 39 43 2.722695E-01 4.101280E-03 1.116654E-03
+ 39 44 2.893445E-01 1.959039E-03 5.668370E-04
+ 39 45 2.018056E-01 2.866263E-04 5.784278E-05
+ 39 46 2.518442E-01 3.542655E-03 8.921973E-04
+ 40 0 7.651532E-01 6.581893E-06 5.036156E-06
+ 40 1 8.617739E+00 1.272848E-05 1.096907E-04
+ 40 2 5.599040E-02 2.818477E-04 1.578076E-05
+ 40 3 4.000225E-01 6.220942E-03 2.488517E-03
+ 40 4 7.111086E-01 2.219707E-02 1.578453E-02
+ 40 5 7.719154E-01 1.889161E-02 1.458272E-02
+ 40 6 4.400877E-03 4.710489E-04 2.073028E-06
+ 40 7 1.890354E+00 4.922093E-03 9.304499E-03
+ 40 8 1.544733E+00 4.592432E-04 7.094081E-04
+ 40 9 1.534050E+00 5.147544E-03 7.896592E-03
+ 40 10 1.341206E+00 1.742112E-03 2.336531E-03
+ 40 11 1.635415E+00 3.192018E-03 5.220273E-03
+ 40 12 1.496087E+00 1.686236E-03 2.522757E-03
+ 40 13 1.435783E+00 2.921164E-03 4.194156E-03
+ 40 14 1.312703E+00 1.770053E-03 2.323555E-03
+ 40 15 1.385550E+00 2.646263E-03 3.666529E-03
+ 40 16 1.231108E+00 1.567509E-03 1.929772E-03
+ 40 17 1.284597E+00 2.674223E-03 3.435300E-03
+ 40 18 1.140748E+00 1.392878E-03 1.588923E-03
+ 40 19 1.171682E+00 2.717764E-03 3.184355E-03
+ 40 20 1.056898E+00 1.203548E-03 1.272028E-03
+ 40 21 1.036722E+00 2.797527E-03 2.900256E-03
+ 40 22 9.439810E-01 1.075201E-03 1.014969E-03
+ 40 23 9.138103E-01 2.833030E-03 2.588852E-03
+ 40 24 8.297344E-01 1.017893E-03 8.445811E-04
+ 40 25 8.062578E-01 2.808191E-03 2.264126E-03
+ 40 26 7.364646E-01 1.068811E-03 7.871412E-04
+ 40 27 7.051821E-01 2.674241E-03 1.885827E-03
+ 40 28 6.575561E-01 1.265246E-03 8.319700E-04
+ 40 29 6.065720E-01 2.380334E-03 1.443844E-03
+ 40 30 5.756364E-01 1.669643E-03 9.611074E-04
+ 40 31 5.224034E-01 1.855266E-03 9.691974E-04
+ 40 32 5.036560E-01 2.335372E-03 1.176224E-03
+ 40 33 4.471876E-01 1.077372E-03 4.817873E-04
+ 40 34 4.430321E-01 3.200294E-03 1.417833E-03
+ 40 35 3.481478E-01 2.509680E-04 8.737396E-05
+ 40 36 3.855378E-01 3.829414E-03 1.476384E-03
+ 40 37 4.934214E-01 8.431647E-05 4.160355E-05
+ 40 38 3.356878E-01 3.264927E-03 1.095996E-03
+ 40 39 3.491969E-01 1.528432E-03 5.337238E-04
+ 40 40 2.848360E-01 1.093069E-03 3.113456E-04
+ 40 41 3.041704E-01 3.640625E-03 1.107370E-03
+ 40 42 3.867505E-01 1.608981E-04 6.222740E-05
+ 40 43 2.645368E-01 2.287281E-03 6.050700E-04
+ 40 44 2.790158E-01 3.096560E-03 8.639892E-04
+ 40 45 3.779784E-01 1.053265E-04 3.981114E-05
+ 40 46 2.417980E-01 1.656191E-03 4.004637E-04
+ 41 0 5.459883E-01 5.138292E-06 2.805447E-06
+ 41 1 5.621376E+00 1.549863E-05 8.712363E-05
+ 41 2 2.762871E-01 1.392421E-04 3.847080E-05
+ 41 3 3.502864E-01 4.266956E-03 1.494657E-03
+ 41 4 6.876132E-01 1.747199E-02 1.201397E-02
+ 41 5 7.763037E-01 1.749452E-02 1.358106E-02
+ 41 6 1.435439E-01 1.091868E-03 1.567311E-04
+ 41 7 1.998321E+00 3.629140E-03 7.252186E-03
+ 41 8 1.601137E+00 8.546279E-04 1.368376E-03
+ 41 9 1.540735E+00 3.611071E-03 5.563705E-03
+ 41 10 1.385090E+00 2.273077E-03 3.148417E-03
+ 41 11 1.678671E+00 1.938248E-03 3.253680E-03
+ 41 12 1.510437E+00 2.133621E-03 3.222700E-03
+ 41 13 1.444898E+00 1.701035E-03 2.457821E-03
+ 41 14 1.337122E+00 2.233699E-03 2.986728E-03
+ 41 15 1.413486E+00 1.475156E-03 2.085113E-03
+ 41 16 1.258553E+00 2.051121E-03 2.581445E-03
+ 41 17 1.310162E+00 1.487954E-03 1.949462E-03
+ 41 18 1.166277E+00 1.919083E-03 2.238181E-03
+ 41 19 1.193570E+00 1.515109E-03 1.808388E-03
+ 41 20 1.075365E+00 1.766834E-03 1.899991E-03
+ 41 21 1.051144E+00 1.568915E-03 1.649156E-03
+ 41 22 9.594834E-01 1.673953E-03 1.606130E-03
+ 41 23 9.260345E-01 1.580770E-03 1.463848E-03
+ 41 24 8.450694E-01 1.646775E-03 1.391639E-03
+ 41 25 8.177165E-01 1.530208E-03 1.251276E-03
+ 41 26 7.477541E-01 1.724771E-03 1.289704E-03
+ 41 27 7.140971E-01 1.375538E-03 9.822674E-04
+ 41 28 6.624501E-01 1.932337E-03 1.280077E-03
+ 41 29 6.103105E-01 1.089011E-03 6.646350E-04
+ 41 30 5.779545E-01 2.291869E-03 1.324596E-03
+ 41 31 5.205807E-01 6.642723E-04 3.458073E-04
+ 41 32 5.044914E-01 2.765739E-03 1.395291E-03
+ 41 33 4.276264E-01 1.973758E-04 8.440311E-05
+ 41 34 4.424555E-01 3.158694E-03 1.397582E-03
+ 41 35 7.334844E-01 1.151408E-05 8.445397E-06
+ 41 36 3.837290E-01 2.996111E-03 1.149694E-03
+ 41 37 4.020380E-01 6.764957E-04 2.719770E-04
+ 41 38 3.302411E-01 1.761369E-03 5.816765E-04
+ 41 39 3.407236E-01 2.320908E-03 7.907880E-04
+ 41 40 2.392461E-01 1.490812E-04 3.566709E-05
+ 41 41 2.999889E-01 3.070681E-03 9.211703E-04
+ 41 42 3.224522E-01 8.917564E-04 2.875488E-04
+ 41 43 2.505437E-01 8.160364E-04 2.044527E-04
+ 41 44 2.736232E-01 2.999824E-03 8.208213E-04
+ 41 45 2.974130E-01 7.876667E-04 2.342623E-04
+ 41 46 2.194976E-01 4.117024E-04 9.036770E-05
+ 42 0 3.959783E-01 3.826953E-06 1.515390E-06
+ 42 1 4.255559E+00 1.538153E-05 6.545703E-05
+ 42 2 7.771424E-01 6.635047E-05 5.156376E-05
+ 42 3 3.069028E-01 2.858794E-03 8.773718E-04
+ 42 4 6.666325E-01 1.316057E-02 8.773265E-03
+ 42 5 7.768749E-01 1.496505E-02 1.162597E-02
+ 42 6 2.961693E-01 1.542512E-03 4.568448E-04
+ 42 7 2.119386E+00 2.489762E-03 5.276765E-03
+ 42 8 1.634969E+00 1.065135E-03 1.741463E-03
+ 42 9 1.545050E+00 2.371767E-03 3.664498E-03
+ 42 10 1.409669E+00 2.378979E-03 3.353574E-03
+ 42 11 1.732177E+00 1.073238E-03 1.859038E-03
+ 42 12 1.521832E+00 2.168858E-03 3.300638E-03
+ 42 13 1.452252E+00 8.917367E-04 1.295026E-03
+ 42 14 1.352120E+00 2.255524E-03 3.049739E-03
+ 42 15 1.447954E+00 7.238903E-04 1.048160E-03
+ 42 16 1.275906E+00 2.099410E-03 2.678650E-03
+ 42 17 1.341203E+00 7.221995E-04 9.686159E-04
+ 42 18 1.182288E+00 2.009901E-03 2.376282E-03
+ 42 19 1.219899E+00 7.295887E-04 8.900246E-04
+ 42 20 1.087614E+00 1.902134E-03 2.068787E-03
+ 42 21 1.066732E+00 7.538814E-04 8.041891E-04
+ 42 22 9.697509E-01 1.845717E-03 1.789886E-03
+ 42 23 9.387306E-01 7.465824E-04 7.008397E-04
+ 42 24 8.549000E-01 1.838092E-03 1.571384E-03
+ 42 25 8.300566E-01 6.926771E-04 5.749612E-04
+ 42 26 7.555627E-01 1.908640E-03 1.442097E-03
+ 42 27 7.236470E-01 5.675063E-04 4.106742E-04
+ 42 28 6.670925E-01 2.062580E-03 1.375932E-03
+ 42 29 6.116705E-01 3.687272E-04 2.255395E-04
+ 42 30 5.807920E-01 2.288268E-03 1.329007E-03
+ 42 31 5.076403E-01 1.335779E-04 6.780952E-05
+ 42 32 5.059882E-01 2.501385E-03 1.265671E-03
+ 42 33 2.577183E+02 6.625476E-10 1.707506E-07
+ 42 34 4.425221E-01 2.489350E-03 1.101593E-03
+ 42 35 4.673328E-01 2.532217E-04 1.183388E-04
+ 42 36 3.816394E-01 1.917716E-03 7.318758E-04
+ 42 37 3.890726E-01 1.176074E-03 4.575780E-04
+ 42 38 3.206959E-01 7.230350E-04 2.318743E-04
+ 42 39 3.370442E-01 2.350986E-03 7.923862E-04
+ 42 40 6.594450E-01 1.043684E-05 6.882522E-06
+ 42 41 2.962058E-01 2.044371E-03 6.055546E-04
+ 42 42 3.102194E-01 1.409509E-03 4.372571E-04
+ 42 43 2.117733E-01 1.440718E-04 3.051055E-05
+ 42 44 2.694174E-01 2.204259E-03 5.938659E-04
+ 42 45 2.842662E-01 1.307394E-03 3.716480E-04
+ 42 46 8.963103E-02 1.534117E-05 1.375045E-06
+ 43 0 2.963580E-01 2.678492E-06 7.937927E-07
+ 43 1 3.527207E+00 1.303181E-05 4.596589E-05
+ 43 2 1.679585E+00 3.057581E-05 5.135469E-05
+ 43 3 2.716424E-01 1.840995E-03 5.000923E-04
+ 43 4 6.492414E-01 9.313325E-03 6.046596E-03
+ 43 5 7.756494E-01 1.165415E-02 9.039531E-03
+ 43 6 3.899714E-01 1.633154E-03 6.368833E-04
+ 43 7 2.244969E+00 1.589191E-03 3.567685E-03
+ 43 8 1.658970E+00 1.034668E-03 1.716483E-03
+ 43 9 1.547315E+00 1.460290E-03 2.259529E-03
+ 43 10 1.424502E+00 2.091049E-03 2.978703E-03
+ 43 11 1.795751E+00 5.478680E-04 9.838345E-04
+ 43 12 1.530836E+00 1.857996E-03 2.844287E-03
+ 43 13 1.457870E+00 4.261566E-04 6.212808E-04
+ 43 14 1.361920E+00 1.917540E-03 2.611535E-03
+ 43 15 1.491607E+00 3.161273E-04 4.715378E-04
+ 43 16 1.287729E+00 1.791392E-03 2.306828E-03
+ 43 17 1.380293E+00 3.093022E-04 4.269276E-04
+ 43 18 1.193222E+00 1.732942E-03 2.067785E-03
+ 43 19 1.253022E+00 3.071239E-04 3.848331E-04
+ 43 20 1.096357E+00 1.660673E-03 1.820690E-03
+ 43 21 1.084562E+00 3.144717E-04 3.410641E-04
+ 43 22 9.770696E-01 1.627751E-03 1.590426E-03
+ 43 23 9.528327E-01 3.021332E-04 2.878824E-04
+ 43 24 8.618083E-01 1.625222E-03 1.400630E-03
+ 43 25 8.445982E-01 2.621744E-04 2.214320E-04
+ 43 26 7.612838E-01 1.670537E-03 1.271753E-03
+ 43 27 7.352975E-01 1.847512E-04 1.358471E-04
+ 43 28 6.709357E-01 1.756235E-03 1.178321E-03
+ 43 29 6.079100E-01 8.187300E-05 4.977141E-05
+ 43 30 5.832791E-01 1.855726E-03 1.082406E-03
+ 43 31 3.795772E-01 3.507904E-06 1.331521E-06
+ 43 32 5.073507E-01 1.882571E-03 9.551239E-04
+ 43 33 5.312318E-01 7.159326E-05 3.803262E-05
+ 43 34 4.425629E-01 1.673599E-03 7.406730E-04
+ 43 35 4.480530E-01 4.723894E-04 2.116555E-04
+ 43 36 3.788743E-01 1.059257E-03 4.013253E-04
+ 43 37 3.845362E-01 1.262783E-03 4.855858E-04
+ 43 38 3.026113E-01 2.221349E-04 6.722052E-05
+ 43 39 3.348847E-01 1.872441E-03 6.270519E-04
+ 43 40 3.842179E-01 1.465196E-04 5.629547E-05
+ 43 41 2.921980E-01 1.152122E-03 3.366476E-04
+ 43 42 3.051620E-01 1.427639E-03 4.356611E-04
+ 43 43 3.213485E-01 4.864226E-07 1.563111E-07
+ 43 44 2.655035E-01 1.346640E-03 3.575376E-04
+ 43 45 2.787788E-01 1.342074E-03 3.741418E-04
+ 43 46 3.919003E-01 4.001613E-05 1.568233E-05
+ 44 0 2.342113E-01 1.685661E-06 3.948008E-07
+ 44 1 3.120773E+00 9.273852E-06 2.894158E-05
+ 44 2 2.967269E+00 1.349894E-05 4.005498E-05
+ 44 3 2.458240E-01 1.090853E-03 2.681579E-04
+ 44 4 6.362916E-01 5.913373E-03 3.762629E-03
+ 44 5 7.739629E-01 7.909406E-03 6.121587E-03
+ 44 6 4.446544E-01 1.338101E-03 5.949924E-04
+ 44 7 2.358912E+00 9.192490E-04 2.168427E-03
+ 44 8 1.675808E+00 7.993071E-04 1.339486E-03
+ 44 9 1.548084E+00 8.221421E-04 1.272745E-03
+ 44 10 1.433413E+00 1.522896E-03 2.182939E-03
+ 44 11 1.863164E+00 2.574828E-04 4.797326E-04
+ 44 12 1.537432E+00 1.326206E-03 2.038951E-03
+ 44 13 1.461766E+00 1.867106E-04 2.729273E-04
+ 44 14 1.368182E+00 1.359550E-03 1.860111E-03
+ 44 15 1.543820E+00 1.243662E-04 1.919990E-04
+ 44 16 1.295601E+00 1.269592E-03 1.644884E-03
+ 44 17 1.427403E+00 1.185340E-04 1.691957E-04
+ 44 18 1.200528E+00 1.233494E-03 1.480843E-03
+ 44 19 1.293383E+00 1.147776E-04 1.484513E-04
+ 44 20 1.102375E+00 1.188382E-03 1.310042E-03
+ 44 21 1.104900E+00 1.158015E-04 1.279491E-04
+ 44 22 9.820859E-01 1.169278E-03 1.148331E-03
+ 44 23 9.688266E-01 1.065796E-04 1.032572E-04
+ 44 24 8.665069E-01 1.166236E-03 1.010552E-03
+ 44 25 8.626543E-01 8.403719E-05 7.249504E-05
+ 44 26 7.652681E-01 1.187867E-03 9.090369E-04
+ 44 27 7.518539E-01 4.647681E-05 3.494377E-05
+ 44 28 6.737693E-01 1.223477E-03 8.243414E-04
+ 44 29 5.856208E-01 8.180344E-06 4.790580E-06
+ 44 30 5.851324E-01 1.248040E-03 7.302687E-04
+ 44 31 6.335928E-01 1.018548E-05 6.453448E-06
+ 44 32 5.083380E-01 1.198008E-03 6.089929E-04
+ 44 33 5.089673E-01 1.344148E-04 6.841274E-05
+ 44 34 4.424354E-01 9.744405E-04 4.311270E-04
+ 44 35 4.421881E-01 4.774168E-04 2.111081E-04
+ 44 36 3.756505E-01 5.174606E-04 1.943843E-04
+ 44 37 3.825209E-01 9.953034E-04 3.807244E-04
+ 44 38 2.671684E-01 4.888876E-05 1.306153E-05
+ 44 39 3.334432E-01 1.225180E-03 4.085279E-04
+ 44 40 3.600881E-01 2.227929E-04 8.022509E-05
+ 44 41 2.881078E-01 5.680095E-04 1.636480E-04
+ 44 42 3.025487E-01 1.080118E-03 3.267883E-04
+ 44 43 4.320039E-01 2.518243E-05 1.087891E-05
+ 44 44 2.618921E-01 7.102401E-04 1.860062E-04
+ 44 45 2.758638E-01 1.017743E-03 2.807585E-04
+ 44 46 3.210479E-01 1.113010E-04 3.573296E-05
+ 45 0 2.002915E-01 8.362737E-07 1.674985E-07
+ 45 1 2.909679E+00 4.932308E-06 1.435143E-05
+ 45 2 4.266968E+00 5.239109E-06 2.235511E-05
+ 45 3 2.300449E-01 5.216528E-04 1.200036E-04
+ 45 4 6.282741E-01 2.950458E-03 1.853697E-03
+ 45 5 7.726419E-01 4.105444E-03 3.172038E-03
+ 45 6 4.734392E-01 7.704338E-04 3.647536E-04
+ 45 7 2.440743E+00 4.296496E-04 1.048664E-03
+ 45 8 1.686021E+00 4.443925E-04 7.492550E-04
+ 45 9 1.548091E+00 3.778106E-04 5.848850E-04
+ 45 10 1.438235E+00 8.201975E-04 1.179637E-03
+ 45 11 1.919051E+00 1.031709E-04 1.979904E-04
+ 45 12 1.541504E+00 7.051038E-04 1.086920E-03
+ 45 13 1.464034E+00 7.057344E-05 1.033219E-04
+ 45 14 1.371717E+00 7.195474E-04 9.870152E-04
+ 45 15 1.593760E+00 4.257145E-05 6.784866E-05
+ 45 16 1.300188E+00 6.710250E-04 8.724585E-04
+ 45 17 1.473251E+00 3.953002E-05 5.823765E-05
+ 45 18 1.204794E+00 6.529420E-04 7.866605E-04
+ 45 19 1.333448E+00 3.728385E-05 4.971608E-05
+ 45 20 1.105952E+00 6.303077E-04 6.970900E-04
+ 45 21 1.124417E+00 3.701627E-05 4.162172E-05
+ 45 22 9.850554E-01 6.208778E-04 6.115990E-04
+ 45 23 9.844772E-01 3.253311E-05 3.202810E-05
+ 45 24 8.692766E-01 6.182225E-04 5.374063E-04
+ 45 25 8.824546E-01 2.301044E-05 2.030567E-05
+ 45 26 7.676479E-01 6.257372E-04 4.803459E-04
+ 45 27 7.755009E-01 9.138287E-06 7.086749E-06
+ 45 28 6.755103E-01 6.362002E-04 4.297598E-04
+ 45 29 6.194594E-02 9.735769E-09 6.030914E-10
+ 45 30 5.862665E-01 6.348883E-04 3.722138E-04
+ 45 31 5.925949E-01 1.839029E-05 1.089799E-05
+ 45 32 5.089148E-01 5.884612E-04 2.994766E-04
+ 45 33 5.033205E-01 1.049137E-04 5.280523E-05
+ 45 34 4.422378E-01 4.512515E-04 1.995605E-04
+ 45 35 4.399708E-01 2.983330E-04 1.312578E-04
+ 45 36 3.728302E-01 2.106797E-04 7.854777E-05
+ 45 37 3.815928E-01 5.510033E-04 2.102589E-04
+ 45 38 2.046203E-01 7.553867E-06 1.545674E-06
+ 45 39 3.325491E-01 6.093043E-04 2.026236E-04
+ 45 40 3.526165E-01 1.622128E-04 5.719893E-05
+ 45 41 2.847666E-01 2.320440E-04 6.607837E-05
+ 45 42 3.011979E-01 5.829038E-04 1.755694E-04
+ 45 43 3.693888E-01 3.527160E-05 1.302894E-05
+ 45 44 2.591451E-01 3.046128E-04 7.893892E-05
+ 45 45 2.743219E-01 5.487583E-04 1.505364E-04
+ 45 46 3.063065E-01 9.525662E-05 2.917772E-05
+ 46 0 1.876307E-01 1.634504E-07 3.066831E-08
+ 46 1 2.832336E+00 9.899852E-07 2.803971E-06
+ 46 2 4.955405E+00 9.217152E-07 4.567472E-06
+ 46 3 2.237820E-01 1.004764E-04 2.248481E-05
+ 46 4 6.250679E-01 5.779923E-04 3.612844E-04
+ 46 5 7.720605E-01 8.167861E-04 6.306083E-04
+ 46 6 4.840230E-01 1.593942E-04 7.715043E-05
+ 46 7 2.476338E+00 8.185418E-05 2.026986E-04
+ 46 8 1.690081E+00 9.068372E-05 1.532628E-04
+ 46 9 1.547980E+00 7.148872E-05 1.106631E-04
+ 46 10 1.440038E+00 1.653945E-04 2.381743E-04
+ 46 11 1.945725E+00 1.835231E-05 3.570855E-05
+ 46 12 1.543135E+00 1.414394E-04 2.182600E-04
+ 46 13 1.464907E+00 1.220783E-05 1.788333E-05
+ 46 14 1.373066E+00 1.440626E-04 1.978075E-04
+ 46 15 1.620328E+00 6.999252E-06 1.134109E-05
+ 46 16 1.301972E+00 1.342461E-04 1.747847E-04
+ 46 17 1.498026E+00 6.408594E-06 9.600237E-06
+ 46 18 1.206456E+00 1.306796E-04 1.576592E-04
+ 46 19 1.355497E+00 5.956919E-06 8.074587E-06
+ 46 20 1.107357E+00 1.262180E-04 1.397684E-04
+ 46 21 1.135035E+00 5.860563E-06 6.651944E-06
+ 46 22 9.862175E-01 1.243573E-04 1.226433E-04
+ 46 23 9.932076E-01 5.016570E-06 4.982495E-06
+ 46 24 8.703591E-01 1.237173E-04 1.076785E-04
+ 46 25 8.946148E-01 3.322235E-06 2.972121E-06
+ 46 26 7.685855E-01 1.248887E-04 9.598762E-05
+ 46 27 7.948484E-01 1.036670E-06 8.239956E-07
+ 46 28 6.762034E-01 1.263100E-04 8.541122E-05
+ 46 29 7.623335E-01 8.830407E-08 6.731714E-08
+ 46 30 5.867154E-01 1.249365E-04 7.330217E-05
+ 46 31 5.858014E-01 5.087641E-06 2.980347E-06
+ 46 32 5.091347E-01 1.141566E-04 5.812109E-05
+ 46 33 5.017767E-01 2.390623E-05 1.199559E-05
+ 46 34 4.421262E-01 8.540440E-05 3.775952E-05
+ 46 35 4.392742E-01 6.329682E-05 2.780466E-05
+ 46 36 3.714531E-01 3.765136E-05 1.398571E-05
+ 46 37 3.812698E-01 1.119072E-04 4.266683E-05
+ 46 38 1.469914E-01 6.816319E-07 1.001940E-07
+ 46 39 3.321828E-01 1.186764E-04 3.942226E-05
+ 46 40 3.503762E-01 3.615400E-05 1.266750E-05
+ 46 41 2.831833E-01 4.150478E-05 1.175346E-05
+ 46 42 3.006965E-01 1.171683E-04 3.523210E-05
+ 46 43 3.572196E-01 9.279030E-06 3.314651E-06
+ 46 44 2.578940E-01 5.568025E-05 1.435960E-05
+ 46 45 2.737427E-01 1.102187E-04 3.017157E-05
+ 46 46 3.022939E-01 2.224669E-05 6.725040E-06
+[transition-N2bh]
+1175 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 3.798247E-01 4.919739E-03 1.868638E-03
+ 0 1 3.575159E-01 2.147492E-02 7.677626E-03
+ 0 2 3.329428E-01 4.858369E-02 1.617559E-02
+ 0 3 3.081848E-01 8.004525E-02 2.466873E-02
+ 0 4 2.842363E-01 1.087663E-01 3.091533E-02
+ 0 5 2.609191E-01 1.274059E-01 3.324262E-02
+ 0 6 2.384704E-01 1.321309E-01 3.150931E-02
+ 0 7 2.175640E-01 1.239857E-01 2.697484E-02
+ 0 8 1.983617E-01 1.063891E-01 2.110352E-02
+ 0 9 1.808612E-01 8.400080E-02 1.519249E-02
+ 0 10 1.652855E-01 6.148301E-02 1.016225E-02
+ 0 11 1.514925E-01 4.184671E-02 6.339464E-03
+ 0 12 1.392352E-01 2.650371E-02 3.690249E-03
+ 0 13 1.287051E-01 1.567170E-02 2.017028E-03
+ 0 14 1.197891E-01 8.648531E-03 1.035999E-03
+ 0 15 1.121612E-01 4.444256E-03 4.984731E-04
+ 0 16 1.059328E-01 2.131413E-03 2.257866E-04
+ 0 17 1.006710E-01 9.501597E-04 9.565349E-05
+ 0 18 9.627129E-02 3.918258E-04 3.772157E-05
+ 0 19 9.360370E-02 1.501245E-04 1.405221E-05
+ 0 20 9.105946E-02 5.270586E-05 4.799367E-06
+ 0 21 8.858312E-02 1.689062E-05 1.496224E-06
+ 0 22 8.934388E-02 5.005601E-06 4.472198E-07
+ 0 23 8.825025E-02 1.295932E-06 1.143663E-07
+ 0 24 8.805058E-02 3.074037E-07 2.706708E-08
+ 0 25 9.128722E-02 6.654852E-08 6.075030E-09
+ 0 26 8.508023E-02 9.976014E-09 8.487616E-10
+ 0 27 1.234296E-01 2.156674E-09 2.661973E-10
+ 0 28 3.225957E-02 1.779556E-10 5.740770E-12
+ 0 29 1.248098E-01 3.841600E-12 4.794694E-13
+ 0 30 4.275837E-01 3.329290E-11 1.423550E-11
+ 0 31 8.384180E-01 1.989160E-11 1.667748E-11
+ 0 32 8.172131E-01 9.548100E-12 7.802833E-12
+ 0 33 2.447958E-01 4.356000E-13 1.066330E-13
+ 0 34 1.241691E+00 2.592100E-12 3.218587E-12
+ 0 35 8.007763E-01 9.363600E-12 7.498149E-12
+ 0 36 5.194354E-01 1.190250E-11 6.182580E-12
+ 0 37 2.876950E-01 8.352100E-12 2.402858E-12
+ 0 38 8.842303E-02 2.958400E-12 2.615907E-13
+ 0 39 6.941331E-01 1.156000E-13 8.024179E-14
+ 0 40 6.747766E-01 8.281000E-13 5.587825E-13
+ 0 41 2.821000E-01 3.240000E-12 9.140041E-13
+ 0 42 2.051021E-01 5.062500E-12 1.038329E-12
+ 0 43 1.949534E-01 5.244100E-12 1.022355E-12
+ 0 44 2.280989E-01 4.040100E-12 9.215422E-13
+ 0 45 3.171327E-01 2.340900E-12 7.423758E-13
+ 0 46 5.280081E-01 9.604000E-13 5.070990E-13
+ 1 0 3.867665E-01 2.032593E-02 7.861391E-03
+ 1 1 3.654173E-01 6.737353E-02 2.461945E-02
+ 1 2 3.410367E-01 1.049529E-01 3.579281E-02
+ 1 3 3.160744E-01 1.070258E-01 3.382810E-02
+ 1 4 2.922925E-01 7.767771E-02 2.270461E-02
+ 1 5 2.689319E-01 3.578157E-02 9.622805E-03
+ 1 6 2.443581E-01 5.669950E-03 1.385498E-03
+ 1 7 2.286433E-01 1.777804E-03 4.064829E-04
+ 1 8 2.060234E-01 2.181565E-02 4.494536E-03
+ 1 9 1.878993E-01 5.317703E-02 9.991926E-03
+ 1 10 1.713859E-01 8.068895E-02 1.382895E-02
+ 1 11 1.567575E-01 9.467963E-02 1.484174E-02
+ 1 12 1.441174E-01 9.323459E-02 1.343672E-02
+ 1 13 1.329517E-01 7.977465E-02 1.060617E-02
+ 1 14 1.233296E-01 6.066290E-02 7.481529E-03
+ 1 15 1.153177E-01 4.157652E-02 4.794510E-03
+ 1 16 1.084443E-01 2.578989E-02 2.796766E-03
+ 1 17 1.028118E-01 1.457056E-02 1.498025E-03
+ 1 18 9.838363E-02 7.520074E-03 7.398522E-04
+ 1 19 9.458375E-02 3.528832E-03 3.337701E-04
+ 1 20 9.201437E-02 1.511987E-03 1.391246E-04
+ 1 21 9.030082E-02 5.886995E-04 5.316004E-05
+ 1 22 8.848616E-02 2.056121E-04 1.819382E-05
+ 1 23 8.889254E-02 6.532034E-05 5.806491E-06
+ 1 24 8.877839E-02 1.826015E-05 1.621107E-06
+ 1 25 8.807625E-02 4.445182E-06 3.915149E-07
+ 1 26 9.476107E-02 1.000120E-06 9.477245E-08
+ 1 27 8.659189E-02 1.634423E-07 1.415278E-08
+ 1 28 1.026906E-01 2.730426E-08 2.803891E-09
+ 1 29 1.158312E-01 3.810593E-09 4.413855E-10
+ 1 30 3.247807E-01 1.664640E-11 5.406430E-12
+ 1 31 3.562157E-01 2.709316E-10 9.651008E-11
+ 1 32 5.706384E-01 6.209440E-11 3.543345E-11
+ 1 33 7.926299E-01 4.536900E-12 3.596083E-12
+ 1 34 3.982445E-01 1.592010E-11 6.340092E-12
+ 1 35 4.742055E-01 6.416010E-11 3.042507E-11
+ 1 36 4.851056E-01 8.519290E-11 4.132755E-11
+ 1 37 4.736918E-01 6.177960E-11 2.926449E-11
+ 1 38 4.407813E-01 2.304000E-11 1.015560E-11
+ 1 39 2.912340E-01 1.276900E-12 3.718767E-13
+ 1 40 5.435210E-01 4.928400E-12 2.678689E-12
+ 1 41 4.630564E-01 2.171560E-11 1.005555E-11
+ 1 42 4.299650E-01 3.528360E-11 1.517071E-11
+ 1 43 4.110065E-01 3.721000E-11 1.529355E-11
+ 1 44 3.969872E-01 2.937640E-11 1.166205E-11
+ 1 45 3.903810E-01 1.764000E-11 6.886321E-12
+ 1 46 3.944566E-01 7.562500E-12 2.983078E-12
+ 2 0 3.936894E-01 4.397705E-02 1.731330E-02
+ 2 1 3.736460E-01 1.058417E-01 3.954731E-02
+ 2 2 3.496900E-01 9.883387E-02 3.456121E-02
+ 2 3 3.243912E-01 4.195246E-02 1.360901E-02
+ 2 4 3.050074E-01 2.931567E-03 8.941496E-04
+ 2 5 2.729891E-01 9.101065E-03 2.484491E-03
+ 2 6 2.533190E-01 4.322370E-02 1.094939E-02
+ 2 7 2.314174E-01 6.632123E-02 1.534789E-02
+ 2 8 2.105422E-01 5.839198E-02 1.229397E-02
+ 2 9 1.917207E-01 2.973694E-02 5.701188E-03
+ 2 10 1.711699E-01 4.648957E-03 7.957616E-04
+ 2 11 1.710087E-01 2.236882E-03 3.825264E-04
+ 2 12 1.506645E-01 2.322897E-02 3.499780E-03
+ 2 13 1.382640E-01 5.445334E-02 7.528937E-03
+ 2 14 1.278572E-01 7.959507E-02 1.017680E-02
+ 2 15 1.188375E-01 8.876554E-02 1.054867E-02
+ 2 16 1.115338E-01 8.198707E-02 9.144332E-03
+ 2 17 1.054138E-01 6.489608E-02 6.840945E-03
+ 2 18 1.002897E-01 4.490294E-02 4.503301E-03
+ 2 19 9.642985E-02 2.757355E-02 2.658914E-03
+ 2 20 9.325878E-02 1.504936E-02 1.403485E-03
+ 2 21 9.093740E-02 7.330284E-03 6.665970E-04
+ 2 22 8.974767E-02 3.197288E-03 2.869492E-04
+ 2 23 8.851931E-02 1.232272E-03 1.090799E-04
+ 2 24 8.867584E-02 4.222778E-04 3.744584E-05
+ 2 25 8.976126E-02 1.272066E-04 1.141822E-05
+ 2 26 8.895548E-02 3.245330E-05 2.886899E-06
+ 2 27 9.444616E-02 7.407814E-06 6.996396E-07
+ 2 28 9.369006E-02 1.312972E-06 1.230124E-07
+ 2 29 9.291841E-02 1.858903E-07 1.727263E-08
+ 2 30 1.321795E-01 2.919314E-08 3.858734E-09
+ 2 31 1.455534E-02 2.637376E-10 3.838789E-12
+ 2 32 3.081091E-01 6.456681E-10 1.989362E-10
+ 2 33 8.081615E-01 1.489960E-11 1.204128E-11
+ 2 34 2.788563E-01 5.083690E-11 1.417619E-11
+ 2 35 3.865600E-01 2.289169E-10 8.849011E-11
+ 2 36 4.406154E-01 3.136441E-10 1.381964E-10
+ 2 37 4.836648E-01 2.374681E-10 1.148550E-10
+ 2 38 5.336894E-01 9.428410E-11 5.031843E-11
+ 2 39 7.228775E-01 7.128900E-12 5.153321E-12
+ 2 40 3.809676E-01 1.482250E-11 5.646892E-12
+ 2 41 4.588335E-01 7.499560E-11 3.441049E-11
+ 2 42 4.747584E-01 1.267876E-10 6.019348E-11
+ 2 43 4.751908E-01 1.378276E-10 6.549440E-11
+ 2 44 4.672568E-01 1.113025E-10 5.200685E-11
+ 2 45 4.535147E-01 6.872410E-11 3.116739E-11
+ 2 46 4.321330E-01 3.091360E-11 1.335879E-11
+ 3 0 4.005379E-01 6.714951E-02 2.689593E-02
+ 3 1 3.823070E-01 1.106078E-01 4.228613E-02
+ 3 2 3.595828E-01 4.611071E-02 1.658062E-02
+ 3 3 3.381899E-01 1.431677E-04 4.841787E-05
+ 3 4 3.056803E-01 2.480094E-02 7.581158E-03
+ 3 5 2.825683E-01 5.861071E-02 1.656153E-02
+ 3 6 2.612450E-01 5.197878E-02 1.357920E-02
+ 3 7 2.379321E-01 1.656798E-02 3.942053E-03
+ 3 8 2.564433E-01 1.002263E-04 2.570237E-05
+ 3 9 2.006211E-01 1.909478E-02 3.830815E-03
+ 3 10 1.827211E-01 4.899310E-02 8.952075E-03
+ 3 11 1.667662E-01 5.726252E-02 9.549455E-03
+ 3 12 1.514283E-01 3.683753E-02 5.578246E-03
+ 3 13 1.370141E-01 9.583537E-03 1.313079E-03
+ 3 14 1.548612E-01 3.440009E-04 5.327238E-05
+ 3 15 1.253993E-01 1.747593E-02 2.191469E-03
+ 3 16 1.156278E-01 4.919532E-02 5.688344E-03
+ 3 17 1.085248E-01 7.667871E-02 8.321541E-03
+ 3 18 1.030022E-01 8.726847E-02 8.988842E-03
+ 3 19 9.831925E-02 7.945002E-02 7.811467E-03
+ 3 20 9.486434E-02 6.075318E-02 5.763311E-03
+ 3 21 9.226351E-02 3.981497E-02 3.673469E-03
+ 3 22 9.023530E-02 2.257202E-02 2.036793E-03
+ 3 23 8.936919E-02 1.119462E-02 1.000454E-03
+ 3 24 8.878308E-02 4.822490E-03 4.281555E-04
+ 3 25 8.882942E-02 1.801819E-03 1.600545E-04
+ 3 26 9.046790E-02 5.846095E-04 5.288840E-05
+ 3 27 9.061807E-02 1.581817E-04 1.433412E-05
+ 3 28 9.422739E-02 3.655194E-05 3.444194E-06
+ 3 29 9.821475E-02 6.811369E-06 6.689769E-07
+ 3 30 9.269374E-02 8.926848E-07 8.274630E-08
+ 3 31 1.314104E-01 1.263518E-07 1.660394E-08
+ 3 32 2.906048E-02 2.706080E-09 7.863998E-11
+ 3 33 2.471718E-01 5.230369E-10 1.292800E-10
+ 3 34 3.200277E-01 1.252161E-10 4.007262E-11
+ 3 35 3.881983E-01 5.631129E-10 2.185995E-10
+ 3 36 4.144560E-01 8.288641E-10 3.435277E-10
+ 3 37 4.516095E-01 6.340324E-10 2.863350E-10
+ 3 38 5.003481E-01 2.650384E-10 1.326115E-10
+ 3 39 6.703685E-01 2.683240E-11 1.798760E-11
+ 3 40 3.033833E-01 2.916000E-11 8.846657E-12
+ 3 41 4.132024E-01 1.798281E-10 7.430540E-11
+ 3 42 4.450120E-01 3.193369E-10 1.421088E-10
+ 3 43 4.612117E-01 3.564544E-10 1.644009E-10
+ 3 44 4.702555E-01 2.944656E-10 1.384741E-10
+ 3 45 4.741353E-01 1.874161E-10 8.886060E-11
+ 3 46 4.751898E-01 8.836000E-11 4.198777E-11
+ 4 0 4.072459E-01 8.234228E-02 3.353356E-02
+ 4 1 3.916245E-01 8.554086E-02 3.349989E-02
+ 4 2 3.764381E-01 5.807187E-03 2.186046E-03
+ 4 3 3.411208E-01 2.385368E-02 8.136985E-03
+ 4 4 3.152684E-01 6.065124E-02 1.912142E-02
+ 4 5 2.910613E-01 3.762935E-02 1.095245E-02
+ 4 6 2.750274E-01 2.797731E-03 7.694525E-04
+ 4 7 2.464506E-01 1.144769E-02 2.821289E-03
+ 4 8 2.264200E-01 4.421003E-02 1.001003E-02
+ 4 9 2.048463E-01 4.737089E-02 9.703750E-03
+ 4 10 1.857337E-01 1.937579E-02 3.598737E-03
+ 4 11 1.365240E-01 9.502350E-05 1.297299E-05
+ 4 12 1.622564E-01 1.498947E-02 2.432138E-03
+ 4 13 1.466151E-01 4.436085E-02 6.503969E-03
+ 4 14 1.342723E-01 5.345852E-02 7.177998E-03
+ 4 15 1.240401E-01 3.354371E-02 4.160764E-03
+ 4 16 1.117472E-01 6.839889E-03 7.643383E-04
+ 4 17 1.226397E-01 1.608616E-03 1.972802E-04
+ 4 18 1.069810E-01 2.426544E-02 2.595942E-03
+ 4 19 1.013643E-01 5.891915E-02 5.972301E-03
+ 4 20 9.693090E-02 8.332469E-02 8.076738E-03
+ 4 21 9.369066E-02 8.651177E-02 8.105346E-03
+ 4 22 9.155491E-02 7.167774E-02 6.562449E-03
+ 4 23 8.987288E-02 4.894795E-02 4.399093E-03
+ 4 24 8.919644E-02 2.821260E-02 2.516463E-03
+ 4 25 8.915788E-02 1.379011E-02 1.229497E-03
+ 4 26 8.935408E-02 5.691661E-03 5.085731E-04
+ 4 27 9.113020E-02 1.995515E-03 1.818517E-04
+ 4 28 9.236949E-02 5.756084E-04 5.316865E-05
+ 4 29 9.485279E-02 1.355343E-04 1.285581E-05
+ 4 30 1.010132E-01 2.575664E-05 2.601760E-06
+ 4 31 9.652257E-02 3.272590E-06 3.158787E-07
+ 4 32 1.261125E-01 3.761982E-07 4.744329E-08
+ 4 33 9.430471E-02 1.344904E-08 1.268308E-09
+ 4 34 9.672434E-02 2.143690E-11 2.073470E-12
+ 4 35 4.095545E-01 1.142440E-09 4.678914E-10
+ 4 36 4.297072E-01 1.601600E-09 6.882192E-10
+ 4 37 4.245515E-01 1.396517E-09 5.928933E-10
+ 4 38 4.480359E-01 6.155361E-10 2.757822E-10
+ 4 39 5.625522E-01 7.123360E-11 4.007262E-11
+ 4 40 2.875994E-01 4.515840E-11 1.298753E-11
+ 4 41 3.918639E-01 3.319684E-10 1.300864E-10
+ 4 42 4.186978E-01 6.260004E-10 2.621050E-10
+ 4 43 4.344338E-01 7.295401E-10 3.169369E-10
+ 4 44 4.488562E-01 6.220036E-10 2.791902E-10
+ 4 45 4.642882E-01 4.072324E-10 1.890732E-10
+ 4 46 4.852284E-01 1.993744E-10 9.674212E-11
+ 5 0 4.137389E-01 8.740915E-02 3.616456E-02
+ 5 1 4.021395E-01 5.071249E-02 2.039349E-02
+ 5 2 3.548074E-01 3.077817E-03 1.092032E-03
+ 5 3 3.507621E-01 5.960230E-02 2.090623E-02
+ 5 4 3.247316E-01 4.252606E-02 1.380956E-02
+ 5 5 2.992132E-01 1.279127E-03 3.827315E-04
+ 5 6 2.728808E-01 1.810171E-02 4.939610E-03
+ 5 7 2.539041E-01 4.782245E-02 1.214232E-02
+ 5 8 2.333694E-01 3.144338E-02 7.337924E-03
+ 5 9 2.013886E-01 1.764130E-03 3.552757E-04
+ 5 10 1.979893E-01 1.147496E-02 2.271919E-03
+ 5 11 1.782586E-01 4.068623E-02 7.252672E-03
+ 5 12 1.631171E-01 4.206906E-02 6.862182E-03
+ 5 13 1.464013E-01 1.403479E-02 2.054712E-03
+ 5 14 1.793681E-01 2.628928E-04 4.715460E-05
+ 5 15 1.313749E-01 2.068646E-02 2.717681E-03
+ 5 16 1.213437E-01 4.841878E-02 5.875314E-03
+ 5 17 1.126935E-01 4.825474E-02 5.437998E-03
+ 5 18 1.043946E-01 2.158246E-02 2.253091E-03
+ 5 19 8.890000E-02 8.081091E-04 7.184090E-05
+ 5 20 1.020960E-01 1.043107E-02 1.064970E-03
+ 5 21 9.640117E-02 4.481965E-02 4.320667E-03
+ 5 22 9.297758E-02 7.805797E-02 7.257641E-03
+ 5 23 9.112175E-02 9.007919E-02 8.208173E-03
+ 5 24 8.979535E-02 7.820299E-02 7.022265E-03
+ 5 25 8.925838E-02 5.409388E-02 4.828332E-03
+ 5 26 8.962295E-02 3.059082E-02 2.741640E-03
+ 5 27 9.013074E-02 1.415573E-02 1.275866E-03
+ 5 28 9.191113E-02 5.399429E-03 4.962677E-04
+ 5 29 9.405369E-02 1.663627E-03 1.564703E-04
+ 5 30 9.619074E-02 4.019572E-04 3.866456E-05
+ 5 31 1.029254E-01 7.619841E-05 7.842755E-06
+ 5 32 1.020978E-01 9.471499E-06 9.670188E-07
+ 5 33 1.204583E-01 8.533325E-07 1.027910E-07
+ 5 34 1.455304E-01 3.865942E-08 5.626123E-09
+ 5 35 7.762793E-01 5.067001E-10 3.933408E-10
+ 5 36 4.107074E-01 3.193380E-09 1.311545E-09
+ 5 37 4.546124E-01 2.227840E-09 1.012804E-09
+ 5 38 4.405981E-01 1.145823E-09 5.048472E-10
+ 5 39 4.368574E-01 2.039184E-10 8.908326E-11
+ 5 40 3.301827E-01 4.678560E-11 1.544780E-11
+ 5 41 3.838965E-01 5.466244E-10 2.098472E-10
+ 5 42 4.047837E-01 1.069290E-09 4.328311E-10
+ 5 43 4.222684E-01 1.251037E-09 5.282734E-10
+ 5 44 4.360787E-01 1.090981E-09 4.757536E-10
+ 5 45 4.494586E-01 7.452900E-10 3.349770E-10
+ 5 46 4.680117E-01 3.888784E-10 1.819997E-10
+ 6 0 4.199397E-01 8.437654E-02 3.543306E-02
+ 6 1 4.154315E-01 2.228658E-02 9.258549E-03
+ 6 2 3.746178E-01 2.383386E-02 8.928590E-03
+ 6 3 3.610893E-01 6.423683E-02 2.319523E-02
+ 6 4 3.358233E-01 8.070970E-03 2.710420E-03
+ 6 5 3.093145E-01 1.490397E-02 4.610015E-03
+ 6 6 2.825872E-01 4.598972E-02 1.299611E-02
+ 6 7 2.624324E-01 2.477451E-02 6.501632E-03
+ 6 8 1.460348E+00 5.917543E-08 8.641670E-08
+ 6 9 2.229270E-01 2.356689E-02 5.253696E-03
+ 6 10 2.012596E-01 4.303298E-02 8.660799E-03
+ 6 11 1.806979E-01 2.027867E-02 3.664313E-03
+ 6 12 7.150346E-02 1.038219E-05 7.423623E-07
+ 6 13 1.586562E-01 1.900272E-02 3.014900E-03
+ 6 14 1.441402E-01 4.345734E-02 6.263950E-03
+ 6 15 1.306027E-01 3.155249E-02 4.120841E-03
+ 6 16 1.166647E-01 4.357747E-03 5.083952E-04
+ 6 17 1.227106E-01 5.861435E-03 7.192601E-04
+ 6 18 1.115883E-01 3.586936E-02 4.002601E-03
+ 6 19 1.039469E-01 5.194454E-02 5.399473E-03
+ 6 20 9.845231E-02 3.322202E-02 3.270785E-03
+ 6 21 9.118197E-02 4.993538E-03 4.553206E-04
+ 6 22 1.001138E-01 4.730087E-03 4.735471E-04
+ 6 23 9.302504E-02 3.765618E-02 3.502967E-03
+ 6 24 9.101522E-02 7.668150E-02 6.979184E-03
+ 6 25 8.997688E-02 9.325221E-02 8.390543E-03
+ 6 26 8.955299E-02 8.131451E-02 7.281957E-03
+ 6 27 9.018829E-02 5.464339E-02 4.928194E-03
+ 6 28 9.107797E-02 2.883844E-02 2.626547E-03
+ 6 29 9.286797E-02 1.207976E-02 1.121823E-03
+ 6 30 9.565537E-02 3.980753E-03 3.807804E-04
+ 6 31 9.805059E-02 9.912259E-04 9.719029E-05
+ 6 32 1.045674E-01 1.848700E-04 1.933137E-05
+ 6 33 1.079658E-01 2.224217E-05 2.401394E-06
+ 6 34 1.172600E-01 1.574297E-06 1.846021E-07
+ 6 35 1.795651E-01 7.617048E-08 1.367756E-08
+ 6 36 6.758326E-01 1.763160E-09 1.191601E-09
+ 6 37 3.884301E-01 5.011224E-09 1.946510E-09
+ 6 38 4.575212E-01 1.842126E-09 8.428118E-10
+ 6 39 5.499909E-01 2.643876E-10 1.454108E-10
+ 6 40 3.555053E-01 3.757690E-11 1.335879E-11
+ 6 41 4.298973E-01 6.451600E-10 2.773525E-10
+ 6 42 4.181021E-01 1.533506E-09 6.411618E-10
+ 6 43 4.138438E-01 1.998090E-09 8.268972E-10
+ 6 44 4.215292E-01 1.797760E-09 7.578083E-10
+ 6 45 4.376692E-01 1.223600E-09 5.355323E-10
+ 6 46 4.595629E-01 6.426225E-10 2.953254E-10
+ 7 0 4.257751E-01 7.662563E-02 3.262529E-02
+ 7 1 4.382526E-01 5.970379E-03 2.616534E-03
+ 7 2 3.852120E-01 4.543724E-02 1.750297E-02
+ 7 3 3.730137E-01 4.182613E-02 1.560172E-02
+ 7 4 3.351662E-01 1.786722E-03 5.988490E-04
+ 7 5 3.188487E-01 4.476540E-02 1.427339E-02
+ 7 6 2.911700E-01 2.940276E-02 8.561201E-03
+ 7 7 3.117017E-01 2.475490E-05 7.716145E-06
+ 7 8 2.464183E-01 2.424030E-02 5.973256E-03
+ 7 9 2.290695E-01 4.024789E-02 9.219565E-03
+ 7 10 2.051133E-01 1.031766E-02 2.116290E-03
+ 7 11 2.015537E-01 3.749779E-03 7.557820E-04
+ 7 12 1.751102E-01 3.215910E-02 5.631386E-03
+ 7 13 1.598654E-01 3.548241E-02 5.672411E-03
+ 7 14 1.429121E-01 7.291476E-03 1.042040E-03
+ 7 15 1.478431E-01 4.517263E-03 6.678462E-04
+ 7 16 1.287775E-01 3.294833E-02 4.243002E-03
+ 7 17 1.185549E-01 4.038731E-02 4.788114E-03
+ 7 18 1.092085E-01 1.388947E-02 1.516848E-03
+ 7 19 1.310480E-01 6.760931E-04 8.860066E-05
+ 7 20 1.038616E-01 2.560780E-02 2.659668E-03
+ 7 21 9.799993E-02 5.111267E-02 5.009038E-03
+ 7 22 9.402917E-02 3.929444E-02 3.694823E-03
+ 7 23 8.794790E-02 7.883186E-03 6.933097E-04
+ 7 24 9.744723E-02 3.451561E-03 3.363451E-04
+ 7 25 9.146278E-02 3.835227E-02 3.507805E-03
+ 7 26 9.044122E-02 8.140391E-02 7.362268E-03
+ 7 27 9.007991E-02 9.719636E-02 8.755439E-03
+ 7 28 9.086727E-02 8.065689E-02 7.329071E-03
+ 7 29 9.214141E-02 4.956393E-02 4.566891E-03
+ 7 30 9.401525E-02 2.306224E-02 2.168203E-03
+ 7 31 9.721667E-02 8.145662E-03 7.918941E-04
+ 7 32 1.002233E-01 2.094713E-03 2.099390E-04
+ 7 33 1.063660E-01 3.817698E-04 4.060731E-05
+ 7 34 1.134307E-01 4.382811E-05 4.971454E-06
+ 7 35 1.171501E-01 2.513937E-06 2.945080E-07
+ 7 36 1.966424E-01 1.192045E-07 2.344065E-08
+ 7 37 9.041575E-01 1.595204E-09 1.442315E-09
+ 7 38 3.818822E-01 4.342810E-09 1.658442E-09
+ 7 39 3.902490E-01 9.138529E-10 3.566302E-10
+ 7 40 2.076460E-01 6.241000E-11 1.295919E-11
+ 7 41 3.747925E-01 1.071253E-09 4.014976E-10
+ 7 42 4.289760E-01 2.042136E-09 8.760275E-10
+ 7 43 4.457454E-01 2.526068E-09 1.125983E-09
+ 7 44 4.395183E-01 2.460160E-09 1.081285E-09
+ 7 45 4.305196E-01 1.886165E-09 8.120309E-10
+ 7 46 4.299131E-01 1.098260E-09 4.721562E-10
+ 8 0 4.311812E-01 6.703614E-02 2.890472E-02
+ 8 1 5.796995E-01 2.429957E-04 1.408645E-04
+ 8 2 3.946553E-01 5.566120E-02 2.196699E-02
+ 8 3 3.896642E-01 1.578722E-02 6.151716E-03
+ 8 4 3.497822E-01 2.193978E-02 7.674144E-03
+ 8 5 3.292529E-01 4.732849E-02 1.558304E-02
+ 8 6 2.965425E-01 3.006525E-03 8.915624E-04
+ 8 7 2.768413E-01 1.794477E-02 4.967854E-03
+ 8 8 2.546861E-01 3.847949E-02 9.800193E-03
+ 8 9 2.380741E-01 9.850723E-03 2.345202E-03
+ 8 10 2.204913E-01 5.855307E-03 1.291044E-03
+ 8 11 1.995308E-01 3.549690E-02 7.082724E-03
+ 8 12 1.777280E-01 2.506840E-02 4.455356E-03
+ 8 13 1.420775E-01 4.232808E-04 6.013867E-05
+ 8 14 1.558766E-01 1.707206E-02 2.661134E-03
+ 8 15 1.424313E-01 3.854516E-02 5.490036E-03
+ 8 16 1.275256E-01 1.809446E-02 2.307507E-03
+ 8 17 1.941474E-01 1.032620E-04 2.004804E-05
+ 8 18 1.174714E-01 2.249772E-02 2.642838E-03
+ 8 19 1.094351E-01 4.219681E-02 4.617811E-03
+ 8 20 1.010129E-01 2.086527E-02 2.107662E-03
+ 8 21 1.841287E-03 9.873421E-06 1.817980E-08
+ 8 22 9.833785E-02 2.073464E-02 2.039000E-03
+ 8 23 9.419693E-02 5.062719E-02 4.768926E-03
+ 8 24 9.062423E-02 4.036349E-02 3.657910E-03
+ 8 25 8.599418E-02 7.180083E-03 6.174453E-04
+ 8 26 9.444947E-02 5.557547E-03 5.249074E-04
+ 8 27 9.133637E-02 4.789141E-02 4.374227E-03
+ 8 28 9.085634E-02 9.224207E-02 8.380777E-03
+ 8 29 9.167950E-02 1.002568E-01 9.191491E-03
+ 8 30 9.328994E-02 7.367194E-02 6.872851E-03
+ 8 31 9.533604E-02 3.860992E-02 3.680917E-03
+ 8 32 9.879965E-02 1.467762E-02 1.450143E-03
+ 8 33 1.025501E-01 3.906076E-03 4.005684E-04
+ 8 34 1.084837E-01 6.958353E-04 7.548680E-05
+ 8 35 1.182589E-01 7.564564E-05 8.945767E-06
+ 8 36 1.196168E-01 3.710362E-06 4.438217E-07
+ 8 37 1.974895E-01 1.619902E-07 3.199136E-08
+ 8 38 2.124658E+00 4.161600E-10 8.841977E-10
+ 8 39 4.628263E-01 1.306822E-09 6.048318E-10
+ 8 40 1.060368E-01 5.867560E-11 6.221772E-12
+ 8 41 4.644751E-01 8.185321E-10 3.801878E-10
+ 8 42 4.013213E-01 2.974612E-09 1.193775E-09
+ 8 43 4.105180E-01 3.951380E-09 1.622113E-09
+ 8 44 4.375073E-01 3.437477E-09 1.503921E-09
+ 8 45 4.594890E-01 2.388277E-09 1.097387E-09
+ 8 46 4.657776E-01 1.398012E-09 6.511627E-10
+ 9 0 4.361073E-01 5.741813E-02 2.504047E-02
+ 9 1 3.545752E-01 1.130883E-03 4.009830E-04
+ 9 2 4.037530E-01 5.361245E-02 2.164619E-02
+ 9 3 4.399196E-01 1.639615E-03 7.212989E-04
+ 9 4 3.604282E-01 4.380702E-02 1.578929E-02
+ 9 5 3.414848E-01 2.537636E-02 8.665641E-03
+ 9 6 3.161008E-01 5.295659E-03 1.673962E-03
+ 9 7 2.864343E-01 3.879664E-02 1.111269E-02
+ 9 8 2.622993E-01 1.549204E-02 4.063551E-03
+ 9 9 2.366247E-01 2.806569E-03 6.641036E-04
+ 9 10 2.244929E-01 3.316723E-02 7.445807E-03
+ 9 11 2.048130E-01 2.305293E-02 4.721540E-03
+ 9 12 4.213990E-01 1.874440E-05 7.898870E-06
+ 9 13 1.740087E-01 2.276159E-02 3.960714E-03
+ 9 14 1.570108E-01 3.282148E-02 5.153328E-03
+ 9 15 1.411579E-01 5.986228E-03 8.450033E-04
+ 9 16 1.440823E-01 7.173008E-03 1.033503E-03
+ 9 17 1.275118E-01 3.460934E-02 4.413099E-03
+ 9 18 1.157517E-01 2.540936E-02 2.941176E-03
+ 9 19 9.360388E-02 6.818815E-04 6.382675E-05
+ 9 20 1.100282E-01 1.640859E-02 1.805407E-03
+ 9 21 1.018712E-01 4.133031E-02 4.210368E-03
+ 9 22 9.508945E-02 2.356400E-02 2.240687E-03
+ 9 23 5.760609E-02 1.001238E-04 5.767743E-06
+ 9 24 9.515889E-02 2.138543E-02 2.035013E-03
+ 9 25 9.139364E-02 5.186107E-02 4.739772E-03
+ 9 26 8.873477E-02 3.669450E-02 3.256078E-03
+ 9 27 8.402875E-02 3.175716E-03 2.668514E-04
+ 9 28 9.351691E-02 1.385915E-02 1.296065E-03
+ 9 29 9.195403E-02 6.751764E-02 6.208519E-03
+ 9 30 9.265068E-02 1.062029E-01 9.839773E-03
+ 9 31 9.451500E-02 9.680417E-02 9.149446E-03
+ 9 32 9.680094E-02 5.814751E-02 5.628733E-03
+ 9 33 1.004486E-01 2.397205E-02 2.407959E-03
+ 9 34 1.049315E-01 6.631402E-03 6.958428E-04
+ 9 35 1.109085E-01 1.162902E-03 1.289757E-04
+ 9 36 1.223427E-01 1.198245E-04 1.465965E-05
+ 9 37 1.239751E-01 5.315330E-06 6.589684E-07
+ 9 38 1.874202E-01 1.944369E-07 3.644140E-08
+ 9 39 1.467954E+01 1.346890E-11 1.977173E-10
+ 9 40 2.469054E-02 4.303360E-11 1.062523E-12
+ 9 41 4.881911E-01 6.723649E-10 3.282425E-10
+ 9 42 5.173400E-01 2.173424E-09 1.124399E-09
+ 9 43 4.550629E-01 4.107528E-09 1.869184E-09
+ 9 44 4.219053E-01 4.823302E-09 2.034977E-09
+ 9 45 4.188771E-01 3.837803E-09 1.607567E-09
+ 9 46 4.371993E-01 2.211821E-09 9.670066E-10
+ 10 0 4.405193E-01 4.867417E-02 2.144191E-02
+ 10 1 3.959427E-01 5.003415E-03 1.981066E-03
+ 10 2 4.127281E-01 4.388019E-02 1.811059E-02
+ 10 3 3.256838E-01 1.253884E-03 4.083698E-04
+ 10 4 3.710875E-01 5.080884E-02 1.885452E-02
+ 10 5 3.624470E-01 4.730118E-03 1.714417E-03
+ 10 6 3.235868E-01 2.756253E-02 8.918872E-03
+ 10 7 2.958613E-01 3.071282E-02 9.086735E-03
+ 10 8 3.604056E+00 3.498770E-08 1.260977E-07
+ 10 9 2.486282E-01 2.545804E-02 6.329586E-03
+ 10 10 2.316964E-01 2.666076E-02 6.177202E-03
+ 10 11 2.035083E-01 1.504813E-04 3.062418E-05
+ 10 12 1.988757E-01 2.209086E-02 4.393336E-03
+ 10 13 1.767336E-01 2.964983E-02 5.240122E-03
+ 10 14 1.501089E-01 2.516898E-03 3.778089E-04
+ 10 15 1.542726E-01 1.239945E-02 1.912896E-03
+ 10 16 1.408944E-01 3.398538E-02 4.788350E-03
+ 10 17 1.257272E-01 1.199980E-02 1.508702E-03
+ 10 18 1.370496E-01 2.602820E-03 3.567153E-04
+ 10 19 1.155871E-01 3.000271E-02 3.467928E-03
+ 10 20 1.073737E-01 2.872459E-02 3.084264E-03
+ 10 21 9.100851E-02 1.685921E-03 1.534332E-04
+ 10 22 1.037878E-01 1.451373E-02 1.506348E-03
+ 10 23 9.599889E-02 4.068361E-02 3.905581E-03
+ 10 24 9.159844E-02 2.217096E-02 2.030826E-03
+ 10 25 1.813701E-01 3.532686E-05 6.407236E-06
+ 10 26 9.270878E-02 2.736697E-02 2.537159E-03
+ 10 27 8.970534E-02 5.342847E-02 4.792819E-03
+ 10 28 8.839274E-02 2.709342E-02 2.394862E-03
+ 10 29 6.447840E-01 1.829310E-06 1.179510E-06
+ 10 30 9.365207E-02 3.440268E-02 3.221882E-03
+ 10 31 9.382220E-02 9.579980E-02 8.988149E-03
+ 10 32 9.582382E-02 1.143516E-01 1.095761E-02
+ 10 33 9.838204E-02 8.055695E-02 7.925358E-03
+ 10 34 1.021848E-01 3.644540E-02 3.724167E-03
+ 10 35 1.073043E-01 1.056162E-02 1.133308E-03
+ 10 36 1.135629E-01 1.844892E-03 2.095114E-04
+ 10 37 1.256952E-01 1.813224E-04 2.279135E-05
+ 10 38 1.294530E-01 7.583194E-06 9.816673E-07
+ 10 39 1.713424E-01 2.129361E-07 3.648498E-08
+ 10 40 3.943587E-02 8.071281E-10 3.182980E-11
+ 10 41 2.404085E-01 2.061160E-09 4.955203E-10
+ 10 42 3.875430E-01 3.645744E-09 1.412883E-09
+ 10 43 4.859045E-01 4.120356E-09 2.002100E-09
+ 10 44 4.977914E-01 4.367888E-09 2.174297E-09
+ 10 45 4.652122E-01 4.097280E-09 1.906105E-09
+ 10 46 4.346817E-01 3.048144E-09 1.324972E-09
+ 11 0 4.444056E-01 4.115924E-02 1.829139E-02
+ 11 1 4.111826E-01 9.468931E-03 3.893459E-03
+ 11 2 4.217132E-01 3.165031E-02 1.334735E-02
+ 11 3 3.733052E-01 8.882584E-03 3.315914E-03
+ 11 4 3.823158E-01 4.256098E-02 1.627174E-02
+ 11 5 3.011721E-01 6.028704E-04 1.815678E-04
+ 11 6 3.335815E-01 4.251482E-02 1.418216E-02
+ 11 7 3.055071E-01 9.169428E-03 2.801325E-03
+ 11 8 2.845412E-01 1.286275E-02 3.659982E-03
+ 11 9 2.569526E-01 3.160510E-02 8.121010E-03
+ 11 10 2.407749E-01 3.297066E-03 7.938507E-04
+ 11 11 2.195837E-01 1.434162E-02 3.149186E-03
+ 11 12 2.033117E-01 3.097200E-02 6.296968E-03
+ 11 13 1.732023E-01 3.311326E-03 5.735291E-04
+ 11 14 1.755471E-01 1.231709E-02 2.162229E-03
+ 11 15 1.550826E-01 3.072150E-02 4.764369E-03
+ 11 16 1.398225E-01 7.223373E-03 1.009990E-03
+ 11 17 1.422015E-01 6.662417E-03 9.474055E-04
+ 11 18 1.268851E-01 3.193468E-02 4.052034E-03
+ 11 19 1.131396E-01 1.542645E-02 1.745343E-03
+ 11 20 1.291833E-01 1.074677E-03 1.388303E-04
+ 11 21 1.074134E-01 2.774738E-02 2.980442E-03
+ 11 22 1.003665E-01 2.876521E-02 2.887063E-03
+ 11 23 8.195608E-02 1.395018E-03 1.143302E-04
+ 11 24 9.760145E-02 1.624547E-02 1.585582E-03
+ 11 25 9.253158E-02 4.075862E-02 3.771460E-03
+ 11 26 8.874130E-02 1.654478E-02 1.468206E-03
+ 11 27 1.018835E-01 1.913460E-03 1.949501E-04
+ 11 28 9.085996E-02 3.829717E-02 3.479679E-03
+ 11 29 8.965202E-02 5.076853E-02 4.551502E-03
+ 11 30 8.774659E-02 1.184120E-02 1.039025E-03
+ 11 31 9.763007E-02 8.093575E-03 7.901763E-04
+ 11 32 9.528116E-02 7.160561E-02 6.822665E-03
+ 11 33 9.723618E-02 1.222495E-01 1.188708E-02
+ 11 34 1.000571E-01 1.041848E-01 1.042443E-02
+ 11 35 1.040156E-01 5.257136E-02 5.468242E-03
+ 11 36 1.096378E-01 1.613111E-02 1.768580E-03
+ 11 37 1.163489E-01 2.846693E-03 3.312096E-04
+ 11 38 1.284549E-01 2.699097E-04 3.467122E-05
+ 11 39 1.349804E-01 1.097763E-05 1.481764E-06
+ 11 40 1.530997E-01 2.297093E-07 3.516843E-08
+ 11 41 2.530676E-01 2.553281E-09 6.461526E-10
+ 11 42 3.133876E-01 5.218618E-09 1.635450E-09
+ 11 43 3.594052E-01 7.390841E-09 2.656307E-09
+ 11 44 4.346545E-01 6.135589E-09 2.666861E-09
+ 11 45 5.008121E-01 4.269316E-09 2.138125E-09
+ 11 46 5.216656E-01 2.820672E-09 1.471448E-09
+ 12 0 4.477825E-01 3.492751E-02 1.563992E-02
+ 12 1 4.208726E-01 1.332492E-02 5.608094E-03
+ 12 2 4.309036E-01 2.044368E-02 8.809257E-03
+ 12 3 3.890590E-01 1.800394E-02 7.004594E-03
+ 12 4 3.948513E-01 2.734646E-02 1.079779E-02
+ 12 5 3.496709E-01 1.023255E-02 3.578024E-03
+ 12 6 3.447389E-01 3.866733E-02 1.333013E-02
+ 12 7 3.037908E-01 1.237182E-05 3.758445E-06
+ 12 8 2.928978E-01 3.106933E-02 9.100137E-03
+ 12 9 2.639013E-01 1.426306E-02 3.764040E-03
+ 12 10 2.442077E-01 4.090711E-03 9.989834E-04
+ 12 11 2.262222E-01 2.966474E-02 6.710825E-03
+ 12 12 2.097604E-01 8.967539E-03 1.881034E-03
+ 12 13 1.998022E-01 7.126802E-03 1.423951E-03
+ 12 14 1.768051E-01 2.963465E-02 5.239558E-03
+ 12 15 1.530132E-01 7.522455E-03 1.151035E-03
+ 12 16 1.551767E-01 6.401010E-03 9.932874E-04
+ 12 17 1.393694E-01 2.956782E-02 4.120850E-03
+ 12 18 1.253026E-01 1.043497E-02 1.307529E-03
+ 12 19 1.337888E-01 4.105703E-03 5.492972E-04
+ 12 20 1.146879E-01 2.958695E-02 3.393265E-03
+ 12 21 1.048534E-01 1.626350E-02 1.705283E-03
+ 12 22 1.203640E-01 9.700291E-04 1.167566E-04
+ 12 23 1.013622E-01 2.802367E-02 2.840542E-03
+ 12 24 9.419775E-02 2.602006E-02 2.451031E-03
+ 12 25 6.611599E-02 2.959067E-04 1.956417E-05
+ 12 26 9.367295E-02 2.175509E-02 2.037863E-03
+ 12 27 9.047623E-02 3.919722E-02 3.546417E-03
+ 12 28 8.502305E-02 7.748497E-03 6.588009E-04
+ 12 29 9.383289E-02 1.002287E-02 9.404749E-04
+ 12 30 9.078487E-02 5.095046E-02 4.625531E-03
+ 12 31 9.032484E-02 3.717973E-02 3.358254E-03
+ 12 32 6.193406E-02 2.192532E-04 1.357924E-05
+ 12 33 9.726589E-02 4.073537E-02 3.962162E-03
+ 12 34 9.878623E-02 1.174225E-01 1.159973E-02
+ 12 35 1.018129E-01 1.264424E-01 1.287347E-02
+ 12 36 1.059387E-01 7.266553E-02 7.698090E-03
+ 12 37 1.119289E-01 2.393594E-02 2.679123E-03
+ 12 38 1.191529E-01 4.336972E-03 5.167628E-04
+ 12 39 1.307873E-01 4.037668E-04 5.280757E-05
+ 12 40 1.396380E-01 1.633752E-05 2.281340E-06
+ 12 41 1.381452E-01 2.601714E-07 3.594143E-08
+ 12 42 3.883416E-01 4.506437E-09 1.750037E-09
+ 12 43 3.776060E-01 6.816154E-09 2.573821E-09
+ 12 44 3.571654E-01 9.347022E-09 3.338433E-09
+ 12 45 3.896798E-01 7.389122E-09 2.879391E-09
+ 12 46 4.541367E-01 4.196448E-09 1.905761E-09
+ 13 0 4.506909E-01 2.984186E-02 1.344945E-02
+ 13 1 4.282042E-01 1.616672E-02 6.922657E-03
+ 13 2 4.407124E-01 1.180533E-02 5.202754E-03
+ 13 3 3.998412E-01 2.464484E-02 9.854022E-03
+ 13 4 4.106549E-01 1.317862E-02 5.411863E-03
+ 13 5 3.637178E-01 2.322784E-02 8.448380E-03
+ 13 6 3.578640E-01 2.324489E-02 8.318510E-03
+ 13 7 3.238423E-01 8.381216E-03 2.714192E-03
+ 13 8 3.023220E-01 3.264968E-02 9.870717E-03
+ 13 9 2.551232E-01 5.671947E-04 1.447045E-04
+ 13 10 2.532372E-01 2.104330E-02 5.328946E-03
+ 13 11 2.329233E-01 1.892526E-02 4.408135E-03
+ 13 12 2.119503E-01 6.936460E-04 1.470184E-04
+ 13 13 2.010171E-01 2.600799E-02 5.228050E-03
+ 13 14 1.794111E-01 1.302092E-02 2.336097E-03
+ 13 15 1.840308E-01 3.065086E-03 5.640703E-04
+ 13 16 1.543657E-01 2.642874E-02 4.079693E-03
+ 13 17 1.386874E-01 1.075760E-02 1.491944E-03
+ 13 18 1.423537E-01 3.737571E-03 5.320572E-04
+ 13 19 1.264448E-01 2.779271E-02 3.514243E-03
+ 13 20 1.117073E-01 1.130040E-02 1.262337E-03
+ 13 21 1.219569E-01 3.369675E-03 4.109551E-04
+ 13 22 1.059217E-01 2.852756E-02 3.021689E-03
+ 13 23 9.852290E-02 1.459808E-02 1.438245E-03
+ 13 24 1.114102E-01 2.007300E-03 2.236337E-04
+ 13 25 9.578736E-02 2.984796E-02 2.859058E-03
+ 13 26 9.016331E-02 2.064214E-02 1.861164E-03
+ 13 27 1.133320E-01 3.849189E-04 4.362361E-05
+ 13 28 9.180748E-02 3.037523E-02 2.788673E-03
+ 13 29 8.868545E-02 3.209870E-02 2.846687E-03
+ 13 30 7.145009E-02 5.421582E-04 3.873725E-05
+ 13 31 9.242485E-02 2.793617E-02 2.581996E-03
+ 13 32 9.193312E-02 5.507151E-02 5.062896E-03
+ 13 33 8.993707E-02 1.318630E-02 1.185937E-03
+ 13 34 1.008290E-01 1.348059E-02 1.359234E-03
+ 13 35 1.005338E-01 9.893420E-02 9.946235E-03
+ 13 36 1.036491E-01 1.437551E-01 1.490008E-02
+ 13 37 1.079435E-01 9.670631E-02 1.043882E-02
+ 13 38 1.141853E-01 3.481298E-02 3.975131E-03
+ 13 39 1.218713E-01 6.598797E-03 8.042038E-04
+ 13 40 1.328400E-01 6.172522E-04 8.199578E-05
+ 13 41 1.430507E-01 2.528340E-05 3.616809E-06
+ 13 42 1.303393E-01 3.306250E-07 4.309343E-08
+ 13 43 4.574272E-01 6.312303E-09 2.887419E-09
+ 13 44 4.569933E-01 6.275808E-09 2.868002E-09
+ 13 45 3.801893E-01 8.368590E-09 3.181648E-09
+ 13 46 3.680538E-01 6.920576E-09 2.547144E-09
+ 14 0 4.531861E-01 2.569179E-02 1.164316E-02
+ 14 1 4.341441E-01 1.799286E-02 7.811493E-03
+ 14 2 4.521116E-01 5.946259E-03 2.688373E-03
+ 14 3 4.086511E-01 2.755965E-02 1.126228E-02
+ 14 4 4.374718E-01 4.047168E-03 1.770522E-03
+ 14 5 3.746537E-01 3.161618E-02 1.184512E-02
+ 14 6 3.769515E-01 8.335022E-03 3.141899E-03
+ 14 7 3.336810E-01 2.284561E-02 7.623147E-03
+ 14 8 3.127318E-01 1.953120E-02 6.108027E-03
+ 14 9 2.931477E-01 4.804575E-03 1.408450E-03
+ 14 10 2.611514E-01 2.720809E-02 7.105431E-03
+ 14 11 2.373655E-01 2.593421E-03 6.155887E-04
+ 14 12 2.210945E-01 1.438824E-02 3.181160E-03
+ 14 13 2.062382E-01 2.167378E-02 4.469960E-03
+ 14 14 6.223165E-01 2.633447E-06 1.638838E-06
+ 14 15 1.773009E-01 2.151703E-02 3.814989E-03
+ 14 16 1.548384E-01 1.507336E-02 2.333934E-03
+ 14 17 1.668015E-01 1.176952E-03 1.963173E-04
+ 14 18 1.381212E-01 2.387671E-02 3.297878E-03
+ 14 19 1.254186E-01 1.207903E-02 1.514936E-03
+ 14 20 1.349240E-01 2.896489E-03 3.908059E-04
+ 14 21 1.144491E-01 2.606574E-02 2.983200E-03
+ 14 22 1.024239E-01 1.038890E-02 1.064071E-03
+ 14 23 1.105054E-01 4.057312E-03 4.483550E-04
+ 14 24 1.000630E-01 2.847104E-02 2.848897E-03
+ 14 25 9.187881E-02 1.059290E-02 9.732634E-04
+ 14 26 1.012143E-01 4.924804E-03 4.984607E-04
+ 14 27 9.182979E-02 3.180909E-02 2.921022E-03
+ 14 28 8.784049E-02 1.252592E-02 1.100283E-03
+ 14 29 9.635518E-02 5.129489E-03 4.942528E-04
+ 14 30 9.040353E-02 3.809416E-02 3.443846E-03
+ 14 31 8.757005E-02 1.791102E-02 1.568469E-03
+ 14 32 9.751005E-02 4.232673E-03 4.127282E-04
+ 14 33 9.358233E-02 5.059396E-02 4.734701E-03
+ 14 34 9.317453E-02 3.796164E-02 3.537057E-03
+ 14 35 1.344243E-01 2.923375E-04 3.929727E-05
+ 14 36 1.026054E-01 6.929036E-02 7.109567E-03
+ 14 37 1.055788E-01 1.517637E-01 1.602302E-02
+ 14 38 1.100183E-01 1.240009E-01 1.364237E-02
+ 14 39 1.164185E-01 4.990672E-02 5.810065E-03
+ 14 40 1.244383E-01 1.011270E-02 1.258407E-03
+ 14 41 1.347072E-01 9.768050E-04 1.315827E-04
+ 14 42 1.452746E-01 4.125493E-05 5.993292E-06
+ 14 43 1.305776E-01 4.915693E-07 6.418793E-08
+ 14 44 4.702212E-01 7.970918E-09 3.748095E-09
+ 14 45 5.691149E-01 4.507780E-09 2.565444E-09
+ 14 46 4.395832E-01 5.568144E-09 2.447663E-09
+ 15 0 4.553288E-01 2.227480E-02 1.014236E-02
+ 15 1 4.390984E-01 1.895944E-02 8.325059E-03
+ 15 2 4.678334E-01 2.438272E-03 1.140705E-03
+ 15 3 4.162819E-01 2.719307E-02 1.131998E-02
+ 15 4 5.622068E-01 3.053351E-04 1.716615E-04
+ 15 5 3.845622E-01 3.296570E-02 1.267736E-02
+ 15 6 4.426496E-01 7.787409E-04 3.447093E-04
+ 15 7 3.434833E-01 3.170763E-02 1.089104E-02
+ 15 8 3.263983E-01 5.585685E-03 1.823158E-03
+ 15 9 2.980136E-01 1.808912E-02 5.390805E-03
+ 15 10 2.684236E-01 1.744518E-02 4.682698E-03
+ 15 11 2.545564E-01 1.840096E-03 4.684083E-04
+ 15 12 2.276854E-01 2.364767E-02 5.384229E-03
+ 15 13 2.124529E-01 5.021045E-03 1.066735E-03
+ 15 14 1.987125E-01 1.036077E-02 2.058815E-03
+ 15 15 1.800228E-01 2.184636E-02 3.932842E-03
+ 15 16 1.082894E-01 2.071253E-04 2.242947E-05
+ 15 17 1.549112E-01 1.752397E-02 2.714660E-03
+ 15 18 1.380002E-01 1.595434E-02 2.201703E-03
+ 15 19 1.549268E-01 5.504321E-04 8.527667E-05
+ 15 20 1.260123E-01 2.226486E-02 2.805646E-03
+ 15 21 1.120176E-01 1.146255E-02 1.284007E-03
+ 15 22 1.231548E-01 3.025725E-03 3.726326E-04
+ 15 23 1.050677E-01 2.496158E-02 2.622656E-03
+ 15 24 9.642260E-02 8.048577E-03 7.760647E-04
+ 15 25 1.038120E-01 6.392836E-03 6.636531E-04
+ 15 26 9.490393E-02 2.783863E-02 2.641996E-03
+ 15 27 8.575704E-02 5.388501E-03 4.621019E-04
+ 15 28 9.439026E-02 1.074034E-02 1.013783E-03
+ 15 29 9.005518E-02 3.118986E-02 2.808808E-03
+ 15 30 8.317098E-02 3.615529E-03 3.007071E-04
+ 15 31 9.290520E-02 1.700107E-02 1.579487E-03
+ 15 32 8.992851E-02 3.754900E-02 3.376726E-03
+ 15 33 8.417373E-02 2.807330E-03 2.363034E-04
+ 15 34 9.590162E-02 2.666321E-02 2.557045E-03
+ 15 35 9.540048E-02 5.748987E-02 5.484561E-03
+ 15 36 9.218469E-02 7.255198E-03 6.688182E-04
+ 15 37 1.053770E-01 3.533630E-02 3.723634E-03
+ 15 38 1.076323E-01 1.457946E-01 1.569221E-02
+ 15 39 1.121562E-01 1.524636E-01 1.709973E-02
+ 15 40 1.186382E-01 7.063283E-02 8.379753E-03
+ 15 41 1.268259E-01 1.569582E-02 1.990637E-03
+ 15 42 1.364364E-01 1.614574E-03 2.202866E-04
+ 15 43 1.466456E-01 7.191956E-05 1.054669E-05
+ 15 44 1.363474E-01 8.672638E-07 1.182492E-07
+ 15 45 4.262468E-01 1.031037E-08 4.394762E-09
+ 15 46 7.141560E-01 2.785728E-09 1.989445E-09
+ 16 0 4.571777E-01 1.940465E-02 8.871373E-03
+ 16 1 4.432822E-01 1.923678E-02 8.527321E-03
+ 16 2 4.990044E-01 6.624446E-04 3.305628E-04
+ 16 3 4.230262E-01 2.461812E-02 1.041411E-02
+ 16 4 2.996134E-01 4.318325E-04 1.293828E-04
+ 16 5 3.939901E-01 2.878532E-02 1.134113E-02
+ 16 6 2.987794E-01 7.783486E-04 2.325546E-04
+ 16 7 3.534454E-01 3.119940E-02 1.102728E-02
+ 16 8 4.748301E-01 3.031438E-05 1.439418E-05
+ 16 9 3.058596E-01 2.659763E-02 8.135142E-03
+ 16 10 2.737055E-01 4.787127E-03 1.310263E-03
+ 16 11 2.583875E-01 1.249817E-02 3.229370E-03
+ 16 12 2.335289E-01 1.709944E-02 3.993212E-03
+ 16 13 2.147630E-01 4.450838E-04 9.558755E-05
+ 16 14 2.021457E-01 2.122690E-02 4.290928E-03
+ 16 15 1.825761E-01 6.552642E-03 1.196356E-03
+ 16 16 1.798385E-01 7.594279E-03 1.365744E-03
+ 16 17 1.558360E-01 2.048496E-02 3.192295E-03
+ 16 18 1.173906E-01 6.259203E-04 7.347716E-05
+ 16 19 1.376522E-01 1.502500E-02 2.068223E-03
+ 16 20 1.253222E-01 1.576540E-02 1.975756E-03
+ 16 21 1.524586E-01 4.915036E-04 7.493392E-05
+ 16 22 1.146762E-01 2.103224E-02 2.411898E-03
+ 16 23 1.016475E-01 9.673793E-03 9.833170E-04
+ 16 24 1.101276E-01 4.027328E-03 4.435200E-04
+ 16 25 9.913605E-02 2.420706E-02 2.399793E-03
+ 16 26 8.948703E-02 4.623589E-03 4.137513E-04
+ 16 27 9.807747E-02 1.048689E-02 1.028527E-03
+ 16 28 9.070836E-02 2.513632E-02 2.280075E-03
+ 16 29 7.774933E-02 1.001729E-03 7.788374E-05
+ 16 30 9.193457E-02 1.944885E-02 1.788022E-03
+ 16 31 8.879468E-02 2.438036E-02 2.164846E-03
+ 16 32 1.363304E-01 1.398181E-04 1.906146E-05
+ 16 33 9.193415E-02 3.242571E-02 2.981030E-03
+ 16 34 9.061883E-02 2.312013E-02 2.095119E-03
+ 16 35 1.028674E-01 3.714512E-03 3.821024E-04
+ 16 36 9.764030E-02 5.625700E-02 5.492951E-03
+ 16 37 9.753413E-02 3.127147E-02 3.050036E-03
+ 16 38 1.110491E-01 8.209775E-03 9.116881E-04
+ 16 39 1.098691E-01 1.225197E-01 1.346113E-02
+ 16 40 1.143586E-01 1.777924E-01 2.033209E-02
+ 16 41 1.208527E-01 9.849774E-02 1.190372E-02
+ 16 42 1.290403E-01 2.474937E-02 3.193665E-03
+ 16 43 1.380491E-01 2.805281E-03 3.872664E-04
+ 16 44 1.475332E-01 1.357924E-04 2.003388E-05
+ 16 45 1.437327E-01 1.808379E-06 2.599232E-07
+ 16 46 3.444501E-01 1.527696E-08 5.262150E-09
+ 17 0 4.587839E-01 1.693123E-02 7.767775E-03
+ 17 1 4.468316E-01 1.896356E-02 8.473519E-03
+ 17 2 6.955428E-01 3.732648E-05 2.596216E-05
+ 17 3 4.290182E-01 2.091385E-02 8.972421E-03
+ 17 4 3.704402E-01 2.522509E-03 9.344389E-04
+ 17 5 4.032274E-01 2.193110E-02 8.843222E-03
+ 17 6 3.501781E-01 5.053923E-03 1.769773E-03
+ 17 7 3.638446E-01 2.408295E-02 8.762452E-03
+ 17 8 3.198527E-01 2.929067E-03 9.368701E-04
+ 17 9 3.144261E-01 2.526543E-02 7.944113E-03
+ 17 10 7.431317E+00 2.398781E-08 1.782610E-07
+ 17 11 2.648397E-01 2.046983E-02 5.421222E-03
+ 17 12 2.372153E-01 5.395780E-03 1.279961E-03
+ 17 13 2.226670E-01 8.492927E-03 1.891094E-03
+ 17 14 2.067841E-01 1.730132E-02 3.577638E-03
+ 17 15 2.310637E-01 5.251814E-05 1.213504E-05
+ 17 16 1.792133E-01 1.865082E-02 3.342474E-03
+ 17 17 1.547414E-01 7.136026E-03 1.104238E-03
+ 17 18 1.589234E-01 5.515433E-03 8.765315E-04
+ 17 19 1.376268E-01 1.903957E-02 2.620355E-03
+ 17 20 1.139940E-01 8.940626E-04 1.019178E-04
+ 17 21 1.259606E-01 1.383901E-02 1.743170E-03
+ 17 22 1.130693E-01 1.437631E-02 1.625520E-03
+ 17 23 1.377410E-01 7.200641E-04 9.918237E-05
+ 17 24 1.049127E-01 2.011103E-02 2.109903E-03
+ 17 25 9.550150E-02 7.229948E-03 6.904709E-04
+ 17 26 1.026789E-01 6.160663E-03 6.325700E-04
+ 17 27 9.442882E-02 2.250047E-02 2.124693E-03
+ 17 28 7.880016E-02 1.381387E-03 1.088535E-04
+ 17 29 9.309021E-02 1.582317E-02 1.472983E-03
+ 17 30 8.867413E-02 1.935597E-02 1.716374E-03
+ 17 31 1.090757E-01 4.953073E-04 5.402600E-05
+ 17 32 9.099759E-02 2.758990E-02 2.510614E-03
+ 17 33 8.709170E-02 1.162654E-02 1.012575E-03
+ 17 34 9.575304E-02 8.964668E-03 8.583942E-04
+ 17 35 9.309611E-02 3.914217E-02 3.643984E-03
+ 17 36 8.724233E-02 3.384252E-03 2.952500E-04
+ 17 37 1.005382E-01 3.273021E-02 3.290636E-03
+ 17 38 1.005759E-01 5.773409E-02 5.806658E-03
+ 17 39 7.954014E-02 5.095764E-04 4.053178E-05
+ 17 40 1.124272E-01 8.288547E-02 9.318580E-03
+ 17 41 1.166388E-01 1.924724E-01 2.244976E-02
+ 17 42 1.230723E-01 1.343339E-01 1.653278E-02
+ 17 43 1.311107E-01 3.962758E-02 5.195599E-03
+ 17 44 1.395603E-01 5.141141E-03 7.174989E-04
+ 17 45 1.482224E-01 2.809237E-04 4.163918E-05
+ 17 46 1.497455E-01 4.431825E-06 6.636459E-07
+ 18 0 4.601878E-01 1.473214E-02 6.779549E-03
+ 18 1 4.498431E-01 1.822865E-02 8.200032E-03
+ 18 2 3.276978E-01 9.471202E-05 3.103692E-05
+ 18 3 4.343332E-01 1.689708E-02 7.338961E-03
+ 18 4 3.910057E-01 5.055455E-03 1.976712E-03
+ 18 5 4.125689E-01 1.485831E-02 6.130075E-03
+ 18 6 3.665994E-01 1.005882E-02 3.687556E-03
+ 18 7 3.752864E-01 1.504429E-02 5.645916E-03
+ 18 8 3.340026E-01 9.440895E-03 3.153284E-03
+ 18 9 3.236241E-01 1.749184E-02 5.660781E-03
+ 18 10 2.999725E-01 3.486444E-03 1.045837E-03
+ 18 11 2.713618E-01 1.951703E-02 5.296176E-03
+ 18 12 1.924686E-01 5.583781E-05 1.074703E-05
+ 18 13 2.283215E-01 1.602265E-02 3.658316E-03
+ 18 14 2.112722E-01 6.529574E-03 1.379517E-03
+ 18 15 1.984002E-01 6.123443E-03 1.214892E-03
+ 18 16 1.817958E-01 1.666495E-02 3.029618E-03
+ 18 17 9.636458E-03 3.473005E-06 3.346747E-08
+ 18 18 1.565185E-01 1.572355E-02 2.461026E-03
+ 18 19 1.357770E-01 7.401813E-03 1.004996E-03
+ 18 20 1.401948E-01 4.194127E-03 5.879950E-04
+ 18 21 1.249796E-01 1.775791E-02 2.219377E-03
+ 18 22 9.898726E-02 8.246799E-04 8.163280E-05
+ 18 23 1.155732E-01 1.313168E-02 1.517671E-03
+ 18 24 1.026095E-01 1.231735E-02 1.263877E-03
+ 18 25 1.168955E-01 1.235754E-03 1.444540E-04
+ 18 26 9.872099E-02 1.945485E-02 1.920602E-03
+ 18 27 8.969785E-02 4.333333E-03 3.886907E-04
+ 18 28 9.773885E-02 9.307275E-03 9.096824E-04
+ 18 29 9.021788E-02 1.892958E-02 1.707786E-03
+ 18 30 2.041055E+00 4.125493E-07 8.420357E-07
+ 18 31 9.089781E-02 2.097177E-02 1.906288E-03
+ 18 32 8.721220E-02 1.060405E-02 9.248024E-04
+ 18 33 9.538091E-02 6.732716E-03 6.421726E-04
+ 18 34 9.056214E-02 2.861511E-02 2.591446E-03
+ 18 35 7.835646E-02 9.134763E-04 7.157677E-05
+ 18 36 9.572574E-02 2.827384E-02 2.706534E-03
+ 18 37 9.468974E-02 2.522962E-02 2.388986E-03
+ 18 38 1.074983E-01 5.813780E-03 6.249715E-04
+ 18 39 1.034069E-01 6.551547E-02 6.774749E-03
+ 18 40 1.037125E-01 1.908485E-02 1.979338E-03
+ 18 41 1.157925E-01 3.634224E-02 4.208160E-03
+ 18 42 1.190264E-01 1.858489E-01 2.212093E-02
+ 18 43 1.253123E-01 1.764423E-01 2.211039E-02
+ 18 44 1.330813E-01 6.409459E-02 8.529788E-03
+ 18 45 1.409905E-01 9.943807E-03 1.401982E-03
+ 18 46 1.488655E-01 6.427188E-04 9.567865E-05
+ 19 0 4.614183E-01 1.271362E-02 5.866299E-03
+ 19 1 4.523892E-01 1.708213E-02 7.727769E-03
+ 19 2 3.998940E-01 4.848562E-04 1.938911E-04
+ 19 3 4.390205E-01 1.308838E-02 5.746067E-03
+ 19 4 4.024819E-01 7.096684E-03 2.856287E-03
+ 19 5 4.224481E-01 9.004613E-03 3.803982E-03
+ 19 6 3.770906E-01 1.356022E-02 5.113432E-03
+ 19 7 3.892538E-01 7.510061E-03 2.923320E-03
+ 19 8 3.433340E-01 1.492374E-02 5.123829E-03
+ 19 9 3.341695E-01 8.916762E-03 2.979710E-03
+ 19 10 3.043469E-01 9.829412E-03 2.991551E-03
+ 19 11 2.775795E-01 1.275578E-02 3.540743E-03
+ 19 12 2.647673E-01 2.344131E-03 6.206492E-04
+ 19 13 2.333110E-01 1.598141E-02 3.728638E-03
+ 19 14 2.126792E-01 3.910206E-04 8.316194E-05
+ 19 15 2.013229E-01 1.317108E-02 2.651640E-03
+ 19 16 1.845010E-01 7.233128E-03 1.334520E-03
+ 19 17 1.814322E-01 4.399008E-03 7.981218E-04
+ 19 18 1.572791E-01 1.507588E-02 2.371122E-03
+ 19 19 8.171036E-02 1.083321E-04 8.851853E-06
+ 19 20 1.376457E-01 1.316197E-02 1.811689E-03
+ 19 21 1.235939E-01 7.474351E-03 9.237843E-04
+ 19 22 1.291468E-01 3.508128E-03 4.530636E-04
+ 19 23 1.139112E-01 1.613071E-02 1.837468E-03
+ 19 24 8.297939E-02 5.873372E-04 4.873688E-05
+ 19 25 1.056953E-01 1.251892E-02 1.323192E-03
+ 19 26 9.628753E-02 1.012165E-02 9.745887E-04
+ 19 27 1.056266E-01 2.185689E-03 2.308668E-04
+ 19 28 9.448171E-02 1.831237E-02 1.730184E-03
+ 19 29 8.117956E-02 1.699848E-03 1.379929E-04
+ 19 30 9.316851E-02 1.272139E-02 1.185233E-03
+ 19 31 8.800798E-02 1.364717E-02 1.201060E-03
+ 19 32 9.836727E-02 1.857154E-03 1.826832E-04
+ 19 33 9.037985E-02 2.302724E-02 2.081199E-03
+ 19 34 8.221917E-02 2.361428E-03 1.941547E-04
+ 19 35 9.357734E-02 1.812220E-02 1.695827E-03
+ 19 36 9.128620E-02 1.883898E-02 1.719739E-03
+ 19 37 1.022361E-01 4.418697E-03 4.517505E-04
+ 19 38 9.802019E-02 4.047230E-02 3.967102E-03
+ 19 39 9.059324E-02 2.937013E-03 2.660736E-04
+ 19 40 1.067326E-01 4.300107E-02 4.589616E-03
+ 19 41 1.081963E-01 5.423767E-02 5.868316E-03
+ 19 42 1.252690E-01 3.456396E-03 4.329791E-04
+ 19 43 1.215825E-01 1.476171E-01 1.794766E-02
+ 19 44 1.275970E-01 2.166741E-01 2.764696E-02
+ 19 45 1.350043E-01 1.033468E-01 1.395226E-02
+ 19 46 1.423722E-01 2.021342E-02 2.877829E-03
+ 20 0 4.624928E-01 1.080169E-02 4.995703E-03
+ 20 1 4.545237E-01 1.554275E-02 7.064548E-03
+ 20 2 4.200830E-01 9.561045E-04 4.016433E-04
+ 20 3 4.431131E-01 9.759375E-03 4.324507E-03
+ 20 4 4.103530E-01 8.219350E-03 3.372835E-03
+ 20 5 4.336029E-01 4.860415E-03 2.107490E-03
+ 20 6 3.851205E-01 1.480030E-02 5.699900E-03
+ 20 7 4.101644E-01 2.783848E-03 1.141835E-03
+ 20 8 3.511156E-01 1.720033E-02 6.039305E-03
+ 20 9 3.489558E-01 3.035279E-03 1.059178E-03
+ 20 10 3.100989E-01 1.420775E-02 4.405809E-03
+ 20 11 2.832734E-01 5.736510E-03 1.625001E-03
+ 20 12 2.659483E-01 7.252943E-03 1.928908E-03
+ 20 13 2.374268E-01 1.065557E-02 2.529917E-03
+ 20 14 2.243097E-01 1.033418E-03 2.318057E-04
+ 20 15 2.048007E-01 1.397137E-02 2.861346E-03
+ 20 16 1.845732E-01 9.127649E-04 1.684720E-04
+ 20 17 1.796901E-01 1.057680E-02 1.900546E-03
+ 20 18 1.573106E-01 7.354743E-03 1.156979E-03
+ 20 19 1.631153E-01 2.760924E-03 4.503491E-04
+ 20 20 1.375751E-01 1.336327E-02 1.838453E-03
+ 20 21 1.049230E-01 3.500525E-04 3.672855E-05
+ 20 22 1.250266E-01 1.113400E-02 1.392047E-03
+ 20 23 1.121021E-01 7.129647E-03 7.992486E-04
+ 20 24 1.208816E-01 3.007357E-03 3.635342E-04
+ 20 25 1.039573E-01 1.419828E-02 1.476015E-03
+ 20 26 7.653685E-02 3.711433E-04 2.840614E-05
+ 20 27 9.918178E-02 1.204085E-02 1.194233E-03
+ 20 28 9.192117E-02 7.786576E-03 7.157512E-04
+ 20 29 1.002400E-01 3.533295E-03 3.541777E-04
+ 20 30 9.067222E-02 1.610164E-02 1.459972E-03
+ 20 31 6.345387E-02 1.969882E-04 1.249967E-05
+ 20 32 9.093368E-02 1.549357E-02 1.408887E-03
+ 20 33 8.690675E-02 7.470703E-03 6.492545E-04
+ 20 34 9.452664E-02 7.161711E-03 6.769724E-04
+ 20 35 9.014447E-02 1.938862E-02 1.747777E-03
+ 20 36 1.180217E-01 3.146168E-04 3.713160E-05
+ 20 37 9.470973E-02 2.706401E-02 2.563225E-03
+ 20 38 9.037921E-02 4.488704E-03 4.056855E-04
+ 20 39 1.018302E-01 2.428160E-02 2.472600E-03
+ 20 40 1.008003E-01 2.783008E-02 2.805279E-03
+ 20 41 1.132373E-01 8.353123E-03 9.458853E-04
+ 20 42 1.117490E-01 7.464379E-02 8.341369E-03
+ 20 43 1.119646E-01 8.896064E-03 9.960444E-04
+ 20 44 1.244738E-01 7.914511E-02 9.851489E-03
+ 20 45 1.299627E-01 2.347885E-01 3.051376E-02
+ 20 46 1.369381E-01 1.616059E-01 2.213001E-02
+ 21 0 4.634176E-01 8.936204E-03 4.141194E-03
+ 21 1 4.562848E-01 1.360799E-02 6.209116E-03
+ 21 2 4.300840E-01 1.332069E-03 5.729016E-04
+ 21 3 4.466278E-01 7.005231E-03 3.128731E-03
+ 21 4 4.161798E-01 8.334255E-03 3.468548E-03
+ 21 5 4.473698E-01 2.304471E-03 1.030951E-03
+ 21 6 3.916016E-01 1.399850E-02 5.481835E-03
+ 21 7 4.580649E-01 5.985739E-04 2.741857E-04
+ 21 8 3.578710E-01 1.632110E-02 5.840848E-03
+ 21 9 3.869096E-01 4.369793E-04 1.690715E-04
+ 21 10 3.157418E-01 1.495641E-02 4.722363E-03
+ 21 11 2.881325E-01 1.503231E-03 4.331296E-04
+ 21 12 2.696869E-01 1.035753E-02 2.793290E-03
+ 21 13 2.401050E-01 4.960602E-03 1.191065E-03
+ 21 14 2.268296E-01 4.325380E-03 9.811242E-04
+ 21 15 2.079700E-01 9.967852E-03 2.073015E-03
+ 21 16 2.022160E-01 2.703456E-04 5.466820E-05
+ 21 17 1.810646E-01 1.186409E-02 2.148166E-03
+ 21 18 1.520957E-01 1.497841E-03 2.278152E-04
+ 21 19 1.582777E-01 7.574264E-03 1.198837E-03
+ 21 20 1.367497E-01 7.371357E-03 1.008031E-03
+ 21 21 1.449285E-01 1.379646E-03 1.999500E-04
+ 21 22 1.243933E-01 1.174991E-02 1.461610E-03
+ 21 23 1.008038E-01 6.537201E-04 6.589747E-05
+ 21 24 1.152908E-01 9.074753E-03 1.046236E-03
+ 21 25 1.016101E-01 6.544014E-03 6.649381E-04
+ 21 26 1.109943E-01 2.401947E-03 2.666024E-04
+ 21 27 9.754040E-02 1.234438E-02 1.204076E-03
+ 21 28 7.113131E-02 2.039498E-04 1.450722E-05
+ 21 29 9.541608E-02 1.136378E-02 1.084287E-03
+ 21 30 8.748103E-02 5.480605E-03 4.794490E-04
+ 21 31 9.530755E-02 4.860944E-03 4.632846E-04
+ 21 32 8.872223E-02 1.309794E-02 1.162078E-03
+ 21 33 1.158755E-01 1.803141E-04 2.089400E-05
+ 21 34 9.079150E-02 1.647527E-02 1.495814E-03
+ 21 35 8.347410E-02 2.281854E-03 1.904757E-04
+ 21 36 9.387928E-02 1.361147E-02 1.277835E-03
+ 21 37 9.083532E-02 1.119069E-02 1.016510E-03
+ 21 38 9.999842E-02 7.030279E-03 7.030168E-04
+ 21 39 9.736385E-02 2.504024E-02 2.438014E-03
+ 21 40 1.209988E-01 8.205498E-04 9.928553E-05
+ 21 41 1.052191E-01 4.133217E-02 4.348936E-03
+ 21 42 1.012955E-01 4.234679E-03 4.289540E-04
+ 21 43 1.156233E-01 4.951479E-02 5.725063E-03
+ 21 44 1.186070E-01 5.364273E-02 6.362402E-03
+ 21 45 1.288700E-01 1.260928E-02 1.624958E-03
+ 21 46 1.324633E-01 1.980408E-01 2.623313E-02
+ 22 0 4.641888E-01 7.061853E-03 3.278033E-03
+ 22 1 4.576950E-01 1.125689E-02 5.152224E-03
+ 22 2 4.360764E-01 1.494282E-03 6.516209E-04
+ 22 3 4.495574E-01 4.805519E-03 2.160357E-03
+ 22 4 4.205588E-01 7.527575E-03 3.165788E-03
+ 22 5 4.662225E-01 9.377148E-04 4.371838E-04
+ 22 6 3.968229E-01 1.176703E-02 4.669429E-03
+ 22 7 1.011592E+00 1.308949E-05 1.324122E-05
+ 22 8 3.636568E-01 1.338728E-02 4.868376E-03
+ 22 9 1.519946E-01 1.917065E-05 2.913834E-06
+ 22 10 3.208540E-01 1.280791E-02 4.109469E-03
+ 22 11 2.901709E-01 8.079295E-05 2.344376E-05
+ 22 12 2.734335E-01 1.037235E-02 2.836147E-03
+ 22 13 2.398121E-01 1.503208E-03 3.604874E-04
+ 22 14 2.298863E-01 6.421121E-03 1.476128E-03
+ 22 15 2.104762E-01 5.274388E-03 1.110133E-03
+ 22 16 1.986751E-01 2.118859E-03 4.209646E-04
+ 22 17 1.828156E-01 9.036259E-03 1.651969E-03
+ 22 18 1.438365E+00 6.264722E-07 9.010960E-07
+ 22 19 1.580158E-01 8.901519E-03 1.406581E-03
+ 22 20 1.327434E-01 2.273693E-03 3.018179E-04
+ 22 21 1.390586E-01 4.576378E-03 6.363848E-04
+ 22 22 1.238061E-01 7.287685E-03 9.022596E-04
+ 22 23 1.395464E-01 4.552253E-04 6.352505E-05
+ 22 24 1.140647E-01 9.702217E-03 1.106681E-03
+ 22 25 9.294068E-02 1.028664E-03 9.560478E-05
+ 22 26 1.061037E-01 6.697098E-03 7.105866E-04
+ 22 27 9.559999E-02 6.018227E-03 5.753424E-04
+ 22 28 1.041715E-01 1.711255E-03 1.782640E-04
+ 22 29 9.383483E-02 1.043084E-02 9.787760E-04
+ 22 30 5.909498E-02 1.075122E-04 6.353433E-06
+ 22 31 9.220416E-02 1.003303E-02 9.250874E-04
+ 22 32 8.527418E-02 3.636195E-03 3.100735E-04
+ 22 33 9.272605E-02 5.746262E-03 5.328282E-04
+ 22 34 8.864846E-02 9.729988E-03 8.625484E-04
+ 22 35 9.963157E-02 1.429713E-03 1.424446E-04
+ 22 36 9.122636E-02 1.486499E-02 1.356079E-03
+ 22 37 4.790183E-02 5.046227E-05 2.417235E-06
+ 22 38 9.547309E-02 1.760991E-02 1.681272E-03
+ 22 39 9.081753E-02 3.192850E-03 2.899668E-04
+ 22 40 1.021351E-01 1.784423E-02 1.822522E-03
+ 22 41 1.002325E-01 1.298794E-02 1.301814E-03
+ 22 42 1.108340E-01 1.438534E-02 1.594385E-03
+ 22 43 1.107926E-01 3.578852E-02 3.965103E-03
+ 22 44 1.237826E-01 4.546048E-03 5.627218E-04
+ 22 45 1.227595E-01 8.065831E-02 9.901576E-03
+ 22 46 1.264333E-01 1.056558E-02 1.335841E-03
+ 23 0 4.647929E-01 5.113148E-03 2.376555E-03
+ 23 1 4.587609E-01 8.440209E-03 3.872038E-03
+ 23 2 4.398700E-01 1.370681E-03 6.029215E-04
+ 23 3 4.518601E-01 3.064482E-03 1.384717E-03
+ 23 4 4.237412E-01 5.934303E-03 2.514609E-03
+ 23 5 4.943422E-01 3.178914E-04 1.571471E-04
+ 23 6 4.008353E-01 8.687696E-03 3.482335E-03
+ 23 7 2.359114E-01 8.165454E-05 1.926324E-05
+ 23 8 3.683418E-01 9.530621E-03 3.510526E-03
+ 23 9 2.994152E-01 3.649468E-04 1.092706E-04
+ 23 10 3.251301E-01 9.210137E-03 2.994492E-03
+ 23 11 2.996524E-01 1.013985E-04 3.038429E-05
+ 23 12 2.766002E-01 8.119171E-03 2.245764E-03
+ 23 13 2.299077E-01 2.187311E-04 5.028796E-05
+ 23 14 2.324198E-01 6.151022E-03 1.429619E-03
+ 23 15 2.120185E-01 2.150806E-03 4.560106E-04
+ 23 16 1.999344E-01 3.281321E-03 6.560490E-04
+ 23 17 1.843249E-01 5.278893E-03 9.730317E-04
+ 23 18 1.884278E-01 6.003353E-04 1.131199E-04
+ 23 19 1.583821E-01 6.960820E-03 1.102469E-03
+ 23 20 1.149119E-01 2.712365E-04 3.116831E-05
+ 23 21 1.381844E-01 5.464854E-03 7.551576E-04
+ 23 22 1.224211E-01 3.083718E-03 3.775122E-04
+ 23 23 1.274027E-01 2.062048E-03 2.627104E-04
+ 23 24 1.133912E-01 6.455396E-03 7.319850E-04
+ 23 25 2.401396E-01 1.812094E-05 4.351556E-06
+ 23 26 1.047893E-01 6.935079E-03 7.267224E-04
+ 23 27 9.136606E-02 1.533539E-03 1.401134E-04
+ 23 28 9.992853E-02 4.183984E-03 4.180993E-04
+ 23 29 9.244773E-02 5.359446E-03 4.954687E-04
+ 23 30 1.031956E-01 9.443759E-04 9.745546E-05
+ 23 31 9.082580E-02 8.128423E-03 7.382705E-04
+ 23 32 6.186938E-02 9.837129E-05 6.086170E-06
+ 23 33 9.067903E-02 8.011285E-03 7.264556E-04
+ 23 34 8.547969E-02 2.364672E-03 2.021314E-04
+ 23 35 9.315005E-02 5.725003E-03 5.332843E-04
+ 23 36 8.897040E-02 6.491361E-03 5.775390E-04
+ 23 37 9.783269E-02 2.879827E-03 2.817412E-04
+ 23 38 9.311681E-02 1.135197E-02 1.057059E-03
+ 23 39 1.092103E-01 7.354315E-04 8.031667E-05
+ 23 40 9.907919E-02 1.689256E-02 1.673701E-03
+ 23 41 3.075625E-02 2.151095E-05 6.615962E-07
+ 23 42 1.065555E-01 2.363919E-02 2.518887E-03
+ 23 43 1.020821E-01 2.499304E-03 2.551342E-04
+ 23 44 1.161635E-01 3.106541E-02 3.608665E-03
+ 23 45 1.181907E-01 1.644416E-02 1.943547E-03
+ 23 46 1.272638E-01 2.984895E-02 3.798692E-03
+ 24 0 4.652055E-01 2.976823E-03 1.384834E-03
+ 24 1 4.594692E-01 5.030256E-03 2.311248E-03
+ 24 2 4.421337E-01 9.238360E-04 4.084590E-04
+ 24 3 4.534438E-01 1.621298E-03 7.351673E-04
+ 24 4 4.258050E-01 3.629450E-03 1.545438E-03
+ 24 5 5.347097E-01 8.618393E-05 4.608339E-05
+ 24 6 4.035492E-01 5.055657E-03 2.040206E-03
+ 24 7 3.033398E-01 1.722194E-04 5.224101E-05
+ 24 8 3.716472E-01 5.360754E-03 1.992309E-03
+ 24 9 3.164450E-01 5.033786E-04 1.592916E-04
+ 24 10 3.282109E-01 5.155207E-03 1.691995E-03
+ 24 11 3.007504E-01 2.857679E-04 8.594480E-05
+ 24 12 2.788528E-01 4.745920E-03 1.323413E-03
+ 24 13 8.946379E-02 1.722840E-06 1.541318E-07
+ 24 14 2.341711E-01 4.007677E-03 9.384823E-04
+ 24 15 2.124157E-01 6.750986E-04 1.434015E-04
+ 24 16 2.011271E-01 2.652667E-03 5.335233E-04
+ 24 17 1.853436E-01 2.372782E-03 4.397800E-04
+ 24 18 1.823945E-01 9.228915E-04 1.683303E-04
+ 24 19 1.586959E-01 3.847075E-03 6.105149E-04
+ 24 20 1.046971E+00 7.771128E-07 8.136145E-07
+ 24 21 1.380088E-01 3.790725E-03 5.231534E-04
+ 24 22 1.199028E-01 9.333086E-04 1.119063E-04
+ 24 23 1.255443E-01 2.166830E-03 2.720330E-04
+ 24 24 1.127683E-01 3.003871E-03 3.387413E-04
+ 24 25 1.271084E-01 3.856338E-04 4.901727E-05
+ 24 26 1.041182E-01 4.245044E-03 4.419862E-04
+ 24 27 7.898878E-02 1.664946E-04 1.315121E-05
+ 24 28 9.877977E-02 3.591883E-03 3.548054E-04
+ 24 29 9.082694E-02 1.820233E-03 1.653262E-04
+ 24 30 9.797761E-02 1.731869E-03 1.696844E-04
+ 24 31 8.981286E-02 3.968109E-03 3.563872E-04
+ 24 32 1.065426E-01 2.311561E-04 2.462798E-05
+ 24 33 8.967298E-02 5.175476E-03 4.641003E-04
+ 24 34 7.554399E-02 1.716713E-04 1.296874E-05
+ 24 35 9.159107E-02 5.091065E-03 4.662961E-04
+ 24 36 8.604734E-02 1.518425E-03 1.306564E-04
+ 24 37 9.469812E-02 4.159590E-03 3.939053E-04
+ 24 38 9.102963E-02 3.847783E-03 3.502622E-04
+ 24 39 9.985319E-02 3.008942E-03 3.004524E-04
+ 24 40 9.702542E-02 7.125788E-03 6.913826E-04
+ 24 41 1.085972E-01 1.929678E-03 2.095577E-04
+ 24 42 1.042123E-01 1.199175E-02 1.249688E-03
+ 24 43 1.211500E-01 8.294671E-04 1.004899E-04
+ 24 44 1.135880E-01 2.007430E-02 2.280199E-03
+ 24 45 5.091536E-02 5.387266E-07 2.742946E-08
+ 24 46 1.245680E-01 3.287389E-02 4.095035E-03
+[transition-N2cy]
+561 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 3.496679E-01 8.556876E-01 2.992065E-01
+ 0 1 4.259714E-01 1.360643E-01 5.795952E-02
+ 0 2 6.406851E-01 8.007880E-03 5.130530E-03
+ 0 3 7.633972E-01 2.361087E-04 1.802447E-04
+ 0 4 1.820726E-01 4.012089E-06 7.304915E-07
+ 0 5 1.499126E+01 3.458856E-08 5.185262E-07
+ 0 6 3.333497E+01 1.585081E-10 5.283862E-09
+ 0 7 5.946121E+03 9.985600E-12 5.937558E-08
+ 0 8 8.801121E+03 3.534400E-12 3.110668E-08
+ 0 9 2.806304E+01 8.065600E-12 2.263452E-10
+ 0 10 8.378760E+03 1.060900E-12 8.889027E-09
+ 0 11 4.274354E+03 2.190400E-12 9.362545E-09
+ 0 12 4.699520E+03 2.025000E-13 9.516527E-10
+ 0 13 1.034324E+06 9.000000E-16 9.308918E-10
+ 0 14 4.344699E+05 6.400000E-15 2.780607E-09
+ 0 15 1.561275E+04 1.024000E-13 1.598746E-09
+ 0 16 5.513607E+02 1.681000E-13 9.268374E-11
+ 0 17 6.421439E+03 6.250000E-14 4.013399E-10
+ 0 18 1.174011E+05 1.000000E-14 1.174011E-09
+ 0 19 4.850704E+05 1.600000E-15 7.761127E-10
+ 0 20 3.720239E+04 1.600000E-15 5.952382E-11
+ 0 21 1.135376E+04 1.440000E-14 1.634942E-10
+ 0 22 2.702659E+04 1.960000E-14 5.297212E-10
+ 0 23 4.175798E+04 1.000000E-14 4.175798E-10
+ 0 24 3.578199E+04 2.500000E-15 8.945498E-11
+ 0 25 9.272941E+04 1.000000E-16 9.272941E-12
+ 0 26 3.443357E+05 4.000000E-16 1.377343E-10
+ 0 27 1.295919E+05 1.600000E-15 2.073470E-10
+ 0 28 3.721504E+04 3.600000E-15 1.339741E-10
+ 0 29 8.223893E+03 3.600000E-15 2.960602E-11
+ 0 30 7.627985E+02 2.500000E-15 1.906996E-12
+ 0 31 1.113082E+05 4.000000E-16 4.452329E-11
+ 0 33 1.881450E+05 4.000000E-16 7.525802E-11
+ 0 34 8.706791E+04 4.000000E-16 3.482716E-11
+ 0 35 4.596997E+03 9.000000E-16 4.137297E-12
+ 0 36 7.389899E+03 4.000000E-16 2.955959E-12
+ 0 37 4.976245E+04 4.000000E-16 1.990498E-11
+ 0 38 8.384771E+04 4.000000E-16 3.353909E-11
+ 0 39 3.285903E+05 1.000000E-16 3.285903E-11
+ 0 40 2.137034E+05 1.000000E-16 2.137034E-11
+ 0 42 1.204881E+04 1.000000E-16 1.204881E-12
+ 0 43 2.990647E+03 1.000000E-16 2.990647E-13
+ 0 44 3.261076E+04 1.000000E-16 3.261076E-12
+ 0 45 1.711271E+04 4.000000E-16 6.845086E-12
+ 0 46 9.034878E+04 1.000000E-16 9.034878E-12
+ 1 0 2.860819E-01 1.296748E-01 3.709762E-02
+ 1 1 3.712271E-01 6.040493E-01 2.242395E-01
+ 1 2 4.348967E-01 2.417968E-01 1.051566E-01
+ 1 3 6.255638E-01 2.347298E-02 1.468385E-02
+ 1 4 8.069798E-01 9.839878E-04 7.940583E-04
+ 1 5 3.400934E-01 2.193508E-05 7.459975E-06
+ 1 6 5.849165E+00 2.484225E-07 1.453064E-06
+ 1 7 1.075811E+02 1.195085E-09 1.285685E-07
+ 1 8 6.480062E+02 2.975625E-10 1.928224E-07
+ 1 9 6.250705E+03 6.812100E-12 4.258043E-08
+ 1 10 1.790445E+01 1.915456E-10 3.429519E-09
+ 1 11 6.348019E+04 4.900000E-13 3.110529E-08
+ 1 12 1.287736E+03 1.705690E-11 2.196478E-08
+ 1 13 7.213658E+01 2.722500E-12 1.963918E-10
+ 1 14 3.962881E+03 2.340900E-12 9.276708E-09
+ 1 15 9.689408E+03 1.144900E-12 1.109340E-08
+ 1 16 3.296436E+03 5.625000E-13 1.854245E-09
+ 1 17 3.219244E+02 1.664100E-12 5.357144E-10
+ 1 18 3.236746E+03 9.801000E-13 3.172335E-09
+ 1 19 3.737986E+05 8.100000E-15 3.027768E-09
+ 1 20 7.899925E+03 1.225000E-13 9.677409E-10
+ 1 21 4.941089E+01 9.000000E-14 4.446980E-12
+ 1 22 1.119483E+04 8.410000E-14 9.414851E-10
+ 1 23 1.134887E+04 1.600000E-13 1.815820E-09
+ 1 24 7.992692E+03 1.444000E-13 1.154145E-09
+ 1 25 5.801580E+03 2.250000E-14 1.305356E-10
+ 1 26 1.545645E+04 1.000000E-14 1.545645E-10
+ 1 27 1.641656E+04 4.410000E-14 7.239704E-10
+ 1 28 2.196908E+04 3.610000E-14 7.930836E-10
+ 1 29 1.854583E+04 1.960000E-14 3.634983E-10
+ 1 30 2.232035E+03 1.440000E-14 3.214131E-11
+ 1 31 3.390463E+03 1.210000E-14 4.102460E-11
+ 1 32 3.958640E+04 4.900000E-15 1.939734E-10
+ 1 33 2.609597E+06 1.000000E-16 2.609597E-10
+ 1 34 4.005747E+04 4.900000E-15 1.962816E-10
+ 1 35 5.805577E+03 1.440000E-14 8.360030E-11
+ 1 36 6.309647E+02 1.690000E-14 1.066330E-11
+ 1 37 4.976245E+02 1.000000E-14 4.976245E-12
+ 1 38 8.331277E+03 4.900000E-15 4.082326E-11
+ 1 39 8.514382E+04 9.000000E-16 7.662944E-11
+ 1 40 8.628346E+05 1.000000E-16 8.628346E-11
+ 1 42 3.942769E+05 1.000000E-16 3.942769E-11
+ 1 43 3.529249E+04 4.000000E-16 1.411700E-11
+ 1 44 1.642139E+03 9.000000E-16 1.477926E-12
+ 1 45 1.127127E+03 9.000000E-16 1.014415E-12
+ 1 46 4.619253E+03 1.600000E-15 7.390804E-12
+ 2 0 2.846388E-01 1.330289E-02 3.786519E-03
+ 2 1 3.026410E-01 2.187367E-01 6.619868E-02
+ 2 2 3.924972E-01 4.018030E-01 1.577066E-01
+ 2 3 4.464726E-01 3.179974E-01 1.419771E-01
+ 2 4 6.190437E-01 4.553549E-02 2.818846E-02
+ 2 5 8.200386E-01 2.551617E-03 2.092424E-03
+ 2 6 5.194148E-01 7.174700E-05 3.726646E-05
+ 2 7 3.174278E+00 1.078794E-06 3.424392E-06
+ 2 8 4.319430E+01 8.903810E-09 3.845938E-07
+ 2 9 4.928411E+01 5.995405E-09 2.954782E-07
+ 2 10 9.614942E+01 4.297329E-10 4.131857E-08
+ 2 11 1.129019E+01 2.355161E-09 2.659021E-08
+ 2 12 2.932478E+03 1.102240E-11 3.232295E-08
+ 2 13 3.424236E+03 4.161600E-12 1.425030E-08
+ 2 14 5.397895E-01 3.733210E-11 2.015148E-11
+ 2 15 6.764063E+02 1.747240E-11 1.181844E-08
+ 2 16 4.154660E+02 3.856410E-11 1.602207E-08
+ 2 17 7.572321E+02 2.528100E-12 1.914359E-09
+ 2 18 4.231953E+03 6.889000E-13 2.915392E-09
+ 2 19 2.043923E+03 4.161600E-12 8.505991E-09
+ 2 20 6.159842E+03 7.056000E-13 4.346384E-09
+ 2 21 1.192922E+02 1.795600E-12 2.142010E-10
+ 2 22 2.127320E+02 3.240000E-12 6.892517E-10
+ 2 23 2.590196E+03 7.921000E-13 2.051694E-09
+ 2 24 3.629734E+04 5.760000E-14 2.090727E-09
+ 2 25 1.186525E+04 9.000000E-14 1.067873E-09
+ 2 26 7.722065E+02 1.444000E-13 1.115066E-10
+ 2 27 1.973855E+06 1.000000E-16 1.973855E-10
+ 2 28 3.878235E+03 2.704000E-13 1.048675E-09
+ 2 29 2.521792E+03 5.625000E-13 1.418508E-09
+ 2 30 2.594768E+03 3.249000E-13 8.430403E-10
+ 2 31 2.813407E+03 4.840000E-14 1.361689E-10
+ 2 32 4.900473E+04 9.000000E-16 4.410425E-11
+ 2 33 3.152200E+04 1.210000E-14 3.814162E-10
+ 2 34 9.201198E+04 6.400000E-15 5.888766E-10
+ 2 35 7.321445E+04 6.400000E-15 4.685725E-10
+ 2 36 1.240351E+04 1.690000E-14 2.096193E-10
+ 2 37 7.823780E+02 4.410000E-14 3.450287E-11
+ 2 38 4.824077E+01 6.760000E-14 3.261076E-12
+ 2 39 9.296918E+02 5.760000E-14 5.355025E-11
+ 2 40 3.713124E+03 2.890000E-14 1.073093E-10
+ 2 41 2.569440E+04 4.900000E-15 1.259026E-10
+ 2 42 1.214161E+05 9.000000E-16 1.092745E-10
+ 2 43 7.484901E+03 1.000000E-14 7.484901E-11
+ 2 44 2.052152E+03 1.960000E-14 4.022219E-11
+ 2 45 6.893206E+02 2.250000E-14 1.550971E-11
+ 2 46 1.741093E+02 1.690000E-14 2.942447E-12
+ 3 0 3.969792E-01 1.214460E-03 4.821153E-04
+ 3 1 2.857582E-01 3.601089E-02 1.029041E-02
+ 3 2 3.160258E-01 2.717449E-01 8.587839E-02
+ 3 3 4.155445E-01 2.461240E-01 1.022755E-01
+ 3 4 4.586833E-01 3.663596E-01 1.680430E-01
+ 3 5 6.197978E-01 7.307630E-02 4.529253E-02
+ 3 6 8.265644E-01 5.281260E-03 4.365302E-03
+ 3 7 6.540605E-01 1.844104E-04 1.206156E-04
+ 3 8 2.111900E+00 4.018100E-06 8.485828E-06
+ 3 9 7.439275E+00 1.112156E-07 8.273633E-07
+ 3 10 2.615866E+00 9.317146E-08 2.437241E-07
+ 3 11 8.345606E+00 1.879915E-08 1.568903E-07
+ 3 12 4.328473E+00 1.435683E-08 6.214316E-08
+ 3 13 2.910730E+03 1.474560E-11 4.292046E-08
+ 3 14 1.242185E+01 4.351396E-10 5.405237E-09
+ 3 15 5.991907E-01 6.400000E-11 3.834821E-11
+ 3 16 1.804369E+03 2.433600E-12 4.391112E-09
+ 3 17 3.800719E+01 2.452356E-10 9.320717E-09
+ 3 18 3.397422E+01 8.262810E-11 2.807226E-09
+ 3 19 3.461823E+02 3.686400E-12 1.276166E-09
+ 3 20 3.523724E+03 2.528100E-12 8.908326E-09
+ 3 21 1.993238E+03 3.312400E-12 6.602401E-09
+ 3 22 2.168064E+05 1.600000E-15 3.468903E-10
+ 3 23 1.353678E+02 1.281640E-11 1.734928E-09
+ 3 24 3.045295E+02 1.421290E-11 4.328247E-09
+ 3 25 2.581419E+03 1.144900E-12 2.955466E-09
+ 3 26 7.006026E+02 1.020100E-12 7.146848E-10
+ 3 27 2.334431E-02 1.060900E-12 2.476598E-14
+ 3 28 8.869819E+03 4.410000E-14 3.911590E-10
+ 3 29 6.325329E+05 1.600000E-15 1.012053E-09
+ 3 30 3.313093E+03 3.969000E-13 1.314967E-09
+ 3 31 7.547585E+02 1.368900E-12 1.033189E-09
+ 3 32 3.468847E+02 1.123600E-12 3.897597E-10
+ 3 33 3.962557E+01 1.369000E-13 5.424741E-12
+ 3 34 1.492972E+03 1.444000E-13 2.155852E-10
+ 3 35 1.161464E+03 5.929000E-13 6.886321E-10
+ 3 36 1.663173E+03 5.329000E-13 8.863047E-10
+ 3 37 3.138358E+03 2.116000E-13 6.640766E-10
+ 3 38 8.780061E+03 3.240000E-14 2.844740E-10
+ 3 39 1.618884E+04 2.500000E-15 4.047209E-11
+ 3 40 5.795588E+03 1.600000E-15 9.272941E-12
+ 3 41 7.931383E+03 1.210000E-14 9.596973E-11
+ 3 42 7.113509E+03 2.560000E-14 1.821058E-10
+ 3 43 9.372192E+03 2.250000E-14 2.108743E-10
+ 3 44 2.900418E+04 6.400000E-15 1.856268E-10
+ 3 45 3.367593E+05 4.000000E-16 1.347037E-10
+ 3 46 4.917009E+03 1.690000E-14 8.309744E-11
+ 4 0 6.614361E-01 1.091047E-04 7.216579E-05
+ 4 1 3.487428E-01 4.548376E-03 1.586213E-03
+ 4 2 2.873582E-01 6.430759E-02 1.847931E-02
+ 4 3 3.285717E-01 2.937956E-01 9.653293E-02
+ 4 4 4.453342E-01 1.329248E-01 5.919597E-02
+ 4 5 4.713327E-01 3.893002E-01 1.834899E-01
+ 4 6 6.243340E-01 1.049378E-01 6.551622E-02
+ 4 7 8.316207E-01 9.629338E-03 8.007957E-03
+ 4 8 7.383052E-01 4.281969E-04 3.161400E-04
+ 4 9 1.463993E+00 1.623703E-05 2.377091E-05
+ 4 10 2.231227E+00 1.498862E-06 3.344300E-06
+ 4 11 1.368906E-03 9.628908E-07 1.318107E-09
+ 4 12 3.474491E+00 1.894513E-07 6.582468E-07
+ 4 13 2.111344E+00 3.611520E-08 7.625160E-08
+ 4 14 2.799635E+01 3.384912E-09 9.476518E-08
+ 4 15 4.090200E+00 2.949576E-09 1.206436E-08
+ 4 16 7.131106E-01 6.250000E-10 4.456941E-10
+ 4 17 6.779180E+00 3.232804E-10 2.191576E-09
+ 4 18 4.212223E+01 9.196810E-11 3.873901E-09
+ 4 19 3.803667E+00 6.240004E-10 2.373490E-09
+ 4 20 7.919253E-01 2.981160E-11 2.360856E-11
+ 4 21 3.369093E+01 1.136356E-10 3.828489E-09
+ 4 22 1.386873E+02 4.121640E-11 5.716192E-09
+ 4 23 4.802158E+02 2.656900E-12 1.275885E-09
+ 4 24 1.757183E+03 4.096000E-13 7.197422E-10
+ 4 25 2.388861E+02 2.016010E-11 4.815967E-09
+ 4 26 1.841738E+02 2.683240E-11 4.941826E-09
+ 4 27 1.761258E+03 8.281000E-13 1.458497E-09
+ 4 28 6.191496E-01 1.004890E-11 6.221772E-12
+ 4 29 7.328782E+01 1.369000E-11 1.003310E-09
+ 4 30 6.556547E+02 2.822400E-12 1.850520E-09
+ 4 31 4.575400E+04 3.610000E-14 1.651719E-09
+ 4 32 4.217280E+03 2.304000E-13 9.716613E-10
+ 4 33 3.439319E+03 1.024000E-13 3.521862E-10
+ 4 34 2.708947E+01 9.216000E-13 2.496566E-11
+ 4 35 1.468375E+02 5.625000E-13 8.259610E-11
+ 4 36 2.751494E+04 1.690000E-14 4.650024E-10
+ 4 37 8.134944E+02 1.102500E-12 8.968776E-10
+ 4 38 4.611550E+02 2.280100E-12 1.051480E-09
+ 4 39 4.410477E+02 1.876900E-12 8.278025E-10
+ 4 40 5.899865E+02 7.056000E-13 4.162945E-10
+ 4 41 1.941653E+03 4.840000E-14 9.397601E-11
+ 4 42 1.202713E+01 7.290000E-14 8.767777E-13
+ 4 43 3.604280E+02 2.601000E-13 9.374731E-11
+ 4 44 8.399968E+02 2.916000E-13 2.449431E-10
+ 4 45 1.899153E+03 1.849000E-13 3.511533E-10
+ 4 46 4.800534E+03 7.840000E-14 3.763619E-10
+ 5 0 7.679795E-01 1.003800E-05 7.708977E-06
+ 5 1 5.135189E-01 5.231224E-04 2.686332E-04
+ 5 2 3.209021E-01 1.058370E-02 3.396333E-03
+ 5 3 2.914106E-01 9.456979E-02 2.755864E-02
+ 5 4 3.413670E-01 2.898770E-01 9.895446E-02
+ 5 5 4.932913E-01 5.700321E-02 2.811919E-02
+ 5 6 4.846433E-01 3.891161E-01 1.885825E-01
+ 5 7 6.303368E-01 1.406105E-01 8.863199E-02
+ 5 8 8.317352E-01 1.658186E-02 1.379172E-02
+ 5 9 7.937620E-01 1.024552E-03 8.132503E-04
+ 5 10 1.103726E+00 7.804539E-05 8.614070E-05
+ 5 11 1.305280E+00 1.465213E-05 1.912514E-05
+ 5 12 2.282976E-01 6.405354E-06 1.462327E-06
+ 5 13 2.166238E+00 9.190098E-07 1.990794E-06
+ 5 14 2.233820E+00 4.264225E-08 9.525511E-08
+ 5 15 1.128966E+01 1.369602E-08 1.546234E-07
+ 5 16 1.839298E+02 2.924100E-10 5.378291E-08
+ 5 17 7.562507E-02 1.122328E-08 8.487616E-10
+ 5 18 1.979118E+02 1.568160E-11 3.103574E-09
+ 5 19 6.149450E+00 4.844401E-10 2.979040E-09
+ 5 20 6.470233E+00 3.519376E-10 2.277118E-09
+ 5 21 4.563362E-01 6.838225E-10 3.120529E-10
+ 5 22 5.877850E+01 1.444000E-11 8.487616E-10
+ 5 23 7.248567E+00 4.190209E-10 3.037301E-09
+ 5 24 1.382508E+01 1.157776E-10 1.600634E-09
+ 5 25 3.274309E+00 8.236900E-12 2.697016E-11
+ 5 26 1.508227E+02 1.672810E-11 2.522977E-09
+ 5 27 8.845836E+02 5.198400E-12 4.598419E-09
+ 5 28 9.666611E+01 2.590810E-11 2.504435E-09
+ 5 29 5.749392E+01 1.742400E-12 1.001774E-10
+ 5 30 5.350812E+01 1.681000E-11 8.994716E-10
+ 5 31 7.668647E+01 3.648160E-11 2.797645E-09
+ 5 32 2.009547E+02 1.459240E-11 2.932412E-09
+ 5 33 3.575506E+04 4.410000E-14 1.576798E-09
+ 5 34 9.000551E+01 4.080400E-12 3.672585E-10
+ 5 35 1.770072E-04 4.284900E-12 7.584582E-16
+ 5 36 2.869764E+02 7.396000E-13 2.122477E-10
+ 5 37 8.674511E+03 6.760000E-14 5.863970E-10
+ 5 38 3.037847E+03 2.916000E-13 8.858363E-10
+ 5 39 1.121445E+06 9.000000E-16 1.009301E-09
+ 5 40 1.554716E+03 5.929000E-13 9.217913E-10
+ 5 41 3.566302E+02 1.849600E-12 6.596231E-10
+ 5 42 1.533244E+02 2.190400E-12 3.358417E-10
+ 5 43 6.510412E+01 1.345600E-12 8.760411E-11
+ 5 44 3.607411E-02 3.364000E-13 1.213533E-14
+ 5 45 7.469448E+04 9.000000E-16 6.722503E-11
+ 5 46 7.436828E+02 2.916000E-13 2.168579E-10
+ 6 0 9.780821E-02 9.577754E-07 9.367829E-08
+ 6 1 6.402587E-01 5.927091E-05 3.794872E-05
+ 6 2 4.353387E-01 1.509060E-03 6.569522E-04
+ 6 3 3.051921E-01 1.962866E-02 5.990513E-03
+ 6 4 2.971084E-01 1.233828E-01 3.665806E-02
+ 6 5 3.554477E-01 2.637629E-01 9.375394E-02
+ 6 6 6.211757E-01 1.317428E-02 8.183540E-03
+ 6 7 4.987320E-01 3.651061E-01 1.820901E-01
+ 6 8 6.373361E-01 1.811156E-01 1.154315E-01
+ 6 9 8.245098E-01 2.891317E-02 2.383919E-02
+ 6 10 8.218771E-01 2.804254E-03 2.304752E-03
+ 6 11 9.374493E-01 4.042488E-04 3.789628E-04
+ 6 12 1.037549E+00 1.020318E-04 1.058631E-04
+ 6 13 5.114449E-01 3.250094E-05 1.662244E-05
+ 6 14 1.644824E+00 3.959543E-06 6.512751E-06
+ 6 15 2.173240E+00 1.669621E-07 3.628488E-07
+ 6 16 3.034173E+01 2.605082E-09 7.904267E-08
+ 6 17 7.966196E+00 2.745318E-08 2.186974E-07
+ 6 18 6.219221E-02 3.178019E-08 1.976480E-09
+ 6 19 2.266997E+00 2.989902E-09 6.778101E-09
+ 6 20 7.830940E+00 7.123561E-10 5.578418E-09
+ 6 21 4.211953E+00 5.400976E-10 2.274866E-09
+ 6 22 2.425634E+00 5.726449E-10 1.389027E-09
+ 6 23 2.850113E-03 3.367225E-10 9.596973E-13
+ 6 24 6.360236E+00 1.739761E-10 1.106529E-09
+ 6 25 2.424000E+00 6.395841E-10 1.550352E-09
+ 6 26 1.550992E+00 1.223236E-10 1.897229E-10
+ 6 27 1.818936E+01 3.036010E-11 5.522308E-10
+ 6 28 3.206637E+01 7.259040E-11 2.327711E-09
+ 6 29 6.300528E+02 3.422500E-12 2.156356E-09
+ 6 30 3.686609E+01 1.122250E-11 4.137297E-10
+ 6 31 5.644525E+01 4.326400E-12 2.442047E-10
+ 6 32 2.742062E+02 7.236100E-12 1.984184E-09
+ 6 33 9.287177E+01 3.340840E-11 3.102697E-09
+ 6 34 9.435516E+01 2.430490E-11 2.293293E-09
+ 6 35 3.605622E+02 2.073600E-12 7.476618E-10
+ 6 36 2.272557E+00 4.080400E-12 9.272941E-12
+ 6 37 2.281885E+01 1.346890E-11 3.073449E-10
+ 6 38 8.631257E+01 1.082410E-11 9.342559E-10
+ 6 39 3.901391E+02 3.276100E-12 1.278135E-09
+ 6 40 1.351607E+04 9.000000E-14 1.216447E-09
+ 6 41 2.727396E+03 3.364000E-13 9.174961E-10
+ 6 42 1.131348E+03 5.041000E-13 5.703126E-10
+ 6 43 2.314659E+03 1.225000E-13 2.835457E-10
+ 6 44 3.742798E+03 2.560000E-14 9.581563E-11
+ 6 45 2.950770E+01 3.249000E-13 9.587052E-12
+ 6 46 1.602736E+01 5.476000E-13 8.776585E-12
+ 7 0 1.954091E+00 9.646615E-08 1.885036E-07
+ 7 1 3.350369E-01 6.964796E-06 2.333464E-06
+ 7 2 5.694118E-01 2.092385E-04 1.191429E-04
+ 7 3 3.822035E-01 3.434805E-03 1.312795E-03
+ 7 4 2.961240E-01 3.193392E-02 9.456401E-03
+ 7 5 3.042692E-01 1.473015E-01 4.481931E-02
+ 7 6 3.732986E-01 2.170224E-01 8.101417E-02
+ 7 7 1.122296E-01 2.634931E-04 2.957173E-05
+ 7 8 5.139748E-01 3.082083E-01 1.584113E-01
+ 7 9 6.447351E-01 2.266042E-01 1.460997E-01
+ 7 10 8.099518E-01 5.342940E-02 4.327524E-02
+ 7 11 8.274977E-01 8.766403E-03 7.254178E-03
+ 7 12 8.778275E-01 2.022345E-03 1.775270E-03
+ 7 13 9.553147E-01 5.944458E-04 5.678829E-04
+ 7 14 7.350665E-01 1.704983E-04 1.253276E-04
+ 7 15 1.273385E+00 2.713472E-05 3.455294E-05
+ 7 16 1.356616E+00 3.481769E-06 4.723426E-06
+ 7 17 3.595703E-01 9.079803E-07 3.264827E-07
+ 7 18 2.539032E+00 4.012842E-07 1.018873E-06
+ 7 19 2.934114E-01 9.857088E-08 2.892183E-08
+ 7 20 1.393087E+00 1.597601E-09 2.225596E-09
+ 7 21 1.326407E+01 1.957178E-09 2.596014E-08
+ 7 22 3.802719E-01 4.487660E-09 1.706531E-09
+ 7 23 1.826328E+03 1.488400E-12 2.718307E-09
+ 7 24 7.572464E-01 3.783025E-10 2.864682E-10
+ 7 25 2.901522E+00 6.368040E-11 1.847701E-10
+ 7 26 3.426274E+00 4.214809E-10 1.444109E-09
+ 7 27 1.937194E+00 5.148361E-10 9.973374E-10
+ 7 28 1.013789E+00 3.696640E-11 3.747613E-11
+ 7 29 5.698363E+00 8.445610E-11 4.812615E-10
+ 7 30 9.978049E+00 1.227664E-10 1.224969E-09
+ 7 31 3.868498E+01 1.797760E-11 6.954630E-10
+ 7 32 9.821187E-01 3.422500E-12 3.361301E-12
+ 7 33 1.043408E+02 6.002500E-12 6.263057E-10
+ 7 34 2.880246E+03 6.084000E-13 1.752342E-09
+ 7 35 1.301290E+02 1.444000E-11 1.879062E-09
+ 7 36 5.809846E+01 1.697440E-11 9.861865E-10
+ 7 37 4.036278E+01 3.572100E-12 1.441799E-10
+ 7 38 5.097108E+01 1.345600E-12 6.858668E-11
+ 7 39 5.307831E+01 1.128960E-11 5.992328E-10
+ 7 40 7.254646E+01 1.592010E-11 1.154947E-09
+ 7 41 1.260113E+02 1.056250E-11 1.330994E-09
+ 7 42 3.306502E+02 3.348900E-12 1.107314E-09
+ 7 43 3.971998E+03 1.764000E-13 7.006604E-10
+ 7 44 9.804179E+02 3.364000E-13 3.298126E-10
+ 7 45 8.859768E+01 1.123600E-12 9.954836E-11
+ 7 46 6.648010E+00 1.254400E-12 8.339264E-12
+ 8 0 1.303657E+01 1.097256E-08 1.430446E-07
+ 8 1 3.321887E-02 9.051810E-07 3.006909E-08
+ 8 2 4.894242E-01 3.077354E-05 1.506131E-05
+ 8 3 4.963371E-01 5.909532E-04 2.933120E-04
+ 8 4 3.414981E-01 6.919162E-03 2.362881E-03
+ 8 5 2.918524E-01 4.797164E-02 1.400064E-02
+ 8 6 3.147932E-01 1.615816E-01 5.086479E-02
+ 8 7 4.006640E-01 1.497186E-01 5.998686E-02
+ 8 8 3.399111E-01 2.694744E-02 9.159735E-03
+ 8 9 5.294401E-01 2.016233E-01 1.067475E-01
+ 8 10 6.516958E-01 2.615298E-01 1.704378E-01
+ 8 11 7.944570E-01 1.006021E-01 7.992405E-02
+ 8 12 8.279795E-01 2.816196E-02 2.331753E-02
+ 8 13 8.655765E-01 9.451373E-03 8.180886E-03
+ 8 14 9.315728E-01 3.378882E-03 3.147674E-03
+ 8 15 8.715015E-01 1.111324E-03 9.685201E-04
+ 8 16 1.089861E+00 2.792993E-04 3.043974E-04
+ 8 17 1.143167E+00 6.960632E-05 7.957161E-05
+ 8 18 8.937139E-01 2.218928E-05 1.983087E-05
+ 8 19 1.448675E+00 6.944753E-06 1.006069E-05
+ 8 20 9.013972E-01 1.697444E-06 1.530071E-06
+ 8 21 1.140954E+00 2.375588E-07 2.710436E-07
+ 8 22 2.086922E+00 1.389277E-07 2.899312E-07
+ 8 23 2.324791E-01 4.678136E-08 1.087569E-08
+ 8 24 1.004652E+01 1.796912E-09 1.805271E-08
+ 8 25 5.040472E-01 9.486400E-10 4.781594E-10
+ 8 26 8.686981E-02 1.449325E-09 1.259026E-10
+ 8 27 1.153324E+01 2.241009E-10 2.584610E-09
+ 8 28 4.093107E+00 3.415104E-10 1.397839E-09
+ 8 29 2.205081E+00 3.334276E-10 7.352349E-10
+ 8 30 4.785119E-03 7.452900E-12 3.566302E-14
+ 8 31 2.244835E+00 1.592644E-10 3.575223E-10
+ 8 32 5.606768E+00 1.413721E-10 7.926405E-10
+ 8 33 2.782436E+01 1.428840E-11 3.975656E-10
+ 8 34 3.576513E-02 5.428900E-12 1.941653E-13
+ 8 35 4.189407E+01 1.162810E-11 4.871484E-10
+ 8 36 2.020567E+03 5.625000E-13 1.136569E-09
+ 8 37 2.045062E+02 4.884100E-12 9.988290E-10
+ 8 38 3.568589E+01 1.030410E-11 3.677110E-10
+ 8 39 2.204496E+00 3.960100E-12 8.730025E-12
+ 8 40 1.044319E+03 1.296000E-13 1.353438E-10
+ 8 41 7.510640E+01 6.350400E-12 4.769557E-10
+ 8 42 5.466683E+01 1.346890E-11 7.363021E-10
+ 8 43 5.946313E+01 1.332250E-11 7.921975E-10
+ 8 44 8.545536E+01 7.840000E-12 6.699700E-10
+ 8 45 1.837628E+02 2.496400E-12 4.587455E-10
+ 8 46 1.553296E+03 1.600000E-13 2.485274E-10
+ 9 0 1.020448E+01 1.654862E-09 1.688701E-08
+ 9 1 1.585664E+00 1.421139E-07 2.253450E-07
+ 9 2 1.342137E-01 5.224653E-06 7.012201E-07
+ 9 3 5.287446E-01 1.106498E-04 5.850547E-05
+ 9 4 4.207031E-01 1.500513E-03 6.312706E-04
+ 9 5 3.122809E-01 1.304625E-02 4.074095E-03
+ 9 6 2.933254E-01 6.718172E-02 1.970610E-02
+ 9 7 3.324804E-01 1.559371E-01 5.184603E-02
+ 9 8 4.549720E-01 6.588655E-02 2.997653E-02
+ 9 9 4.313499E-01 1.015073E-01 4.378516E-02
+ 9 10 5.342563E-01 5.764894E-02 3.079931E-02
+ 9 11 6.572675E-01 2.253194E-01 1.480951E-01
+ 9 12 7.855751E-01 1.618784E-01 1.271677E-01
+ 9 13 8.318933E-01 7.861874E-02 6.540240E-02
+ 9 14 8.709880E-01 3.897691E-02 3.394842E-02
+ 9 15 9.295426E-01 1.877896E-02 1.745584E-02
+ 9 16 9.381111E-01 8.312365E-03 7.797921E-03
+ 9 17 1.035628E+00 3.243590E-03 3.359151E-03
+ 9 18 1.088985E+00 1.244823E-03 1.355594E-03
+ 9 19 1.056224E+00 5.011433E-04 5.293197E-04
+ 9 20 1.190818E+00 1.931116E-04 2.299607E-04
+ 9 21 1.133012E+00 6.974221E-05 7.901878E-05
+ 9 22 1.188131E+00 2.393000E-05 2.843198E-05
+ 9 23 1.342505E+00 9.567515E-06 1.284444E-05
+ 9 24 1.094792E+00 3.379310E-06 3.699642E-06
+ 9 25 1.471325E+00 1.004525E-06 1.477983E-06
+ 9 26 1.202131E+00 3.922642E-07 4.715530E-07
+ 9 27 1.138205E+00 1.420838E-07 1.617204E-07
+ 9 28 2.024630E+00 3.881688E-08 7.858982E-08
+ 9 29 5.896054E-01 1.012438E-08 5.969392E-09
+ 9 30 1.574832E+00 6.998996E-09 1.102224E-08
+ 9 31 1.801530E+00 8.248384E-10 1.485971E-09
+ 9 32 5.681083E-01 1.092025E-10 6.203885E-11
+ 9 33 1.757667E+00 5.832225E-10 1.025111E-09
+ 9 34 1.248968E+01 2.143690E-11 2.677401E-10
+ 9 35 1.853646E+01 2.097640E-11 3.888282E-10
+ 9 36 1.097140E-02 2.134440E-11 2.341779E-13
+ 9 37 2.010022E+01 1.253160E-11 2.518879E-10
+ 9 38 1.829523E+02 4.665600E-12 8.535825E-10
+ 9 39 9.285557E+02 9.025000E-13 8.380215E-10
+ 9 40 7.088036E+01 4.752400E-12 3.368518E-10
+ 9 41 1.995664E+00 3.724900E-12 7.433649E-12
+ 9 42 6.147847E+02 2.025000E-13 1.244939E-10
+ 9 43 2.607138E+02 1.512900E-12 3.944340E-10
+ 9 44 8.440803E+01 6.250000E-12 5.275502E-10
+ 9 45 5.243106E+01 9.241600E-12 4.845469E-10
+ 9 46 4.227262E+01 8.468100E-12 3.579688E-10
+ 10 0 3.796737E+00 3.857296E-10 1.464514E-09
+ 10 1 3.388964E+00 2.917947E-08 9.888817E-08
+ 10 2 2.318483E-02 1.077672E-06 2.498565E-08
+ 10 3 3.913089E-01 2.387251E-05 9.341525E-06
+ 10 4 4.843175E-01 3.523850E-04 1.706662E-04
+ 10 5 3.545925E-01 3.486651E-03 1.236340E-03
+ 10 6 2.948165E-01 2.251765E-02 6.638575E-03
+ 10 7 3.038933E-01 8.008483E-02 2.433724E-02
+ 10 8 3.683210E-01 1.086591E-01 4.002143E-02
+ 10 9 9.196290E-01 1.812076E-03 1.666438E-03
+ 10 10 4.924348E-01 1.513750E-01 7.454230E-02
+ 10 11 7.157504E-01 7.553447E-03 5.406383E-03
+ 10 12 6.417815E-01 5.943518E-02 3.814440E-02
+ 10 13 7.859745E-01 1.295086E-01 1.017904E-01
+ 10 14 8.430024E-01 1.265369E-01 1.066709E-01
+ 10 15 8.858426E-01 1.046064E-01 9.266484E-02
+ 10 16 9.405895E-01 7.756784E-02 7.295950E-02
+ 10 17 9.725960E-01 5.207222E-02 5.064524E-02
+ 10 18 1.030769E+00 3.188115E-02 3.286209E-02
+ 10 19 1.079321E+00 1.869123E-02 2.017384E-02
+ 10 20 1.101271E+00 1.079358E-02 1.188665E-02
+ 10 21 1.152442E+00 6.045742E-03 6.967367E-03
+ 10 22 1.175650E+00 3.294652E-03 3.873357E-03
+ 10 23 1.206726E+00 1.759936E-03 2.123760E-03
+ 10 24 1.247082E+00 9.420793E-04 1.174850E-03
+ 10 25 1.244398E+00 4.922417E-04 6.125444E-04
+ 10 26 1.284835E+00 2.512330E-04 3.227928E-04
+ 10 27 1.293430E+00 1.290219E-04 1.668807E-04
+ 10 28 1.299274E+00 6.486112E-05 8.427239E-05
+ 10 29 1.331838E+00 3.180881E-05 4.236418E-05
+ 10 30 1.295768E+00 1.545685E-05 2.002850E-05
+ 10 31 1.343378E+00 7.503874E-06 1.008054E-05
+ 10 32 1.331968E+00 3.437390E-06 4.578494E-06
+ 10 33 1.288288E+00 1.574925E-06 2.028956E-06
+ 10 34 1.355305E+00 7.284452E-07 9.872651E-07
+ 10 35 1.285027E+00 2.945341E-07 3.784844E-07
+ 10 36 1.321019E+00 1.318416E-07 1.741653E-07
+ 10 37 1.250402E+00 5.257849E-08 6.574424E-08
+ 10 38 1.281156E+00 1.888700E-08 2.419719E-08
+ 10 39 1.485689E+00 8.046090E-09 1.195398E-08
+ 10 40 5.397940E-01 2.426548E-09 1.309836E-09
+ 10 41 3.710496E+00 8.003241E-10 2.969599E-09
+ 10 42 7.220289E-06 3.087049E-10 2.228939E-15
+ 10 43 5.610429E+00 4.678560E-11 2.624873E-10
+ 10 44 3.797417E+00 2.199610E-11 8.352837E-11
+ 10 45 2.393382E+01 6.400900E-12 1.531980E-10
+ 10 46 8.323086E+02 5.329000E-13 4.435372E-10
+ 11 0 4.837218E+01 8.500840E-11 4.112042E-09
+ 11 1 2.713127E+00 5.371424E-09 1.457336E-08
+ 11 2 2.858356E-01 1.887034E-07 5.393813E-08
+ 11 3 2.310504E-01 4.208857E-06 9.724584E-07
+ 11 4 4.965457E-01 6.413527E-05 3.184609E-05
+ 11 5 3.901918E-01 6.770295E-04 2.641714E-04
+ 11 6 3.052028E-01 4.826720E-03 1.473128E-03
+ 11 7 2.952022E-01 2.090348E-02 6.170753E-03
+ 11 8 3.370055E-01 4.138879E-02 1.394825E-02
+ 11 9 4.736619E-01 1.419364E-02 6.722987E-03
+ 11 10 4.350921E-01 2.882219E-02 1.254031E-02
+ 11 11 5.308046E-01 1.617816E-02 8.587444E-03
+ 11 12 6.561893E-01 5.216118E-02 3.422761E-02
+ 11 13 8.122817E-01 1.895612E-02 1.539771E-02
+ 11 14 1.017667E+00 2.278116E-04 2.318365E-04
+ 11 15 8.645876E-01 6.411184E-03 5.543030E-03
+ 11 16 9.081343E-01 2.392901E-02 2.173075E-02
+ 11 17 9.655421E-01 4.401067E-02 4.249416E-02
+ 11 18 1.001209E+00 6.026607E-02 6.033892E-02
+ 11 19 1.047009E+00 6.923748E-02 7.249228E-02
+ 11 20 1.091935E+00 7.182544E-02 7.842871E-02
+ 11 21 1.124939E+00 7.021423E-02 7.898672E-02
+ 11 22 1.161561E+00 6.567611E-02 7.628679E-02
+ 11 23 1.191743E+00 5.948256E-02 7.088792E-02
+ 11 24 1.218796E+00 5.263032E-02 6.414561E-02
+ 11 25 1.244733E+00 4.589185E-02 5.712309E-02
+ 11 26 1.263810E+00 3.951064E-02 4.993395E-02
+ 11 27 1.282235E+00 3.366685E-02 4.316882E-02
+ 11 28 1.296365E+00 2.850228E-02 3.694934E-02
+ 11 29 1.306783E+00 2.397824E-02 3.133437E-02
+ 11 30 1.315419E+00 2.005813E-02 2.638485E-02
+ 11 31 1.319438E+00 1.669933E-02 2.203372E-02
+ 11 32 1.321871E+00 1.384106E-02 1.829609E-02
+ 11 33 1.321103E+00 1.141042E-02 1.507433E-02
+ 11 34 1.317376E+00 9.359378E-03 1.232982E-02
+ 11 35 1.312078E+00 7.635114E-03 1.001786E-02
+ 11 36 1.303663E+00 6.184569E-03 8.062592E-03
+ 11 37 1.293803E+00 4.975588E-03 6.437429E-03
+ 11 38 1.281612E+00 3.967995E-03 5.085431E-03
+ 11 39 1.267721E+00 3.133094E-03 3.971888E-03
+ 11 40 1.252771E+00 2.446412E-03 3.064793E-03
+ 11 41 1.235016E+00 1.883991E-03 2.326759E-03
+ 11 42 1.218254E+00 1.428338E-03 1.740079E-03
+ 11 43 1.197712E+00 1.062706E-03 1.272815E-03
+ 11 44 1.178753E+00 7.730029E-04 9.111798E-04
+ 11 45 1.157718E+00 5.474449E-04 6.337869E-04
+ 11 46 1.135769E+00 3.751667E-04 4.261026E-04
+[transition-N2lbh]
+ 2040 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 3.457441E-05 4.281404E-02 1.480270E-06
+ 0 1 3.457445E-05 1.514844E-01 5.237491E-06
+ 0 2 3.457438E-05 2.482599E-01 8.583432E-06
+ 0 3 3.457445E-05 2.501098E-01 8.647408E-06
+ 0 4 3.457444E-05 1.733836E-01 5.994640E-06
+ 0 5 3.457446E-05 8.773359E-02 3.033341E-06
+ 0 6 3.457431E-05 3.354738E-02 1.159877E-06
+ 0 7 3.457449E-05 9.901502E-03 3.423394E-07
+ 0 8 3.457453E-05 2.284490E-03 7.898517E-08
+ 0 9 3.457363E-05 4.147031E-04 1.433779E-08
+ 0 10 3.457692E-05 5.931649E-05 2.050981E-09
+ 0 11 3.457291E-05 6.663832E-06 2.303881E-10
+ 0 12 3.454563E-05 5.833293E-07 2.015148E-11
+ 0 13 3.455463E-05 3.924757E-08 1.356185E-12
+ 0 14 3.497840E-05 1.986485E-09 6.948406E-14
+ 0 15 3.578410E-05 7.310250E-11 2.615907E-15
+ 0 16 3.347478E-05 1.849600E-12 6.191496E-17
+ 0 17 0.000000E+00 2.890000E-14 0.000000E+00
+ 0 18 0.000000E+00 1.000000E-16 0.000000E+00
+ 1 0 3.457437E-05 1.154141E-01 3.990371E-06
+ 1 1 3.457442E-05 1.932129E-01 6.680223E-06
+ 1 2 3.457434E-05 8.086595E-02 2.795887E-06
+ 1 3 3.457423E-05 4.199721E-04 1.452021E-08
+ 1 4 3.457434E-05 8.840941E-02 3.056697E-06
+ 1 5 3.457445E-05 1.866727E-01 6.454107E-06
+ 1 6 3.457444E-05 1.754951E-01 6.067646E-06
+ 1 7 3.457447E-05 1.023570E-01 3.538938E-06
+ 1 8 3.457441E-05 4.150672E-02 1.435070E-06
+ 1 9 3.457434E-05 1.233979E-02 4.266401E-07
+ 1 10 3.457468E-05 2.764404E-03 9.557838E-08
+ 1 11 3.457360E-05 4.730329E-04 1.635445E-08
+ 1 12 3.457397E-05 6.209487E-05 2.146866E-09
+ 1 13 3.456772E-05 6.233261E-06 2.154696E-10
+ 1 14 3.455369E-05 4.733990E-07 1.635768E-11
+ 1 15 3.456178E-05 2.666362E-08 9.215422E-13
+ 1 16 3.454459E-05 1.075840E-09 3.716445E-14
+ 1 17 3.384707E-05 2.926810E-11 9.906393E-16
+ 1 18 3.251153E-05 4.761000E-13 1.547874E-17
+ 1 19 0.000000E+00 3.600000E-15 0.000000E+00
+ 2 0 3.457435E-05 1.703516E-01 5.889798E-06
+ 2 1 3.457437E-05 9.742025E-02 3.368244E-06
+ 2 2 3.457444E-05 3.153209E-03 1.090204E-07
+ 2 3 3.457440E-05 1.075887E-01 3.719814E-06
+ 2 4 3.457445E-05 8.583076E-02 2.967551E-06
+ 2 5 3.457382E-05 7.095687E-04 2.453250E-08
+ 2 6 3.457438E-05 6.661477E-02 2.303164E-06
+ 2 7 3.457442E-05 1.664327E-01 5.754315E-06
+ 2 8 3.457437E-05 1.614633E-01 5.582493E-06
+ 2 9 3.457436E-05 9.245262E-02 3.196490E-06
+ 2 10 3.457448E-05 3.572184E-02 1.235064E-06
+ 2 11 3.457423E-05 9.890659E-03 3.419619E-07
+ 2 12 3.457418E-05 2.021906E-03 6.990575E-08
+ 2 13 3.457374E-05 3.093180E-04 1.069428E-08
+ 2 14 3.457322E-05 3.549490E-05 1.227173E-09
+ 2 15 3.458334E-05 3.032613E-06 1.048779E-10
+ 2 16 3.453380E-05 1.893729E-07 6.539768E-12
+ 2 17 3.480684E-05 8.346650E-09 2.905205E-13
+ 2 18 3.368985E-05 2.430481E-10 8.188253E-15
+ 2 19 3.414093E-05 4.080400E-12 1.393087E-16
+ 2 20 0.000000E+00 2.560000E-14 0.000000E+00
+ 3 0 3.457440E-05 1.829223E-01 6.324430E-06
+ 3 1 3.457453E-05 1.256506E-02 4.344310E-07
+ 3 2 3.457438E-05 7.503137E-02 2.594163E-06
+ 3 3 3.457438E-05 6.948376E-02 2.402358E-06
+ 3 4 3.457459E-05 3.702850E-03 1.280245E-07
+ 3 5 3.457447E-05 9.582641E-02 3.313147E-06
+ 3 6 3.457438E-05 6.488540E-02 2.243372E-06
+ 3 7 3.457568E-05 3.179981E-04 1.099500E-08
+ 3 8 3.457435E-05 8.205911E-02 2.837140E-06
+ 3 9 3.457442E-05 1.659439E-01 5.737415E-06
+ 3 10 3.457437E-05 1.421119E-01 4.913429E-06
+ 3 11 3.457447E-05 7.273135E-02 2.514648E-06
+ 3 12 3.457431E-05 2.504588E-02 8.659438E-07
+ 3 13 3.457415E-05 6.124333E-03 2.117436E-07
+ 3 14 3.457466E-05 1.090845E-03 3.771561E-08
+ 3 15 3.457452E-05 1.428047E-04 4.937402E-09
+ 3 16 3.457867E-05 1.368919E-05 4.733538E-10
+ 3 17 3.459155E-05 9.447062E-07 3.267885E-11
+ 3 18 3.455930E-05 4.529235E-08 1.565272E-12
+ 3 19 3.453669E-05 1.405500E-09 4.854133E-14
+ 3 20 3.146072E-05 2.410810E-11 7.584582E-16
+ 3 21 1.130660E-04 1.369000E-13 1.547874E-17
+ 3 22 0.000000E+00 1.000000E-16 0.000000E+00
+ 4 0 3.457444E-05 1.602409E-01 5.540240E-06
+ 4 1 3.457431E-05 6.007056E-03 2.076898E-07
+ 4 2 3.457444E-05 9.659855E-02 3.339841E-06
+ 4 3 3.457450E-05 6.225025E-04 2.152272E-08
+ 4 4 3.457446E-05 7.754821E-02 2.681188E-06
+ 4 5 3.457434E-05 3.691650E-02 1.276364E-06
+ 4 6 3.457433E-05 1.773575E-02 6.132015E-07
+ 4 7 3.457440E-05 9.734834E-02 3.365760E-06
+ 4 8 3.457442E-05 3.426530E-02 1.184703E-06
+ 4 9 3.457442E-05 1.105854E-02 3.823427E-07
+ 4 10 3.457435E-05 1.137978E-01 3.934485E-06
+ 4 11 3.457443E-05 1.643499E-01 5.682306E-06
+ 4 12 3.457444E-05 1.153035E-01 3.986552E-06
+ 4 13 3.457431E-05 4.997805E-02 1.727956E-06
+ 4 14 3.457451E-05 1.467657E-02 5.074352E-07
+ 4 15 3.457456E-05 3.045476E-03 1.052960E-07
+ 4 16 3.457541E-05 4.543655E-04 1.570987E-08
+ 4 17 3.457240E-05 4.877053E-05 1.686114E-09
+ 4 18 3.456425E-05 3.709283E-06 1.282086E-10
+ 4 19 3.456637E-05 1.927034E-07 6.661059E-12
+ 4 20 3.459421E-05 6.336160E-09 2.191944E-13
+ 4 21 3.594156E-05 1.102500E-10 3.962557E-15
+ 4 22 2.826651E-05 5.476000E-13 1.547874E-17
+ 4 23 0.000000E+00 2.500000E-15 0.000000E+00
+ 4 24 0.000000E+00 1.000000E-16 0.000000E+00
+ 5 0 3.457443E-05 1.217879E-01 4.210747E-06
+ 5 1 3.457442E-05 4.609400E-02 1.593673E-06
+ 5 2 3.457446E-05 4.717849E-02 1.631171E-06
+ 5 3 3.457452E-05 3.355306E-02 1.160081E-06
+ 5 4 3.457441E-05 5.668917E-02 1.959995E-06
+ 5 5 3.457448E-05 8.594946E-03 2.971658E-07
+ 5 6 3.457439E-05 7.891979E-02 2.728604E-06
+ 5 7 3.457434E-05 7.182479E-03 2.483295E-07
+ 5 8 3.457436E-05 4.895681E-02 1.692650E-06
+ 5 9 3.457446E-05 8.444887E-02 2.919774E-06
+ 5 10 3.457432E-05 6.237927E-03 2.156721E-07
+ 5 11 3.457449E-05 4.436703E-02 1.533967E-06
+ 5 12 3.457437E-05 1.459007E-01 5.044424E-06
+ 5 13 3.457442E-05 1.491297E-01 5.156073E-06
+ 5 14 3.457440E-05 8.297426E-02 2.868785E-06
+ 5 15 3.457432E-05 2.947184E-02 1.018969E-06
+ 5 16 3.457415E-05 7.140504E-03 2.468769E-07
+ 5 17 3.457505E-05 1.213989E-03 4.197372E-08
+ 5 18 3.457279E-05 1.457049E-04 5.037426E-09
+ 5 19 3.457876E-05 1.218338E-05 4.212862E-10
+ 5 20 3.454742E-05 6.833668E-07 2.360856E-11
+ 5 21 3.460714E-05 2.366059E-08 8.188253E-13
+ 5 22 3.380540E-05 4.120900E-10 1.393087E-14
+ 5 23 3.720627E-05 1.664100E-12 6.191496E-17
+ 5 24 0.000000E+00 1.960000E-14 0.000000E+00
+ 5 25 0.000000E+00 9.000000E-16 0.000000E+00
+ 6 0 3.457436E-05 8.342444E-02 2.884346E-06
+ 6 1 3.457447E-05 8.448969E-02 2.921186E-06
+ 6 2 3.457422E-05 4.812062E-03 1.663733E-07
+ 6 3 3.457446E-05 7.261485E-02 2.510619E-06
+ 6 4 3.457441E-05 2.826475E-03 9.772371E-08
+ 6 5 3.457436E-05 6.360264E-02 2.199021E-06
+ 6 6 3.457428E-05 1.435037E-02 4.961538E-07
+ 6 7 3.457448E-05 4.160566E-02 1.438494E-06
+ 6 8 3.457449E-05 5.379131E-02 1.859807E-06
+ 6 9 3.457443E-05 2.809070E-03 9.712199E-08
+ 6 10 3.457435E-05 8.106812E-02 2.802878E-06
+ 6 11 3.457445E-05 4.798826E-02 1.659168E-06
+ 6 12 3.457414E-05 3.214474E-03 1.111377E-07
+ 6 13 3.457438E-05 9.583287E-02 3.313362E-06
+ 6 14 3.457446E-05 1.603271E-01 5.543223E-06
+ 6 15 3.457443E-05 1.181210E-01 4.083965E-06
+ 6 16 3.457436E-05 5.130812E-02 1.773945E-06
+ 6 17 3.457443E-05 1.457206E-02 5.038208E-07
+ 6 18 3.457443E-05 2.825620E-03 9.769419E-08
+ 6 19 3.457370E-05 3.788847E-04 1.309945E-08
+ 6 20 3.457525E-05 3.475527E-05 1.201672E-09
+ 6 21 3.456679E-05 2.096965E-06 7.248533E-11
+ 6 22 3.458415E-05 7.597190E-08 2.627423E-12
+ 6 23 3.457699E-05 1.305377E-09 4.513600E-14
+ 6 24 3.778989E-05 3.686400E-12 1.393087E-16
+ 6 25 1.263571E-04 1.225000E-13 1.547874E-17
+ 6 26 0.000000E+00 4.900000E-15 0.000000E+00
+ 6 27 0.000000E+00 1.000000E-16 0.000000E+00
+ 6 28 0.000000E+00 1.000000E-16 0.000000E+00
+ 6 29 0.000000E+00 1.000000E-16 0.000000E+00
+ 6 30 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 0 3.457433E-05 5.284080E-02 1.826935E-06
+ 7 1 3.457444E-05 9.921551E-02 3.430321E-06
+ 7 2 3.457431E-05 5.455192E-03 1.886095E-07
+ 7 3 3.457431E-05 5.676423E-02 1.962584E-06
+ 7 4 3.457443E-05 1.702179E-02 5.885187E-07
+ 7 5 3.457433E-05 4.675873E-02 1.616652E-06
+ 7 6 3.457440E-05 1.318965E-02 4.560241E-07
+ 7 7 3.457439E-05 5.682534E-02 1.964701E-06
+ 7 8 3.457380E-05 1.421748E-03 4.915522E-08
+ 7 9 3.457435E-05 6.836206E-02 2.363574E-06
+ 7 10 3.457445E-05 1.334793E-02 4.614975E-07
+ 7 11 3.457452E-05 3.590363E-02 1.241351E-06
+ 7 12 3.457440E-05 8.254001E-02 2.853772E-06
+ 7 13 3.457431E-05 8.554467E-03 2.957648E-07
+ 7 14 3.457431E-05 3.992938E-02 1.380531E-06
+ 7 15 3.457445E-05 1.428531E-01 4.939067E-06
+ 7 16 3.457435E-05 1.465558E-01 5.067070E-06
+ 7 17 3.457437E-05 7.911808E-02 2.735458E-06
+ 7 18 3.457426E-05 2.649823E-02 9.161568E-07
+ 7 19 3.457421E-05 5.870946E-03 2.029833E-07
+ 7 20 3.457451E-05 8.791865E-04 3.039745E-08
+ 7 21 3.457350E-05 8.830267E-05 3.052933E-09
+ 7 22 3.457102E-05 5.709567E-06 1.973855E-10
+ 7 23 3.459614E-05 2.148693E-07 7.433649E-12
+ 7 24 3.433163E-05 3.571258E-09 1.226071E-13
+ 7 25 4.409191E-05 5.616900E-12 2.476598E-16
+ 7 26 2.544172E-05 6.084000E-13 1.547874E-17
+ 7 27 0.000000E+00 1.690000E-14 0.000000E+00
+ 7 28 0.000000E+00 9.000000E-16 0.000000E+00
+ 7 29 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 30 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 31 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 34 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 35 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 36 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 37 0.000000E+00 1.000000E-16 0.000000E+00
+ 7 38 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 0 3.457450E-05 3.151826E-02 1.089728E-06
+ 8 1 3.457447E-05 9.212508E-02 3.185176E-06
+ 8 2 3.457451E-05 3.298581E-02 1.140468E-06
+ 8 3 3.457436E-05 1.858177E-02 6.424529E-07
+ 8 4 3.457438E-05 5.317439E-02 1.838471E-06
+ 8 5 3.457456E-05 4.152184E-03 1.435599E-07
+ 8 6 3.457437E-05 5.455990E-02 1.886374E-06
+ 8 7 3.457461E-05 4.331888E-03 1.497733E-07
+ 8 8 3.457432E-05 5.125303E-02 1.772038E-06
+ 8 9 3.457424E-05 1.602499E-02 5.540517E-07
+ 8 10 3.457445E-05 3.394647E-02 1.173681E-06
+ 8 11 3.457436E-05 5.134176E-02 1.775109E-06
+ 8 12 3.457405E-05 2.212502E-03 7.649515E-08
+ 8 13 3.457439E-05 7.692952E-02 2.659791E-06
+ 8 14 3.457432E-05 4.379773E-02 1.514277E-06
+ 8 15 3.457425E-05 4.933493E-03 1.705719E-07
+ 8 16 3.457434E-05 1.023137E-01 3.537429E-06
+ 8 17 3.457444E-05 1.594801E-01 5.513935E-06
+ 8 18 3.457439E-05 1.095544E-01 3.787776E-06
+ 8 19 3.457450E-05 4.363410E-02 1.508627E-06
+ 8 20 3.457453E-05 1.107794E-02 3.830144E-07
+ 8 21 3.457481E-05 1.852979E-03 6.406638E-08
+ 8 22 3.457589E-05 2.034106E-04 7.033104E-09
+ 8 23 3.457357E-05 1.404001E-05 4.854133E-10
+ 8 24 3.459187E-05 5.443931E-07 1.883157E-11
+ 8 25 3.451881E-05 8.539608E-09 2.947771E-13
+ 8 26 3.517807E-05 3.960100E-12 1.393087E-16
+ 8 27 2.359204E-05 2.624400E-12 6.191496E-17
+ 8 28 0.000000E+00 4.840000E-14 0.000000E+00
+ 8 29 0.000000E+00 3.600000E-15 0.000000E+00
+ 8 30 0.000000E+00 4.000000E-16 0.000000E+00
+ 8 31 0.000000E+00 4.000000E-16 0.000000E+00
+ 8 32 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 34 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 35 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 36 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 37 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 38 0.000000E+00 1.000000E-16 0.000000E+00
+ 8 39 0.000000E+00 1.000000E-16 0.000000E+00
+ 9 0 3.457433E-05 1.794577E-02 6.204629E-07
+ 9 1 3.457441E-05 7.372660E-02 2.549053E-06
+ 9 2 3.457432E-05 6.034194E-02 2.086282E-06
+ 9 3 3.457418E-05 1.718994E-04 5.943279E-09
+ 9 4 3.457448E-05 5.482072E-02 1.895398E-06
+ 9 5 3.457441E-05 9.263914E-03 3.202944E-07
+ 9 6 3.457441E-05 3.936943E-02 1.361175E-06
+ 9 7 3.457444E-05 1.649207E-02 5.702042E-07
+ 9 8 3.457446E-05 3.775829E-02 1.305472E-06
+ 9 9 3.457436E-05 1.304391E-02 4.509848E-07
+ 9 10 3.457435E-05 4.955615E-02 1.713372E-06
+ 9 11 3.457393E-05 2.154481E-03 7.448889E-08
+ 9 12 3.457449E-05 6.416794E-02 2.218574E-06
+ 9 13 3.457419E-05 9.235658E-03 3.193154E-07
+ 9 14 3.457448E-05 4.063609E-02 1.404972E-06
+ 9 15 3.457443E-05 7.569510E-02 2.617115E-06
+ 9 16 3.457472E-05 3.515535E-03 1.215486E-07
+ 9 17 3.457435E-05 5.392072E-02 1.864274E-06
+ 9 18 3.457435E-05 1.517282E-01 5.245904E-06
+ 9 19 3.457436E-05 1.373619E-01 4.749198E-06
+ 9 20 3.457442E-05 6.581306E-02 2.275448E-06
+ 9 21 3.457428E-05 1.922353E-02 6.646398E-07
+ 9 22 3.457405E-05 3.593791E-03 1.242519E-07
+ 9 23 3.457492E-05 4.304770E-04 1.488371E-08
+ 9 24 3.457800E-05 3.158597E-05 1.092180E-09
+ 9 25 3.457283E-05 1.250125E-06 4.322037E-11
+ 9 26 3.456914E-05 1.791047E-08 6.191496E-13
+ 9 27 8.774796E-05 1.764000E-13 1.547874E-17
+ 9 28 4.105810E-05 9.424900E-12 3.869685E-16
+ 9 29 0.000000E+00 8.410000E-14 0.000000E+00
+ 9 30 0.000000E+00 1.690000E-14 0.000000E+00
+ 9 31 0.000000E+00 4.000000E-16 0.000000E+00
+ 9 32 0.000000E+00 1.000000E-16 0.000000E+00
+ 9 34 0.000000E+00 1.000000E-16 0.000000E+00
+ 9 35 0.000000E+00 4.000000E-16 0.000000E+00
+ 9 36 0.000000E+00 4.000000E-16 0.000000E+00
+ 9 37 0.000000E+00 4.000000E-16 0.000000E+00
+ 9 38 0.000000E+00 4.000000E-16 0.000000E+00
+ 9 39 0.000000E+00 1.000000E-16 0.000000E+00
+ 10 0 3.457436E-05 9.855653E-03 3.407529E-07
+ 10 1 3.457434E-05 5.323248E-02 1.840478E-06
+ 10 2 3.457440E-05 7.335572E-02 2.536230E-06
+ 10 3 3.457463E-05 9.416853E-03 3.255842E-07
+ 10 4 3.457426E-05 2.810399E-02 9.716748E-07
+ 10 5 3.457441E-05 3.914883E-02 1.353547E-06
+ 10 6 3.457444E-05 4.894723E-03 1.692323E-07
+ 10 7 3.457439E-05 4.762961E-02 1.646765E-06
+ 10 8 3.457477E-05 6.994972E-04 2.418495E-08
+ 10 9 3.457447E-05 4.974354E-02 1.719857E-06
+ 10 10 3.457500E-05 1.219078E-03 4.214962E-08
+ 10 11 3.457446E-05 5.054785E-02 1.747665E-06
+ 10 12 3.457428E-05 9.140840E-03 3.160380E-07
+ 10 13 3.457437E-05 3.973515E-02 1.373818E-06
+ 10 14 3.457429E-05 4.062849E-02 1.404701E-06
+ 10 15 3.457454E-05 7.210705E-03 2.493068E-07
+ 10 16 3.457440E-05 8.001527E-02 2.766480E-06
+ 10 17 3.457441E-05 2.888862E-02 9.988072E-07
+ 10 18 3.457430E-05 1.564172E-02 5.408015E-07
+ 10 19 3.457440E-05 1.242743E-01 4.296709E-06
+ 10 20 3.457440E-05 1.565821E-01 5.413732E-06
+ 10 21 3.457443E-05 9.167084E-02 3.169467E-06
+ 10 22 3.457444E-05 3.097190E-02 1.070836E-06
+ 10 23 3.457438E-05 6.478529E-03 2.239911E-07
+ 10 24 3.457448E-05 8.454335E-04 2.923042E-08
+ 10 25 3.457475E-05 6.564370E-05 2.269615E-09
+ 10 26 3.456244E-05 2.622780E-06 9.064969E-11
+ 10 27 3.466452E-05 3.279359E-08 1.136774E-12
+ 10 28 3.318136E-05 4.664890E-11 1.547874E-15
+ 10 29 3.422560E-05 2.894440E-11 9.906393E-16
+ 10 30 0.000000E+00 7.840000E-14 0.000000E+00
+ 10 31 0.000000E+00 5.760000E-14 0.000000E+00
+ 10 32 0.000000E+00 1.000000E-16 0.000000E+00
+ 10 33 0.000000E+00 1.000000E-16 0.000000E+00
+ 10 34 0.000000E+00 1.000000E-16 0.000000E+00
+ 10 35 0.000000E+00 9.000000E-16 0.000000E+00
+ 10 36 0.000000E+00 9.000000E-16 0.000000E+00
+ 10 37 0.000000E+00 9.000000E-16 0.000000E+00
+ 10 38 0.000000E+00 9.000000E-16 0.000000E+00
+ 10 39 0.000000E+00 4.000000E-16 0.000000E+00
+ 11 0 3.457446E-05 5.263652E-03 1.819879E-07
+ 11 1 3.457450E-05 3.566190E-02 1.232992E-06
+ 11 2 3.457433E-05 7.151800E-02 2.472687E-06
+ 11 3 3.457434E-05 3.149655E-02 1.088972E-06
+ 11 4 3.457446E-05 4.660811E-03 1.611450E-07
+ 11 5 3.457442E-05 4.911852E-02 1.698244E-06
+ 11 6 3.457422E-05 5.064348E-03 1.750959E-07
+ 11 7 3.457434E-05 3.395373E-02 1.173928E-06
+ 11 8 3.457450E-05 1.825968E-02 6.313194E-07
+ 11 9 3.457453E-05 2.396526E-02 8.285876E-07
+ 11 10 3.457430E-05 2.430992E-02 8.404984E-07
+ 11 11 3.457427E-05 2.485355E-02 8.592934E-07
+ 11 12 3.457454E-05 2.126362E-02 7.351798E-07
+ 11 13 3.457451E-05 3.803150E-02 1.314920E-06
+ 11 14 3.457433E-05 8.214689E-03 2.840174E-07
+ 11 15 3.457446E-05 6.083579E-02 2.103365E-06
+ 11 16 3.457416E-05 1.798522E-03 6.218240E-08
+ 11 17 3.457442E-05 5.597579E-02 1.935331E-06
+ 11 18 3.457431E-05 6.100649E-02 2.109257E-06
+ 11 19 3.457284E-05 1.199770E-04 4.147945E-09
+ 11 20 3.457446E-05 8.444030E-02 2.919478E-06
+ 11 21 3.457440E-05 1.622788E-01 5.610694E-06
+ 11 22 3.457445E-05 1.186075E-01 4.100790E-06
+ 11 23 3.457439E-05 4.667448E-02 1.613742E-06
+ 11 24 3.457427E-05 1.094140E-02 3.782908E-07
+ 11 25 3.457468E-05 1.553078E-03 5.369718E-08
+ 11 26 3.457519E-05 1.269566E-04 4.389548E-09
+ 11 27 3.458311E-05 5.053009E-06 1.747488E-10
+ 11 28 3.451795E-05 5.153354E-08 1.778832E-12
+ 11 29 3.437879E-05 4.052169E-10 1.393087E-14
+ 11 30 3.464039E-05 7.551610E-11 2.615907E-15
+ 11 31 0.000000E+00 1.000000E-16 0.000000E+00
+ 11 32 7.995217E-05 1.936000E-13 1.547874E-17
+ 11 33 0.000000E+00 1.000000E-16 0.000000E+00
+ 11 34 0.000000E+00 1.000000E-16 0.000000E+00
+ 11 35 0.000000E+00 9.000000E-16 0.000000E+00
+ 11 36 0.000000E+00 2.500000E-15 0.000000E+00
+ 11 37 0.000000E+00 2.500000E-15 0.000000E+00
+ 11 38 0.000000E+00 1.600000E-15 0.000000E+00
+ 11 39 0.000000E+00 1.600000E-15 0.000000E+00
+ 12 0 3.457415E-05 2.751866E-03 9.514343E-08
+ 12 1 3.457438E-05 2.258801E-02 7.809666E-07
+ 12 2 3.457436E-05 6.054849E-02 2.093425E-06
+ 12 3 3.457444E-05 5.055119E-02 1.747779E-06
+ 12 4 3.457370E-05 1.092113E-03 3.775841E-08
+ 12 5 3.457432E-05 3.296729E-02 1.139822E-06
+ 12 6 3.457438E-05 2.882273E-02 9.965280E-07
+ 12 7 3.457415E-05 5.481343E-03 1.895127E-07
+ 12 8 3.457445E-05 4.193005E-02 1.449708E-06
+ 12 9 3.455622E-05 9.044771E-07 3.125531E-11
+ 12 10 3.457448E-05 4.311463E-02 1.490666E-06
+ 12 11 3.457396E-05 1.077780E-03 3.726312E-08
+ 12 12 3.457443E-05 4.518800E-02 1.562350E-06
+ 12 13 3.457361E-05 5.226729E-04 1.807069E-08
+ 12 14 3.457430E-05 5.113739E-02 1.768039E-06
+ 12 15 3.457433E-05 1.298042E-03 4.487893E-08
+ 12 16 3.457450E-05 5.138250E-02 1.776524E-06
+ 12 17 3.457450E-05 2.306589E-02 7.974915E-07
+ 12 18 3.457453E-05 2.236562E-02 7.732809E-07
+ 12 19 3.457446E-05 7.929301E-02 2.741513E-06
+ 12 20 3.457422E-05 9.409433E-03 3.253238E-07
+ 12 21 3.457441E-05 4.356352E-02 1.506183E-06
+ 12 22 3.457440E-05 1.522022E-01 5.262299E-06
+ 12 23 3.457438E-05 1.431160E-01 4.948147E-06
+ 12 24 3.457440E-05 6.618163E-02 2.288190E-06
+ 12 25 3.457435E-05 1.742328E-02 6.023988E-07
+ 12 26 3.457437E-05 2.685633E-03 9.285405E-08
+ 12 27 3.457409E-05 2.297804E-04 7.944448E-09
+ 12 28 3.457277E-05 8.961761E-06 3.098329E-10
+ 12 29 3.449482E-05 6.685844E-08 2.306270E-12
+ 12 30 3.484300E-05 1.935120E-09 6.742539E-14
+ 12 31 3.415873E-05 1.635841E-10 5.587825E-15
+ 12 32 1.645099E-05 9.409000E-13 1.547874E-17
+ 12 33 2.480170E-05 6.241000E-13 1.547874E-17
+ 12 34 0.000000E+00 9.000000E-16 0.000000E+00
+ 12 35 0.000000E+00 4.900000E-15 0.000000E+00
+ 12 36 0.000000E+00 9.000000E-16 0.000000E+00
+ 12 37 0.000000E+00 6.400000E-15 0.000000E+00
+ 12 38 0.000000E+00 6.400000E-15 0.000000E+00
+ 12 39 0.000000E+00 2.500000E-15 0.000000E+00
+ 13 0 3.457465E-05 1.415966E-03 4.895655E-08
+ 13 1 3.457458E-05 1.371008E-02 4.740202E-07
+ 13 2 3.457441E-05 4.646335E-02 1.606443E-06
+ 13 3 3.457432E-05 5.924770E-02 2.048449E-06
+ 13 4 3.457444E-05 1.375514E-02 4.755762E-07
+ 13 5 3.457444E-05 1.091225E-02 3.772849E-07
+ 13 6 3.457450E-05 4.242909E-02 1.466964E-06
+ 13 7 3.457446E-05 2.549596E-03 8.815090E-08
+ 13 8 3.457434E-05 3.005267E-02 1.039051E-06
+ 13 9 3.457438E-05 1.865480E-02 6.449782E-07
+ 13 10 3.457454E-05 1.499062E-02 5.182939E-07
+ 13 11 3.457445E-05 3.040296E-02 1.051165E-06
+ 13 12 3.457421E-05 8.707034E-03 3.010388E-07
+ 13 13 3.457429E-05 3.564999E-02 1.232573E-06
+ 13 14 3.457444E-05 9.805343E-03 3.390142E-07
+ 13 15 3.457429E-05 3.508551E-02 1.213056E-06
+ 13 16 3.457455E-05 2.090221E-02 7.226844E-07
+ 13 17 3.457430E-05 2.339460E-02 8.088520E-07
+ 13 18 3.457432E-05 4.934343E-02 1.706016E-06
+ 13 19 3.457402E-05 1.664303E-03 5.754164E-08
+ 13 20 3.457442E-05 7.389416E-02 2.554848E-06
+ 13 21 3.457449E-05 3.491381E-02 1.207127E-06
+ 13 22 3.457460E-05 1.301999E-02 4.501609E-07
+ 13 23 3.457435E-05 1.277598E-01 4.417212E-06
+ 13 24 3.457445E-05 1.614473E-01 5.581953E-06
+ 13 25 3.457436E-05 8.872677E-02 3.067671E-06
+ 13 26 3.457437E-05 2.630159E-02 9.093610E-07
+ 13 27 3.457467E-05 4.394373E-03 1.519340E-07
+ 13 28 3.457542E-05 3.908363E-04 1.351333E-08
+ 13 29 3.457007E-05 1.462917E-05 5.057315E-10
+ 13 30 3.457058E-05 6.533647E-08 2.258720E-12
+ 13 31 3.455693E-05 6.776582E-09 2.341779E-13
+ 13 32 3.536263E-05 2.735716E-10 9.674212E-15
+ 13 33 3.596896E-05 1.075840E-11 3.869685E-16
+ 13 34 3.778989E-05 1.638400E-12 6.191496E-17
+ 13 35 0.000000E+00 6.400000E-15 0.000000E+00
+ 13 36 0.000000E+00 5.290000E-14 0.000000E+00
+ 13 37 0.000000E+00 9.000000E-16 0.000000E+00
+ 13 38 0.000000E+00 2.500000E-15 0.000000E+00
+ 13 39 0.000000E+00 1.440000E-14 0.000000E+00
+ 14 0 3.457467E-05 7.203212E-04 2.490487E-08
+ 14 1 3.457440E-05 8.054992E-03 2.784966E-07
+ 14 2 3.457439E-05 3.318529E-02 1.147361E-06
+ 14 3 3.457444E-05 5.785386E-02 2.000265E-06
+ 14 4 3.457435E-05 3.113635E-02 1.076519E-06
+ 14 5 3.457310E-05 2.576879E-04 8.909069E-09
+ 14 6 3.457451E-05 3.461065E-02 1.196646E-06
+ 14 7 3.457435E-05 2.088299E-02 7.220156E-07
+ 14 8 3.457447E-05 6.154580E-03 2.127913E-07
+ 14 9 3.457450E-05 3.710941E-02 1.283040E-06
+ 14 10 3.457447E-05 3.467670E-04 1.198928E-08
+ 14 11 3.457448E-05 3.548021E-02 1.226710E-06
+ 14 12 3.457415E-05 6.057285E-03 2.094254E-07
+ 14 13 3.457436E-05 3.144312E-02 1.087126E-06
+ 14 14 3.457428E-05 1.062719E-02 3.674276E-07
+ 14 15 3.457444E-05 3.311775E-02 1.145028E-06
+ 14 16 3.457459E-05 9.380666E-03 3.243327E-07
+ 14 17 3.457439E-05 4.346249E-02 1.502689E-06
+ 14 18 3.457467E-05 2.275152E-03 7.866263E-08
+ 14 19 3.457442E-05 5.866721E-02 2.028385E-06
+ 14 20 3.457427E-05 4.728779E-03 1.634941E-07
+ 14 21 3.457443E-05 4.946790E-02 1.710325E-06
+ 14 22 3.457438E-05 6.218139E-02 2.149883E-06
+ 14 23 3.457497E-05 2.315020E-04 8.004174E-09
+ 14 24 3.457437E-05 9.387770E-02 3.245762E-06
+ 14 25 3.457443E-05 1.704573E-01 5.893465E-06
+ 14 26 3.457435E-05 1.129358E-01 3.904684E-06
+ 14 27 3.457429E-05 3.781362E-02 1.307379E-06
+ 14 28 3.457465E-05 6.833373E-03 2.362615E-07
+ 14 29 3.457367E-05 6.266646E-04 2.166610E-08
+ 14 30 3.457259E-05 2.191307E-05 7.575917E-10
+ 14 31 3.452487E-05 3.641609E-08 1.257261E-12
+ 14 32 3.470744E-05 1.892550E-08 6.568558E-13
+ 14 33 3.536921E-05 2.958400E-10 1.046363E-14
+ 14 34 3.720627E-05 5.990760E-11 2.228939E-15
+ 14 35 2.610683E-05 2.371600E-12 6.191496E-17
+ 14 36 3.899909E-05 3.969000E-13 1.547874E-17
+ 14 37 7.643822E-05 2.025000E-13 1.547874E-17
+ 14 38 0.000000E+00 3.610000E-14 0.000000E+00
+ 14 39 0.000000E+00 1.600000E-15 0.000000E+00
+ 15 0 3.457329E-05 3.636763E-04 1.257349E-08
+ 15 1 3.457445E-05 4.616882E-03 1.596261E-07
+ 15 2 3.457451E-05 2.245860E-02 7.764948E-07
+ 15 3 3.457441E-05 5.005721E-02 1.730698E-06
+ 15 4 3.457437E-05 4.421594E-02 1.528738E-06
+ 15 5 3.457440E-05 4.255102E-03 1.471176E-07
+ 15 6 3.457423E-05 1.655513E-02 5.723809E-07
+ 15 7 3.457452E-05 3.563889E-02 1.232197E-06
+ 15 8 3.457501E-05 1.007201E-03 3.482399E-08
+ 15 9 3.457449E-05 2.730244E-02 9.439678E-07
+ 15 10 3.457443E-05 1.797800E-02 6.215790E-07
+ 15 11 3.457454E-05 9.573482E-03 3.309988E-07
+ 15 12 3.457440E-05 3.194887E-02 1.104613E-06
+ 15 13 3.457456E-05 1.628711E-03 5.631196E-08
+ 15 14 3.457440E-05 3.801752E-02 1.314433E-06
+ 15 15 3.457302E-05 1.136563E-04 3.929440E-09
+ 15 16 3.457431E-05 4.200204E-02 1.452192E-06
+ 15 17 3.457335E-05 2.325524E-04 8.040117E-09
+ 15 18 3.457437E-05 4.650755E-02 1.607969E-06
+ 15 19 3.457451E-05 3.895942E-03 1.347003E-07
+ 15 20 3.457449E-05 4.506144E-02 1.557976E-06
+ 15 21 3.457455E-05 2.564091E-02 8.865229E-07
+ 15 22 3.457435E-05 2.055438E-02 7.106542E-07
+ 15 23 3.457432E-05 7.788167E-02 2.692706E-06
+ 15 24 3.457411E-05 6.274376E-03 2.169310E-07
+ 15 25 3.457436E-05 5.773271E-02 1.996071E-06
+ 15 26 3.457444E-05 1.683912E-01 5.822030E-06
+ 15 27 3.457444E-05 1.369854E-01 4.736192E-06
+ 15 28 3.457442E-05 5.199292E-02 1.797625E-06
+ 15 29 3.457428E-05 1.013650E-02 3.504622E-07
+ 15 30 3.457449E-05 9.492130E-04 3.281855E-08
+ 15 31 3.457245E-05 2.992134E-05 1.034454E-09
+ 15 32 3.446005E-05 1.034909E-09 3.566302E-14
+ 15 33 3.454446E-05 4.333891E-08 1.497119E-12
+ 15 34 3.367257E-05 1.034289E-10 3.482716E-15
+ 15 35 3.301083E-05 2.067844E-10 6.826124E-15
+ 15 36 8.371411E-05 1.849000E-13 1.547874E-17
+ 15 37 4.497309E-05 3.097600E-12 1.393087E-16
+ 15 38 0.000000E+00 7.840000E-14 0.000000E+00
+ 15 39 4.026727E-05 3.844000E-13 1.547874E-17
+ 16 0 3.457514E-05 1.828358E-04 6.321574E-09
+ 16 1 3.457479E-05 2.597772E-03 8.981741E-08
+ 16 2 3.457425E-05 1.458830E-02 5.043794E-07
+ 16 3 3.457444E-05 3.974440E-02 1.374140E-06
+ 16 4 3.457430E-05 4.957739E-02 1.714103E-06
+ 16 5 3.457433E-05 1.672235E-02 5.781639E-07
+ 16 6 3.457439E-05 2.960719E-03 1.023650E-07
+ 16 7 3.457433E-05 3.408060E-02 1.178314E-06
+ 16 8 3.457442E-05 1.455204E-02 5.031284E-07
+ 16 9 3.457443E-05 7.040274E-03 2.434134E-07
+ 16 10 3.457440E-05 3.295433E-02 1.139376E-06
+ 16 11 3.457387E-05 8.095726E-04 2.799006E-08
+ 16 12 3.457439E-05 2.880342E-02 9.958604E-07
+ 16 13 3.457450E-05 1.100286E-02 3.804184E-07
+ 16 14 3.457435E-05 1.879490E-02 6.498215E-07
+ 16 15 3.457427E-05 2.159130E-02 7.465036E-07
+ 16 16 3.457447E-05 1.308884E-02 4.525397E-07
+ 16 17 3.457452E-05 2.779706E-02 9.610699E-07
+ 16 18 3.457451E-05 1.367597E-02 4.728399E-07
+ 16 19 3.457432E-05 2.863543E-02 9.900504E-07
+ 16 20 3.457433E-05 2.329337E-02 8.053528E-07
+ 16 21 3.457431E-05 2.022022E-02 6.991000E-07
+ 16 22 3.457435E-05 4.804001E-02 1.660952E-06
+ 16 23 3.457479E-05 2.318433E-03 8.015934E-08
+ 16 24 3.457432E-05 7.550402E-02 2.610500E-06
+ 16 25 3.457452E-05 2.597889E-02 8.982076E-07
+ 16 26 3.457438E-05 2.676741E-02 9.254667E-07
+ 16 27 3.457442E-05 1.553591E-01 5.371450E-06
+ 16 28 3.457442E-05 1.588892E-01 5.493500E-06
+ 16 29 3.457438E-05 6.864010E-02 2.373189E-06
+ 16 30 3.457454E-05 1.439181E-02 4.975904E-07
+ 16 31 3.457450E-05 1.360185E-03 4.702773E-08
+ 16 32 3.457156E-05 3.681626E-05 1.272795E-09
+ 16 33 3.461566E-05 6.355441E-08 2.199978E-12
+ 16 34 3.462140E-05 8.189899E-08 2.835457E-12
+ 16 35 3.611563E-05 9.643240E-11 3.482716E-15
+ 16 36 3.483805E-05 4.549689E-10 1.585023E-14
+ 16 37 3.468827E-05 1.115560E-11 3.869685E-16
+ 16 38 3.691952E-05 6.708100E-12 2.476598E-16
+ 16 39 2.193699E-05 7.056000E-13 1.547874E-17
+ 17 0 3.457246E-05 9.179748E-05 3.173664E-09
+ 17 1 3.457433E-05 1.442235E-03 4.986430E-08
+ 17 2 3.457463E-05 9.183402E-03 3.175127E-07
+ 17 3 3.457449E-05 2.961223E-02 1.023828E-06
+ 17 4 3.457450E-05 4.799874E-02 1.659533E-06
+ 17 5 3.457439E-05 2.988629E-02 1.033300E-06
+ 17 6 3.457394E-05 4.076983E-04 1.409573E-08
+ 17 7 3.457430E-05 2.090700E-02 7.228449E-07
+ 17 8 3.457450E-05 2.899783E-02 1.002585E-06
+ 17 9 3.457409E-05 1.833484E-04 6.339104E-09
+ 17 10 3.457454E-05 2.539700E-02 8.780897E-07
+ 17 11 3.457423E-05 1.651951E-02 5.711493E-07
+ 17 12 3.457462E-05 6.510189E-03 2.250873E-07
+ 17 13 3.457433E-05 3.079656E-02 1.064771E-06
+ 17 14 3.456203E-05 1.673401E-06 5.783614E-11
+ 17 15 3.457441E-05 3.310122E-02 1.144455E-06
+ 17 16 3.457427E-05 2.966630E-03 1.025691E-07
+ 17 17 3.457432E-05 3.159021E-02 1.092210E-06
+ 17 18 3.457465E-05 6.945001E-03 2.401209E-07
+ 17 19 3.457432E-05 3.331468E-02 1.151832E-06
+ 17 20 3.457419E-05 7.162223E-03 2.476281E-07
+ 17 21 3.457434E-05 4.203273E-02 1.453254E-06
+ 17 22 3.457401E-05 2.353865E-03 8.138257E-08
+ 17 23 3.457447E-05 5.690020E-02 1.967294E-06
+ 17 24 3.457446E-05 2.367293E-03 8.184789E-08
+ 17 25 3.457443E-05 5.730478E-02 1.981280E-06
+ 17 26 3.457436E-05 5.031960E-02 1.739768E-06
+ 17 27 3.457429E-05 6.669394E-03 2.305896E-07
+ 17 28 3.457446E-05 1.333393E-01 4.610134E-06
+ 17 29 3.457440E-05 1.768479E-01 6.114409E-06
+ 17 30 3.457440E-05 8.734375E-02 3.019858E-06
+ 17 31 3.457437E-05 1.961978E-02 6.783414E-07
+ 17 32 3.457458E-05 1.845395E-03 6.380376E-08
+ 17 33 3.457425E-05 3.998880E-05 1.382583E-09
+ 17 34 3.459189E-05 4.728763E-07 1.635768E-11
+ 17 35 3.463067E-05 1.269782E-07 4.397340E-12
+ 17 36 3.458465E-05 2.193049E-09 7.584582E-14
+ 17 37 3.385045E-05 6.260004E-10 2.119039E-14
+ 17 38 3.701474E-05 9.409000E-11 3.482716E-15
+ 17 39 2.577105E-05 2.402500E-12 6.191496E-17
+ 18 0 3.457535E-05 4.614852E-05 1.595601E-09
+ 18 1 3.457419E-05 7.934261E-04 2.743207E-08
+ 18 2 3.457416E-05 5.644727E-03 1.951617E-07
+ 18 3 3.457454E-05 2.102622E-02 7.269718E-07
+ 18 4 3.457443E-05 4.201452E-02 1.452628E-06
+ 18 5 3.457431E-05 3.880575E-02 1.341682E-06
+ 18 6 3.457441E-05 7.145427E-03 2.470489E-07
+ 18 7 3.457455E-05 7.161243E-03 2.475968E-07
+ 18 8 3.457443E-05 3.196487E-02 1.105167E-06
+ 18 9 3.457442E-05 9.424831E-03 3.258581E-07
+ 18 10 3.457432E-05 8.197962E-03 2.834390E-07
+ 18 11 3.457434E-05 2.926680E-02 1.011880E-06
+ 18 12 3.457401E-05 1.019584E-03 3.525112E-08
+ 18 13 3.457441E-05 2.369431E-02 8.192170E-07
+ 18 14 3.457448E-05 1.418071E-02 4.902906E-07
+ 18 15 3.457451E-05 1.019526E-02 3.524961E-07
+ 18 16 3.457444E-05 2.713314E-02 9.381132E-07
+ 18 17 3.457426E-05 2.500991E-03 8.646991E-08
+ 18 18 3.457434E-05 3.436628E-02 1.188191E-06
+ 18 19 3.457368E-05 3.496216E-04 1.208770E-08
+ 18 20 3.457434E-05 3.925595E-02 1.357248E-06
+ 18 21 3.457404E-05 2.382142E-04 8.236028E-09
+ 18 22 3.457431E-05 4.471011E-02 1.545821E-06
+ 18 23 3.457419E-05 2.443376E-03 8.447775E-08
+ 18 24 3.457448E-05 4.753258E-02 1.643414E-06
+ 18 25 3.457431E-05 1.783659E-02 6.166878E-07
+ 18 26 3.457443E-05 3.210739E-02 1.110095E-06
+ 18 27 3.457439E-05 6.995898E-02 2.418789E-06
+ 18 28 3.442842E-05 1.080144E-08 3.718767E-13
+ 18 29 3.457437E-05 1.057035E-01 3.654632E-06
+ 18 30 3.457443E-05 1.895639E-01 6.554062E-06
+ 18 31 3.457440E-05 1.075492E-01 3.718448E-06
+ 18 32 3.457426E-05 2.575955E-02 8.906172E-07
+ 18 33 3.457473E-05 2.370271E-03 8.195148E-08
+ 18 34 3.457556E-05 3.680388E-05 1.272515E-09
+ 18 35 3.459077E-05 1.659923E-06 5.741801E-11
+ 18 36 3.458972E-05 1.563016E-07 5.406430E-12
+ 18 37 3.451493E-05 1.063580E-08 3.670938E-13
+ 18 38 3.457819E-05 4.583881E-10 1.585023E-14
+ 18 39 3.574228E-05 2.927521E-10 1.046363E-14
+ 19 0 3.457430E-05 2.328593E-05 8.050948E-10
+ 19 1 3.457492E-05 4.341218E-04 1.500973E-08
+ 19 2 3.457425E-05 3.408423E-03 1.178437E-07
+ 19 3 3.457456E-05 1.439004E-02 4.975293E-07
+ 19 4 3.457436E-05 3.418243E-02 1.181836E-06
+ 19 5 3.457430E-05 4.203333E-02 1.453273E-06
+ 19 6 3.457456E-05 1.781717E-02 6.160207E-07
+ 19 7 3.457400E-05 3.561290E-04 1.231281E-08
+ 19 8 3.457452E-05 2.374494E-02 8.209699E-07
+ 19 9 3.457442E-05 2.257411E-02 7.804868E-07
+ 19 10 3.457679E-05 2.318750E-05 8.017493E-10
+ 19 11 3.457426E-05 2.405751E-02 8.317708E-07
+ 19 12 3.457447E-05 1.449558E-02 5.011769E-07
+ 19 13 3.457455E-05 4.930538E-03 1.704711E-07
+ 19 14 3.457451E-05 2.845327E-02 9.837578E-07
+ 19 15 3.457508E-05 6.203572E-04 2.144890E-08
+ 19 16 3.457447E-05 2.614787E-02 9.040488E-07
+ 19 17 3.457421E-05 9.186463E-03 3.176147E-07
+ 19 18 3.457434E-05 1.793716E-02 6.201654E-07
+ 19 19 3.457442E-05 1.943779E-02 6.720504E-07
+ 19 20 3.457424E-05 1.223954E-02 4.231728E-07
+ 19 21 3.457436E-05 2.676962E-02 9.255424E-07
+ 19 22 3.457447E-05 1.145621E-02 3.960923E-07
+ 19 23 3.457445E-05 3.026660E-02 1.046451E-06
+ 19 24 3.457440E-05 1.779064E-02 6.151008E-07
+ 19 25 3.457453E-05 2.685626E-02 9.285426E-07
+ 19 26 3.457429E-05 3.839929E-02 1.327628E-06
+ 19 27 3.457454E-05 1.056279E-02 3.652036E-07
+ 19 28 3.457443E-05 7.844637E-02 2.712238E-06
+ 19 29 3.457432E-05 5.876055E-03 2.031606E-07
+ 19 30 3.457441E-05 7.643105E-02 2.642559E-06
+ 19 31 3.457435E-05 1.964342E-01 6.791583E-06
+ 19 32 3.457442E-05 1.286498E-01 4.447992E-06
+ 19 33 3.457451E-05 3.266046E-02 1.129219E-06
+ 19 34 3.457437E-05 2.877002E-03 9.947051E-08
+ 19 35 3.457360E-05 2.610495E-05 9.025420E-10
+ 19 36 3.458096E-05 4.188490E-06 1.448420E-10
+ 19 37 3.456008E-05 1.359766E-07 4.699361E-12
+ 19 38 3.446601E-05 3.177663E-08 1.095214E-12
+ 19 39 3.251153E-05 3.047040E-11 9.906393E-16
+ 20 0 3.456900E-05 1.182053E-05 4.086239E-10
+ 20 1 3.457495E-05 2.370116E-04 8.194663E-09
+ 20 2 3.457452E-05 2.032008E-03 7.025570E-08
+ 20 3 3.457423E-05 9.575270E-03 3.310576E-07
+ 20 4 3.457431E-05 2.632877E-02 9.102992E-07
+ 20 5 3.457437E-05 4.043469E-02 1.398004E-06
+ 20 6 3.457450E-05 2.755819E-02 9.528107E-07
+ 20 7 3.457460E-05 1.800430E-03 6.224913E-08
+ 20 8 3.457436E-05 1.168946E-02 4.041554E-07
+ 20 9 3.457429E-05 2.857842E-02 9.880784E-07
+ 20 10 3.457416E-05 5.341068E-03 1.846629E-07
+ 20 11 3.457435E-05 9.639772E-03 3.332889E-07
+ 20 12 3.457444E-05 2.583356E-02 8.931810E-07
+ 20 13 3.457405E-05 9.057831E-04 3.131659E-08
+ 20 14 3.457451E-05 2.012678E-02 6.958734E-07
+ 20 15 3.457428E-05 1.548180E-02 5.352722E-07
+ 20 16 3.457414E-05 5.280510E-03 1.825691E-07
+ 20 17 3.457445E-05 2.781117E-02 9.615560E-07
+ 20 18 3.457815E-05 2.716494E-07 9.393134E-12
+ 20 19 3.457439E-05 3.025898E-02 1.046186E-06
+ 20 20 3.457419E-05 3.199161E-03 1.106084E-07
+ 20 21 3.457429E-05 2.859312E-02 9.885868E-07
+ 20 22 3.457458E-05 8.265770E-03 2.857856E-07
+ 20 23 3.457442E-05 2.902228E-02 1.003429E-06
+ 20 24 3.457434E-05 1.066874E-02 3.688646E-07
+ 20 25 3.457439E-05 3.583787E-02 1.239072E-06
+ 20 26 3.457441E-05 7.582559E-03 2.621625E-07
+ 20 27 3.457438E-05 5.259829E-02 1.818553E-06
+ 20 28 3.457385E-05 3.902458E-04 1.349230E-08
+ 20 29 3.457442E-05 7.391964E-02 2.555729E-06
+ 20 30 3.457448E-05 2.067208E-02 7.147262E-07
+ 20 31 3.457437E-05 4.927441E-02 1.703632E-06
+ 20 32 3.457440E-05 1.975945E-01 6.831711E-06
+ 20 33 3.457444E-05 1.500768E-01 5.188821E-06
+ 20 34 3.457437E-05 4.007464E-02 1.385556E-06
+ 20 35 3.457403E-05 3.284895E-03 1.135720E-07
+ 20 36 3.456862E-05 1.064586E-05 3.680129E-10
+ 20 37 3.457187E-05 8.507197E-06 2.941097E-10
+ 20 38 3.461653E-05 5.291380E-08 1.831692E-12
+ 20 39 3.454673E-05 6.990736E-08 2.415070E-12
+ 21 0 3.457408E-05 6.049731E-06 2.091638E-10
+ 21 1 3.457318E-05 1.294946E-04 4.477040E-09
+ 21 2 3.457487E-05 1.201207E-03 4.153157E-08
+ 21 3 3.457466E-05 6.237761E-03 2.156685E-07
+ 21 4 3.457456E-05 1.945264E-02 6.725665E-07
+ 21 5 3.457445E-05 3.577197E-02 1.236796E-06
+ 21 6 3.457445E-05 3.371265E-02 1.165596E-06
+ 21 7 3.457449E-05 8.701720E-03 3.008575E-07
+ 21 8 3.457469E-05 2.762926E-03 9.552730E-08
+ 21 9 3.457454E-05 2.494775E-02 8.625569E-07
+ 21 10 3.457427E-05 1.644356E-02 5.685239E-07
+ 21 11 3.457417E-05 5.596101E-04 1.934805E-08
+ 21 12 3.457442E-05 2.301455E-02 7.957147E-07
+ 21 13 3.457425E-05 1.205474E-02 4.167834E-07
+ 21 14 3.457468E-05 4.307955E-03 1.489462E-07
+ 21 15 3.457439E-05 2.580758E-02 8.922814E-07
+ 21 16 3.457474E-05 1.624331E-03 5.616082E-08
+ 21 17 3.457435E-05 1.998681E-02 6.910311E-07
+ 21 18 3.457449E-05 1.402687E-02 4.849718E-07
+ 21 19 3.457415E-05 8.171489E-03 2.825223E-07
+ 21 20 3.457437E-05 2.606664E-02 9.012379E-07
+ 21 21 3.457493E-05 1.442210E-03 4.986430E-08
+ 21 22 3.457447E-05 3.288070E-02 1.136833E-06
+ 21 23 3.453689E-05 3.876308E-09 1.338756E-13
+ 21 24 3.457435E-05 3.745194E-02 1.294876E-06
+ 21 25 3.457431E-05 2.453703E-04 8.483509E-09
+ 21 26 3.457434E-05 4.385709E-02 1.516330E-06
+ 21 27 3.457495E-05 1.083910E-06 3.747613E-11
+ 21 28 3.457439E-05 5.368072E-02 1.855978E-06
+ 21 29 3.457431E-05 3.663249E-03 1.266543E-07
+ 21 30 3.457434E-05 5.894384E-02 2.037944E-06
+ 21 31 3.457446E-05 3.935769E-02 1.360771E-06
+ 21 32 3.457450E-05 2.709563E-02 9.368180E-07
+ 21 33 3.457445E-05 1.938438E-01 6.702043E-06
+ 21 34 3.457444E-05 1.713829E-01 5.925466E-06
+ 21 35 3.457436E-05 4.765361E-02 1.647593E-06
+ 21 36 3.457474E-05 3.497229E-03 1.209158E-07
+ 21 37 3.455390E-05 1.311092E-07 4.530333E-12
+ 21 38 3.457182E-05 1.441425E-05 4.983268E-10
+ 21 39 3.431518E-05 5.557702E-09 1.907136E-13
+ 22 0 3.456537E-05 3.128158E-06 1.081259E-10
+ 22 1 3.457707E-05 7.099141E-05 2.454675E-09
+ 22 2 3.457518E-05 7.066920E-04 2.443400E-08
+ 22 3 3.457429E-05 4.000737E-03 1.383226E-07
+ 22 4 3.457423E-05 1.392241E-02 4.813565E-07
+ 22 5 3.457434E-05 2.975415E-02 1.028730E-06
+ 22 6 3.457434E-05 3.573641E-02 1.235563E-06
+ 22 7 3.457430E-05 1.721515E-02 5.952018E-07
+ 22 8 3.457057E-05 1.063653E-05 3.677110E-10
+ 22 9 3.457438E-05 1.574679E-02 5.444357E-07
+ 22 10 3.457428E-05 2.413810E-02 8.345575E-07
+ 22 11 3.457429E-05 2.316856E-03 8.010365E-08
+ 22 12 3.457446E-05 1.132026E-02 3.913919E-07
+ 22 13 3.457449E-05 2.244216E-02 7.759264E-07
+ 22 14 3.457393E-05 5.585381E-04 1.931086E-08
+ 22 15 3.457442E-05 1.785495E-02 6.173244E-07
+ 22 16 3.457443E-05 1.530955E-02 5.293190E-07
+ 22 17 3.457421E-05 2.821585E-03 9.755405E-08
+ 22 18 3.457439E-05 2.589085E-02 8.951602E-07
+ 22 19 3.457474E-05 1.243033E-03 4.297753E-08
+ 22 20 3.457444E-05 2.248773E-02 7.775005E-07
+ 22 21 3.457420E-05 1.068233E-02 3.693331E-07
+ 22 22 3.457441E-05 1.391855E-02 4.812255E-07
+ 22 23 3.457452E-05 2.167441E-02 7.493821E-07
+ 22 24 3.457461E-05 7.545389E-03 2.608789E-07
+ 22 25 3.457442E-05 3.035960E-02 1.049665E-06
+ 22 26 3.457431E-05 5.012377E-03 1.732995E-07
+ 22 27 3.457432E-05 3.718389E-02 1.285608E-06
+ 22 28 3.457421E-05 6.511670E-03 2.251358E-07
+ 22 29 3.457438E-05 4.212299E-02 1.456376E-06
+ 22 30 3.457443E-05 1.690832E-02 5.845956E-07
+ 22 31 3.457452E-05 3.889546E-02 1.344792E-06
+ 22 32 3.457449E-05 5.696402E-02 1.969502E-06
+ 22 33 3.457436E-05 1.149079E-02 3.972867E-07
+ 22 34 3.457444E-05 1.864780E-01 6.447372E-06
+ 22 35 3.457441E-05 1.923052E-01 6.648839E-06
+ 22 36 3.457436E-05 5.494475E-02 1.899680E-06
+ 22 37 3.457467E-05 3.417060E-03 1.181437E-07
+ 22 38 3.456886E-05 1.366337E-05 4.723272E-10
+ 22 39 3.457489E-05 2.031323E-05 7.023276E-10
+ 23 0 3.456022E-05 1.637325E-06 5.658631E-11
+ 23 1 3.457612E-05 3.914492E-05 1.353480E-09
+ 23 2 3.457375E-05 4.151105E-04 1.435193E-08
+ 23 3 3.457440E-05 2.538194E-03 8.775652E-08
+ 23 4 3.457440E-05 9.726670E-03 3.362937E-07
+ 23 5 3.457442E-05 2.362453E-02 8.168044E-07
+ 23 6 3.457450E-05 3.437058E-02 1.188346E-06
+ 23 7 3.457433E-05 2.439907E-02 8.435816E-07
+ 23 8 3.457483E-05 2.823240E-03 9.761305E-08
+ 23 9 3.457446E-05 6.557814E-03 2.267329E-07
+ 23 10 3.457448E-05 2.442008E-02 8.443116E-07
+ 23 11 3.457434E-05 1.078099E-02 3.727457E-07
+ 23 12 3.457388E-05 1.843823E-03 6.374812E-08
+ 23 13 3.457434E-05 2.198215E-02 7.600185E-07
+ 23 14 3.457451E-05 9.325427E-03 3.224221E-07
+ 23 15 3.457426E-05 4.372718E-03 1.511835E-07
+ 23 16 3.457455E-05 2.325566E-02 8.040540E-07
+ 23 17 3.457415E-05 2.202624E-03 7.615385E-08
+ 23 18 3.457428E-05 1.553129E-02 5.369833E-07
+ 23 19 3.457425E-05 1.638990E-02 5.666684E-07
+ 23 20 3.457449E-05 3.030583E-03 1.047809E-07
+ 23 21 3.457438E-05 2.639673E-02 9.126505E-07
+ 23 22 3.457557E-05 3.509800E-04 1.213533E-08
+ 23 23 3.457447E-05 2.660187E-02 9.197454E-07
+ 23 24 3.457421E-05 6.097333E-03 2.108105E-07
+ 23 25 3.457444E-05 2.244139E-02 7.758986E-07
+ 23 26 3.457437E-05 1.423642E-02 4.922154E-07
+ 23 27 3.457441E-05 1.953980E-02 6.755770E-07
+ 23 28 3.457452E-05 2.101536E-02 7.265961E-07
+ 23 29 3.457442E-05 2.147790E-02 7.425860E-07
+ 23 30 3.457437E-05 2.423669E-02 8.379683E-07
+ 23 31 3.457436E-05 3.342587E-02 1.155678E-06
+ 23 32 3.457439E-05 1.974744E-02 6.827555E-07
+ 23 33 3.457442E-05 6.974425E-02 2.411367E-06
+ 23 34 3.457420E-05 2.735950E-03 9.459328E-08
+ 23 35 3.457436E-05 1.770761E-01 6.122291E-06
+ 23 36 3.457442E-05 2.127843E-01 7.356895E-06
+ 23 37 3.457443E-05 6.138100E-02 2.122213E-06
+ 23 38 3.457473E-05 2.975490E-03 1.028767E-07
+ 23 39 3.457247E-05 7.914931E-05 2.736388E-09
+ 24 0 3.456069E-05 8.690714E-07 3.003570E-11
+ 24 1 3.457129E-05 2.175756E-05 7.521869E-10
+ 24 2 3.457578E-05 2.441456E-04 8.441526E-09
+ 24 3 3.457390E-05 1.599227E-03 5.529152E-08
+ 24 4 3.457415E-05 6.674120E-03 2.307521E-07
+ 24 5 3.457440E-05 1.810509E-02 6.259727E-07
+ 24 6 3.457449E-05 3.082225E-02 1.065664E-06
+ 24 7 3.457450E-05 2.881240E-02 9.961746E-07
+ 24 8 3.457423E-05 8.779102E-03 3.035307E-07
+ 24 9 3.457415E-05 1.057137E-03 3.654963E-08
+ 24 10 3.457455E-05 1.868342E-02 6.459707E-07
+ 24 11 3.457443E-05 1.889001E-02 6.531113E-07
+ 24 12 3.457474E-05 4.863525E-04 1.681551E-08
+ 24 13 3.457447E-05 1.310140E-02 4.529739E-07
+ 24 14 3.457454E-05 1.889952E-02 6.534420E-07
+ 24 15 3.457523E-05 1.696035E-04 5.864079E-09
+ 24 16 3.457444E-05 1.657708E-02 5.731431E-07
+ 24 17 3.457436E-05 1.409293E-02 4.872540E-07
+ 24 18 3.457455E-05 1.760230E-03 6.085918E-08
+ 24 19 3.457443E-05 2.317378E-02 8.012201E-07
+ 24 20 3.457440E-05 3.143602E-03 1.086881E-07
+ 24 21 3.457446E-05 1.552288E-02 5.366951E-07
+ 24 22 3.457428E-05 1.611539E-02 5.571779E-07
+ 24 23 3.457421E-05 4.545811E-03 1.571678E-07
+ 24 24 3.457453E-05 2.675154E-02 9.249218E-07
+ 24 25 3.457213E-05 5.034413E-05 1.740504E-09
+ 24 26 3.457439E-05 3.101341E-02 1.072270E-06
+ 24 27 3.457462E-05 1.796399E-03 6.210982E-08
+ 24 28 3.457432E-05 3.227435E-02 1.115864E-06
+ 24 29 3.457448E-05 5.772167E-03 1.995697E-07
+ 24 30 3.457441E-05 3.550775E-02 1.227660E-06
+ 24 31 3.457435E-05 8.279580E-03 2.862611E-07
+ 24 32 3.457443E-05 4.642699E-02 1.605187E-06
+ 24 33 3.457459E-05 6.130751E-03 2.119682E-07
+ 24 34 3.457443E-05 7.577354E-02 2.619827E-06
+ 24 35 3.457078E-05 4.386469E-06 1.516437E-10
+ 24 36 3.457442E-05 1.673041E-01 5.784442E-06
+ 24 37 3.457444E-05 2.329423E-01 8.053851E-06
+ 24 38 3.457439E-05 6.626912E-02 2.291215E-06
+ 24 39 3.457486E-05 2.176468E-03 7.525106E-08
+ 25 0 3.457222E-05 4.685539E-07 1.619895E-11
+ 25 1 3.457113E-05 1.221412E-05 4.222558E-10
+ 25 2 3.457397E-05 1.441373E-04 4.983400E-09
+ 25 3 3.457370E-05 1.004099E-03 3.471541E-08
+ 25 4 3.457454E-05 4.520540E-03 1.562956E-07
+ 25 5 3.457436E-05 1.350598E-02 4.669606E-07
+ 25 6 3.457431E-05 2.623787E-02 9.071563E-07
+ 25 7 3.457431E-05 3.026975E-02 1.046556E-06
+ 25 8 3.457450E-05 1.533155E-02 5.300806E-07
+ 25 9 3.457512E-05 1.940402E-04 6.708962E-09
+ 25 10 3.457421E-05 1.075604E-02 3.718815E-07
+ 25 11 3.457433E-05 2.212942E-02 7.651101E-07
+ 25 12 3.457468E-05 5.896220E-03 2.038599E-07
+ 25 13 3.457474E-05 3.871732E-03 1.338641E-07
+ 25 14 3.457446E-05 2.064266E-02 7.137088E-07
+ 25 15 3.457460E-05 6.467182E-03 2.236002E-07
+ 25 16 3.457466E-05 5.015642E-03 1.734141E-07
+ 25 17 3.457433E-05 2.086269E-02 7.213137E-07
+ 25 18 3.457401E-05 2.154166E-03 7.447815E-08
+ 25 19 3.457427E-05 1.275442E-02 4.409746E-07
+ 25 20 3.457451E-05 1.673126E-02 5.784751E-07
+ 25 21 3.457516E-05 9.226260E-04 3.189994E-08
+ 25 22 3.457449E-05 2.355809E-02 8.145091E-07
+ 25 23 3.457466E-05 3.160332E-03 1.092674E-07
+ 25 24 3.457436E-05 1.726326E-02 5.968663E-07
+ 25 25 3.457440E-05 1.481523E-02 5.122277E-07
+ 25 26 3.457433E-05 7.540451E-03 2.607061E-07
+ 25 27 3.457442E-05 2.627964E-02 9.086033E-07
+ 25 28 3.457460E-05 1.562166E-03 5.401125E-08
+ 25 29 3.457435E-05 3.426612E-02 1.184729E-06
+ 25 30 3.458681E-05 2.173944E-06 7.518977E-11
+ 25 31 3.457439E-05 4.101474E-02 1.418059E-06
+ 25 32 3.457544E-05 4.036109E-04 1.395502E-08
+ 25 33 3.457436E-05 5.155818E-02 1.782591E-06
+ 25 34 3.457545E-05 2.500165E-04 8.644434E-09
+ 25 35 3.457432E-05 7.495491E-02 2.591515E-06
+ 25 36 3.457468E-05 1.744427E-03 6.031300E-08
+ 25 37 3.457442E-05 1.587771E-01 5.489628E-06
+ 25 38 3.457436E-05 2.530052E-01 8.747493E-06
+ 25 39 3.457439E-05 6.878178E-02 2.378088E-06
+ 26 0 3.461085E-05 2.569577E-07 8.893527E-12
+ 26 1 3.456611E-05 6.937377E-06 2.397981E-10
+ 26 2 3.457382E-05 8.560654E-05 2.959745E-09
+ 26 3 3.457532E-05 6.300898E-04 2.178556E-08
+ 26 4 3.457401E-05 3.035121E-03 1.049363E-07
+ 26 5 3.457420E-05 9.872443E-03 3.413318E-07
+ 26 6 3.457444E-05 2.147201E-02 7.423826E-07
+ 26 7 3.457436E-05 2.931625E-02 1.013591E-06
+ 26 8 3.457449E-05 2.070210E-02 7.157643E-07
+ 26 9 3.457429E-05 2.977352E-03 1.029398E-07
+ 26 10 3.457464E-05 4.103169E-03 1.418656E-07
+ 26 11 3.457439E-05 1.994141E-02 6.894621E-07
+ 26 12 3.457426E-05 1.321661E-02 4.569545E-07
+ 26 13 3.457220E-05 2.437831E-05 8.428118E-10
+ 26 14 3.457426E-05 1.471675E-02 5.088207E-07
+ 26 15 3.457446E-05 1.507384E-02 5.211699E-07
+ 26 16 3.457761E-05 1.707439E-06 5.903915E-11
+ 26 17 3.457456E-05 1.597524E-02 5.523370E-07
+ 26 18 3.457451E-05 1.213854E-02 4.196840E-07
+ 26 19 3.457466E-05 1.465693E-03 5.067584E-08
+ 26 20 3.457431E-05 2.060374E-02 7.123600E-07
+ 26 21 3.457474E-05 4.331695E-03 1.497672E-07
+ 26 22 3.457430E-05 1.075309E-02 3.717808E-07
+ 26 23 3.457449E-05 1.825643E-02 6.312068E-07
+ 26 24 3.457396E-05 7.652272E-04 2.645694E-08
+ 26 25 3.457441E-05 2.462697E-02 8.514629E-07
+ 26 26 3.457444E-05 2.556765E-03 8.839871E-08
+ 26 27 3.457424E-05 2.028463E-02 7.013255E-07
+ 26 28 3.457440E-05 1.283581E-02 4.437903E-07
+ 26 29 3.457432E-05 1.203767E-02 4.161943E-07
+ 26 30 3.457451E-05 2.483229E-02 8.585641E-07
+ 26 31 3.457452E-05 5.558435E-03 1.921802E-07
+ 26 32 3.457443E-05 3.584314E-02 1.239256E-06
+ 26 33 3.457469E-05 2.346489E-03 8.112911E-08
+ 26 34 3.457449E-05 4.796359E-02 1.658316E-06
+ 26 35 3.457435E-05 1.802260E-03 6.231197E-08
+ 26 36 3.457439E-05 6.857697E-02 2.371007E-06
+ 26 37 3.457443E-05 6.096563E-03 2.107852E-07
+ 26 38 3.457439E-05 1.530083E-01 5.290169E-06
+ 26 39 3.457442E-05 2.731559E-01 9.444208E-06
+ 27 0 3.455434E-05 1.435046E-07 4.958707E-12
+ 27 1 3.456575E-05 3.992723E-06 1.380115E-10
+ 27 2 3.457287E-05 5.124913E-05 1.771830E-09
+ 27 3 3.457430E-05 3.961847E-04 1.369781E-08
+ 27 4 3.457478E-05 2.027170E-03 7.008895E-08
+ 27 5 3.457448E-05 7.109260E-03 2.457990E-07
+ 27 6 3.457449E-05 1.705198E-02 5.895635E-07
+ 27 7 3.457436E-05 2.675736E-02 9.251186E-07
+ 27 8 3.457439E-05 2.406407E-02 8.320005E-07
+ 27 9 3.457433E-05 7.654409E-03 2.646461E-07
+ 27 10 3.457410E-05 5.359345E-04 1.852946E-08
+ 27 11 3.457455E-05 1.437351E-02 4.969578E-07
+ 27 12 3.457452E-05 1.820853E-02 6.295513E-07
+ 27 13 3.457418E-05 2.223712E-03 7.688302E-08
+ 27 14 3.457420E-05 6.496453E-03 2.246097E-07
+ 27 15 3.457428E-05 1.866802E-02 6.454332E-07
+ 27 16 3.457456E-05 3.723648E-03 1.287435E-07
+ 27 17 3.457436E-05 6.191502E-03 2.140673E-07
+ 27 18 3.457440E-05 1.849048E-02 6.392970E-07
+ 27 19 3.457426E-05 1.588952E-03 5.493684E-08
+ 27 20 3.457438E-05 1.133083E-02 3.917562E-07
+ 27 21 3.457440E-05 1.576795E-02 5.451675E-07
+ 27 22 3.457347E-05 2.613932E-04 9.037271E-09
+ 27 23 3.457428E-05 2.010641E-02 6.951647E-07
+ 27 24 3.457444E-05 5.960245E-03 2.060721E-07
+ 27 25 3.457441E-05 1.003446E-02 3.469356E-07
+ 27 26 3.457440E-05 1.934575E-02 6.688675E-07
+ 27 27 3.457389E-05 9.190053E-04 3.177358E-08
+ 27 28 3.457443E-05 2.627551E-02 9.084608E-07
+ 27 29 3.457445E-05 1.791704E-03 6.194716E-08
+ 27 30 3.457441E-05 2.407090E-02 8.322373E-07
+ 27 31 3.457448E-05 1.087020E-02 3.758315E-07
+ 27 32 3.457425E-05 1.753090E-02 6.061177E-07
+ 27 33 3.457449E-05 2.343072E-02 8.101050E-07
+ 27 34 3.457457E-05 1.153638E-02 3.988654E-07
+ 27 35 3.457437E-05 3.782056E-02 1.307622E-06
+ 27 36 3.457434E-05 8.669830E-03 2.997536E-07
+ 27 37 3.457439E-05 5.865657E-02 2.028015E-06
+ 27 38 3.457457E-05 1.124957E-02 3.889491E-07
+ 27 39 3.457444E-05 1.514574E-01 5.236554E-06
+ 28 0 3.454666E-05 8.169307E-08 2.822223E-12
+ 28 1 3.457097E-05 2.331607E-06 8.060591E-11
+ 28 2 3.457187E-05 3.097780E-05 1.070960E-09
+ 28 3 3.457564E-05 2.501633E-04 8.649556E-09
+ 28 4 3.457480E-05 1.350960E-03 4.670918E-08
+ 28 5 3.457423E-05 5.065680E-03 1.751420E-07
+ 28 6 3.457456E-05 1.323665E-02 4.576515E-07
+ 28 7 3.457450E-05 2.336030E-02 8.076706E-07
+ 28 8 3.457451E-05 2.533820E-02 8.760558E-07
+ 28 9 3.457450E-05 1.259028E-02 4.353027E-07
+ 28 10 3.457382E-05 2.297213E-04 7.942344E-09
+ 28 11 3.457433E-05 8.116860E-03 2.806350E-07
+ 28 12 3.457438E-05 1.912008E-02 6.610651E-07
+ 28 13 3.457465E-05 7.709700E-03 2.665602E-07
+ 28 14 3.457451E-05 1.030366E-03 3.562439E-08
+ 28 15 3.457432E-05 1.575640E-02 5.447667E-07
+ 28 16 3.457449E-05 1.096542E-02 3.791237E-07
+ 28 17 3.457479E-05 3.535246E-04 1.222304E-08
+ 28 18 3.457450E-05 1.569355E-02 5.425968E-07
+ 28 19 3.457449E-05 9.646041E-03 3.335069E-07
+ 28 20 3.457439E-05 1.684271E-03 5.823264E-08
+ 28 21 3.457437E-05 1.847284E-02 6.386869E-07
+ 28 22 3.457433E-05 4.490655E-03 1.552614E-07
+ 28 23 3.457427E-05 8.027664E-03 2.775506E-07
+ 28 24 3.457429E-05 1.807941E-02 6.250828E-07
+ 28 25 3.456389E-05 1.577762E-06 5.453360E-11
+ 28 26 3.457443E-05 1.996710E-02 6.903510E-07
+ 28 27 3.457458E-05 7.189008E-03 2.485570E-07
+ 28 28 3.457450E-05 1.001541E-02 3.462777E-07
+ 28 29 3.457429E-05 2.052622E-02 7.096795E-07
+ 28 30 3.457406E-05 1.173889E-03 4.058610E-08
+ 28 31 3.457443E-05 2.845379E-02 9.837734E-07
+ 28 32 3.457458E-05 1.312924E-03 4.539381E-08
+ 28 33 3.457446E-05 2.811034E-02 9.718998E-07
+ 28 34 3.457462E-05 1.012495E-02 3.500664E-07
+ 28 35 3.457439E-05 2.302127E-02 7.959464E-07
+ 28 36 3.457443E-05 2.490262E-02 8.609937E-07
+ 28 37 3.457436E-05 1.796261E-02 6.210456E-07
+ 28 38 3.457441E-05 4.729752E-02 1.635284E-06
+ 28 39 3.457451E-05 1.567880E-02 5.420868E-07
+ 29 0 3.467808E-05 4.743684E-08 1.645019E-12
+ 29 1 3.459182E-05 1.382929E-06 4.783804E-11
+ 29 2 3.457300E-05 1.893329E-05 6.545806E-10
+ 29 3 3.457263E-05 1.589319E-04 5.494694E-09
+ 29 4 3.457370E-05 9.006445E-04 3.113861E-08
+ 29 5 3.457476E-05 3.584739E-03 1.239415E-07
+ 29 6 3.457433E-05 1.010122E-02 3.492428E-07
+ 29 7 3.457450E-05 1.971786E-02 6.817351E-07
+ 29 8 3.457428E-05 2.487844E-02 8.601543E-07
+ 29 9 3.457435E-05 1.667928E-02 5.766751E-07
+ 29 10 3.457418E-05 2.353205E-03 8.136013E-08
+ 29 11 3.457401E-05 3.191387E-03 1.103390E-07
+ 29 12 3.457443E-05 1.645996E-02 5.690936E-07
+ 29 13 3.457437E-05 1.308551E-02 4.524233E-07
+ 29 14 3.457575E-05 2.404174E-04 8.312614E-09
+ 29 15 3.457424E-05 9.339721E-03 3.229137E-07
+ 29 16 3.457429E-05 1.579440E-02 5.460800E-07
+ 29 17 3.457384E-05 1.460353E-03 5.049002E-08
+ 29 18 3.457462E-05 7.812271E-03 2.701063E-07
+ 29 19 3.457431E-05 1.589647E-02 5.496094E-07
+ 29 20 3.457492E-05 7.836394E-04 2.709427E-08
+ 29 21 3.457438E-05 1.090738E-02 3.771157E-07
+ 29 22 3.457443E-05 1.399822E-02 4.839805E-07
+ 29 23 3.457300E-05 1.260765E-04 4.358843E-09
+ 29 24 3.457444E-05 1.725144E-02 5.964590E-07
+ 29 25 3.457449E-05 7.375161E-03 2.549925E-07
+ 29 26 3.457440E-05 5.791820E-03 2.002487E-07
+ 29 27 3.457452E-05 1.985111E-02 6.863426E-07
+ 29 28 3.457364E-05 1.057090E-04 3.654746E-09
+ 29 29 3.457453E-05 2.013398E-02 6.961228E-07
+ 29 30 3.457441E-05 8.550235E-03 2.956193E-07
+ 29 31 3.457427E-05 9.991116E-03 3.454355E-07
+ 29 32 3.457437E-05 2.248757E-02 7.774936E-07
+ 29 33 3.457474E-05 1.149374E-03 3.973930E-08
+ 29 34 3.457442E-05 3.141151E-02 1.086035E-06
+ 29 35 3.457459E-05 1.609916E-03 5.566218E-08
+ 29 36 3.457437E-05 3.195201E-02 1.104721E-06
+ 29 37 3.457420E-05 1.295350E-02 4.478567E-07
+ 29 38 3.457441E-05 2.698875E-02 9.331203E-07
+ 29 39 3.457441E-05 3.622394E-02 1.252422E-06
+ 30 0 3.469986E-05 2.810317E-08 9.751761E-13
+ 30 1 3.458806E-05 8.338247E-07 2.884037E-11
+ 30 2 3.456899E-05 1.171494E-05 4.049737E-10
+ 30 3 3.457288E-05 1.017589E-04 3.518097E-09
+ 30 4 3.457422E-05 6.019790E-04 2.081295E-08
+ 30 5 3.457418E-05 2.527098E-03 8.737233E-08
+ 30 6 3.457439E-05 7.613358E-03 2.632272E-07
+ 30 7 3.457449E-05 1.622095E-02 5.608313E-07
+ 30 8 3.457452E-05 2.320245E-02 8.022135E-07
+ 30 9 3.457427E-05 1.939760E-02 6.706577E-07
+ 30 10 3.457415E-05 5.742269E-03 1.985341E-07
+ 30 11 3.457526E-05 5.160607E-04 1.784294E-08
+ 30 12 3.457437E-05 1.186780E-02 4.103216E-07
+ 30 13 3.457442E-05 1.613707E-02 5.579300E-07
+ 30 14 3.457423E-05 3.168727E-03 1.095563E-07
+ 30 15 3.457413E-05 3.369251E-03 1.164889E-07
+ 30 16 3.457453E-05 1.571048E-02 5.431823E-07
+ 30 17 3.457465E-05 6.797138E-03 2.350087E-07
+ 30 18 3.457478E-05 1.487078E-03 5.141539E-08
+ 30 19 3.457457E-05 1.530187E-02 5.290557E-07
+ 30 20 3.457421E-05 6.799543E-03 2.350888E-07
+ 30 21 3.457422E-05 2.404437E-03 8.313153E-08
+ 30 22 3.457430E-05 1.668034E-02 5.767110E-07
+ 30 23 3.457410E-05 3.764967E-03 1.301704E-07
+ 30 24 3.457416E-05 6.816997E-03 2.356920E-07
+ 30 25 3.457448E-05 1.671397E-02 5.778768E-07
+ 30 26 3.457574E-05 1.628554E-04 5.630846E-09
+ 30 27 3.457436E-05 1.570820E-02 5.431011E-07
+ 30 28 3.457439E-05 1.018962E-02 3.523000E-07
+ 30 29 3.457430E-05 4.054409E-03 1.401784E-07
+ 30 30 3.457447E-05 2.157506E-02 7.459462E-07
+ 30 31 3.457482E-05 5.362953E-04 1.854231E-08
+ 30 32 3.457440E-05 2.010046E-02 6.949613E-07
+ 30 33 3.457446E-05 1.098772E-02 3.798944E-07
+ 30 34 3.457437E-05 8.921828E-03 3.084666E-07
+ 30 35 3.457430E-05 2.632553E-02 9.101866E-07
+ 30 36 3.457447E-05 4.135220E-04 1.429730E-08
+ 30 37 3.457444E-05 3.542230E-02 1.224706E-06
+ 30 38 3.457432E-05 4.513553E-03 1.560530E-07
+ 30 39 3.457445E-05 3.388092E-02 1.171414E-06
+ 31 0 3.464570E-05 1.698852E-08 5.885791E-13
+ 31 1 3.459248E-05 5.113394E-07 1.768850E-11
+ 31 2 3.458156E-05 7.345401E-06 2.540154E-10
+ 31 3 3.457485E-05 6.575199E-05 2.273365E-09
+ 31 4 3.457520E-05 4.041515E-04 1.397362E-08
+ 31 5 3.457490E-05 1.779353E-03 6.152096E-08
+ 31 6 3.457467E-05 5.689068E-03 1.966977E-07
+ 31 7 3.457437E-05 1.308689E-02 4.524709E-07
+ 31 8 3.457439E-05 2.081745E-02 7.197508E-07
+ 31 9 3.457430E-05 2.067180E-02 7.147129E-07
+ 31 10 3.457426E-05 9.355499E-03 3.234595E-07
+ 31 11 3.457357E-05 7.583675E-05 2.621947E-09
+ 31 12 3.457454E-05 7.053956E-03 2.438873E-07
+ 31 13 3.457441E-05 1.627012E-02 5.625297E-07
+ 31 14 3.457438E-05 7.582914E-03 2.621746E-07
+ 31 15 3.457333E-05 2.847862E-04 9.846008E-09
+ 31 16 3.457439E-05 1.174580E-02 4.061037E-07
+ 31 17 3.457459E-05 1.196267E-02 4.136044E-07
+ 31 18 3.457395E-05 1.501760E-04 5.192176E-09
+ 31 19 3.457434E-05 9.630317E-03 3.329619E-07
+ 31 20 3.457460E-05 1.283998E-02 4.439370E-07
+ 31 21 3.457321E-05 1.290532E-04 4.461785E-09
+ 31 22 3.457435E-05 1.113878E-02 3.851162E-07
+ 31 23 3.457431E-05 1.165304E-02 4.028958E-07
+ 31 24 3.457472E-05 2.007164E-04 6.939711E-09
+ 31 25 3.457447E-05 1.527247E-02 5.280374E-07
+ 31 26 3.457432E-05 7.352575E-03 2.542103E-07
+ 31 27 3.457470E-05 3.753334E-03 1.297704E-07
+ 31 28 3.457449E-05 1.834659E-02 6.343239E-07
+ 31 29 3.457436E-05 1.188827E-03 4.110293E-08
+ 31 30 3.457447E-05 1.382191E-02 4.778852E-07
+ 31 31 3.457428E-05 1.341301E-02 4.637453E-07
+ 31 32 3.457452E-05 2.291276E-03 7.921975E-08
+ 31 33 3.457454E-05 2.333614E-02 8.068364E-07
+ 31 34 3.457390E-05 1.899048E-03 6.565751E-08
+ 31 35 3.457439E-05 1.865626E-02 6.450287E-07
+ 31 36 3.457427E-05 1.621424E-02 5.605956E-07
+ 31 37 3.457416E-05 5.454031E-03 1.885685E-07
+ 31 38 3.457451E-05 3.306607E-02 1.143243E-06
+ 31 39 3.457357E-05 4.831573E-04 1.670447E-08
+ 32 0 3.458938E-05 1.047552E-08 3.623418E-13
+ 32 1 3.455967E-05 3.190442E-07 1.102606E-11
+ 32 2 3.457473E-05 4.670699E-06 1.614881E-10
+ 32 3 3.457470E-05 4.292595E-05 1.484152E-09
+ 32 4 3.457388E-05 2.729828E-04 9.438073E-09
+ 32 5 3.457450E-05 1.254106E-03 4.336009E-08
+ 32 6 3.457463E-05 4.228057E-03 1.461835E-07
+ 32 7 3.457455E-05 1.040617E-02 3.597886E-07
+ 32 8 3.457439E-05 1.813482E-02 6.270004E-07
+ 32 9 3.457434E-05 2.069891E-02 7.156512E-07
+ 32 10 3.457454E-05 1.247686E-02 4.313816E-07
+ 32 11 3.457419E-05 1.314249E-03 4.543909E-08
+ 32 12 3.457414E-05 3.208634E-03 1.109358E-07
+ 32 13 3.457433E-05 1.407198E-02 4.865293E-07
+ 32 14 3.457437E-05 1.143362E-02 3.953102E-07
+ 32 15 3.457532E-05 4.627339E-04 1.599917E-08
+ 32 16 3.457414E-05 6.503585E-03 2.248559E-07
+ 32 17 3.457435E-05 1.411836E-02 4.881332E-07
+ 32 18 3.457417E-05 3.084182E-03 1.066330E-07
+ 32 19 3.457466E-05 3.491461E-03 1.207161E-07
+ 32 20 3.457426E-05 1.429769E-02 4.943320E-07
+ 32 21 3.457404E-05 3.889900E-03 1.344896E-07
+ 32 22 3.457477E-05 3.698843E-03 1.278866E-07
+ 32 23 3.457440E-05 1.490463E-02 5.153185E-07
+ 32 24 3.457445E-05 2.477209E-03 8.564815E-08
+ 32 25 3.457446E-05 6.679857E-03 2.309524E-07
+ 32 26 3.457435E-05 1.480190E-02 5.117660E-07
+ 32 27 3.457511E-05 2.675174E-04 9.249445E-09
+ 32 28 3.457442E-05 1.280761E-02 4.428158E-07
+ 32 29 3.457461E-05 1.105060E-02 3.820703E-07
+ 32 30 3.457489E-05 1.492031E-03 5.158681E-08
+ 32 31 3.457451E-05 1.910854E-02 6.606685E-07
+ 32 32 3.457441E-05 3.398414E-03 1.174982E-07
+ 32 33 3.457425E-05 1.094448E-02 3.783973E-07
+ 32 34 3.457423E-05 1.766601E-02 6.107885E-07
+ 32 35 3.457470E-05 4.609304E-04 1.593653E-08
+ 32 36 3.457426E-05 2.418596E-02 8.362117E-07
+ 32 37 3.457440E-05 6.299791E-03 2.178115E-07
+ 32 38 3.457429E-05 1.333718E-02 4.611234E-07
+ 32 39 3.457427E-05 2.651392E-02 9.166992E-07
+ 33 0 3.439658E-05 6.588569E-09 2.266242E-13
+ 33 1 3.461032E-05 2.025630E-07 7.010770E-12
+ 33 2 3.456178E-05 3.013557E-06 1.041539E-10
+ 33 3 3.457132E-05 2.834061E-05 9.797723E-10
+ 33 4 3.457318E-05 1.857529E-04 6.422070E-09
+ 33 5 3.457415E-05 8.864321E-04 3.064764E-08
+ 33 6 3.457403E-05 3.133439E-03 1.083356E-07
+ 33 7 3.457437E-05 8.188018E-03 2.830956E-07
+ 33 8 3.457450E-05 1.544609E-02 5.340409E-07
+ 33 9 3.457441E-05 1.979201E-02 6.842972E-07
+ 33 10 3.457446E-05 1.473664E-02 5.095113E-07
+ 33 11 3.457437E-05 3.502174E-03 1.210855E-07
+ 33 12 3.457363E-05 8.623866E-04 2.981583E-08
+ 33 13 3.457419E-05 1.062957E-02 3.675087E-07
+ 33 14 3.457449E-05 1.356213E-02 4.689037E-07
+ 33 15 3.457420E-05 2.887073E-03 9.981825E-08
+ 33 16 3.457404E-05 2.282220E-03 7.890558E-08
+ 33 17 3.457441E-05 1.285825E-02 4.445664E-07
+ 33 18 3.457443E-05 7.502595E-03 2.593980E-07
+ 33 19 3.457321E-05 2.512827E-04 8.687651E-09
+ 33 20 3.457418E-05 1.114406E-02 3.852969E-07
+ 33 21 3.457419E-05 9.233086E-03 3.192265E-07
+ 33 22 3.457487E-05 8.642305E-05 2.988066E-09
+ 33 23 3.457425E-05 1.161121E-02 4.014487E-07
+ 33 24 3.457441E-05 8.824000E-03 3.050846E-07
+ 33 25 3.457401E-05 5.575884E-04 1.927807E-08
+ 33 26 3.457422E-05 1.397472E-02 4.831652E-07
+ 33 27 3.457416E-05 6.233941E-03 2.155333E-07
+ 33 28 3.457450E-05 3.067528E-03 1.060583E-07
+ 33 29 3.457453E-05 1.629687E-02 5.634566E-07
+ 33 30 3.457410E-05 2.034205E-03 7.033081E-08
+ 33 31 3.457435E-05 9.521101E-03 3.291859E-07
+ 33 32 3.457457E-05 1.488707E-02 5.147142E-07
+ 33 33 3.457605E-05 1.036481E-04 3.583741E-09
+ 33 34 3.457442E-05 1.836367E-02 6.349132E-07
+ 33 35 3.457429E-05 7.840639E-03 2.710845E-07
+ 33 36 3.457457E-05 6.178205E-03 2.136088E-07
+ 33 37 3.457452E-05 2.274769E-02 7.864906E-07
+ 33 38 3.457384E-05 6.813024E-04 2.355524E-08
+ 33 39 3.457434E-05 2.034045E-02 7.032576E-07
+ 34 0 3.449210E-05 4.222400E-09 1.456395E-13
+ 34 1 3.462080E-05 1.308558E-07 4.530333E-12
+ 34 2 3.458711E-05 1.973604E-06 6.826124E-11
+ 34 3 3.457839E-05 1.893616E-05 6.547819E-10
+ 34 4 3.457390E-05 1.274745E-04 4.407291E-09
+ 34 5 3.457505E-05 6.293224E-04 2.175885E-08
+ 34 6 3.457392E-05 2.320811E-03 8.023956E-08
+ 34 7 3.457430E-05 6.396193E-03 2.211439E-07
+ 34 8 3.457434E-05 1.293289E-02 4.471461E-07
+ 34 9 3.457443E-05 1.827600E-02 6.318822E-07
+ 34 10 3.457446E-05 1.603946E-02 5.545555E-07
+ 34 11 3.457426E-05 5.980232E-03 2.067621E-07
+ 34 12 3.457011E-05 1.491721E-05 5.156894E-10
+ 34 13 3.457429E-05 6.990983E-03 2.417083E-07
+ 34 14 3.457447E-05 1.373755E-02 4.749687E-07
+ 34 15 3.457445E-05 6.107326E-03 2.111575E-07
+ 34 16 3.457524E-05 2.064411E-04 7.137753E-09
+ 34 17 3.457426E-05 9.417342E-03 3.255976E-07
+ 34 18 3.457423E-05 1.084811E-02 3.750649E-07
+ 34 19 3.457394E-05 5.950760E-04 2.057412E-08
+ 34 20 3.457470E-05 6.091815E-03 2.106227E-07
+ 34 21 3.457455E-05 1.221265E-02 4.222468E-07
+ 34 22 3.457446E-05 1.417334E-03 4.900357E-08
+ 34 23 3.457427E-05 5.536248E-03 1.914118E-07
+ 34 24 3.457431E-05 1.272751E-02 4.400450E-07
+ 34 25 3.457405E-05 1.068658E-03 3.694785E-08
+ 34 26 3.457444E-05 7.302378E-03 2.524756E-07
+ 34 27 3.457434E-05 1.251852E-02 4.328195E-07
+ 34 28 3.457240E-05 1.291323E-04 4.464414E-09
+ 34 29 3.457461E-05 1.122161E-02 3.879830E-07
+ 34 30 3.457428E-05 1.034655E-02 3.577243E-07
+ 34 31 3.457363E-05 6.473010E-04 2.237954E-08
+ 34 32 3.457451E-05 1.602164E-02 5.539405E-07
+ 34 33 3.457469E-05 5.651882E-03 1.954120E-07
+ 34 34 3.457465E-05 5.255567E-03 1.817094E-07
+ 34 35 3.457440E-05 1.841213E-02 6.365883E-07
+ 34 36 3.457480E-05 9.203202E-04 3.181989E-08
+ 34 37 3.457437E-05 1.412646E-02 4.884136E-07
+ 34 38 3.457440E-05 1.585141E-02 5.480529E-07
+ 34 39 3.457464E-05 6.355219E-04 2.197294E-08
+ 35 0 3.416695E-05 2.756250E-09 9.417265E-14
+ 35 1 3.453325E-05 8.598970E-08 2.969503E-12
+ 35 2 3.457426E-05 1.312170E-06 4.536732E-11
+ 35 3 3.456902E-05 1.281132E-05 4.428746E-10
+ 35 4 3.457284E-05 8.830436E-05 3.052933E-09
+ 35 5 3.457450E-05 4.493425E-04 1.553579E-08
+ 35 6 3.457424E-05 1.721053E-03 5.950411E-08
+ 35 7 3.457431E-05 4.973797E-03 1.719656E-07
+ 35 8 3.457433E-05 1.069073E-02 3.696249E-07
+ 35 9 3.457427E-05 1.643120E-02 5.680968E-07
+ 35 10 3.457448E-05 1.646594E-02 5.693014E-07
+ 35 11 3.457439E-05 8.270076E-03 2.859328E-07
+ 35 12 3.457320E-05 3.538428E-04 1.223348E-08
+ 35 13 3.457457E-05 3.889089E-03 1.344636E-07
+ 35 14 3.457444E-05 1.234957E-02 4.269794E-07
+ 35 15 3.457441E-05 8.924600E-03 3.085627E-07
+ 35 16 3.457502E-05 2.651377E-04 9.167143E-09
+ 35 17 3.457430E-05 5.469435E-03 1.891019E-07
+ 35 18 3.457425E-05 1.191191E-02 4.118452E-07
+ 35 19 3.457413E-05 3.262375E-03 1.127938E-07
+ 35 20 3.457459E-05 1.935691E-03 6.692574E-08
+ 35 21 3.457430E-05 1.161350E-02 4.015285E-07
+ 35 22 3.457456E-05 5.337584E-03 1.845446E-07
+ 35 23 3.457500E-05 1.062077E-03 3.672133E-08
+ 35 24 3.457441E-05 1.175725E-02 4.064999E-07
+ 35 25 3.457446E-05 5.664099E-03 1.958332E-07
+ 35 26 3.457447E-05 1.445534E-03 4.997858E-08
+ 35 27 3.457426E-05 1.292273E-02 4.467937E-07
+ 35 28 3.457408E-05 4.407055E-03 1.523698E-07
+ 35 29 3.457435E-05 3.260979E-03 1.127462E-07
+ 35 30 3.457434E-05 1.427046E-02 4.933920E-07
+ 35 31 3.457433E-05 2.043557E-03 7.065462E-08
+ 35 32 3.457417E-05 7.228292E-03 2.499122E-07
+ 35 33 3.457424E-05 1.418383E-02 4.903953E-07
+ 35 34 3.457441E-05 1.364645E-04 4.718178E-09
+ 35 35 3.457432E-05 1.305676E-02 4.514288E-07
+ 35 36 3.457453E-05 1.155854E-02 3.996311E-07
+ 35 37 3.457495E-05 8.635723E-04 2.985797E-08
+ 35 38 3.457452E-05 1.886900E-02 6.523866E-07
+ 35 39 3.457457E-05 7.538308E-03 2.606338E-07
+ 36 0 3.462669E-05 1.830984E-09 6.340092E-14
+ 36 1 3.452465E-05 5.746088E-08 1.983817E-12
+ 36 2 3.459810E-05 8.856692E-07 3.064247E-11
+ 36 3 3.456836E-05 8.779547E-06 3.034945E-10
+ 36 4 3.457446E-05 6.178856E-05 2.136306E-09
+ 36 5 3.457525E-05 3.230090E-04 1.116812E-08
+ 36 6 3.457375E-05 1.279807E-03 4.424773E-08
+ 36 7 3.457447E-05 3.858699E-03 1.334125E-07
+ 36 8 3.457447E-05 8.754858E-03 3.026946E-07
+ 36 9 3.457424E-05 1.447200E-02 5.003584E-07
+ 36 10 3.457424E-05 1.618513E-02 5.595886E-07
+ 36 11 3.457436E-05 1.009206E-02 3.489267E-07
+ 36 12 3.457438E-05 1.452823E-03 5.023045E-08
+ 36 13 3.457391E-05 1.684624E-03 5.824404E-08
+ 36 14 3.457429E-05 1.004241E-02 3.472091E-07
+ 36 15 3.457423E-05 1.067099E-02 3.689411E-07
+ 36 16 3.457464E-05 1.779480E-03 6.152487E-08
+ 36 17 3.457431E-05 2.291481E-03 7.922639E-08
+ 36 18 3.457442E-05 1.079918E-02 3.733753E-07
+ 36 19 3.457455E-05 6.437846E-03 2.225856E-07
+ 36 20 3.457673E-05 8.547557E-05 2.955466E-09
+ 36 21 3.457439E-05 8.498225E-03 2.938209E-07
+ 36 22 3.457437E-05 8.876003E-03 3.068822E-07
+ 36 23 3.457305E-05 7.748999E-05 2.679065E-09
+ 36 24 3.457416E-05 7.569218E-03 2.616994E-07
+ 36 25 3.457439E-05 9.806153E-03 3.390417E-07
+ 36 26 3.457613E-05 1.125645E-04 3.892043E-09
+ 36 27 3.457422E-05 8.343905E-03 2.884840E-07
+ 36 28 3.457428E-05 9.792142E-03 3.385562E-07
+ 36 29 3.457825E-05 5.086828E-07 1.758936E-11
+ 36 30 3.457421E-05 1.056138E-02 3.651512E-07
+ 36 31 3.457465E-05 8.641863E-03 2.987894E-07
+ 36 32 3.457385E-05 5.145629E-04 1.779042E-08
+ 36 33 3.457427E-05 1.355318E-02 4.685912E-07
+ 36 34 3.457457E-05 6.281821E-03 2.171913E-07
+ 36 35 3.457425E-05 2.608532E-03 9.018803E-08
+ 36 36 3.457423E-05 1.617986E-02 5.594062E-07
+ 36 37 3.457430E-05 3.518673E-03 1.216556E-07
+ 36 38 3.457438E-05 6.302343E-03 2.178996E-07
+ 36 39 3.457438E-05 1.787858E-02 6.181408E-07
+ 37 0 3.517140E-05 1.236226E-09 4.347978E-14
+ 37 1 3.451641E-05 3.902600E-08 1.347037E-12
+ 37 2 3.456121E-05 6.068098E-07 2.097208E-11
+ 37 3 3.457708E-05 6.095368E-06 2.107601E-10
+ 37 4 3.457367E-05 4.369342E-05 1.510642E-09
+ 37 5 3.457371E-05 2.339603E-04 8.088874E-09
+ 37 6 3.457449E-05 9.554899E-04 3.303558E-08
+ 37 7 3.457430E-05 2.992046E-03 1.034479E-07
+ 37 8 3.457416E-05 7.122422E-03 2.462517E-07
+ 37 9 3.457453E-05 1.254646E-02 4.337881E-07
+ 37 10 3.457443E-05 1.539145E-02 5.321508E-07
+ 37 11 3.457460E-05 1.133261E-02 3.918202E-07
+ 37 12 3.457434E-05 2.905210E-03 1.004457E-07
+ 37 13 3.457521E-05 4.350945E-04 1.504349E-08
+ 37 14 3.457460E-05 7.442175E-03 2.573102E-07
+ 37 15 3.457429E-05 1.118560E-02 3.867341E-07
+ 37 16 3.457406E-05 3.895909E-03 1.346974E-07
+ 37 17 3.457396E-05 4.722133E-04 1.632629E-08
+ 37 18 3.457458E-05 8.344675E-03 2.885136E-07
+ 37 19 3.457418E-05 8.753554E-03 3.026470E-07
+ 37 20 3.457444E-05 4.865633E-04 1.682265E-08
+ 37 21 3.457466E-05 4.722103E-03 1.632651E-07
+ 37 22 3.457419E-05 1.031665E-02 3.566897E-07
+ 37 23 3.457469E-05 1.913729E-03 6.616658E-08
+ 37 24 3.457460E-05 3.136385E-03 1.084393E-07
+ 37 25 3.457459E-05 1.088803E-02 3.764492E-07
+ 37 26 3.457443E-05 2.604146E-03 9.003685E-08
+ 37 27 3.457472E-05 3.050633E-03 1.054748E-07
+ 37 28 3.457419E-05 1.154211E-02 3.990592E-07
+ 37 29 3.457469E-05 2.317796E-03 8.013706E-08
+ 37 30 3.457432E-05 4.145834E-03 1.433394E-07
+ 37 31 3.457423E-05 1.222593E-02 4.227020E-07
+ 37 32 3.457441E-05 1.367157E-03 4.726864E-08
+ 37 33 3.457441E-05 6.383762E-03 2.207148E-07
+ 37 34 3.457460E-05 1.249358E-02 4.319606E-07
+ 37 35 3.457537E-05 4.030205E-04 1.393458E-08
+ 37 36 3.457438E-05 9.433031E-03 3.261411E-07
+ 37 37 3.457437E-05 1.223624E-02 4.230602E-07
+ 37 38 3.458105E-05 8.555742E-06 2.958666E-10
+ 37 39 3.457423E-05 1.247742E-02 4.313971E-07
+ 38 0 3.533932E-05 8.479744E-10 2.996684E-14
+ 38 1 3.451091E-05 2.692225E-08 9.291114E-13
+ 38 2 3.459093E-05 4.219022E-07 1.459399E-11
+ 38 3 3.458281E-05 4.287426E-06 1.482712E-10
+ 38 4 3.457620E-05 3.123513E-05 1.079992E-09
+ 38 5 3.457266E-05 1.708557E-04 5.906938E-09
+ 38 6 3.457489E-05 7.169087E-04 2.478704E-08
+ 38 7 3.457473E-05 2.322240E-03 8.029083E-08
+ 38 8 3.457460E-05 5.769200E-03 1.994678E-07
+ 38 9 3.457453E-05 1.074637E-02 3.715505E-07
+ 38 10 3.457422E-05 1.426668E-02 4.932593E-07
+ 38 11 3.457426E-05 1.199413E-02 4.146881E-07
+ 38 12 3.457413E-05 4.391780E-03 1.518420E-07
+ 38 13 3.456968E-05 6.667912E-06 2.305075E-10
+ 38 14 3.457438E-05 5.014736E-03 1.733814E-07
+ 38 15 3.457433E-05 1.064857E-02 3.681673E-07
+ 38 16 3.457430E-05 5.909135E-03 2.043042E-07
+ 38 17 3.456745E-05 5.722956E-06 1.978280E-10
+ 38 18 3.457465E-05 5.512715E-03 1.906002E-07
+ 38 19 3.457434E-05 9.630973E-03 3.329846E-07
+ 38 20 3.457441E-05 2.255425E-03 7.797998E-08
+ 38 21 3.457479E-05 1.753768E-03 6.063615E-08
+ 38 22 3.457441E-05 9.511034E-03 3.288384E-07
+ 38 23 3.457440E-05 4.782285E-03 1.653447E-07
+ 38 24 3.457504E-05 4.922980E-04 1.702123E-08
+ 38 25 3.457462E-05 8.999668E-03 3.111601E-07
+ 38 26 3.457417E-05 6.161878E-03 2.130418E-07
+ 38 27 3.457578E-05 2.314965E-04 8.004174E-09
+ 38 28 3.457430E-05 9.242317E-03 3.195467E-07
+ 38 29 3.457447E-05 6.590796E-03 2.278733E-07
+ 38 30 3.457378E-05 3.361411E-04 1.162167E-08
+ 38 31 3.457437E-05 1.029160E-02 3.558255E-07
+ 38 32 3.457456E-05 6.288507E-03 2.174224E-07
+ 38 33 3.457386E-05 8.038336E-04 2.779163E-08
+ 38 34 3.457455E-05 1.183452E-02 4.091732E-07
+ 38 35 3.457424E-05 5.557981E-03 1.921630E-07
+ 38 36 3.457442E-05 1.667342E-03 5.764739E-08
+ 38 37 3.457435E-05 1.348096E-02 4.660953E-07
+ 38 38 3.457435E-05 5.026213E-03 1.737780E-07
+ 38 39 3.457396E-05 2.446303E-03 8.457841E-08
+ 39 0 3.397254E-05 5.904900E-10 2.006045E-14
+ 39 1 3.450158E-05 1.885404E-08 6.504940E-13
+ 39 2 3.455105E-05 2.975702E-07 1.028137E-11
+ 39 3 3.456835E-05 3.054945E-06 1.056044E-10
+ 39 4 3.457212E-05 2.257609E-05 7.805031E-10
+ 39 5 3.457302E-05 1.258512E-04 4.351054E-09
+ 39 6 3.457533E-05 5.409769E-04 1.870446E-08
+ 39 7 3.457448E-05 1.806175E-03 6.244757E-08
+ 39 8 3.457426E-05 4.661112E-03 1.611545E-07
+ 39 9 3.457431E-05 9.120500E-03 3.153350E-07
+ 39 10 3.457457E-05 1.296158E-02 4.481411E-07
+ 39 11 3.457457E-05 1.214707E-02 4.199797E-07
+ 39 12 3.457446E-05 5.699605E-03 1.970608E-07
+ 39 13 3.457436E-05 1.783085E-04 6.164901E-09
+ 39 14 3.457416E-05 3.029434E-03 1.047401E-07
+ 39 15 3.457421E-05 9.396588E-03 3.248796E-07
+ 39 16 3.457428E-05 7.390499E-03 2.555212E-07
+ 39 17 3.457462E-05 5.399614E-04 1.866896E-08
+ 39 18 3.457452E-05 3.030433E-03 1.047758E-07
+ 39 19 3.457455E-05 9.152799E-03 3.164539E-07
+ 39 20 3.457459E-05 4.366573E-03 1.509725E-07
+ 39 21 3.457323E-05 2.315543E-04 8.005582E-09
+ 39 22 3.457462E-05 7.274579E-03 2.515158E-07
+ 39 23 3.457452E-05 7.110945E-03 2.458575E-07
+ 39 24 3.457431E-05 8.845158E-05 3.058152E-09
+ 39 25 3.457443E-05 5.708807E-03 1.973788E-07
+ 39 26 3.457448E-05 8.489076E-03 2.935054E-07
+ 39 27 3.457517E-05 4.547394E-04 1.572269E-08
+ 39 28 3.457441E-05 5.181457E-03 1.791458E-07
+ 39 29 3.457451E-05 9.278577E-03 3.208022E-07
+ 39 30 3.457496E-05 5.921241E-04 2.047267E-08
+ 39 31 3.457413E-05 5.535973E-03 1.914014E-07
+ 39 32 3.457440E-05 9.840634E-03 3.402340E-07
+ 39 33 3.457375E-05 4.743998E-04 1.640178E-08
+ 39 34 3.457435E-05 6.475625E-03 2.238906E-07
+ 39 35 3.457432E-05 1.034490E-02 3.576679E-07
+ 39 36 3.457396E-05 3.197345E-04 1.105449E-08
+ 39 37 3.457414E-05 7.506020E-03 2.595142E-07
+ 39 38 3.457439E-05 1.114301E-02 3.852627E-07
+ 39 39 3.457485E-05 3.670362E-04 1.269022E-08
+ 40 0 3.567365E-05 4.169764E-10 1.487507E-14
+ 40 1 3.458883E-05 1.339343E-08 4.632632E-13
+ 40 2 3.453084E-05 2.127977E-07 7.348083E-12
+ 40 3 3.457351E-05 2.204483E-06 7.621671E-11
+ 40 4 3.456915E-05 1.649773E-05 5.703126E-10
+ 40 5 3.457233E-05 9.352399E-05 3.233342E-09
+ 40 6 3.457352E-05 4.107622E-04 1.420150E-08
+ 40 7 3.457462E-05 1.408977E-03 4.871484E-08
+ 40 8 3.457408E-05 3.761440E-03 1.300483E-07
+ 40 9 3.457420E-05 7.687491E-03 2.657888E-07
+ 40 10 3.457419E-05 1.159061E-02 4.007361E-07
+ 40 11 3.457453E-05 1.189239E-02 4.111739E-07
+ 40 12 3.457437E-05 6.712287E-03 2.320731E-07
+ 40 13 3.457353E-05 7.167577E-04 2.478085E-08
+ 40 14 3.457392E-05 1.585343E-03 5.481150E-08
+ 40 15 3.457430E-05 7.783037E-03 2.690930E-07
+ 40 16 3.457442E-05 8.179048E-03 2.827858E-07
+ 40 17 3.457451E-05 1.616208E-03 5.587960E-08
+ 40 18 3.457453E-05 1.271701E-03 4.396845E-08
+ 40 19 3.457442E-05 7.756587E-03 2.681795E-07
+ 40 20 3.457426E-05 6.069664E-03 2.098542E-07
+ 40 21 3.457253E-05 7.810494E-05 2.700286E-09
+ 40 22 3.457462E-05 4.640803E-03 1.604540E-07
+ 40 23 3.457454E-05 8.132250E-03 2.811688E-07
+ 40 24 3.457379E-05 1.272396E-03 4.399155E-08
+ 40 25 3.457455E-05 2.631455E-03 9.098138E-08
+ 40 26 3.457439E-05 8.767279E-03 3.031233E-07
+ 40 27 3.457416E-05 2.504747E-03 8.659954E-08
+ 40 28 3.457491E-05 1.761729E-03 6.091160E-08
+ 40 29 3.457436E-05 9.161685E-03 3.167594E-07
+ 40 30 3.457428E-05 3.251364E-03 1.124135E-07
+ 40 31 3.457407E-05 1.537272E-03 5.314974E-08
+ 40 32 3.457443E-05 9.727188E-03 3.363120E-07
+ 40 33 3.457442E-05 3.620275E-03 1.251689E-07
+ 40 34 3.457494E-05 1.608397E-03 5.561022E-08
+ 40 35 3.457449E-05 1.048045E-02 3.623560E-07
+ 40 36 3.457415E-05 3.984518E-03 1.377613E-07
+ 40 37 3.457395E-05 1.606404E-03 5.553973E-08
+ 40 38 3.457421E-05 1.125707E-02 3.892043E-07
+ 40 39 3.457419E-05 5.015332E-03 1.734010E-07
+ 41 0 3.504248E-05 2.985984E-10 1.046363E-14
+ 41 1 3.467838E-05 9.645204E-09 3.344801E-13
+ 41 2 3.458870E-05 1.541976E-07 5.333494E-12
+ 41 3 3.458917E-05 1.610386E-06 5.570193E-11
+ 41 4 3.456985E-05 1.218652E-05 4.212862E-10
+ 41 5 3.457478E-05 7.011935E-05 2.424361E-09
+ 41 6 3.457407E-05 3.139215E-04 1.085354E-08
+ 41 7 3.457399E-05 1.103055E-03 3.813701E-08
+ 41 8 3.457456E-05 3.034998E-03 1.049337E-07
+ 41 9 3.457465E-05 6.446420E-03 2.228827E-07
+ 41 10 3.457417E-05 1.023404E-02 3.538335E-07
+ 41 11 3.457446E-05 1.133635E-02 3.919483E-07
+ 41 12 3.457430E-05 7.387734E-03 2.554257E-07
+ 41 13 3.457419E-05 1.419865E-03 4.909070E-08
+ 41 14 3.457504E-05 6.624446E-04 2.290405E-08
+ 41 15 3.457433E-05 6.098357E-03 2.108466E-07
+ 41 16 3.457457E-05 8.306948E-03 2.872091E-07
+ 41 17 3.457464E-05 2.827594E-03 9.776307E-08
+ 41 18 3.457459E-05 3.041777E-04 1.051682E-08
+ 41 19 3.457424E-05 5.954908E-03 2.058864E-07
+ 41 20 3.457466E-05 7.010279E-03 2.423780E-07
+ 41 21 3.457468E-05 8.349170E-04 2.886699E-08
+ 41 22 3.457420E-05 2.385120E-03 8.246361E-08
+ 41 23 3.457425E-05 7.833896E-03 2.708511E-07
+ 41 24 3.457446E-05 3.048587E-03 1.054033E-07
+ 41 25 3.457506E-05 6.808593E-04 2.354075E-08
+ 41 26 3.457437E-05 7.389099E-03 2.554735E-07
+ 41 27 3.457445E-05 4.803309E-03 1.660718E-07
+ 41 28 3.457296E-05 1.383211E-04 4.782171E-09
+ 41 29 3.457456E-05 6.991264E-03 2.417199E-07
+ 41 30 3.457469E-05 5.973639E-03 2.065367E-07
+ 41 31 3.456864E-05 1.517741E-05 5.246625E-10
+ 41 32 3.457426E-05 6.924908E-03 2.394235E-07
+ 41 33 3.457447E-05 6.851563E-03 2.368892E-07
+ 41 34 3.457378E-05 8.050935E-07 2.783512E-11
+ 41 35 3.457415E-05 7.013967E-03 2.425020E-07
+ 41 36 3.457414E-05 7.811196E-03 2.700654E-07
+ 41 37 3.457434E-05 5.589835E-05 1.932649E-09
+ 41 38 3.457431E-05 6.746988E-03 2.332725E-07
+ 41 39 3.457462E-05 9.281769E-03 3.209137E-07
+ 42 0 3.462228E-05 2.163841E-10 7.491710E-15
+ 42 1 3.437469E-05 7.035854E-09 2.418553E-13
+ 42 2 3.461283E-05 1.131448E-07 3.916260E-12
+ 42 3 3.459536E-05 1.190216E-06 4.117594E-11
+ 42 4 3.456683E-05 9.096015E-06 3.144204E-10
+ 42 5 3.457720E-05 5.303015E-05 1.833634E-09
+ 42 6 3.457461E-05 2.414848E-04 8.349242E-09
+ 42 7 3.457493E-05 8.669185E-04 2.997365E-08
+ 42 8 3.457399E-05 2.450208E-03 8.471348E-08
+ 42 9 3.457435E-05 5.384843E-03 1.861775E-07
+ 42 10 3.457418E-05 8.943506E-03 3.092143E-07
+ 42 11 3.457424E-05 1.057581E-02 3.656507E-07
+ 42 12 3.457446E-05 7.733848E-03 2.673936E-07
+ 42 13 3.457455E-05 2.134736E-03 7.380753E-08
+ 42 14 3.457489E-05 1.735490E-04 6.000437E-09
+ 42 15 3.457407E-05 4.540779E-03 1.569932E-07
+ 42 16 3.457443E-05 7.912579E-03 2.735729E-07
+ 42 17 3.457469E-05 3.890411E-03 1.345098E-07
+ 42 18 3.458217E-05 1.573570E-06 5.441744E-11
+ 42 19 3.457471E-05 4.164592E-03 1.439896E-07
+ 42 20 3.457464E-05 7.162697E-03 2.476477E-07
+ 42 21 3.457461E-05 1.971177E-03 6.815267E-08
+ 42 22 3.457399E-05 8.763850E-04 3.030012E-08
+ 42 23 3.457435E-05 6.629443E-03 2.292087E-07
+ 42 24 3.457456E-05 4.612776E-03 1.594847E-07
+ 42 25 3.456734E-05 7.689695E-06 2.658123E-10
+ 42 26 3.457430E-05 5.239820E-03 1.811631E-07
+ 42 27 3.457469E-05 6.303668E-03 2.179474E-07
+ 42 28 3.457408E-05 2.211008E-04 7.644357E-09
+ 42 29 3.457436E-05 4.188851E-03 1.448268E-07
+ 42 30 3.457452E-05 7.344961E-03 2.539485E-07
+ 42 31 3.457496E-05 6.900052E-04 2.385690E-08
+ 42 32 3.457462E-05 3.540663E-03 1.224171E-07
+ 42 33 3.457461E-05 8.140442E-03 2.814526E-07
+ 42 34 3.457502E-05 1.230786E-03 4.255445E-08
+ 42 35 3.457442E-05 3.004639E-03 1.038837E-07
+ 42 36 3.457416E-05 8.898007E-03 3.076412E-07
+ 42 37 3.457398E-05 2.085655E-03 7.210939E-08
+ 42 38 3.457461E-05 2.135598E-03 7.383747E-08
+ 42 39 3.457458E-05 9.480473E-03 3.277834E-07
+ 43 0 3.525262E-05 1.585081E-10 5.587825E-15
+ 43 1 3.476919E-05 5.192644E-09 1.805440E-13
+ 43 2 3.455291E-05 8.398984E-08 2.902093E-12
+ 43 3 3.455319E-05 8.893433E-07 3.072965E-11
+ 43 4 3.456819E-05 6.856123E-06 2.370038E-10
+ 43 5 3.457416E-05 4.043866E-05 1.398133E-09
+ 43 6 3.457315E-05 1.869405E-04 6.463122E-09
+ 43 7 3.457505E-05 6.840056E-04 2.364953E-08
+ 43 8 3.457433E-05 1.979877E-03 6.845292E-08
+ 43 9 3.457469E-05 4.484424E-03 1.550475E-07
+ 43 10 3.457417E-05 7.748513E-03 2.678984E-07
+ 43 11 3.457424E-05 9.691377E-03 3.350719E-07
+ 43 12 3.457441E-05 7.787498E-03 2.692482E-07
+ 43 13 3.457438E-05 2.759435E-03 9.540574E-08
+ 43 14 3.458214E-05 5.370806E-06 1.857340E-10
+ 43 15 3.457441E-05 3.219382E-03 1.113082E-07
+ 43 16 3.457418E-05 7.169703E-03 2.478866E-07
+ 43 17 3.457462E-05 4.652297E-03 1.608514E-07
+ 43 18 3.457479E-05 1.545994E-04 5.345241E-09
+ 43 19 3.457444E-05 2.643903E-03 9.141148E-08
+ 43 20 3.457432E-05 6.694547E-03 2.314594E-07
+ 43 21 3.457415E-05 3.067708E-03 1.060634E-07
+ 43 22 3.457548E-05 1.419863E-04 4.909245E-09
+ 43 23 3.457465E-05 5.032528E-03 1.739979E-07
+ 43 24 3.457457E-05 5.547558E-03 1.918044E-07
+ 43 25 3.457450E-05 2.881968E-04 9.964259E-09
+ 43 26 3.457462E-05 3.121637E-03 1.079294E-07
+ 43 27 3.457417E-05 6.684725E-03 2.311188E-07
+ 43 28 3.457380E-05 1.290359E-03 4.461262E-08
+ 43 29 3.457427E-05 1.863680E-03 6.443537E-08
+ 43 30 3.457443E-05 7.144405E-03 2.470137E-07
+ 43 31 3.457410E-05 2.373899E-03 8.207542E-08
+ 43 32 3.457470E-05 1.101477E-03 3.808325E-08
+ 43 33 3.457429E-05 7.353270E-03 2.542341E-07
+ 43 34 3.457467E-05 3.484585E-03 1.204784E-07
+ 43 35 3.457358E-05 5.473415E-04 1.892355E-08
+ 43 36 3.457416E-05 7.324982E-03 2.532551E-07
+ 43 37 3.457430E-05 4.920806E-03 1.701334E-07
+ 43 38 3.457401E-05 8.050881E-05 2.783512E-09
+ 43 39 3.457436E-05 6.573122E-03 2.272615E-07
+ 44 0 3.372229E-05 1.175056E-10 3.962557E-15
+ 44 1 3.455909E-05 3.873818E-09 1.338756E-13
+ 44 2 3.454746E-05 6.300602E-08 2.176698E-12
+ 44 3 3.455055E-05 6.711869E-07 2.318988E-11
+ 44 4 3.457911E-05 5.214281E-06 1.803052E-10
+ 44 5 3.457558E-05 3.107137E-05 1.074311E-09
+ 44 6 3.457278E-05 1.455596E-04 5.032401E-09
+ 44 7 3.457456E-05 5.416428E-04 1.872706E-08
+ 44 8 3.457446E-05 1.601235E-03 5.536185E-08
+ 44 9 3.457455E-05 3.724629E-03 1.287774E-07
+ 44 10 3.457432E-05 6.662505E-03 2.303516E-07
+ 44 11 3.457456E-05 8.745571E-03 3.023743E-07
+ 44 12 3.457424E-05 7.598686E-03 2.627188E-07
+ 44 13 3.457467E-05 3.235932E-03 1.118813E-07
+ 44 14 3.457728E-05 4.576495E-05 1.582427E-09
+ 44 15 3.457483E-05 2.172913E-03 7.512808E-08
+ 44 16 3.457463E-05 6.241678E-03 2.158037E-07
+ 44 17 3.457446E-05 5.066789E-03 1.751815E-07
+ 44 18 3.457423E-05 5.504349E-04 1.903086E-08
+ 44 19 3.457432E-05 1.501271E-03 5.190542E-08
+ 44 20 3.457439E-05 5.841423E-03 2.019636E-07
+ 44 21 3.457450E-05 3.878589E-03 1.341003E-07
+ 44 22 3.457427E-05 1.110302E-05 3.838789E-10
+ 44 23 3.457414E-05 3.456966E-03 1.195216E-07
+ 44 24 3.457457E-05 5.780898E-03 1.998721E-07
+ 44 25 3.457441E-05 1.050310E-03 3.631384E-08
+ 44 26 3.457499E-05 1.502072E-03 5.193411E-08
+ 44 27 3.457412E-05 6.135968E-03 2.121457E-07
+ 44 28 3.457395E-05 2.581219E-03 8.924293E-08
+ 44 29 3.457491E-05 4.865271E-04 1.682163E-08
+ 44 30 3.457453E-05 5.874686E-03 2.031145E-07
+ 44 31 3.457405E-05 3.968160E-03 1.371953E-07
+ 44 32 3.457671E-05 7.018267E-05 2.426686E-09
+ 44 33 3.457417E-05 5.397055E-03 1.865987E-07
+ 44 34 3.457452E-05 5.241239E-03 1.812133E-07
+ 44 35 3.457860E-05 2.588968E-05 8.952288E-10
+ 44 36 3.457414E-05 4.617832E-03 1.596576E-07
+ 44 37 3.457427E-05 6.567715E-03 2.270740E-07
+ 44 38 3.457444E-05 5.151007E-04 1.780932E-08
+ 44 39 3.457469E-05 3.114905E-03 1.076969E-07
+ 45 0 3.455513E-05 8.779690E-11 3.033833E-15
+ 45 1 3.480138E-05 2.918160E-09 1.015560E-13
+ 45 2 3.448149E-05 4.770730E-08 1.645019E-12
+ 45 3 3.455388E-05 5.109533E-07 1.765542E-11
+ 45 4 3.457780E-05 3.996681E-06 1.381964E-10
+ 45 5 3.457003E-05 2.403088E-05 8.307482E-10
+ 45 6 3.457246E-05 1.139008E-04 3.937830E-09
+ 45 7 3.457488E-05 4.301721E-04 1.487315E-08
+ 45 8 3.457474E-05 1.295569E-03 4.479396E-08
+ 45 9 3.457429E-05 3.084989E-03 1.066613E-07
+ 45 10 3.457417E-05 5.687940E-03 1.966558E-07
+ 45 11 3.457415E-05 7.783896E-03 2.691216E-07
+ 45 12 3.457457E-05 7.219906E-03 2.496251E-07
+ 45 13 3.457452E-05 3.539717E-03 1.223840E-07
+ 45 14 3.457328E-05 1.986823E-04 6.869099E-09
+ 45 15 3.457494E-05 1.392736E-03 4.815377E-08
+ 45 16 3.457408E-05 5.258564E-03 1.818100E-07
+ 45 17 3.457471E-05 5.157167E-03 1.783076E-07
+ 45 18 3.457509E-05 1.015924E-03 3.512565E-08
+ 45 19 3.457406E-05 7.367321E-04 2.547182E-08
+ 45 20 3.457439E-05 4.823557E-03 1.667715E-07
+ 45 21 3.457418E-05 4.314519E-03 1.491710E-07
+ 45 22 3.457551E-05 2.471678E-04 8.545952E-09
+ 45 23 3.457479E-05 2.146980E-03 7.423141E-08
+ 45 24 3.457414E-05 5.449784E-03 1.884216E-07
+ 45 25 3.457397E-05 1.888387E-03 6.528906E-08
+ 45 26 3.457418E-05 5.148919E-04 1.780197E-08
+ 45 27 3.457457E-05 5.051734E-03 1.746615E-07
+ 45 28 3.457473E-05 3.585223E-03 1.239581E-07
+ 45 29 3.456961E-05 1.139177E-05 3.938091E-10
+ 45 30 3.457467E-05 4.208149E-03 1.454954E-07
+ 45 31 3.457442E-05 4.890234E-03 1.690770E-07
+ 45 32 3.457498E-05 1.561665E-04 5.399454E-09
+ 45 33 3.457466E-05 3.274796E-03 1.132249E-07
+ 45 34 3.457430E-05 5.882421E-03 2.033806E-07
+ 45 35 3.457392E-05 7.679699E-04 2.655173E-08
+ 45 36 3.457403E-05 2.178893E-03 7.533311E-08
+ 45 37 3.457437E-05 6.559131E-03 2.267778E-07
+ 45 38 3.457400E-05 2.082721E-03 7.200800E-08
+ 45 39 3.457424E-05 8.149032E-04 2.817466E-08
+ 46 0 3.363948E-05 6.625960E-11 2.228939E-15
+ 46 1 3.424742E-05 2.214644E-09 7.584582E-14
+ 46 2 3.454659E-05 3.639319E-08 1.257261E-12
+ 46 3 3.454543E-05 3.917133E-07 1.353190E-11
+ 46 4 3.457504E-05 3.082482E-06 1.065769E-10
+ 46 5 3.457937E-05 1.868029E-05 6.459526E-10
+ 46 6 3.457386E-05 8.944979E-05 3.092625E-09
+ 46 7 3.457456E-05 3.422456E-04 1.183299E-08
+ 46 8 3.457502E-05 1.047691E-03 3.622393E-08
+ 46 9 3.457435E-05 2.546362E-03 8.803880E-08
+ 46 10 3.457445E-05 4.820203E-03 1.666559E-07
+ 46 11 3.457462E-05 6.837252E-03 2.363954E-07
+ 46 12 3.457444E-05 6.699781E-03 2.316412E-07
+ 46 13 3.457475E-05 3.669361E-03 1.268672E-07
+ 46 14 3.457460E-05 3.901052E-04 1.348773E-08
+ 46 15 3.457482E-05 8.434807E-04 2.916320E-08
+ 46 16 3.457451E-05 4.310700E-03 1.490403E-07
+ 46 17 3.457415E-05 4.983072E-03 1.722855E-07
+ 46 18 3.457401E-05 1.432203E-03 4.951701E-08
+ 46 19 3.457315E-05 2.887080E-04 9.981546E-09
+ 46 20 3.457421E-05 3.806041E-03 1.315909E-07
+ 46 21 3.457419E-05 4.393370E-03 1.518972E-07
+ 46 22 3.457496E-05 6.338305E-04 2.191466E-08
+ 46 23 3.457384E-05 1.191661E-03 4.120029E-08
+ 46 24 3.457446E-05 4.767205E-03 1.648235E-07
+ 46 25 3.457399E-05 2.547942E-03 8.809250E-08
+ 46 26 3.457221E-05 7.558355E-05 2.613091E-09
+ 46 27 3.457449E-05 3.808570E-03 1.316794E-07
+ 46 28 3.457461E-05 4.097774E-03 1.416789E-07
+ 46 29 3.457361E-05 1.400710E-04 4.842761E-09
+ 46 30 3.457397E-05 2.654546E-03 9.177822E-08
+ 46 31 3.457458E-05 5.046407E-03 1.744774E-07
+ 46 32 3.457478E-05 8.059762E-04 2.786645E-08
+ 46 33 3.457412E-05 1.606879E-03 5.555642E-08
+ 46 34 3.457433E-05 5.514257E-03 1.906517E-07
+ 46 35 3.457488E-05 1.895963E-03 6.555271E-08
+ 46 36 3.457456E-05 6.581210E-04 2.275425E-08
+ 46 37 3.457446E-05 5.404680E-03 1.868639E-07
+ 46 38 3.457408E-05 3.536021E-03 1.222547E-07
+ 46 39 3.457541E-05 1.545197E-05 5.342584E-10
+ 47 0 3.736409E-05 5.012640E-11 1.872928E-15
+ 47 1 3.408006E-05 1.690032E-09 5.759639E-14
+ 47 2 3.466336E-05 2.790904E-08 9.674212E-13
+ 47 3 3.457823E-05 3.017305E-07 1.043331E-11
+ 47 4 3.457350E-05 2.386932E-06 8.252461E-11
+ 47 5 3.457841E-05 1.456430E-05 5.036103E-10
+ 47 6 3.457700E-05 7.036156E-05 2.432892E-09
+ 47 7 3.457475E-05 2.722688E-04 9.413627E-09
+ 47 8 3.457384E-05 8.453713E-04 2.922773E-08
+ 47 9 3.457424E-05 2.091510E-03 7.231238E-08
+ 47 10 3.457450E-05 4.050467E-03 1.400429E-07
+ 47 11 3.457433E-05 5.924777E-03 2.048452E-07
+ 47 12 3.457468E-05 6.079812E-03 2.102076E-07
+ 47 13 3.457424E-05 3.637627E-03 1.257682E-07
+ 47 14 3.457401E-05 5.682884E-04 1.964801E-08
+ 47 15 3.457336E-05 4.787287E-04 1.655126E-08
+ 47 16 3.457435E-05 3.451911E-03 1.193476E-07
+ 47 17 3.457455E-05 4.615595E-03 1.595821E-07
+ 47 18 3.457470E-05 1.731706E-03 5.987321E-08
+ 47 19 3.457444E-05 7.201525E-05 2.489887E-09
+ 47 20 3.457481E-05 2.890618E-03 9.994259E-08
+ 47 21 3.457419E-05 4.188524E-03 1.448148E-07
+ 47 22 3.457415E-05 1.013692E-03 3.504754E-08
+ 47 23 3.457404E-05 5.746539E-04 1.986811E-08
+ 47 24 3.457403E-05 3.933842E-03 1.360088E-07
+ 47 25 3.457404E-05 2.921632E-03 1.010126E-07
+ 47 26 3.457271E-05 7.416363E-06 2.564038E-10
+ 47 27 3.457415E-05 2.663642E-03 9.209314E-08
+ 47 28 3.457464E-05 4.134086E-03 1.429345E-07
+ 47 29 3.457391E-05 5.402212E-04 1.867756E-08
+ 47 30 3.457381E-05 1.468241E-03 5.076267E-08
+ 47 31 3.457415E-05 4.622106E-03 1.598054E-07
+ 47 32 3.457435E-05 1.539149E-03 5.321507E-08
+ 47 33 3.457407E-05 5.825397E-04 2.014077E-08
+ 47 34 3.457429E-05 4.554376E-03 1.574643E-07
+ 47 35 3.457480E-05 2.803652E-03 9.693571E-08
+ 47 36 3.457295E-05 5.333921E-05 1.844094E-09
+ 47 37 3.457450E-05 3.842670E-03 1.328584E-07
+ 47 38 3.457471E-05 4.279978E-03 1.479790E-07
+ 47 39 3.457354E-05 2.440569E-04 8.437912E-09
+ 48 0 3.282794E-05 3.819240E-11 1.253778E-15
+ 48 1 3.490469E-05 1.293122E-09 4.513600E-14
+ 48 2 3.461819E-05 2.144467E-08 7.423758E-13
+ 48 3 3.456730E-05 2.327773E-07 8.046484E-12
+ 48 4 3.458297E-05 1.849899E-06 6.397501E-11
+ 48 5 3.457426E-05 1.135414E-05 3.925609E-10
+ 48 6 3.457264E-05 5.527253E-05 1.910917E-09
+ 48 7 3.457550E-05 2.159683E-04 7.467212E-09
+ 48 8 3.457372E-05 6.787922E-04 2.346837E-08
+ 48 9 3.457420E-05 1.705270E-03 5.895834E-08
+ 48 10 3.457405E-05 3.367627E-03 1.164325E-07
+ 48 11 3.457454E-05 5.056496E-03 1.748260E-07
+ 48 12 3.457438E-05 5.393190E-03 1.864662E-07
+ 48 13 3.457448E-05 3.464647E-03 1.197884E-07
+ 48 14 3.457431E-05 7.009585E-04 2.423515E-08
+ 48 15 3.457340E-05 2.514299E-04 8.692786E-09
+ 48 16 3.457462E-05 2.707084E-03 9.359643E-08
+ 48 17 3.457473E-05 4.121609E-03 1.425035E-07
+ 48 18 3.457471E-05 1.886952E-03 6.524081E-08
+ 48 19 3.458551E-05 2.839865E-06 9.821819E-11
+ 48 20 3.457393E-05 2.124893E-03 7.346590E-08
+ 48 21 3.457450E-05 3.789433E-03 1.310177E-07
+ 48 22 3.457501E-05 1.293921E-03 4.473735E-08
+ 48 23 3.457387E-05 2.261249E-04 7.818012E-09
+ 48 24 3.457436E-05 3.097259E-03 1.070857E-07
+ 48 25 3.457443E-05 3.005739E-03 1.039217E-07
+ 48 26 3.457492E-05 1.302200E-04 4.502348E-09
+ 48 27 3.457460E-05 1.742922E-03 6.026084E-08
+ 48 28 3.457404E-05 3.817626E-03 1.319908E-07
+ 48 29 3.457494E-05 9.596185E-04 3.317875E-08
+ 48 30 3.457401E-05 6.959070E-04 2.406030E-08
+ 48 31 3.457451E-05 3.881756E-03 1.342098E-07
+ 48 32 3.457390E-05 2.072784E-03 7.166424E-08
+ 48 33 3.457376E-05 1.123168E-04 3.883212E-09
+ 48 34 3.457466E-05 3.417061E-03 1.181437E-07
+ 48 35 3.457439E-05 3.247082E-03 1.122659E-07
+ 48 36 3.457152E-05 5.169279E-05 1.787098E-09
+ 48 37 3.457423E-05 2.409754E-03 8.331540E-08
+ 48 38 3.457409E-05 4.281106E-03 1.480153E-07
+ 48 39 3.457445E-05 8.637027E-04 2.986205E-08
+ 49 0 3.422560E-05 2.894440E-11 9.906393E-16
+ 49 1 3.465736E-05 9.865881E-10 3.419254E-14
+ 49 2 3.472400E-05 1.643268E-08 5.706083E-13
+ 49 3 3.453693E-05 1.790136E-07 6.182580E-12
+ 49 4 3.456983E-05 1.428240E-06 4.937402E-11
+ 49 5 3.457379E-05 8.809914E-06 3.045921E-10
+ 49 6 3.457318E-05 4.316490E-05 1.492348E-09
+ 49 7 3.457558E-05 1.700552E-04 5.879756E-09
+ 49 8 3.457509E-05 5.400474E-04 1.867219E-08
+ 49 9 3.457463E-05 1.374431E-03 4.752045E-08
+ 49 10 3.457430E-05 2.759511E-03 9.540817E-08
+ 49 11 3.457473E-05 4.235531E-03 1.464423E-07
+ 49 12 3.457433E-05 4.664757E-03 1.612809E-07
+ 49 13 3.457452E-05 3.173071E-03 1.097074E-07
+ 49 14 3.457454E-05 7.712973E-04 2.666725E-08
+ 49 15 3.457421E-05 1.198697E-04 4.144398E-09
+ 49 16 3.457400E-05 2.080584E-03 7.193412E-08
+ 49 17 3.457413E-05 3.555699E-03 1.229352E-07
+ 49 18 3.457387E-05 1.897418E-03 6.560107E-08
+ 49 19 3.457929E-05 1.185845E-05 4.100567E-10
+ 49 20 3.457496E-05 1.517933E-03 5.248247E-08
+ 49 21 3.457412E-05 3.277527E-03 1.133176E-07
+ 49 22 3.457428E-05 1.434573E-03 4.959934E-08
+ 49 23 3.457200E-05 6.179296E-05 2.136306E-09
+ 49 24 3.457401E-05 2.344720E-03 8.106637E-08
+ 49 25 3.457480E-05 2.851327E-03 9.858406E-08
+ 49 26 3.457536E-05 3.045678E-04 1.053054E-08
+ 49 27 3.457404E-05 1.073389E-03 3.711138E-08
+ 49 28 3.457418E-05 3.294321E-03 1.138984E-07
+ 49 29 3.457443E-05 1.254440E-03 4.337156E-08
+ 49 30 3.457553E-05 2.670548E-04 9.233560E-09
+ 49 31 3.457414E-05 3.049945E-03 1.054492E-07
+ 49 32 3.457434E-05 2.307201E-03 7.976995E-08
+ 49 33 3.538923E-05 5.987809E-10 2.119039E-14
+ 49 34 3.457456E-05 2.375433E-03 8.212953E-08
+ 49 35 3.457441E-05 3.238392E-03 1.119655E-07
+ 49 36 3.457496E-05 3.069346E-04 1.061225E-08
+ 49 37 3.457487E-05 1.345160E-03 4.650873E-08
+ 49 38 3.457408E-05 3.776310E-03 1.305624E-07
+ 49 39 3.457452E-05 1.420457E-03 4.911162E-08
+ 50 0 3.492688E-05 2.171560E-11 7.584582E-16
+ 50 1 3.488670E-05 7.458361E-10 2.601976E-14
+ 50 2 3.462989E-05 1.246572E-08 4.316866E-13
+ 50 3 3.462739E-05 1.362053E-07 4.716434E-12
+ 50 4 3.459386E-05 1.090291E-06 3.771737E-11
+ 50 5 3.457602E-05 6.753346E-06 2.335038E-10
+ 50 6 3.457314E-05 3.326682E-05 1.150138E-09
+ 50 7 3.457250E-05 1.319606E-04 4.562207E-09
+ 50 8 3.457403E-05 4.226939E-04 1.461423E-08
+ 50 9 3.457505E-05 1.087432E-03 3.759803E-08
+ 50 10 3.457419E-05 2.213437E-03 7.652780E-08
+ 50 11 3.457433E-05 3.459623E-03 1.196141E-07
+ 50 12 3.457413E-05 3.911369E-03 1.352322E-07
+ 50 13 3.457462E-05 2.784709E-03 9.628026E-08
+ 50 14 3.457504E-05 7.737783E-04 2.675341E-08
+ 50 15 3.457367E-05 5.036088E-05 1.741161E-09
+ 50 16 3.457454E-05 1.563650E-03 5.406247E-08
+ 50 17 3.457458E-05 2.957208E-03 1.022442E-07
+ 50 18 3.457419E-05 1.777810E-03 6.146633E-08
+ 50 19 3.457240E-05 4.877053E-05 1.686114E-09
+ 50 20 3.457503E-05 1.055588E-03 3.649700E-08
+ 50 21 3.457434E-05 2.714910E-03 9.386624E-08
+ 50 22 3.457415E-05 1.431337E-03 4.948725E-08
+ 50 23 3.457173E-05 5.987760E-06 2.070072E-10
+ 50 24 3.457461E-05 1.713438E-03 5.924144E-08
+ 50 25 3.457460E-05 2.526394E-03 8.734908E-08
+ 50 26 3.457416E-05 4.428461E-04 1.531103E-08
+ 50 27 3.457489E-05 6.250690E-04 2.161169E-08
+ 50 28 3.457407E-05 2.685170E-03 9.283727E-08
+ 50 29 3.457458E-05 1.370616E-03 4.738846E-08
+ 50 30 3.457299E-05 7.173463E-05 2.480081E-09
+ 50 31 3.457473E-05 2.269534E-03 7.846854E-08
+ 50 32 3.457486E-05 2.258574E-03 7.808988E-08
+ 50 33 3.457631E-05 5.597524E-05 1.935417E-09
+ 50 34 3.457395E-05 1.551160E-03 5.362973E-08
+ 50 35 3.457426E-05 2.904423E-03 1.004183E-07
+ 50 36 3.457424E-05 5.711273E-04 1.974629E-08
+ 50 37 3.457409E-05 6.687463E-04 2.312129E-08
+ 50 38 3.457438E-05 3.039292E-03 1.050816E-07
+ 50 39 3.457486E-05 1.708554E-03 5.907303E-08
+ 51 0 3.482716E-05 1.600000E-11 5.572346E-16
+ 51 1 3.439343E-05 5.513104E-10 1.896146E-14
+ 51 2 3.474749E-05 9.237132E-09 3.209671E-13
+ 51 3 3.451401E-05 1.011876E-07 3.492391E-12
+ 51 4 3.457874E-05 8.121975E-07 2.808476E-11
+ 51 5 3.457824E-05 5.047706E-06 1.745408E-10
+ 51 6 3.457746E-05 2.497281E-05 8.634964E-10
+ 51 7 3.457324E-05 9.960938E-05 3.443819E-09
+ 51 8 3.457385E-05 3.212927E-04 1.110833E-08
+ 51 9 3.457474E-05 8.337945E-04 2.882823E-08
+ 51 10 3.457384E-05 1.716025E-03 5.932957E-08
+ 51 11 3.457430E-05 2.721542E-03 9.409540E-08
+ 51 12 3.457474E-05 3.141771E-03 1.086259E-07
+ 51 13 3.457447E-05 2.317875E-03 8.013929E-08
+ 51 14 3.457382E-05 7.102817E-04 2.455715E-08
+ 51 15 3.457296E-05 1.778663E-05 6.149364E-10
+ 51 16 3.457445E-05 1.139831E-03 3.940902E-08
+ 51 17 3.457445E-05 2.349942E-03 8.124794E-08
+ 51 18 3.457465E-05 1.548811E-03 5.354958E-08
+ 51 19 3.457315E-05 8.161930E-05 2.821836E-09
+ 51 20 3.457457E-05 7.123721E-04 2.462996E-08
+ 51 21 3.457429E-05 2.141187E-03 7.403002E-08
+ 51 22 3.457411E-05 1.299207E-03 4.491895E-08
+ 51 23 3.457996E-05 1.644960E-06 5.688265E-11
+ 51 24 3.457498E-05 1.206078E-03 4.170012E-08
+ 51 25 3.457410E-05 2.092437E-03 7.234412E-08
+ 51 26 3.457397E-05 5.021606E-04 1.736168E-08
+ 51 27 3.457424E-05 3.454000E-04 1.194194E-08
+ 51 28 3.457466E-05 2.069328E-03 7.154633E-08
+ 51 29 3.457403E-05 1.310183E-03 4.529831E-08
+ 51 30 3.457410E-05 7.766310E-06 2.685132E-10
+ 51 31 3.457413E-05 1.605913E-03 5.552304E-08
+ 51 32 3.457461E-05 1.992265E-03 6.888180E-08
+ 51 33 3.457403E-05 1.455867E-04 5.033517E-09
+ 51 34 3.457434E-05 9.595522E-04 3.317589E-08
+ 51 35 3.457394E-05 2.385203E-03 8.246587E-08
+ 51 36 3.457462E-05 7.158755E-04 2.475113E-08
+ 51 37 3.457519E-05 2.944491E-04 1.018064E-08
+ 51 38 3.457429E-05 2.268416E-03 7.842887E-08
+ 51 39 3.457471E-05 1.699061E-03 5.874454E-08
+ 52 0 3.448149E-05 1.122250E-11 3.869685E-16
+ 52 1 3.361100E-05 3.873024E-10 1.301762E-14
+ 52 2 3.483292E-05 6.506036E-09 2.266242E-13
+ 52 3 3.450988E-05 7.140653E-08 2.464231E-12
+ 52 4 3.459533E-05 5.743518E-07 1.986989E-11
+ 52 5 3.456648E-05 3.578756E-06 1.237050E-10
+ 52 6 3.457252E-05 1.776429E-05 6.141562E-10
+ 52 7 3.457270E-05 7.115834E-05 2.460136E-09
+ 52 8 3.457434E-05 2.307534E-04 7.978148E-09
+ 52 9 3.457477E-05 6.028562E-04 2.084362E-08
+ 52 10 3.457460E-05 1.251308E-03 4.326347E-08
+ 52 11 3.457484E-05 2.006793E-03 6.938454E-08
+ 52 12 3.457419E-05 2.353724E-03 8.137808E-08
+ 52 13 3.457481E-05 1.783481E-03 6.166352E-08
+ 52 14 3.457432E-05 5.861585E-04 2.026603E-08
+ 52 15 3.457138E-05 4.887637E-06 1.689724E-10
+ 52 16 3.457423E-05 7.877812E-04 2.723693E-08
+ 52 17 3.457406E-05 1.741385E-03 6.020677E-08
+ 52 18 3.457447E-05 1.229257E-03 4.250090E-08
+ 52 19 3.457479E-05 9.345263E-05 3.231105E-09
+ 52 20 3.457456E-05 4.588661E-04 1.586509E-08
+ 52 21 3.457407E-05 1.573158E-03 5.439045E-08
+ 52 22 3.457501E-05 1.058852E-03 3.660983E-08
+ 52 23 3.457143E-05 1.181510E-05 4.084649E-10
+ 52 24 3.457520E-05 8.041818E-04 2.780475E-08
+ 52 25 3.457424E-05 1.591568E-03 5.502725E-08
+ 52 26 3.457451E-05 4.702306E-04 1.625799E-08
+ 52 27 3.457501E-05 1.807436E-04 6.249211E-09
+ 52 28 3.457390E-05 1.483609E-03 5.129413E-08
+ 52 29 3.457422E-05 1.099539E-03 3.801571E-08
+ 52 30 3.460280E-05 6.712689E-07 2.322778E-11
+ 52 31 3.457507E-05 1.068146E-03 3.693122E-08
+ 52 32 3.457471E-05 1.576049E-03 5.449143E-08
+ 52 33 3.457460E-05 1.943414E-04 6.719278E-09
+ 52 34 3.457451E-05 5.607765E-04 1.938857E-08
+ 52 35 3.457446E-05 1.782539E-03 6.163030E-08
+ 52 36 3.457418E-05 7.012444E-04 2.424495E-08
+ 52 37 3.457334E-05 1.138265E-04 3.935362E-09
+ 52 38 3.457496E-05 1.563472E-03 5.405698E-08
+ 52 39 3.457453E-05 1.444260E-03 4.993461E-08
+ 53 0 3.607888E-05 6.864400E-12 2.476598E-16
+ 53 1 3.439216E-05 2.380849E-10 8.188253E-15
+ 53 2 3.484183E-05 4.009422E-09 1.396956E-13
+ 53 3 3.462947E-05 4.407060E-08 1.526142E-12
+ 53 4 3.453823E-05 3.549896E-07 1.226071E-11
+ 53 5 3.458070E-05 2.215960E-06 7.662944E-11
+ 53 6 3.458063E-05 1.102532E-05 3.812625E-10
+ 53 7 3.457481E-05 4.429555E-05 1.531510E-09
+ 53 8 3.457517E-05 1.441805E-04 4.985066E-09
+ 53 9 3.457549E-05 3.784484E-04 1.308504E-08
+ 53 10 3.457396E-05 7.901929E-04 2.732010E-08
+ 53 11 3.457493E-05 1.277180E-03 4.415839E-08
+ 53 12 3.457428E-05 1.514576E-03 5.236536E-08
+ 53 13 3.457426E-05 1.168890E-03 4.041349E-08
+ 53 14 3.457347E-05 4.024786E-04 1.391508E-08
+ 53 15 3.456058E-05 9.209857E-07 3.182980E-11
+ 53 16 3.457355E-05 4.774679E-04 1.650776E-08
+ 53 17 3.457435E-05 1.110434E-03 3.839252E-08
+ 53 18 3.457401E-05 8.216845E-04 2.840892E-08
+ 53 19 3.457255E-05 7.727922E-05 2.671740E-09
+ 53 20 3.457342E-05 2.628886E-04 9.088958E-09
+ 53 21 3.457422E-05 9.956631E-04 3.442427E-08
+ 53 22 3.457401E-05 7.193296E-04 2.487011E-08
+ 53 23 3.457091E-05 1.654041E-05 5.718169E-10
+ 53 24 3.457334E-05 4.727454E-04 1.634439E-08
+ 53 25 3.457463E-05 1.030577E-03 3.563182E-08
+ 53 26 3.457491E-05 3.476353E-04 1.201946E-08
+ 53 27 3.457266E-05 8.583244E-05 2.967456E-09
+ 53 28 3.457513E-05 9.195808E-04 3.179463E-08
+ 53 29 3.457425E-05 7.588300E-04 2.623598E-08
+ 53 30 3.457647E-05 6.138502E-06 2.122477E-10
+ 53 31 3.457516E-05 6.244286E-04 2.158972E-08
+ 53 32 3.457429E-05 1.044380E-03 3.610870E-08
+ 53 33 3.457327E-05 1.717284E-04 5.937215E-09
+ 53 34 3.457513E-05 2.938300E-04 1.015921E-08
+ 53 35 3.457387E-05 1.133353E-03 3.918441E-08
+ 53 36 3.457526E-05 5.288459E-04 1.828499E-08
+ 53 37 3.457559E-05 3.785855E-05 1.308982E-09
+ 53 38 3.457440E-05 9.345946E-04 3.231305E-08
+ 53 39 3.457453E-05 9.978087E-04 3.449877E-08
+[transition-N2eX]
+234 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 4.515609E-02 9.162920E-01 4.137616E-02
+ 0 1 5.483774E-02 8.120364E-02 4.453024E-03
+ 0 2 1.312636E-01 2.455786E-03 3.223554E-04
+ 0 3 1.374769E-01 4.785388E-05 6.578803E-06
+ 0 4 2.687472E-01 6.867603E-07 1.845649E-07
+ 0 5 3.565410E+01 9.582452E-09 3.416537E-07
+ 0 6 4.446553E-02 3.489265E-09 1.551520E-10
+ 0 7 8.753117E+00 5.742608E-09 5.026572E-08
+ 0 8 1.519591E+01 2.827049E-09 4.295959E-08
+ 0 9 8.310269E-03 1.748912E-09 1.453393E-11
+ 0 10 7.661258E+04 1.156000E-13 8.856415E-09
+ 0 11 8.951459E+01 9.584410E-11 8.579445E-09
+ 0 12 1.825136E+01 6.400000E-11 1.168087E-09
+ 0 13 4.540188E+01 1.689210E-11 7.669332E-10
+ 0 14 5.954531E+01 5.026810E-11 2.993230E-09
+ 0 15 2.203731E+02 7.840000E-12 1.727725E-09
+ 0 16 8.494162E+00 1.095610E-11 9.306289E-11
+ 0 17 6.742539E+02 5.329000E-13 3.593099E-10
+ 0 18 1.284866E+02 8.179600E-12 1.050969E-09
+ 0 19 6.400925E+02 1.232100E-12 7.886579E-10
+ 0 20 2.757148E+01 4.202500E-12 1.158691E-10
+ 0 21 2.384053E+01 3.610000E-12 8.606433E-11
+ 0 22 3.112122E+03 1.521000E-13 4.733538E-10
+ 0 23 2.673921E+02 1.822500E-12 4.873221E-10
+ 0 24 1.790981E+03 9.000000E-14 1.611883E-10
+ 0 25 6.048345E-03 7.396000E-13 4.473356E-15
+ 0 26 1.981692E+02 5.329000E-13 1.056044E-10
+ 0 27 2.795683E+03 7.840000E-14 2.191816E-10
+ 0 28 2.099379E+02 8.649000E-13 1.815753E-10
+ 0 29 1.480245E+02 4.356000E-13 6.447949E-11
+ 0 30 9.520044E+01 1.000000E-14 9.520044E-13
+ 0 31 7.360471E+01 3.844000E-13 2.829365E-11
+ 0 32 2.688817E+02 3.136000E-13 8.432130E-11
+ 0 33 5.857962E+03 1.690000E-14 9.899956E-11
+ 0 34 8.064030E+02 7.840000E-14 6.322200E-11
+ 0 35 1.165129E+02 1.521000E-13 1.772161E-11
+ 0 36 1.403967E-03 4.410000E-14 6.191496E-17
+ 0 37 1.967744E+03 6.400000E-15 1.259356E-11
+ 0 38 3.977171E+02 8.410000E-14 3.344801E-11
+ 0 39 4.140298E+02 1.024000E-13 4.239666E-11
+ 0 40 9.763530E+02 3.610000E-14 3.524634E-11
+ 0 42 2.375671E+02 2.890000E-14 6.865688E-12
+ 0 43 7.665055E+00 7.290000E-14 5.587825E-13
+ 0 44 9.998332E+00 7.290000E-14 7.288784E-13
+ 0 45 8.680919E+01 4.840000E-14 4.201565E-12
+ 0 46 4.669231E+02 1.690000E-14 7.891000E-12
+ 1 0 3.691023E-02 7.838753E-02 2.893302E-03
+ 1 1 4.927703E-02 7.554287E-01 3.722528E-02
+ 1 2 5.694655E-02 1.579768E-01 8.996235E-03
+ 1 3 1.177761E-01 7.971743E-03 9.388808E-04
+ 1 4 1.747030E-01 2.282420E-04 3.987456E-05
+ 1 5 1.159285E-02 5.535480E-06 6.417198E-08
+ 1 6 1.626403E+00 5.135729E-07 8.352765E-07
+ 1 7 2.869631E-01 3.670300E-07 1.053241E-07
+ 1 8 1.329285E-01 3.575920E-07 4.753417E-08
+ 1 9 1.105511E+00 1.161651E-07 1.284218E-07
+ 1 10 3.245422E-01 1.596180E-08 5.180277E-09
+ 1 11 7.503981E+00 4.785872E-09 3.591309E-08
+ 1 12 5.773110E+00 2.840890E-09 1.640077E-08
+ 1 13 2.093879E-01 5.602689E-10 1.173135E-10
+ 1 14 2.825465E+00 1.837837E-09 5.192743E-09
+ 1 15 1.911620E+05 5.290000E-14 1.011247E-08
+ 1 16 3.128594E+00 1.032337E-09 3.229763E-09
+ 1 17 8.677625E+00 2.672890E-11 2.319434E-10
+ 1 18 9.788008E+00 3.602404E-10 3.526036E-09
+ 1 19 9.474317E+01 3.564090E-11 3.376732E-09
+ 1 20 6.981157E+00 1.331716E-10 9.296918E-10
+ 1 21 4.093321E-02 4.928040E-11 2.017205E-12
+ 1 22 1.403247E+01 4.928040E-11 6.915259E-10
+ 1 23 1.600009E+01 9.292960E-11 1.486882E-09
+ 1 24 5.035602E+03 2.401000E-13 1.209048E-09
+ 1 25 5.828389E+00 4.858090E-11 2.831484E-10
+ 1 26 1.519668E+00 2.756250E-11 4.188586E-11
+ 1 27 3.652912E+02 1.587600E-12 5.799364E-10
+ 1 28 3.843046E+01 2.237290E-11 8.598008E-10
+ 1 29 7.231281E+01 7.128900E-12 5.155108E-10
+ 1 30 3.607064E+01 2.624400E-12 9.466378E-11
+ 1 31 7.657946E-01 1.436410E-11 1.099995E-11
+ 1 32 2.456778E+01 6.200100E-12 1.523227E-10
+ 1 33 8.572228E+02 3.025000E-13 2.593099E-10
+ 1 34 3.040072E+01 7.728400E-12 2.349489E-10
+ 1 35 1.562803E+01 8.468100E-12 1.323398E-10
+ 1 36 2.145931E+01 1.768900E-12 3.795938E-11
+ 1 37 6.855265E-01 4.489000E-13 3.077328E-13
+ 1 38 5.126934E+00 3.686400E-12 1.889993E-11
+ 1 39 1.532511E+01 4.040100E-12 6.191496E-11
+ 1 40 6.510230E+01 1.440000E-12 9.374731E-11
+ 1 41 2.661545E+04 3.600000E-15 9.581563E-11
+ 1 42 9.505930E+01 7.569000E-13 7.195038E-11
+ 1 43 2.234571E+01 1.742400E-12 3.893516E-11
+ 1 44 7.947141E+00 1.612900E-12 1.281794E-11
+ 1 45 1.182567E+00 7.921000E-13 9.367114E-13
+ 1 46 1.261529E+01 1.296000E-13 1.634942E-12
+ 2 0 5.527229E-02 4.958931E-03 2.740915E-04
+ 2 1 3.941056E-02 1.469951E-01 5.793159E-03
+ 2 2 5.292858E-02 6.012937E-01 3.182562E-02
+ 2 3 6.002297E-02 2.283870E-01 1.370847E-02
+ 2 4 1.111438E-01 1.748721E-02 1.943594E-03
+ 2 5 1.711611E-01 7.838158E-04 1.341588E-04
+ 2 6 3.227238E-02 5.204742E-05 1.679694E-06
+ 2 7 2.354455E-01 1.947113E-05 4.584388E-06
+ 2 8 1.437745E-01 1.364032E-05 1.961129E-06
+ 2 9 2.362939E-02 7.616054E-06 1.799627E-07
+ 2 10 3.402599E-01 1.334233E-06 4.539859E-07
+ 2 11 1.009267E+00 1.864590E-08 1.881870E-08
+ 2 12 1.261942E+00 3.699083E-08 4.668027E-08
+ 2 13 2.836744E+00 9.698310E-09 2.751162E-08
+ 2 14 7.330574E-02 5.956040E-08 4.366119E-09
+ 2 15 5.354656E+00 1.124932E-09 6.023622E-09
+ 2 16 6.379845E-01 1.088475E-08 6.944301E-09
+ 2 17 1.135111E+01 2.238016E-10 2.540397E-09
+ 2 18 2.386586E-02 7.849960E-09 1.873460E-10
+ 2 19 2.591852E+02 2.510010E-11 6.505575E-09
+ 2 20 2.000591E+00 3.411728E-09 6.825474E-09
+ 2 21 1.210458E+00 7.011904E-10 8.487616E-10
+ 2 22 8.810288E-01 8.702500E-10 7.667153E-10
+ 2 23 2.706401E+00 9.455625E-10 2.559072E-09
+ 2 24 3.873707E+01 4.956160E-11 1.919871E-09
+ 2 25 8.799223E-01 8.105409E-10 7.132130E-10
+ 2 26 5.279822E-01 1.827904E-10 9.651008E-11
+ 2 27 2.780649E-01 1.664100E-10 4.627278E-11
+ 2 28 1.113045E+00 4.708900E-10 5.241219E-10
+ 2 29 1.362732E+01 8.118010E-11 1.106267E-09
+ 2 30 1.417498E+01 7.310250E-11 1.036226E-09
+ 2 31 1.641449E+00 2.277081E-10 3.737713E-10
+ 2 32 4.628035E-03 6.839290E-11 3.165247E-13
+ 2 33 2.307713E+01 1.108890E-11 2.559000E-10
+ 2 34 5.867813E+00 1.038361E-10 6.092908E-10
+ 2 35 7.703380E+00 7.726410E-11 5.951947E-10
+ 2 36 8.065827E+01 3.880900E-12 3.130267E-10
+ 2 37 2.918272E+00 2.470090E-11 7.208393E-11
+ 2 38 1.133509E-05 6.691240E-11 7.584582E-16
+ 2 39 7.529210E-01 4.774810E-11 3.595055E-11
+ 2 40 1.115501E+01 7.728400E-12 8.621039E-11
+ 2 41 3.354214E+01 3.204100E-12 1.074724E-10
+ 2 42 4.065988E+00 2.450250E-11 9.962688E-11
+ 2 43 2.152499E+00 3.576040E-11 7.697422E-11
+ 2 44 1.939521E+00 2.652250E-11 5.144094E-11
+ 2 45 2.860775E+00 1.030410E-11 2.947771E-11
+ 2 46 1.424096E+01 9.604000E-13 1.367701E-11
+ 3 0 1.393205E-01 3.299614E-04 4.597037E-05
+ 3 1 4.942223E-02 1.475527E-02 7.292382E-04
+ 3 2 4.089883E-02 2.030048E-01 8.302659E-03
+ 3 3 5.673177E-02 4.472045E-01 2.537070E-02
+ 3 4 6.327629E-02 2.934484E-01 1.856832E-02
+ 3 5 1.065617E-01 3.593989E-02 3.829815E-03
+ 3 6 1.448653E-01 3.516568E-03 5.094286E-04
+ 3 7 8.333193E-02 8.339857E-04 6.949764E-05
+ 3 8 1.287648E-01 5.139384E-04 6.617716E-05
+ 3 9 1.198487E-01 3.009705E-04 3.607091E-05
+ 3 10 9.059819E-02 1.205633E-04 1.092281E-05
+ 3 11 2.176953E-01 2.225509E-05 4.844828E-06
+ 3 12 2.218881E-01 3.332414E-06 7.394228E-07
+ 3 13 8.584951E-02 2.085540E-06 1.790426E-07
+ 3 14 2.016645E-01 2.575223E-06 5.193310E-07
+ 3 15 1.471556E-01 7.766368E-07 1.142865E-07
+ 3 16 4.941753E-01 5.433561E-10 2.685132E-10
+ 3 17 2.284742E+00 9.333492E-09 2.132462E-08
+ 3 18 4.777228E-02 1.278349E-07 6.106963E-09
+ 3 19 8.167408E-02 1.795332E-08 1.466321E-09
+ 3 20 1.680814E-01 1.522756E-08 2.559470E-09
+ 3 21 1.396637E+00 2.219352E-09 3.099630E-09
+ 3 22 2.576550E-01 1.871698E-08 4.822522E-09
+ 3 23 3.847501E-02 4.381116E-09 1.685635E-10
+ 3 24 3.038658E+00 1.402503E-09 4.261725E-09
+ 3 25 8.073524E-01 7.209708E-09 5.820775E-09
+ 3 26 3.169548E+00 3.802500E-10 1.205221E-09
+ 3 27 2.066600E-02 2.026800E-09 4.188586E-11
+ 3 28 2.989334E-01 2.745760E-09 8.207992E-10
+ 3 29 2.434070E+01 3.445690E-11 8.387050E-10
+ 3 30 4.323379E-01 1.316964E-09 5.693734E-10
+ 3 31 2.559010E-01 1.658933E-09 4.245225E-10
+ 3 32 2.362372E+00 1.440000E-10 3.401816E-10
+ 3 33 3.453769E-01 4.004001E-10 1.382889E-10
+ 3 34 6.909262E-04 1.045229E-09 7.221761E-13
+ 3 35 5.316884E-01 4.644025E-10 2.469174E-10
+ 3 36 2.866317E+05 2.500000E-15 7.165792E-10
+ 3 37 3.016980E+00 2.961841E-10 8.935815E-10
+ 3 38 1.262252E+00 4.853209E-10 6.125971E-10
+ 3 39 8.741279E-01 2.301289E-10 2.011621E-10
+ 3 40 6.486558E-01 7.617600E-12 4.941201E-12
+ 3 41 8.340036E-01 7.276090E-11 6.068285E-11
+ 3 42 9.322309E-01 2.131600E-10 1.987143E-10
+ 3 43 1.258939E+00 2.166784E-10 2.727850E-10
+ 3 44 2.307916E+00 1.094116E-10 2.525127E-10
+ 3 45 9.877415E+00 1.823290E-11 1.800939E-10
+ 3 46 3.572907E+01 2.924100E-12 1.044754E-10
+ 4 0 2.532975E-01 2.499370E-05 6.330843E-06
+ 4 1 9.092531E-02 1.276038E-03 1.160242E-04
+ 4 2 4.427269E-02 2.689426E-02 1.190681E-03
+ 4 3 4.312783E-02 2.161911E-01 9.323855E-03
+ 4 4 6.278890E-02 2.118205E-01 1.329997E-02
+ 4 5 6.750034E-02 3.216949E-01 2.171451E-02
+ 4 6 9.818474E-02 1.000681E-01 9.825159E-03
+ 4 7 1.141949E-01 3.721569E-02 4.249841E-03
+ 4 8 1.032914E-01 2.427041E-02 2.506923E-03
+ 4 9 1.158628E-01 1.966124E-02 2.278006E-03
+ 4 10 1.236476E-01 1.427559E-02 1.765143E-03
+ 4 11 1.295725E-01 9.102906E-03 1.179486E-03
+ 4 12 1.508760E-01 5.489128E-03 8.281775E-04
+ 4 13 1.568857E-01 3.691773E-03 5.791862E-04
+ 4 14 1.621692E-01 2.689832E-03 4.362078E-04
+ 4 15 1.801793E-01 1.863050E-03 3.356829E-04
+ 4 16 1.937224E-01 1.191887E-03 2.308951E-04
+ 4 17 2.082744E-01 7.937855E-04 1.653252E-04
+ 4 18 2.201425E-01 5.794357E-04 1.275584E-04
+ 4 19 2.297089E-01 3.975394E-04 9.131836E-05
+ 4 20 2.505701E-01 2.540881E-04 6.366687E-05
+ 4 21 2.628116E-01 1.764934E-04 4.638450E-05
+ 4 22 2.594276E-01 1.274648E-04 3.306788E-05
+ 4 23 2.861019E-01 8.233838E-05 2.355717E-05
+ 4 24 2.984022E-01 5.373462E-05 1.603453E-05
+ 4 25 2.833963E-01 3.945988E-05 1.118278E-05
+ 4 26 3.157094E-01 2.577065E-05 8.136035E-06
+ 4 27 3.122557E-01 1.600104E-05 4.996416E-06
+ 4 28 3.110562E-01 1.177320E-05 3.662127E-06
+ 4 29 3.252506E-01 7.606895E-06 2.474147E-06
+ 4 30 3.189756E-01 4.506535E-06 1.437475E-06
+ 4 31 3.353383E-01 3.345497E-06 1.121873E-06
+ 4 32 3.025556E-01 2.055496E-06 6.219017E-07
+ 4 33 3.613888E-01 1.157109E-06 4.181663E-07
+ 4 34 2.968567E-01 8.955215E-07 2.658416E-07
+ 4 35 3.234674E-01 4.718591E-07 1.526310E-07
+ 4 36 3.663692E-01 2.706913E-07 9.917293E-08
+ 4 37 2.340838E-01 2.146284E-07 5.024103E-08
+ 4 38 4.757676E-01 7.991364E-08 3.802032E-08
+ 4 39 1.909384E-01 6.393818E-08 1.220825E-08
+ 4 40 3.966611E-01 3.542300E-08 1.405093E-08
+ 4 41 2.669554E-01 1.033069E-08 2.757833E-09
+ 4 42 2.280197E-01 1.467490E-08 3.346166E-09
+ 4 43 6.788500E-01 1.644303E-09 1.116235E-09
+ 4 44 7.173358E-02 2.832368E-09 2.031759E-10
+ 4 45 9.075928E-01 8.726116E-10 7.919760E-10
+ 4 46 1.935295E+00 3.745440E-11 7.248533E-11
+[transition-N2wj]
+529 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 8.194854E-02 9.136243E-01 7.487018E-02
+ 0 1 6.323174E-02 8.391669E-02 5.306198E-03
+ 0 2 4.506548E-02 2.414603E-03 1.088152E-04
+ 0 3 4.773977E-02 4.380189E-05 2.091092E-06
+ 0 4 5.971556E-02 6.010281E-07 3.589073E-08
+ 0 5 4.203869E-01 2.571504E-09 1.081027E-09
+ 0 6 2.776015E+00 8.880400E-12 2.465212E-11
+ 0 7 1.952137E-01 1.151329E-10 2.247552E-11
+ 0 8 4.445592E-01 2.611210E-11 1.160837E-11
+ 0 9 4.699709E-02 6.938890E-11 3.261076E-12
+ 0 10 1.489587E+00 1.043290E-11 1.554072E-11
+ 0 11 5.422760E+00 3.422500E-12 1.855940E-11
+ 0 12 4.644558E+00 8.100000E-13 3.762092E-12
+ 0 13 1.598259E+00 5.625000E-13 8.990207E-13
+ 0 14 3.251610E+00 1.742400E-12 5.665606E-12
+ 0 15 5.704455E+00 9.801000E-13 5.590936E-12
+ 0 16 3.174374E+00 4.900000E-13 1.555443E-12
+ 0 17 9.922790E-01 2.209000E-13 2.191944E-13
+ 0 18 4.703626E+02 6.400000E-15 3.010321E-12
+ 0 19 3.390463E+01 9.000000E-14 3.051417E-12
+ 0 20 2.476598E+00 1.936000E-13 4.794694E-13
+ 0 21 2.371596E+00 1.225000E-13 2.905205E-13
+ 0 22 3.137902E+01 4.410000E-14 1.383815E-12
+ 0 23 1.331860E+02 8.100000E-15 1.078806E-12
+ 0 25 3.275301E+00 1.000000E-14 3.275301E-14
+ 0 26 1.005261E+01 2.890000E-14 2.905205E-13
+ 0 27 9.906393E+00 3.610000E-14 3.576208E-13
+ 0 28 1.008408E+01 1.960000E-14 1.976480E-13
+ 0 29 1.207772E+01 3.600000E-15 4.347978E-14
+ 0 30 7.584582E+00 1.000000E-16 7.584582E-16
+ 0 31 1.941653E+01 2.500000E-15 4.854133E-14
+ 0 32 2.336342E+01 4.900000E-15 1.144808E-13
+ 0 33 2.047063E+01 6.400000E-15 1.310121E-13
+ 0 34 1.776896E+01 4.900000E-15 8.706791E-14
+ 0 35 6.879440E+00 3.600000E-15 2.476598E-14
+ 0 36 3.869685E-02 1.600000E-15 6.191496E-17
+ 0 37 5.885791E+01 4.000000E-16 2.354316E-14
+ 0 39 1.896146E+02 4.000000E-16 7.584582E-14
+ 0 40 3.839695E+01 1.600000E-15 6.143512E-14
+ 0 41 1.367701E+01 2.500000E-15 3.419254E-14
+ 0 42 4.185451E+00 2.500000E-15 1.046363E-14
+ 0 43 2.228939E-01 2.500000E-15 5.572346E-16
+ 0 44 1.170580E+00 1.600000E-15 1.872928E-15
+ 0 45 9.906393E+00 9.000000E-16 8.915754E-15
+ 0 46 3.962557E+01 4.000000E-16 1.585023E-14
+ 1 0 1.017799E-01 8.041328E-02 8.184457E-03
+ 1 1 8.057512E-02 7.483913E-01 6.030172E-02
+ 1 2 6.289410E-02 1.631315E-01 1.026001E-02
+ 1 3 4.582113E-02 7.855316E-03 3.599395E-04
+ 1 4 4.947763E-02 2.049307E-04 1.013948E-05
+ 1 5 6.766424E-02 3.644052E-06 2.465720E-07
+ 1 6 2.012243E-01 3.501389E-08 7.045647E-09
+ 1 7 1.409053E+00 1.960000E-10 2.761744E-10
+ 1 8 1.779283E-04 3.206957E-09 5.706083E-13
+ 1 9 1.252304E-01 3.214890E-11 4.026020E-12
+ 1 10 1.724895E-01 7.963684E-10 1.373652E-10
+ 1 11 7.560252E-01 9.525760E-11 7.201714E-11
+ 1 12 2.019769E+03 1.690000E-14 3.413410E-11
+ 1 13 1.405620E+01 1.156000E-13 1.624896E-12
+ 1 14 4.785962E+00 4.972900E-12 2.380011E-11
+ 1 15 1.316328E+00 2.631690E-11 3.464167E-11
+ 1 16 4.308566E-01 1.489960E-11 6.419591E-12
+ 1 17 7.923019E-02 1.512900E-12 1.198674E-13
+ 1 18 4.731093E+02 4.900000E-15 2.318235E-12
+ 1 19 7.127342E+01 5.760000E-14 4.105349E-12
+ 1 20 5.844129E+00 6.889000E-13 4.026020E-12
+ 1 21 5.799868E-01 1.960000E-12 1.136774E-12
+ 1 22 1.452643E-01 1.638400E-12 2.380011E-13
+ 1 23 8.989264E+00 3.364000E-13 3.023989E-12
+ 1 24 2.676543E+02 1.440000E-14 3.854222E-12
+ 1 25 6.585580E+00 1.936000E-13 1.274968E-12
+ 1 26 1.685398E-01 2.116000E-13 3.566302E-14
+ 1 27 8.432579E+00 1.764000E-13 1.487507E-12
+ 1 28 1.446402E+01 1.521000E-13 2.199978E-12
+ 1 29 8.912862E+00 1.156000E-13 1.030327E-12
+ 1 30 1.393087E+00 3.610000E-14 5.029043E-14
+ 1 31 2.081031E+02 9.000000E-16 1.872928E-13
+ 1 32 1.001436E+01 5.290000E-14 5.297599E-13
+ 1 33 4.402842E+00 1.089000E-13 4.794694E-13
+ 1 34 2.324230E+00 1.024000E-13 2.380011E-13
+ 1 35 1.206321E+00 5.760000E-14 6.948406E-14
+ 1 36 4.039127E-01 1.690000E-14 6.826124E-15
+ 1 37 2.476598E+00 1.600000E-15 3.962557E-15
+ 1 38 3.962557E+01 9.000000E-16 3.566302E-14
+ 1 39 2.483478E+01 3.600000E-15 8.940520E-14
+ 1 40 1.724637E+01 8.100000E-15 1.396956E-13
+ 1 41 1.578986E+01 1.000000E-14 1.578986E-13
+ 1 42 1.036180E+01 1.210000E-14 1.253778E-13
+ 1 43 4.825282E+00 1.440000E-14 6.948406E-14
+ 1 44 1.657888E+00 1.210000E-14 2.006045E-14
+ 1 45 1.151311E-02 1.210000E-14 1.393087E-16
+ 1 46 1.194347E+00 8.100000E-15 9.674212E-15
+ 2 0 1.215428E-01 5.508273E-03 6.694911E-04
+ 2 1 9.934707E-02 1.496657E-01 1.486885E-02
+ 2 2 7.927735E-02 5.923283E-01 4.695822E-02
+ 2 3 6.265262E-02 2.350182E-01 1.472451E-02
+ 2 4 4.671321E-02 1.686572E-02 7.878520E-04
+ 2 5 5.099715E-02 5.997062E-04 3.058331E-05
+ 2 6 7.351349E-02 1.370540E-05 1.007532E-06
+ 2 7 1.305278E-01 3.226694E-07 4.211732E-08
+ 2 8 1.456957E-01 1.394052E-08 2.031074E-09
+ 2 9 3.438716E-02 4.381486E-08 1.506669E-09
+ 2 10 1.524650E-01 3.968064E-10 6.049910E-11
+ 2 11 2.755540E-01 2.620416E-09 7.220662E-10
+ 2 12 1.858427E-01 8.311689E-10 1.544667E-10
+ 2 13 2.412853E-02 9.312250E-11 2.246909E-12
+ 2 14 1.307609E-05 1.183744E-10 1.547874E-15
+ 2 15 1.300078E+00 1.391290E-11 1.808785E-11
+ 2 16 1.541188E+00 5.959840E-11 9.185233E-11
+ 2 17 3.047463E-01 9.120250E-11 2.779363E-11
+ 2 18 3.443253E-01 1.239040E-11 4.266328E-12
+ 2 19 3.272967E+00 5.953600E-12 1.948594E-11
+ 2 20 7.312513E-01 1.156000E-11 8.453265E-12
+ 2 21 3.378501E-01 3.960100E-12 1.337920E-12
+ 2 22 9.521716E-04 2.340900E-12 2.228939E-15
+ 2 23 1.736370E-01 3.459600E-12 6.007144E-13
+ 2 24 7.691671E-01 2.073600E-12 1.594945E-12
+ 2 25 4.316866E+03 4.000000E-16 1.726746E-12
+ 2 26 6.100110E-01 1.822500E-12 1.111745E-12
+ 2 27 8.871533E-02 3.132900E-12 2.779363E-13
+ 2 28 6.102759E-02 1.664100E-12 1.015560E-13
+ 2 29 5.367874E+00 2.916000E-13 1.565272E-12
+ 2 30 1.847475E+03 1.600000E-15 2.955959E-12
+ 2 31 9.022210E+01 1.960000E-14 1.768353E-12
+ 2 32 1.756258E+00 3.610000E-14 6.340092E-14
+ 2 33 1.026335E+01 7.840000E-14 8.046468E-13
+ 2 34 1.103768E+01 2.025000E-13 2.235130E-12
+ 2 35 5.350426E+00 3.364000E-13 1.799883E-12
+ 2 36 1.330834E+00 3.481000E-13 4.632632E-13
+ 2 37 2.310618E-02 1.936000E-13 4.473356E-15
+ 2 38 7.913119E+00 4.000000E-14 3.165247E-13
+ 2 39 1.377651E+02 3.600000E-15 4.959543E-13
+ 2 40 4.947930E+00 6.760000E-14 3.344801E-13
+ 2 41 8.755833E-01 1.369000E-13 1.198674E-13
+ 2 42 1.393188E-01 1.521000E-13 2.119039E-14
+ 2 43 8.086852E-03 1.225000E-13 9.906393E-16
+ 2 44 1.974329E-04 7.840000E-14 1.547874E-17
+ 2 45 1.393087E-02 4.000000E-14 5.572346E-16
+ 2 46 1.795167E-01 1.690000E-14 3.033833E-15
+ 3 0 1.325508E-01 4.121135E-04 5.462597E-05
+ 3 1 1.190377E-01 1.617041E-02 1.924888E-03
+ 3 2 9.684500E-02 2.059162E-01 1.994195E-02
+ 3 3 7.811634E-02 4.487359E-01 3.505360E-02
+ 3 4 6.250986E-02 2.973062E-01 1.858457E-02
+ 3 5 4.772819E-02 2.998053E-02 1.430917E-03
+ 3 6 5.264748E-02 1.429975E-03 7.528458E-05
+ 3 7 7.521668E-02 4.529425E-05 3.406883E-06
+ 3 8 9.909151E-02 2.731153E-06 2.706341E-07
+ 3 9 7.804047E-02 3.480292E-07 2.716036E-08
+ 3 10 6.584114E-02 3.371544E-07 2.219863E-08
+ 3 11 2.874841E-01 5.103674E-09 1.467225E-09
+ 3 12 7.367151E-01 1.199237E-09 8.834959E-10
+ 3 13 2.931522E-01 3.330444E-09 9.763271E-10
+ 3 14 2.499018E+00 6.006250E-11 1.500973E-10
+ 3 15 9.799266E-02 1.722250E-09 1.687679E-10
+ 3 16 6.420151E-04 2.917264E-10 1.872928E-13
+ 3 17 4.347978E+00 9.000000E-12 3.913180E-11
+ 3 18 1.374725E+00 7.344490E-11 1.009665E-10
+ 3 19 3.823884E-03 7.708840E-11 2.947771E-13
+ 3 20 2.045885E+01 2.280100E-12 4.664822E-11
+ 3 21 3.227353E-01 8.445610E-11 2.725696E-11
+ 3 22 3.899624E-02 6.037290E-11 2.354316E-12
+ 3 23 1.957280E-03 6.200100E-12 1.213533E-14
+ 3 24 4.548863E+00 1.444000E-13 6.568558E-13
+ 3 25 9.850907E+01 4.840000E-14 4.767839E-12
+ 3 26 1.737102E+02 3.240000E-14 5.628209E-12
+ 3 27 1.115241E+00 5.776000E-13 6.441632E-13
+ 3 28 1.350068E-01 5.152900E-12 6.956765E-13
+ 3 29 1.276524E-01 8.008900E-12 1.022355E-12
+ 3 30 8.076593E-03 3.880900E-12 3.134445E-14
+ 3 31 3.545751E-01 1.369000E-13 4.854133E-14
+ 3 32 1.927082E-01 9.025000E-13 1.739191E-13
+ 3 33 8.280542E-01 2.160900E-12 1.789342E-12
+ 3 34 1.300360E+00 1.638400E-12 2.130509E-12
+ 3 35 3.367593E-01 6.400000E-13 2.155260E-13
+ 3 36 5.795665E+00 1.764000E-13 1.022355E-12
+ 3 37 7.155047E+01 5.760000E-14 4.121307E-12
+ 3 38 7.942466E+01 5.290000E-14 4.201565E-12
+ 3 39 2.840029E+01 4.840000E-14 1.374574E-12
+ 3 40 2.021713E-01 1.960000E-14 3.962557E-15
+ 3 41 1.300644E+03 9.000000E-16 1.170580E-12
+ 3 42 4.214087E+01 5.760000E-14 2.427314E-12
+ 3 43 1.118339E+01 1.936000E-13 2.165104E-12
+ 3 44 3.015501E+00 3.364000E-13 1.014415E-12
+ 3 45 4.137414E-01 3.969000E-13 1.642139E-13
+ 3 46 4.402842E-02 3.600000E-13 1.585023E-14
+ 4 0 1.328419E-01 3.733186E-05 4.959233E-06
+ 4 1 1.306538E-01 1.638704E-03 2.141029E-04
+ 4 2 1.164104E-01 3.142344E-02 3.658015E-03
+ 4 3 9.429868E-02 2.476310E-01 2.335127E-02
+ 4 4 7.716753E-02 3.194337E-01 2.464991E-02
+ 4 5 6.249564E-02 3.482509E-01 2.176416E-02
+ 4 6 4.888170E-02 4.823030E-02 2.357579E-03
+ 4 7 5.449062E-02 3.168608E-03 1.726594E-04
+ 4 8 7.395984E-02 1.603047E-04 1.185611E-05
+ 4 9 8.627078E-02 2.040708E-05 1.760535E-06
+ 4 10 8.158570E-02 3.761738E-06 3.069040E-07
+ 4 11 8.938980E-02 1.568631E-06 1.402196E-07
+ 4 12 3.583055E-01 1.277578E-08 4.577633E-09
+ 4 13 1.966999E-01 7.177041E-10 1.411723E-10
+ 4 14 2.576653E+00 1.207562E-09 3.111469E-09
+ 4 15 2.415150E-03 8.076964E-10 1.950708E-12
+ 4 16 4.262378E-01 4.037332E-09 1.720863E-09
+ 4 17 1.283908E-02 2.945233E-09 3.781408E-11
+ 4 18 9.140232E-01 6.177960E-11 5.646799E-11
+ 4 19 2.101592E+00 4.914010E-11 1.032724E-10
+ 4 20 1.424448E+01 6.656400E-12 9.481695E-11
+ 4 21 4.269596E+00 1.391290E-11 5.940247E-11
+ 4 22 3.138531E+00 4.651240E-11 1.459806E-10
+ 4 23 2.557793E-02 1.830609E-10 4.682319E-12
+ 4 24 1.581377E-01 8.630410E-11 1.364793E-11
+ 4 25 2.295604E+00 2.209000E-13 5.070990E-13
+ 4 26 1.287483E-01 2.171560E-11 2.795847E-12
+ 4 27 1.081875E-01 1.874890E-11 2.028396E-12
+ 4 28 6.472173E+00 3.724900E-12 2.410820E-11
+ 4 29 2.139492E+01 5.476000E-13 1.171586E-11
+ 4 30 1.523321E+00 1.537600E-12 2.342258E-12
+ 4 31 5.525540E+00 3.920400E-12 2.166233E-11
+ 4 32 4.027900E+00 2.822400E-12 1.136834E-11
+ 4 33 8.696971E-01 7.290000E-14 6.340092E-14
+ 4 34 3.419254E+00 1.960000E-12 6.701737E-12
+ 4 35 6.709395E-01 5.953600E-12 3.994505E-12
+ 4 36 2.319395E-02 6.150400E-12 1.426521E-13
+ 4 37 1.700261E+00 3.062500E-12 5.207048E-12
+ 4 38 1.000843E+01 5.329000E-13 5.333494E-12
+ 4 39 2.021713E+01 1.960000E-14 3.962557E-13
+ 4 40 5.745122E+00 4.225000E-13 2.427314E-12
+ 4 41 1.437687E+01 6.400000E-13 9.201198E-12
+ 4 42 2.044557E+01 5.041000E-13 1.030661E-11
+ 4 43 1.688520E+01 2.916000E-13 4.923725E-12
+ 4 44 2.637899E+00 1.521000E-13 4.012244E-13
+ 4 45 9.578932E+00 9.000000E-14 8.621039E-13
+ 4 46 5.785609E+01 7.290000E-14 4.217709E-12
+ 5 0 1.231949E-01 4.063732E-06 5.006311E-07
+ 5 1 1.319585E-01 1.867462E-04 2.464275E-05
+ 5 2 1.288942E-01 4.089704E-03 5.271391E-04
+ 5 3 1.135752E-01 5.058872E-02 5.745623E-03
+ 5 4 9.163421E-02 2.734364E-01 2.505613E-02
+ 5 5 7.655475E-02 2.038742E-01 1.560754E-02
+ 5 6 6.265899E-02 3.854063E-01 2.414917E-02
+ 5 7 5.031337E-02 7.443676E-02 3.745164E-03
+ 5 8 5.656080E-02 7.188276E-03 4.065746E-04
+ 5 9 7.286706E-02 6.339508E-04 4.619413E-05
+ 5 10 8.327277E-02 1.241281E-04 1.033649E-05
+ 5 11 8.660147E-02 2.478586E-05 2.146492E-06
+ 5 12 9.112813E-02 5.889455E-06 5.366951E-07
+ 5 13 5.493532E-02 8.452393E-08 4.643349E-09
+ 5 14 1.125630E+01 4.782969E-10 5.383854E-09
+ 5 15 5.185606E-02 1.305763E-08 6.771174E-10
+ 5 16 8.649303E-01 4.552201E-09 3.937336E-09
+ 5 17 1.543766E+00 2.372664E-09 3.662838E-09
+ 5 18 3.325191E-01 6.634103E-09 2.205966E-09
+ 5 19 3.122050E-01 1.399508E-09 4.369334E-10
+ 5 20 1.253390E+00 1.993744E-10 2.498938E-10
+ 5 21 1.213720E+00 3.448449E-10 4.185451E-10
+ 5 22 9.303103E+00 1.505440E-11 1.400526E-10
+ 5 23 4.861519E+03 7.290000E-14 3.544047E-10
+ 5 24 6.575118E+00 6.368040E-11 4.187061E-10
+ 5 25 5.423291E-02 1.471369E-10 7.979662E-12
+ 5 26 5.259333E+00 4.369210E-11 2.297913E-10
+ 5 27 4.051897E+00 7.562500E-12 3.064247E-11
+ 5 28 7.560476E-01 6.625960E-11 5.009541E-11
+ 5 29 7.277030E-01 5.431690E-11 3.952657E-11
+ 5 30 1.196309E+00 1.162810E-11 1.391081E-11
+ 5 31 8.540861E+03 1.000000E-14 8.540861E-11
+ 5 32 2.028940E+01 9.604000E-13 1.948594E-11
+ 5 33 8.844457E+01 2.704000E-13 2.391541E-11
+ 5 34 1.054373E+05 9.000000E-16 9.489359E-11
+ 5 35 1.811715E+03 2.560000E-14 4.637989E-11
+ 5 36 1.704922E-01 1.020100E-12 1.739191E-13
+ 5 37 1.043184E+01 3.648100E-12 3.805640E-11
+ 5 38 9.400620E+00 5.382400E-12 5.059789E-11
+ 5 39 3.422803E+00 4.202500E-12 1.438433E-11
+ 5 40 5.564322E-01 1.562500E-12 8.694253E-13
+ 5 41 2.690590E+02 6.760000E-14 1.818839E-11
+ 5 42 6.520555E+01 3.721000E-13 2.426299E-11
+ 5 43 7.369428E+00 1.440000E-12 1.061198E-11
+ 5 44 1.113807E-01 2.102500E-12 2.341779E-13
+ 5 45 2.215430E+00 2.044900E-12 4.530333E-12
+ 5 46 9.355054E+00 1.537600E-12 1.438433E-11
+ 6 0 1.049067E-01 5.207066E-07 5.462560E-08
+ 6 1 1.257318E-01 2.516327E-05 3.163824E-06
+ 6 2 1.316398E-01 5.731739E-04 7.545248E-05
+ 6 3 1.268392E-01 8.293288E-03 1.051914E-03
+ 6 4 1.102878E-01 7.312013E-02 8.064262E-03
+ 6 5 8.865098E-02 2.817061E-01 2.497352E-02
+ 6 6 7.683283E-02 1.016390E-01 7.809214E-03
+ 6 7 6.311974E-02 4.000621E-01 2.525182E-02
+ 6 8 5.225527E-02 1.139162E-01 5.952721E-03
+ 6 9 5.891976E-02 1.728466E-02 1.018408E-03
+ 6 10 7.250538E-02 2.575461E-03 1.867348E-04
+ 6 11 8.116850E-02 6.367462E-04 5.168373E-05
+ 6 12 8.200229E-02 1.377020E-04 1.129188E-05
+ 6 13 7.219643E-02 2.744628E-05 1.981524E-06
+ 6 14 2.122814E-02 1.762814E-06 3.742126E-08
+ 6 15 2.282832E-04 2.796929E-07 6.384920E-11
+ 6 16 1.025712E-01 2.122813E-07 2.177394E-08
+ 6 17 1.289968E+00 1.585585E-08 2.045353E-08
+ 6 18 4.883556E-02 2.623488E-09 1.281195E-10
+ 6 19 2.623638E+00 3.858894E-09 1.012434E-08
+ 6 20 1.377666E-01 4.799718E-09 6.612409E-10
+ 6 21 2.255298E+02 1.444000E-11 3.256650E-09
+ 6 22 3.910672E-01 9.859600E-10 3.855767E-10
+ 6 23 2.610282E+00 4.782969E-10 1.248490E-09
+ 6 24 2.822699E+01 1.361610E-11 3.843416E-10
+ 6 25 2.467528E+03 2.916000E-13 7.195311E-10
+ 6 26 2.926449E+01 3.600000E-11 1.053522E-09
+ 6 27 7.938502E-02 5.898240E-11 4.682319E-12
+ 6 28 1.962382E+02 3.920400E-12 7.693321E-10
+ 6 29 1.048030E+01 3.237610E-11 3.393114E-10
+ 6 30 5.703277E-01 8.686240E-11 4.954003E-11
+ 6 31 6.229542E+00 5.670090E-11 3.532206E-10
+ 6 32 9.207972E+00 8.761600E-12 8.067657E-11
+ 6 33 5.702621E+01 1.060900E-12 6.049910E-11
+ 6 34 2.776668E+01 7.672900E-12 2.130509E-10
+ 6 35 8.620507E+00 6.502500E-12 5.605485E-11
+ 6 36 1.154042E+01 2.433600E-12 2.808476E-11
+ 6 37 2.622137E+02 6.724000E-13 1.763125E-10
+ 6 38 3.040915E+02 4.624000E-13 1.406119E-10
+ 6 39 1.393894E+01 9.216000E-13 1.284613E-11
+ 6 40 1.978960E+01 1.612900E-12 3.191865E-11
+ 6 41 6.974675E+01 1.742400E-12 1.215267E-10
+ 6 42 1.134088E+02 1.060900E-12 1.203154E-10
+ 6 43 1.925001E+02 2.401000E-13 4.621927E-11
+ 6 44 5.972345E+01 1.960000E-14 1.170580E-12
+ 6 45 2.985195E+01 5.041000E-13 1.504837E-11
+ 6 46 3.799171E+01 1.232100E-12 4.680958E-11
+ 7 0 8.845032E-02 8.192761E-08 7.246523E-09
+ 7 1 1.153002E-01 4.060830E-06 4.682143E-07
+ 7 2 1.277653E-01 9.551212E-05 1.220314E-05
+ 7 3 1.311474E-01 1.424093E-03 1.867662E-04
+ 7 4 1.239693E-01 1.517418E-02 1.881132E-03
+ 7 5 1.062466E-01 9.865800E-02 1.048208E-02
+ 7 6 8.508744E-02 2.684180E-01 2.283900E-02
+ 7 7 8.245729E-02 2.318315E-02 1.911620E-03
+ 7 8 6.419922E-02 3.682095E-01 2.363876E-02
+ 7 9 5.474923E-02 1.690564E-01 9.255707E-03
+ 7 10 6.112820E-02 4.189254E-02 2.560816E-03
+ 7 11 7.147805E-02 9.884613E-03 7.065329E-04
+ 7 12 7.671250E-02 2.999195E-03 2.300758E-04
+ 7 13 7.347323E-02 7.818254E-04 5.744324E-05
+ 7 14 6.196279E-02 1.804715E-04 1.118252E-05
+ 7 15 4.395230E-02 2.902235E-05 1.275599E-06
+ 7 16 5.694000E-02 6.644950E-06 3.783634E-07
+ 7 17 1.217727E-01 2.357945E-06 2.871332E-07
+ 7 18 1.525825E-01 2.752471E-07 4.199791E-08
+ 7 19 2.007344E-02 5.769604E-08 1.158158E-09
+ 7 20 5.588348E-01 3.164062E-09 1.768188E-09
+ 7 21 8.699843E-01 1.490841E-08 1.297008E-08
+ 7 22 1.606901E+01 2.916000E-11 4.685725E-10
+ 7 23 8.046762E+00 6.195121E-10 4.985066E-09
+ 7 24 1.492631E-01 1.643492E-09 2.453127E-10
+ 7 25 1.258320E+01 1.507984E-10 1.897526E-09
+ 7 26 4.878495E+02 1.299600E-12 6.340092E-10
+ 7 27 1.506093E+02 4.080400E-12 6.145462E-10
+ 7 28 1.036218E+02 1.383840E-11 1.433960E-09
+ 7 29 2.209389E+00 1.608010E-11 3.552719E-11
+ 7 30 4.448753E+02 1.716100E-12 7.634506E-10
+ 7 31 1.648647E+01 5.198410E-11 8.570343E-10
+ 7 32 2.585246E-01 8.154090E-11 2.108033E-11
+ 7 33 8.830493E+00 3.981610E-11 3.515958E-10
+ 7 34 2.023451E+02 2.371600E-12 4.798815E-10
+ 7 35 9.431240E+00 5.856400E-12 5.523311E-11
+ 7 36 5.358559E+00 1.705690E-11 9.140041E-11
+ 7 37 1.903683E+01 1.428840E-11 2.720058E-10
+ 7 38 2.094955E+01 5.904900E-12 1.237050E-10
+ 7 39 1.635887E-01 1.144900E-12 1.872928E-13
+ 7 40 1.423220E+03 7.290000E-14 1.037528E-10
+ 7 41 5.020224E+04 3.600000E-15 1.807280E-10
+ 7 42 2.549925E+03 4.000000E-14 1.019970E-10
+ 7 43 5.379731E+01 1.764000E-13 9.489845E-12
+ 7 44 6.167705E+01 2.704000E-13 1.667748E-11
+ 7 45 4.340350E+02 1.849000E-13 8.025307E-11
+ 7 46 2.871374E+03 4.000000E-14 1.148550E-10
+ 8 0 9.391826E-02 1.723444E-08 1.618628E-09
+ 8 1 1.060705E-01 8.248817E-07 8.749565E-08
+ 8 2 1.212552E-01 1.927895E-05 2.337672E-06
+ 8 3 1.287884E-01 2.924110E-04 3.765916E-05
+ 8 4 1.300823E-01 3.204569E-03 4.168575E-04
+ 8 5 1.198298E-01 2.622153E-02 3.142122E-03
+ 8 6 1.010429E-01 1.256515E-01 1.269620E-02
+ 8 7 8.092943E-02 2.212410E-01 1.790491E-02
+ 8 8 3.725699E-02 3.221317E-03 1.200166E-04
+ 8 9 6.658527E-02 2.553281E-01 1.700109E-02
+ 8 10 5.741994E-02 2.193716E-01 1.259630E-02
+ 8 11 6.250814E-02 9.203353E-02 5.752845E-03
+ 8 12 6.945658E-02 3.365181E-02 2.337340E-03
+ 8 13 7.212159E-02 1.324837E-02 9.554933E-04
+ 8 14 6.923174E-02 4.559732E-03 3.156782E-04
+ 8 15 6.362376E-02 1.409677E-03 8.968897E-05
+ 8 16 6.013250E-02 3.833447E-04 2.305147E-05
+ 8 17 6.765059E-02 1.131994E-04 7.658005E-06
+ 8 18 7.858770E-02 3.670736E-05 2.884747E-06
+ 8 19 6.499063E-02 8.351522E-06 5.427707E-07
+ 8 20 3.546175E-02 2.316575E-06 8.214982E-08
+ 8 21 6.573027E-02 5.757016E-07 3.784102E-08
+ 8 22 1.799085E-01 2.168765E-07 3.901792E-08
+ 8 23 7.699784E-03 2.925810E-08 2.252811E-10
+ 8 24 1.466954E-01 5.036741E-09 7.388665E-10
+ 8 25 4.530839E-01 8.554400E-09 3.875861E-09
+ 8 26 5.009398E+01 3.802500E-12 1.904824E-10
+ 8 27 6.484775E+00 1.633284E-10 1.059148E-09
+ 8 28 1.072007E+00 1.394761E-10 1.495194E-10
+ 8 29 2.004012E+03 2.601000E-13 5.212436E-10
+ 8 30 8.982583E+02 7.056000E-13 6.338111E-10
+ 8 31 1.306754E+00 3.240000E-12 4.233884E-12
+ 8 32 3.576208E+01 1.156000E-11 4.134096E-10
+ 8 33 9.790807E+00 4.970250E-11 4.866276E-10
+ 8 34 7.833800E-01 5.670090E-11 4.441835E-11
+ 8 35 5.378325E+00 1.989160E-11 1.069835E-10
+ 8 36 6.973182E+03 4.000000E-14 2.789273E-10
+ 8 37 1.210488E+01 1.017610E-11 1.231804E-10
+ 8 38 1.878079E-03 2.143690E-11 4.026020E-14
+ 8 39 3.737030E+00 1.831840E-11 6.845641E-11
+ 8 40 1.265215E+01 8.584900E-12 1.086174E-10
+ 8 41 2.426852E+01 1.960000E-12 4.756631E-11
+ 8 42 1.348370E+01 5.760000E-14 7.766612E-13
+ 8 43 1.272008E+02 1.521000E-13 1.934725E-11
+ 8 44 1.613453E+02 3.136000E-13 5.059789E-11
+ 8 45 2.247662E+02 2.209000E-13 4.965086E-11
+ 8 46 3.204486E+02 7.840000E-14 2.512317E-11
+ 9 0 1.339584E-01 5.185440E-09 6.946332E-10
+ 9 1 1.054135E-01 2.193049E-07 2.311770E-08
+ 9 2 1.143528E-01 4.846030E-06 5.541572E-07
+ 9 3 1.245023E-01 7.288310E-05 9.074112E-06
+ 9 4 1.295712E-01 7.938436E-04 1.028593E-04
+ 9 5 1.274128E-01 6.892304E-03 8.781674E-04
+ 9 6 1.142030E-01 4.269850E-02 4.876298E-03
+ 9 7 9.384459E-02 1.468252E-01 1.377875E-02
+ 9 8 7.728011E-02 1.230294E-01 9.507723E-03
+ 9 9 6.072133E-02 8.008936E-02 4.863132E-03
+ 9 10 7.352444E-02 7.631863E-02 5.611284E-03
+ 9 11 5.968289E-02 1.916320E-01 1.143715E-02
+ 9 12 6.295187E-02 1.507827E-01 9.492054E-03
+ 9 13 6.759832E-02 8.909772E-02 6.022856E-03
+ 9 14 6.949782E-02 4.966310E-02 3.451477E-03
+ 9 15 6.817663E-02 2.424149E-02 1.652703E-03
+ 9 16 6.560318E-02 1.067947E-02 7.006073E-04
+ 9 17 6.425873E-02 4.342929E-03 2.790711E-04
+ 9 18 6.620513E-02 1.741880E-03 1.153214E-04
+ 9 19 6.837353E-02 6.981163E-04 4.773268E-05
+ 9 20 6.456962E-02 2.513110E-04 1.622705E-05
+ 9 21 5.939347E-02 9.285481E-05 5.514970E-06
+ 9 22 6.600904E-02 3.324768E-05 2.194647E-06
+ 9 23 7.646069E-02 1.209036E-05 9.244376E-07
+ 9 24 5.355608E-02 3.907303E-06 2.092598E-07
+ 9 25 4.791001E-02 1.301219E-06 6.234143E-08
+ 9 26 1.048493E-01 5.087684E-07 5.334403E-08
+ 9 27 6.648057E-02 1.214174E-07 8.071898E-09
+ 9 28 5.947036E-03 4.758942E-08 2.830160E-10
+ 9 29 1.856207E-01 1.577034E-08 2.927301E-09
+ 9 30 2.725895E-01 3.220562E-09 8.778916E-10
+ 9 31 3.641344E-01 1.283072E-09 4.672108E-10
+ 9 32 9.321696E-01 3.748096E-10 3.493861E-10
+ 9 33 2.382167E+00 1.000000E-10 2.382167E-10
+ 9 34 1.256058E+04 4.840000E-14 6.079320E-10
+ 9 35 4.103537E+00 7.744000E-11 3.177779E-10
+ 9 36 1.965944E-01 1.944810E-11 3.823388E-12
+ 9 37 3.163667E+01 7.840000E-12 2.480315E-10
+ 9 38 1.407986E+02 2.250000E-12 3.167968E-10
+ 9 39 6.409895E+00 1.369000E-11 8.775147E-11
+ 9 40 1.793534E-01 2.218410E-11 3.978795E-12
+ 9 41 5.775576E+00 1.722250E-11 9.946986E-11
+ 9 42 1.677312E+01 8.294400E-12 1.391230E-10
+ 9 43 3.368381E+01 2.102500E-12 7.082020E-11
+ 9 44 8.574136E+01 7.840000E-14 6.722123E-12
+ 9 45 3.819406E+01 2.304000E-13 8.799911E-12
+ 9 46 6.371821E+01 6.889000E-13 4.389548E-11
+ 10 0 1.909451E-01 2.090318E-09 3.991361E-10
+ 10 1 1.139274E-01 7.419086E-08 8.452374E-09
+ 10 2 1.100356E-01 1.511178E-06 1.662835E-07
+ 10 3 1.202810E-01 2.153508E-05 2.590261E-06
+ 10 4 1.264585E-01 2.350708E-04 2.972670E-05
+ 10 5 1.299821E-01 1.997514E-03 2.596411E-04
+ 10 6 1.218272E-01 1.393665E-02 1.697863E-03
+ 10 7 1.060530E-01 6.225032E-02 6.601836E-03
+ 10 8 8.447824E-02 1.343780E-01 1.135201E-02
+ 10 9 8.363843E-02 1.186954E-02 9.927495E-04
+ 10 10 6.489507E-02 1.639520E-01 1.063968E-02
+ 10 11 3.184718E-02 5.655469E-03 1.801107E-04
+ 10 12 6.123345E-02 4.127719E-02 2.527545E-03
+ 10 13 6.261589E-02 1.051621E-01 6.584819E-03
+ 10 14 6.624964E-02 1.223797E-01 8.107608E-03
+ 10 15 6.799978E-02 1.124495E-01 7.646542E-03
+ 10 16 6.756235E-02 8.597226E-02 5.808488E-03
+ 10 17 6.625636E-02 5.778698E-02 3.828755E-03
+ 10 18 6.542483E-02 3.550499E-02 2.322908E-03
+ 10 19 6.564502E-02 2.069342E-02 1.358420E-03
+ 10 20 6.590703E-02 1.166433E-02 7.687612E-04
+ 10 21 6.491418E-02 6.238866E-03 4.049909E-04
+ 10 22 6.395808E-02 3.271719E-03 2.092528E-04
+ 10 23 6.472278E-02 1.674391E-03 1.083712E-04
+ 10 24 6.544495E-02 8.416637E-04 5.508263E-05
+ 10 25 6.315030E-02 4.117064E-04 2.599938E-05
+ 10 26 6.319041E-02 1.984982E-04 1.254318E-05
+ 10 27 6.636330E-02 9.530309E-05 6.324627E-06
+ 10 28 6.316539E-02 4.366117E-05 2.757875E-06
+ 10 29 6.095981E-02 2.019523E-05 1.231097E-06
+ 10 30 6.816980E-02 9.086185E-06 6.194035E-07
+ 10 31 6.408818E-02 3.931734E-06 2.519777E-07
+ 10 32 5.573454E-02 1.710655E-06 9.534256E-08
+ 10 33 7.543576E-02 7.112224E-07 5.365160E-08
+ 10 34 6.328938E-02 2.882723E-07 1.824458E-08
+ 10 35 4.270271E-02 1.115293E-07 4.762602E-09
+ 10 36 1.127563E-01 4.480419E-08 5.051957E-09
+ 10 37 3.428318E-02 1.435683E-08 4.921979E-10
+ 10 38 3.608766E-02 5.789688E-09 2.089363E-10
+ 10 39 3.093763E-01 1.752260E-09 5.421076E-10
+ 10 40 1.377762E-01 4.280761E-10 5.897870E-11
+ 10 41 4.851864E-01 2.640625E-10 1.281195E-10
+ 10 42 1.478002E-01 4.796100E-12 7.088644E-13
+ 10 43 4.828282E-01 4.225000E-11 2.039949E-11
+ 10 44 7.843369E+01 9.216000E-13 7.228449E-11
+ 10 45 1.872928E+01 3.204100E-12 6.001047E-11
+ 10 46 1.992138E+04 1.600000E-15 3.187421E-11
+ 11 0 2.289408E-01 8.094025E-10 1.853053E-10
+ 11 1 1.239820E-01 2.504306E-08 3.104889E-09
+ 11 2 1.091703E-01 4.718316E-07 5.150999E-08
+ 11 3 1.169302E-01 6.347779E-06 7.422470E-07
+ 11 4 1.241940E-01 6.860527E-05 8.520360E-06
+ 11 5 1.294226E-01 5.715250E-04 7.396827E-05
+ 11 6 1.256272E-01 4.097865E-03 5.148032E-04
+ 11 7 1.130494E-01 2.076169E-02 2.347097E-03
+ 11 8 9.227523E-02 6.091419E-02 5.620871E-03
+ 11 9 7.712424E-02 4.062340E-02 3.133049E-03
+ 11 10 6.163196E-02 3.474323E-02 2.141293E-03
+ 11 11 7.379735E-02 3.228345E-02 2.382433E-03
+ 11 12 5.884898E-02 6.465888E-02 3.805110E-03
+ 11 13 6.285048E-02 2.519716E-02 1.583654E-03
+ 11 14 8.719308E-02 7.531995E-04 6.567378E-05
+ 11 15 6.162290E-02 7.755189E-03 4.778972E-04
+ 11 16 6.661758E-02 3.361111E-02 2.239091E-03
+ 11 17 6.716177E-02 6.197894E-02 4.162616E-03
+ 11 18 6.639886E-02 8.119924E-02 5.391537E-03
+ 11 19 6.562046E-02 8.811882E-02 5.782397E-03
+ 11 20 6.535259E-02 8.530229E-02 5.574726E-03
+ 11 21 6.530724E-02 7.680531E-02 5.015943E-03
+ 11 22 6.494884E-02 6.513286E-02 4.230304E-03
+ 11 23 6.451142E-02 5.306932E-02 3.423577E-03
+ 11 24 6.441833E-02 4.191512E-02 2.700102E-03
+ 11 25 6.444592E-02 3.232291E-02 2.083080E-03
+ 11 26 6.410821E-02 2.442536E-02 1.565866E-03
+ 11 27 6.394566E-02 1.816296E-02 1.161442E-03
+ 11 28 6.412289E-02 1.334019E-02 8.554118E-04
+ 11 29 6.391527E-02 9.663785E-03 6.176634E-04
+ 11 30 6.371203E-02 6.931828E-03 4.416408E-04
+ 11 31 6.395442E-02 4.919499E-03 3.146237E-04
+ 11 32 6.382691E-02 3.452421E-03 2.203574E-04
+ 11 33 6.357171E-02 2.398627E-03 1.524848E-04
+ 11 34 6.393212E-02 1.646678E-03 1.052756E-04
+ 11 35 6.374116E-02 1.116465E-03 7.116476E-05
+ 11 36 6.348186E-02 7.464458E-04 4.738576E-05
+ 11 37 6.405873E-02 4.915931E-04 3.149083E-05
+ 11 38 6.350104E-02 3.177271E-04 2.017600E-05
+ 11 39 6.359454E-02 2.014816E-04 1.281313E-05
+ 11 40 6.417423E-02 1.246959E-04 8.002261E-06
+ 11 41 6.302785E-02 7.509037E-05 4.732785E-06
+ 11 42 6.429684E-02 4.387433E-05 2.820981E-06
+ 11 43 6.351449E-02 2.460993E-05 1.563087E-06
+ 11 44 6.320156E-02 1.326744E-05 8.385230E-07
+ 11 45 6.504181E-02 6.742799E-06 4.385639E-07
+ 11 46 6.155438E-02 3.232696E-06 1.989866E-07
+[transition-N2w]
+1029 0 0 0 5
+c data calculated with LEVEL_8.0
+c using Potentialenergyfunctions retrieved via RKR1 2.0
+c with Spectroscopic constants from
+c Spelsberg & Meyer j.chem.phys.,vol.115,no.14,(2001)
+c documented in ESA report Aerothermochemistry
+c
+c vu vl sumre2/fcf FCF SRe2
+ 0 0 2.207753E-01 2.256952E-01 4.982793E-02
+ 0 1 2.321624E-01 3.655446E-01 8.486570E-02
+ 0 2 2.443701E-01 2.625461E-01 6.415842E-02
+ 0 3 2.578391E-01 1.100882E-01 2.838504E-02
+ 0 4 2.731753E-01 2.986416E-02 8.158151E-03
+ 0 5 2.909516E-01 5.496836E-03 1.599313E-03
+ 0 6 3.116252E-01 6.995290E-04 2.179909E-04
+ 0 7 3.358465E-01 6.154795E-05 2.067066E-05
+ 0 8 3.666131E-01 3.693930E-06 1.354243E-06
+ 0 9 4.150070E-01 1.442101E-07 5.984819E-08
+ 0 10 4.884997E-01 3.477461E-09 1.698739E-09
+ 0 11 7.185181E-01 6.336160E-11 4.552646E-11
+ 0 12 9.534705E+00 4.356000E-13 4.153317E-12
+ 0 13 1.805440E-01 1.000000E-12 1.805440E-13
+ 0 14 3.442102E-01 3.249000E-13 1.118339E-13
+ 0 15 3.467926E+00 2.250000E-14 7.802833E-14
+ 0 16 1.023492E+00 4.410000E-14 4.513600E-14
+ 0 17 4.541505E+00 5.760000E-14 2.615907E-13
+ 0 18 3.228005E+02 9.000000E-16 2.905205E-13
+ 0 19 3.106497E+01 3.240000E-14 1.006505E-12
+ 0 20 8.086852E-01 1.960000E-14 1.585023E-14
+ 0 21 2.034003E+02 6.400000E-15 1.301762E-12
+ 0 22 4.739246E+02 9.000000E-16 4.265322E-13
+ 0 23 2.862019E+02 9.000000E-16 2.575817E-13
+ 0 24 9.588410E+01 8.100000E-15 7.766612E-13
+ 0 25 8.248620E+00 1.000000E-14 8.248620E-14
+ 0 26 6.191496E+01 2.500000E-15 1.547874E-13
+ 0 28 8.706791E+00 1.600000E-15 1.393087E-14
+ 0 29 1.674180E+01 2.500000E-15 4.185451E-14
+ 0 30 2.011617E+01 2.500000E-15 5.029043E-14
+ 0 31 1.170580E+00 1.600000E-15 1.872928E-15
+ 0 32 2.821000E+01 4.000000E-16 1.128400E-14
+ 0 34 1.393087E+00 4.000000E-16 5.572346E-16
+ 0 35 4.402842E+00 9.000000E-16 3.962557E-15
+ 0 36 6.879440E+00 9.000000E-16 6.191496E-15
+ 0 37 1.719860E+00 9.000000E-16 1.547874E-15
+ 0 38 3.869685E+00 1.000000E-16 3.869685E-16
+ 0 40 2.228939E+01 1.000000E-16 2.228939E-15
+ 0 41 3.869685E+00 1.000000E-16 3.869685E-16
+ 0 42 3.482716E-01 4.000000E-16 1.393087E-16
+ 0 43 2.476598E+00 4.000000E-16 9.906393E-16
+ 0 44 3.134445E+00 4.000000E-16 1.253778E-15
+ 0 45 5.572346E+00 1.000000E-16 5.572346E-16
+ 0 46 1.393087E+00 1.000000E-16 1.393087E-16
+ 1 0 2.117985E-01 3.044831E-01 6.448906E-02
+ 1 1 2.214314E-01 5.353452E-02 1.185422E-02
+ 1 2 2.362032E-01 6.473235E-02 1.528999E-02
+ 1 3 2.475384E-01 2.481796E-01 6.143399E-02
+ 1 4 2.608900E-01 2.125058E-01 5.544065E-02
+ 1 5 2.762469E-01 8.976891E-02 2.479839E-02
+ 1 6 2.941248E-01 2.268450E-02 6.672074E-03
+ 1 7 3.150899E-01 3.687141E-03 1.161781E-03
+ 1 8 3.400695E-01 3.948606E-04 1.342800E-04
+ 1 9 3.719308E-01 2.788157E-05 1.037001E-05
+ 1 10 4.241312E-01 1.257650E-06 5.334086E-07
+ 1 11 5.387668E-01 3.465927E-08 1.867326E-08
+ 1 12 7.404615E-01 9.437184E-10 6.987871E-10
+ 1 13 1.019743E+00 4.858090E-11 4.954003E-11
+ 1 14 6.178830E-04 2.106810E-11 1.301762E-14
+ 1 15 1.039572E+00 8.065600E-12 8.384771E-12
+ 1 16 1.101244E-01 1.322500E-12 1.456395E-13
+ 1 17 1.118339E+03 1.000000E-14 1.118339E-11
+ 1 18 3.044250E+00 5.290000E-14 1.610408E-13
+ 1 19 7.754065E+02 8.100000E-15 6.280793E-12
+ 1 20 3.862695E-01 4.761000E-13 1.839029E-13
+ 1 21 1.169139E+01 3.025000E-13 3.536644E-12
+ 1 22 1.078806E+02 2.500000E-15 2.697016E-13
+ 1 23 6.888180E+01 4.410000E-14 3.037687E-12
+ 1 24 3.806523E+01 4.840000E-14 1.842357E-12
+ 1 25 1.683392E+01 4.410000E-14 7.423758E-13
+ 1 26 8.256205E+01 4.410000E-14 3.640987E-12
+ 1 27 5.219789E+01 1.210000E-14 6.315945E-13
+ 1 28 2.215567E+02 3.600000E-15 7.976040E-13
+ 1 29 6.157146E+01 3.240000E-14 1.994915E-12
+ 1 30 9.177345E+00 4.000000E-14 3.670938E-13
+ 1 31 1.253778E+01 1.690000E-14 2.118885E-13
+ 1 32 2.915513E+02 2.500000E-15 7.288784E-13
+ 1 33 5.759639E+02 4.000000E-16 2.303856E-13
+ 1 34 4.682319E+00 3.600000E-15 1.685635E-14
+ 1 35 3.367593E+01 6.400000E-15 2.155260E-13
+ 1 36 1.724637E+01 8.100000E-15 1.396956E-13
+ 1 37 3.229515E-01 8.100000E-15 2.615907E-15
+ 1 38 1.099622E+01 4.900000E-15 5.388149E-14
+ 1 39 1.128400E+02 9.000000E-16 1.015560E-13
+ 1 41 4.740364E-01 1.600000E-15 7.584582E-16
+ 1 42 5.267071E+00 3.600000E-15 1.896146E-14
+ 1 43 9.906393E+00 4.900000E-15 4.854133E-14
+ 1 44 9.211430E+00 4.900000E-15 4.513600E-14
+ 1 45 5.572346E+00 3.600000E-15 2.006045E-14
+ 1 46 1.896146E+00 1.600000E-15 3.033833E-15
+ 2 0 2.034845E-01 2.321090E-01 4.723057E-02
+ 2 1 2.151711E-01 2.584836E-02 5.561820E-03
+ 2 2 2.246900E-01 1.682134E-01 3.779586E-02
+ 2 3 2.293113E-01 6.726221E-03 1.542399E-03
+ 2 4 2.514910E-01 1.099007E-01 2.763905E-02
+ 2 5 2.641574E-01 2.345099E-01 6.194752E-02
+ 2 6 2.794570E-01 1.564193E-01 4.371248E-02
+ 2 7 2.974513E-01 5.372160E-02 1.597956E-02
+ 2 8 3.187186E-01 1.100942E-02 3.508906E-03
+ 2 9 3.446009E-01 1.418905E-03 4.889561E-04
+ 2 10 3.787961E-01 1.168384E-04 4.425792E-05
+ 2 11 4.357629E-01 6.111328E-06 2.663090E-06
+ 2 12 5.586194E-01 2.063340E-07 1.152622E-07
+ 2 13 5.655490E-01 9.131714E-09 5.164431E-09
+ 2 14 1.224092E-01 1.153282E-09 1.411723E-10
+ 2 15 5.430281E-02 1.968409E-10 1.068901E-11
+ 2 16 2.372705E-01 2.756250E-11 6.539768E-12
+ 2 17 2.140099E+00 2.097640E-11 4.489158E-11
+ 2 18 5.024326E-01 1.464100E-12 7.356116E-13
+ 2 19 1.526531E+01 2.528100E-12 3.859223E-11
+ 2 20 4.513600E+00 4.000000E-14 1.805440E-13
+ 2 21 6.683471E+01 4.624000E-13 3.090437E-11
+ 2 22 1.941988E+00 1.144900E-12 2.223382E-12
+ 2 23 5.051124E+02 2.560000E-14 1.293088E-11
+ 2 24 8.243241E+00 7.056000E-13 5.816431E-12
+ 2 25 3.750231E+00 8.100000E-13 3.037687E-12
+ 2 26 4.595629E+01 1.521000E-13 6.989951E-12
+ 2 27 7.491710E+01 4.000000E-16 2.996684E-14
+ 2 28 8.198477E+02 8.100000E-15 6.640766E-12
+ 2 29 1.364215E+02 2.560000E-14 3.492391E-12
+ 2 30 6.231251E+00 8.410000E-14 5.240482E-13
+ 2 31 3.949533E+01 1.444000E-13 5.703126E-12
+ 2 32 3.702790E+01 9.000000E-14 3.332511E-12
+ 2 33 3.229515E-01 8.100000E-15 2.615907E-15
+ 2 34 1.393087E+02 1.690000E-14 2.354316E-12
+ 2 35 4.194464E+01 6.760000E-14 2.835457E-12
+ 2 36 7.584582E+00 7.290000E-14 5.529161E-13
+ 2 37 4.026020E+00 4.000000E-14 1.610408E-13
+ 2 38 8.915754E+01 1.210000E-14 1.078806E-12
+ 2 39 5.759639E+02 1.600000E-15 9.215422E-13
+ 2 40 1.772161E+03 1.000000E-16 1.772161E-13
+ 2 41 1.426521E+01 2.500000E-15 3.566302E-14
+ 2 42 6.733568E+01 4.900000E-15 3.299448E-13
+ 2 43 5.139706E+01 8.100000E-15 4.163162E-13
+ 2 44 1.842098E+01 1.210000E-14 2.228939E-13
+ 2 45 2.706861E+00 1.210000E-14 3.275301E-14
+ 2 46 7.995217E-01 1.210000E-14 9.674212E-15
+ 3 0 1.956576E-01 1.322109E-01 2.586806E-02
+ 3 1 2.058627E-01 1.334409E-01 2.747049E-02
+ 3 2 2.144408E-01 2.642544E-02 5.666692E-03
+ 3 3 2.278709E-01 1.020251E-01 2.324854E-02
+ 3 4 2.374466E-01 8.283157E-02 1.966808E-02
+ 3 5 2.599653E-01 1.420692E-02 3.693305E-03
+ 3 6 2.678151E-01 1.816702E-01 4.865402E-02
+ 3 7 2.828472E-01 2.033418E-01 5.751467E-02
+ 3 8 3.009744E-01 9.523568E-02 2.866350E-02
+ 3 9 3.226525E-01 2.445561E-02 7.890666E-03
+ 3 10 3.496064E-01 3.770768E-03 1.318285E-03
+ 3 11 3.863980E-01 3.617581E-04 1.397826E-04
+ 3 12 4.434077E-01 2.232553E-05 9.899312E-06
+ 3 13 5.112837E-01 1.005407E-06 5.140483E-07
+ 3 14 3.558653E-01 6.973296E-08 2.481554E-08
+ 3 15 1.079493E-01 1.088058E-08 1.174550E-09
+ 3 16 1.745721E-01 7.879249E-10 1.375497E-10
+ 3 17 1.370663E+02 1.742400E-12 2.388243E-10
+ 3 18 6.205841E-02 8.390560E-11 5.207048E-12
+ 3 19 1.039944E+05 9.000000E-16 9.359500E-11
+ 3 20 1.458314E-01 3.352410E-11 4.888867E-12
+ 3 21 1.152249E+01 4.622500E-12 5.326273E-11
+ 3 22 4.926853E+00 4.489000E-13 2.211664E-12
+ 3 23 1.255171E+05 4.000000E-16 5.020686E-11
+ 3 24 2.119864E+01 1.369000E-13 2.902093E-12
+ 3 25 4.172164E+01 6.241000E-13 2.603848E-11
+ 3 26 7.131876E+00 2.722500E-12 1.941653E-11
+ 3 27 1.093080E+00 1.166400E-12 1.274968E-12
+ 3 28 8.152052E+02 1.960000E-14 1.597802E-11
+ 3 29 4.422519E+00 7.056000E-13 3.120529E-12
+ 3 30 5.906376E+00 6.241000E-13 3.686169E-12
+ 3 31 4.425640E+01 1.936000E-13 8.568040E-12
+ 3 32 1.446402E+01 4.410000E-14 6.378634E-13
+ 3 33 1.903893E+02 1.960000E-14 3.731630E-12
+ 3 34 2.185809E+03 3.600000E-15 7.868911E-12
+ 3 35 1.722988E+02 1.210000E-14 2.084816E-12
+ 3 36 5.742485E+00 1.089000E-13 6.253566E-13
+ 3 37 2.562523E+01 2.025000E-13 5.189108E-12
+ 3 38 2.816143E+01 1.849000E-13 5.207048E-12
+ 3 39 1.494959E+01 8.410000E-14 1.257261E-12
+ 3 40 2.002804E+01 6.400000E-15 1.281794E-13
+ 3 41 1.983817E+02 1.000000E-14 1.983817E-12
+ 3 42 6.611142E+01 4.410000E-14 2.915513E-12
+ 3 43 2.709604E+01 6.760000E-14 1.831692E-12
+ 3 44 6.824514E+00 6.250000E-14 4.265322E-13
+ 3 45 1.137214E-01 4.410000E-14 5.015112E-15
+ 3 46 1.433960E+01 2.560000E-14 3.670938E-13
+ 4 0 1.881898E-01 6.285032E-02 1.182779E-02
+ 4 1 1.979226E-01 1.623535E-01 3.213344E-02
+ 4 2 2.092858E-01 1.640332E-02 3.432982E-03
+ 4 3 2.177302E-01 1.014670E-01 2.209242E-02
+ 4 4 2.332178E-01 1.596904E-02 3.724263E-03
+ 4 5 2.411144E-01 1.271879E-01 3.066683E-02
+ 4 6 2.413742E-01 5.924450E-03 1.430009E-03
+ 4 7 2.723608E-01 9.884915E-02 2.692263E-02
+ 4 8 2.865286E-01 2.149158E-01 6.157952E-02
+ 4 9 3.047685E-01 1.397603E-01 4.259454E-02
+ 4 10 3.269547E-01 4.500221E-02 1.471369E-02
+ 4 11 3.548353E-01 8.305069E-03 2.946932E-03
+ 4 12 3.920490E-01 9.368846E-04 3.673046E-04
+ 4 13 4.386592E-01 7.021954E-05 3.080245E-05
+ 4 14 4.513965E-01 4.391162E-06 1.982155E-06
+ 4 15 3.202917E-01 4.074141E-07 1.304914E-07
+ 4 16 2.311560E-01 5.541787E-08 1.281017E-08
+ 4 17 9.662856E-01 1.671174E-09 1.614832E-09
+ 4 18 1.982403E+00 8.836000E-11 1.751651E-10
+ 4 19 2.227607E+00 3.906250E-11 8.701592E-11
+ 4 20 2.046059E+00 3.260410E-11 6.670990E-11
+ 4 21 1.441783E+00 5.343610E-11 7.704328E-11
+ 4 22 3.834777E-01 4.475610E-11 1.716297E-11
+ 4 23 1.132515E+02 3.721000E-13 4.214087E-11
+ 4 24 3.489908E-01 1.043290E-11 3.640987E-12
+ 4 25 1.887763E+01 1.904400E-12 3.595055E-11
+ 4 26 4.361293E+01 1.960000E-14 8.548134E-13
+ 4 27 4.595074E+01 5.476000E-13 2.516263E-11
+ 4 28 1.382530E+01 1.488400E-12 2.057758E-11
+ 4 29 2.444949E+00 1.521000E-13 3.718767E-13
+ 4 30 1.915736E+01 9.216000E-13 1.765542E-11
+ 4 31 3.986646E+00 2.560000E-12 1.020581E-11
+ 4 32 9.341585E-02 1.464100E-12 1.367701E-13
+ 4 33 6.262458E+01 1.225000E-13 7.671511E-12
+ 4 34 5.137747E+01 1.024000E-13 5.261053E-12
+ 4 35 2.046775E-04 3.025000E-13 6.191496E-17
+ 4 36 1.592415E+01 2.401000E-13 3.823388E-12
+ 4 37 3.907713E+01 1.296000E-13 5.064396E-12
+ 4 38 1.100865E+01 9.000000E-14 9.907786E-13
+ 4 39 7.070526E+00 8.410000E-14 5.946313E-13
+ 4 40 5.414905E+01 7.290000E-14 3.947466E-12
+ 4 41 1.450420E+02 3.240000E-14 4.699361E-12
+ 4 42 2.303856E+03 9.000000E-16 2.073470E-12
+ 4 43 4.208480E+00 1.960000E-14 8.248620E-14
+ 4 44 7.976487E+00 7.840000E-14 6.253566E-13
+ 4 45 1.715572E+01 1.296000E-13 2.223382E-12
+ 4 46 1.943432E+01 1.521000E-13 2.955959E-12
+ 5 0 1.810128E-01 2.645319E-02 4.788368E-03
+ 5 1 1.905039E-01 1.224359E-01 2.332452E-02
+ 5 2 2.003931E-01 9.086720E-02 1.820916E-02
+ 5 3 2.073214E-01 8.930159E-03 1.851413E-03
+ 5 4 2.205789E-01 1.051479E-01 2.319341E-02
+ 5 5 2.237334E-01 4.785735E-03 1.070729E-03
+ 5 6 2.448109E-01 1.011022E-01 2.475093E-02
+ 5 7 2.531048E-01 5.035211E-02 1.274436E-02
+ 5 8 2.799470E-01 3.037468E-02 8.503300E-03
+ 5 9 2.907032E-01 1.899374E-01 5.521540E-02
+ 5 10 3.088711E-01 1.783322E-01 5.508167E-02
+ 5 11 3.313844E-01 7.268598E-02 2.408700E-02
+ 5 12 3.593988E-01 1.618642E-02 5.817381E-03
+ 5 13 3.944790E-01 2.185350E-03 8.620747E-04
+ 5 14 4.291325E-01 2.042041E-04 8.763063E-05
+ 5 15 4.223112E-01 1.726801E-05 7.292475E-06
+ 5 16 3.435256E-01 1.859487E-06 6.387812E-07
+ 5 17 3.288904E-01 2.061160E-07 6.778957E-08
+ 5 18 1.168758E+00 4.277160E-09 4.998965E-09
+ 5 19 5.561195E-01 1.168561E-10 6.498596E-11
+ 5 20 7.040470E-01 9.447840E-11 6.651724E-11
+ 5 21 1.269289E-03 1.054729E-10 1.338756E-13
+ 5 22 2.007450E+01 5.616900E-12 1.127564E-10
+ 5 23 7.349492E-02 7.708840E-11 5.665606E-12
+ 5 24 7.217389E+00 5.712100E-12 4.122645E-11
+ 5 25 7.225242E-01 2.125210E-11 1.535516E-11
+ 5 26 3.857871E-01 2.209000E-11 8.522037E-12
+ 5 27 1.000571E+01 1.562500E-12 1.563391E-11
+ 5 28 9.189907E-01 5.041000E-13 4.632632E-13
+ 5 29 8.052476E+01 2.209000E-13 1.778792E-11
+ 5 30 5.070990E+03 1.600000E-15 8.113584E-12
+ 5 31 1.222138E+01 1.225000E-13 1.497119E-12
+ 5 32 1.022645E+01 1.368900E-12 1.399899E-11
+ 5 33 3.848654E+00 2.160900E-12 8.316557E-12
+ 5 34 5.798487E-03 8.649000E-13 5.015112E-15
+ 5 35 5.240482E+03 9.000000E-16 4.716434E-12
+ 5 36 9.127384E+00 6.561000E-13 5.988477E-12
+ 5 37 9.924320E-01 1.188100E-12 1.179108E-12
+ 5 38 4.754939E-01 8.649000E-13 4.112546E-13
+ 5 39 8.727911E+00 3.025000E-13 2.640193E-12
+ 5 40 6.256841E+01 3.610000E-14 2.258720E-12
+ 5 41 2.264636E+02 1.600000E-15 3.623418E-13
+ 5 42 1.023936E+01 2.250000E-14 2.303856E-13
+ 5 43 4.740364E+01 3.240000E-14 1.535878E-12
+ 5 44 5.997519E+01 3.610000E-14 2.165104E-12
+ 5 45 3.394828E+01 4.410000E-14 1.497119E-12
+ 5 46 8.960991E+00 5.290000E-14 4.740364E-13
+ 6 0 1.741303E-01 1.025147E-02 1.785092E-03
+ 6 1 1.834613E-01 7.162486E-02 1.314039E-02
+ 6 2 1.929263E-01 1.222781E-01 2.359067E-02
+ 6 3 2.037984E-01 1.774576E-02 3.616556E-03
+ 6 4 2.112739E-01 5.813951E-02 1.228336E-02
+ 6 5 2.238829E-01 5.216995E-02 1.167996E-02
+ 6 6 2.320048E-01 4.597920E-02 1.066740E-02
+ 6 7 2.495648E-01 4.399813E-02 1.098038E-02
+ 6 8 2.578557E-01 9.580501E-02 2.470387E-02
+ 6 9 3.400642E-01 7.100573E-04 2.414651E-04
+ 6 10 2.955926E-01 1.381325E-01 4.083093E-02
+ 6 11 3.131499E-01 2.021774E-01 6.331183E-02
+ 6 12 3.356233E-01 1.065009E-01 3.574419E-02
+ 6 13 3.630836E-01 2.906216E-02 1.055199E-02
+ 6 14 3.951108E-01 4.790622E-03 1.892826E-03
+ 6 15 4.210451E-01 5.648888E-04 2.378436E-04
+ 6 16 4.107202E-01 6.144208E-05 2.523550E-05
+ 6 17 3.651245E-01 7.303993E-06 2.666867E-06
+ 6 18 3.834942E-01 7.377092E-07 2.829072E-07
+ 6 19 8.504152E-01 2.282214E-08 1.940830E-08
+ 6 20 1.258876E+00 2.869636E-10 3.612515E-10
+ 6 21 2.282092E-05 1.196468E-09 2.730450E-14
+ 6 22 3.525888E-01 1.050625E-10 3.704386E-11
+ 6 23 4.991585E+00 1.953640E-11 9.751761E-11
+ 6 24 1.251095E+00 3.433960E-11 4.296211E-11
+ 6 25 9.107743E-01 2.480040E-11 2.258757E-11
+ 6 26 6.440565E+00 8.584900E-12 5.529161E-11
+ 6 27 1.215743E-02 3.943840E-11 4.794694E-13
+ 6 28 1.864596E+00 1.169640E-11 2.180906E-11
+ 6 29 2.392824E+01 3.600000E-13 8.614166E-12
+ 6 30 9.437265E-01 4.452100E-12 4.201565E-12
+ 6 31 8.132143E+00 2.102500E-12 1.709783E-11
+ 6 32 9.951474E+00 3.025000E-13 3.010321E-12
+ 6 33 2.695023E+01 1.681000E-13 4.530333E-12
+ 6 34 2.950145E+01 5.184000E-13 1.529355E-11
+ 6 35 1.103400E+01 6.241000E-13 6.886321E-12
+ 6 36 3.553430E-01 1.089000E-13 3.869685E-14
+ 6 37 3.761955E+01 1.521000E-13 5.721933E-12
+ 6 38 8.170402E+00 9.604000E-13 7.846854E-12
+ 6 39 1.985144E+00 1.368900E-12 2.717463E-12
+ 6 40 4.125945E-03 9.604000E-13 3.962557E-15
+ 6 41 5.736471E+00 3.249000E-13 1.863780E-12
+ 6 42 1.887820E+02 1.690000E-14 3.190416E-12
+ 6 43 4.473356E+01 4.410000E-14 1.972750E-12
+ 6 44 2.147772E+00 1.600000E-13 3.436435E-13
+ 6 45 3.336092E-01 2.209000E-13 7.369428E-14
+ 6 46 3.973564E+00 2.025000E-13 8.046468E-13
+ 7 0 1.676166E-01 3.777388E-03 6.331530E-04
+ 7 1 1.767665E-01 3.596233E-02 6.356935E-03
+ 7 2 1.860012E-01 1.024275E-01 1.905164E-02
+ 7 3 1.956360E-01 7.192566E-02 1.407125E-02
+ 7 4 1.979412E-01 1.706523E-03 3.377912E-04
+ 7 5 2.141678E-01 8.619618E-02 1.846045E-02
+ 7 6 2.302833E-01 6.814471E-03 1.569259E-03
+ 7 7 2.359026E-01 8.231937E-02 1.941936E-02
+ 7 8 2.628873E-01 4.622606E-03 1.215224E-03
+ 7 9 2.623060E-01 1.087742E-01 2.853213E-02
+ 7 10 2.635119E-01 1.251177E-02 3.297000E-03
+ 7 11 3.016241E-01 7.575554E-02 2.284970E-02
+ 7 12 3.175129E-01 2.031437E-01 6.450074E-02
+ 7 13 3.396291E-01 1.433500E-01 4.868583E-02
+ 7 14 3.661197E-01 4.895409E-02 1.792305E-02
+ 7 15 3.948767E-01 1.003010E-02 3.960653E-03
+ 7 16 4.147633E-01 1.496143E-03 6.205453E-04
+ 7 17 4.064417E-01 2.025473E-04 8.232365E-05
+ 7 18 3.828174E-01 2.687583E-05 1.028853E-05
+ 7 19 4.111561E-01 2.835048E-06 1.165647E-06
+ 7 20 5.946437E-01 1.520610E-07 9.042212E-08
+ 7 21 3.680141E-01 1.032256E-08 3.798847E-09
+ 7 22 8.509266E-02 5.208509E-09 4.432059E-10
+ 7 23 2.292641E+00 9.682560E-11 2.219863E-10
+ 7 24 3.935087E-01 8.100000E-11 3.187421E-11
+ 7 25 2.542645E+03 3.240000E-14 8.238171E-11
+ 7 26 5.264490E-04 3.398890E-11 1.789342E-14
+ 7 27 2.837742E+03 2.250000E-14 6.384920E-11
+ 7 28 9.302487E-01 3.214890E-11 2.990647E-11
+ 7 29 1.396956E-01 2.704000E-11 3.777370E-12
+ 7 30 4.163162E+01 6.400000E-13 2.664424E-11
+ 7 31 7.433295E-01 6.553600E-12 4.871484E-12
+ 7 32 6.233831E-01 8.584900E-12 5.351681E-12
+ 7 33 5.902761E+00 2.371600E-12 1.399899E-11
+ 7 34 2.922509E+01 7.290000E-14 2.130509E-12
+ 7 35 3.009080E+02 1.210000E-14 3.640987E-12
+ 7 36 2.627418E+03 4.900000E-15 1.287435E-11
+ 7 37 1.685635E+02 4.410000E-14 7.433649E-12
+ 7 39 1.753806E+01 2.025000E-13 3.551458E-12
+ 7 40 1.109179E+01 7.396000E-13 8.203484E-12
+ 7 41 5.776479E+00 1.020100E-12 5.892586E-12
+ 7 42 1.623529E+00 7.744000E-13 1.257261E-12
+ 7 43 3.238393E-01 3.136000E-13 1.015560E-13
+ 7 44 6.338035E+01 2.890000E-14 1.831692E-12
+ 7 45 1.089409E+02 2.890000E-14 3.148391E-12
+ 7 46 1.608868E+01 1.681000E-13 2.704507E-12
+ 8 0 1.616000E-01 1.362327E-03 2.201521E-04
+ 8 1 1.704614E-01 1.647519E-02 2.808383E-03
+ 8 2 1.795031E-01 6.712073E-02 1.204838E-02
+ 8 3 1.887272E-01 9.569826E-02 1.806087E-02
+ 8 4 1.993214E-01 1.856208E-02 3.699820E-03
+ 8 5 2.053997E-01 3.191744E-02 6.555833E-03
+ 8 6 2.172890E-01 6.703710E-02 1.456643E-02
+ 8 7 2.210119E-01 4.646439E-03 1.026918E-03
+ 8 8 2.396427E-01 8.007350E-02 1.918903E-02
+ 8 9 2.378445E-01 5.718313E-03 1.360070E-03
+ 8 10 2.676449E-01 8.346095E-02 2.233790E-02
+ 8 11 2.757514E-01 5.108938E-02 1.408797E-02
+ 8 12 3.111273E-01 2.305949E-02 7.174435E-03
+ 8 13 3.219421E-01 1.755203E-01 5.650736E-02
+ 8 14 3.433808E-01 1.762433E-01 6.051855E-02
+ 8 15 3.686080E-01 7.742628E-02 2.853994E-02
+ 8 16 3.942917E-01 2.005812E-02 7.908752E-03
+ 8 17 4.104531E-01 3.791285E-03 1.556145E-03
+ 8 18 4.057558E-01 6.309853E-04 2.560259E-04
+ 8 19 3.945717E-01 9.593536E-05 3.785338E-05
+ 8 20 4.177179E-01 1.156265E-05 4.829927E-06
+ 8 21 4.862590E-01 9.580690E-07 4.658697E-07
+ 8 22 3.574818E-01 9.868394E-08 3.527771E-08
+ 8 23 2.202346E-01 2.098152E-08 4.620857E-09
+ 8 24 2.244593E+00 3.211264E-10 7.207981E-10
+ 8 25 2.679531E-01 4.900000E-11 1.312970E-11
+ 8 26 7.584647E-01 7.022440E-11 5.326273E-11
+ 8 27 7.514004E-01 1.831840E-11 1.376445E-11
+ 8 28 3.694666E+00 9.363600E-12 3.459537E-11
+ 8 29 5.602153E+00 9.734400E-12 5.453360E-11
+ 8 30 5.957451E-02 3.237610E-11 1.928790E-12
+ 8 31 2.299834E+00 7.952400E-12 1.828920E-11
+ 8 32 9.151593E+00 2.190400E-12 2.004565E-11
+ 8 33 3.226817E-02 1.274490E-11 4.112546E-13
+ 8 34 9.027295E-01 8.643600E-12 7.802833E-12
+ 8 35 7.088575E+00 1.345600E-12 9.538386E-12
+ 8 36 1.078655E+01 5.290000E-14 5.706083E-13
+ 8 37 8.414724E+00 4.489000E-13 3.777370E-12
+ 8 38 4.235397E+01 2.304000E-13 9.758355E-12
+ 8 39 1.407052E+02 4.000000E-14 5.628209E-12
+ 8 40 1.057783E+01 2.250000E-14 2.380011E-13
+ 8 41 1.841139E+01 1.024000E-13 1.885326E-12
+ 8 42 1.796067E+01 3.249000E-13 5.835423E-12
+ 8 43 1.151473E+01 5.184000E-13 5.969237E-12
+ 8 44 5.783601E+00 5.041000E-13 2.915513E-12
+ 8 45 1.376552E+00 3.136000E-13 4.316866E-13
+ 8 46 1.016397E+00 1.024000E-13 1.040790E-13
+ 9 0 1.562411E-01 4.935600E-04 7.711436E-05
+ 9 1 1.646413E-01 7.185688E-03 1.183061E-03
+ 9 2 1.734265E-01 3.817204E-02 6.620043E-03
+ 9 3 1.823873E-01 8.450596E-02 1.541281E-02
+ 9 4 1.918236E-01 5.737075E-02 1.100506E-02
+ 9 5 1.714758E-01 1.163022E-04 1.994302E-05
+ 9 6 2.087322E-01 6.359659E-02 1.327465E-02
+ 9 7 2.213338E-01 2.530135E-02 5.600043E-03
+ 9 8 2.285428E-01 3.513676E-02 8.030252E-03
+ 9 9 2.441988E-01 4.483727E-02 1.094921E-02
+ 9 10 2.497739E-01 3.738057E-02 9.336692E-03
+ 9 11 2.755239E-01 3.821997E-02 1.053051E-02
+ 9 12 2.831975E-01 9.015479E-02 2.553161E-02
+ 9 13 4.653147E-01 1.160989E-04 5.402253E-05
+ 9 14 3.263295E-01 1.209882E-01 3.948204E-02
+ 9 15 3.468258E-01 1.934158E-01 6.708159E-02
+ 9 16 3.707109E-01 1.136441E-01 4.212911E-02
+ 9 17 3.937665E-01 3.796556E-02 1.494957E-02
+ 9 18 4.076418E-01 9.137867E-03 3.724977E-03
+ 9 19 4.060797E-01 1.871104E-03 7.598174E-04
+ 9 20 4.015996E-01 3.349013E-04 1.344962E-04
+ 9 21 4.175171E-01 4.837356E-05 2.019679E-05
+ 9 22 4.426099E-01 5.536844E-06 2.450662E-06
+ 9 23 3.754756E-01 6.878878E-07 2.582850E-07
+ 9 24 3.270083E-01 1.023488E-07 3.346890E-08
+ 9 25 9.756018E-01 3.739322E-09 3.648090E-09
+ 9 26 8.554651E-01 9.006010E-11 7.704328E-11
+ 9 27 1.507747E-02 3.549456E-10 5.351681E-12
+ 9 28 2.144034E+01 2.433600E-12 5.217722E-11
+ 9 29 5.061770E-01 1.656490E-11 8.384771E-12
+ 9 30 3.986646E+04 1.600000E-15 6.378634E-11
+ 9 31 1.077752E+00 2.162250E-11 2.330369E-11
+ 9 32 2.203884E-01 1.713960E-11 3.777370E-12
+ 9 33 3.313386E+02 9.000000E-14 2.982047E-11
+ 9 34 1.543586E+00 9.241600E-12 1.426521E-11
+ 9 35 7.307437E-03 1.459240E-11 1.066330E-13
+ 9 36 1.582627E+00 6.150400E-12 9.733790E-12
+ 9 37 2.541413E+01 3.481000E-13 8.846657E-12
+ 9 38 1.069486E+00 4.900000E-13 5.240482E-13
+ 9 39 2.569174E+00 1.166400E-12 2.996684E-12
+ 9 40 1.164706E+01 7.396000E-13 8.614166E-12
+ 9 41 2.673715E+01 2.401000E-13 6.419591E-12
+ 9 42 1.669231E+01 6.760000E-14 1.128400E-12
+ 9 43 7.774190E+00 5.290000E-14 4.112546E-13
+ 9 44 3.315904E+01 1.089000E-13 3.611020E-12
+ 9 45 3.073361E+01 1.936000E-13 5.950028E-12
+ 9 46 2.118885E+01 2.500000E-13 5.297212E-12
+ 10 0 1.517061E-01 1.839089E-04 2.790009E-05
+ 10 1 1.594312E-01 3.082219E-03 4.914020E-04
+ 10 2 1.678211E-01 2.002504E-02 3.360625E-03
+ 10 3 1.765247E-01 6.027314E-02 1.063970E-02
+ 10 4 1.855207E-01 7.487999E-02 1.389179E-02
+ 10 5 1.960942E-01 1.604220E-02 3.145783E-03
+ 10 6 2.003536E-01 1.916746E-02 3.840270E-03
+ 10 7 2.121710E-01 6.320148E-02 1.340952E-02
+ 10 8 2.375878E-01 6.408968E-04 1.522693E-04
+ 10 9 2.327582E-01 6.205430E-02 1.444364E-02
+ 10 10 2.536370E-01 8.628502E-03 2.188507E-03
+ 10 11 2.560295E-01 6.850258E-02 1.753869E-02
+ 10 12 3.004454E-01 4.201010E-03 1.262174E-03
+ 10 13 2.903375E-01 1.018002E-01 2.955641E-02
+ 10 14 3.003614E-01 1.740901E-02 5.228995E-03
+ 10 15 3.303980E-01 5.465003E-02 1.805626E-02
+ 10 16 3.498683E-01 1.804393E-01 6.312998E-02
+ 10 17 3.725153E-01 1.507964E-01 5.617396E-02
+ 10 18 3.934165E-01 6.672111E-02 2.624919E-02
+ 10 19 4.058808E-01 2.067236E-02 8.390516E-03
+ 10 20 4.066730E-01 5.258498E-03 2.138489E-03
+ 10 21 4.055264E-01 1.134881E-03 4.602244E-04
+ 10 22 4.153608E-01 2.007747E-04 8.339395E-05
+ 10 23 4.247237E-01 2.978474E-05 1.265029E-05
+ 10 24 3.925375E-01 4.335890E-06 1.701999E-06
+ 10 25 3.796202E-01 6.128385E-07 2.326458E-07
+ 10 26 5.672296E-01 4.505855E-08 2.555854E-08
+ 10 27 3.636721E-01 4.156381E-09 1.511560E-09
+ 10 28 8.061162E-02 1.547636E-09 1.247574E-10
+ 10 29 8.219240E+01 1.322500E-12 1.086994E-10
+ 10 30 1.104012E-01 5.664400E-12 6.253566E-13
+ 10 31 4.737687E+00 8.584900E-12 4.067257E-11
+ 10 32 6.448622E+00 6.400900E-12 4.127698E-11
+ 10 33 3.032518E-02 1.823290E-11 5.529161E-13
+ 10 34 4.985478E+00 3.763600E-12 1.876334E-11
+ 10 35 9.111944E+00 2.924100E-12 2.664424E-11
+ 10 36 3.711844E-01 1.451610E-11 5.388149E-12
+ 10 37 1.182247E-01 1.274490E-11 1.506762E-12
+ 10 38 2.589838E+00 3.534400E-12 9.153523E-12
+ 10 39 3.864113E+03 1.600000E-15 6.182580E-12
+ 10 40 2.488148E-01 1.254400E-12 3.121133E-13
+ 10 41 9.144221E-01 2.073600E-12 1.896146E-12
+ 10 42 3.882488E+00 1.464100E-12 5.684350E-12
+ 10 43 8.324122E+00 6.084000E-13 5.064396E-12
+ 10 44 9.671931E+00 1.764000E-13 1.706129E-12
+ 10 45 1.267081E-01 4.410000E-14 5.587825E-15
+ 10 46 4.473356E+01 2.250000E-14 1.006505E-12
+ 11 0 1.481249E-01 7.188700E-05 1.064825E-05
+ 11 1 1.549492E-01 1.333617E-03 2.066429E-04
+ 11 2 1.627643E-01 1.009337E-02 1.642840E-03
+ 11 3 1.711407E-01 3.808160E-02 6.517311E-03
+ 11 4 1.798310E-01 6.921581E-02 1.244715E-02
+ 11 5 1.891651E-01 4.298048E-02 8.130408E-03
+ 11 6 1.162087E-01 1.619555E-05 1.882065E-06
+ 11 7 2.044891E-01 4.743491E-02 9.699921E-03
+ 11 8 2.162814E-01 3.299106E-02 7.135351E-03
+ 11 9 2.222713E-01 1.122571E-02 2.495153E-03
+ 11 10 2.371455E-01 5.723483E-02 1.357298E-02
+ 11 11 2.270362E-01 1.998783E-03 4.537960E-04
+ 11 12 2.626179E-01 6.948966E-02 1.824923E-02
+ 11 13 2.550815E-01 6.258213E-03 1.596354E-03
+ 11 14 2.983277E-01 7.319538E-02 2.183621E-02
+ 11 15 3.118765E-01 6.314419E-02 1.969319E-02
+ 11 16 3.314927E-01 6.597598E-03 2.187056E-03
+ 11 17 3.521000E-01 1.292293E-01 4.550163E-02
+ 11 18 3.740026E-01 1.725561E-01 6.453642E-02
+ 11 19 3.932831E-01 1.054835E-01 4.148488E-02
+ 11 20 4.048282E-01 4.292356E-02 1.737667E-02
+ 11 21 4.071504E-01 1.379050E-02 5.614806E-03
+ 11 22 4.075921E-01 3.667430E-03 1.494815E-03
+ 11 23 4.135526E-01 8.049448E-04 3.328870E-04
+ 11 24 4.171279E-01 1.507240E-04 6.287118E-05
+ 11 25 4.017984E-01 2.609350E-05 1.048433E-05
+ 11 26 3.990966E-01 4.092448E-06 1.633282E-06
+ 11 27 4.565748E-01 4.655196E-07 2.125446E-07
+ 11 28 3.679379E-01 5.714490E-08 2.102577E-08
+ 11 29 2.596640E-01 9.932116E-09 2.579013E-09
+ 11 30 2.193142E+00 2.102500E-10 4.611080E-10
+ 11 31 1.138824E-01 2.218410E-11 2.526378E-12
+ 11 32 3.356811E-01 3.636090E-11 1.220567E-11
+ 11 33 5.173436E+02 1.024000E-13 5.297599E-11
+ 11 34 9.958824E-01 9.922500E-12 9.881643E-12
+ 11 35 7.924052E-01 7.728400E-12 6.124024E-12
+ 11 36 6.259299E+02 4.840000E-14 3.029500E-11
+ 11 37 2.336404E+00 8.761600E-12 2.047063E-11
+ 11 38 1.017770E-01 1.489960E-11 1.516437E-12
+ 11 39 3.989559E-01 8.643600E-12 3.448416E-12
+ 11 40 7.272984E+00 1.368900E-12 9.955987E-12
+ 11 41 3.052706E+01 2.116000E-13 6.459526E-12
+ 11 42 3.597299E-01 2.044900E-12 7.356116E-13
+ 11 43 2.599264E-01 2.856100E-12 7.423758E-13
+ 11 44 1.740984E+00 2.160900E-12 3.762092E-12
+ 11 45 4.277945E+00 1.102500E-12 4.716434E-12
+ 11 46 7.550224E+00 3.969000E-13 2.996684E-12
+ 12 0 1.455490E-01 2.990362E-05 4.352442E-06
+ 12 1 1.512704E-01 5.935027E-04 8.977938E-05
+ 12 2 1.583343E-01 5.032088E-03 7.967521E-04
+ 12 3 1.662720E-01 2.249751E-02 3.740705E-03
+ 12 4 1.746674E-01 5.333566E-02 9.316002E-03
+ 12 5 1.835000E-01 5.649052E-02 1.036601E-02
+ 12 6 1.944995E-01 1.051586E-02 2.045330E-03
+ 12 7 1.967032E-01 1.487156E-02 2.925283E-03
+ 12 8 2.085561E-01 5.293538E-02 1.104000E-02
+ 12 9 2.234610E-01 4.068383E-03 9.091250E-04
+ 12 10 2.278854E-01 3.925491E-02 8.945622E-03
+ 12 11 2.432085E-01 2.548385E-02 6.197890E-03
+ 12 12 2.470908E-01 2.721617E-02 6.724866E-03
+ 12 13 2.717823E-01 3.713702E-02 1.009319E-02
+ 12 14 2.761480E-01 4.087275E-02 1.128693E-02
+ 12 15 3.096641E-01 2.354795E-02 7.291956E-03
+ 12 16 3.196382E-01 9.860720E-02 3.151863E-02
+ 12 17 3.470334E-01 8.130715E-03 2.821630E-03
+ 12 18 3.517595E-01 5.441995E-02 1.914274E-02
+ 12 19 3.749157E-01 1.559451E-01 5.846627E-02
+ 12 20 3.932687E-01 1.424038E-01 5.600298E-02
+ 12 21 4.042290E-01 7.886610E-02 3.187996E-02
+ 12 22 4.074827E-01 3.281311E-02 1.337077E-02
+ 12 23 4.086194E-01 1.100037E-02 4.494964E-03
+ 12 24 4.122368E-01 3.033827E-03 1.250655E-03
+ 12 25 4.136926E-01 7.136255E-04 2.952216E-04
+ 12 26 4.061793E-01 1.501113E-04 6.097208E-05
+ 12 27 4.046402E-01 2.799119E-05 1.132636E-05
+ 12 28 4.217517E-01 4.297827E-06 1.812616E-06
+ 12 29 3.869854E-01 6.359903E-07 2.461190E-07
+ 12 30 3.558316E-01 9.496259E-08 3.379069E-08
+ 12 31 6.255971E-01 6.855840E-09 4.288993E-09
+ 12 32 2.421419E-01 9.235521E-10 2.236307E-10
+ 12 33 4.336936E-02 1.907161E-10 8.271235E-12
+ 12 34 3.576208E+03 1.690000E-14 6.043792E-11
+ 12 35 1.906389E+01 8.464000E-13 1.613567E-11
+ 12 36 4.033752E-02 8.179600E-12 3.299448E-13
+ 12 37 2.267401E+01 9.409000E-13 2.133398E-11
+ 12 38 9.906393E+00 2.788900E-12 2.762794E-11
+ 12 39 8.427314E-01 1.128960E-11 9.514100E-12
+ 12 40 6.599823E-05 1.149210E-11 7.584582E-16
+ 12 41 1.131073E+00 4.796100E-12 5.424741E-12
+ 12 42 2.956933E+01 3.136000E-13 9.272941E-12
+ 12 43 8.823269E+00 6.400000E-13 5.646892E-12
+ 12 44 4.012558E-01 2.528100E-12 1.014415E-12
+ 12 45 4.306607E-02 3.312400E-12 1.426521E-13
+ 12 46 6.533819E-01 2.722500E-12 1.778832E-12
+ 13 0 1.439149E-01 1.333798E-05 1.919534E-06
+ 13 1 1.484001E-01 2.754202E-04 4.087239E-05
+ 13 2 1.545835E-01 2.533982E-03 3.917117E-04
+ 13 3 1.619649E-01 1.287316E-02 2.085001E-03
+ 13 4 1.700214E-01 3.707602E-02 6.303716E-03
+ 13 5 1.785038E-01 5.505006E-02 9.826645E-03
+ 13 6 1.879224E-01 2.812288E-02 5.284921E-03
+ 13 7 1.734442E-01 3.455457E-04 5.993290E-05
+ 13 8 2.017809E-01 3.858488E-02 7.785693E-03
+ 13 9 2.132548E-01 2.951076E-02 6.293313E-03
+ 13 10 2.176025E-01 4.516486E-03 9.827989E-04
+ 13 11 2.328893E-01 4.909210E-02 1.143302E-02
+ 13 12 2.703703E-01 9.759170E-04 2.638590E-04
+ 13 13 2.554041E-01 5.267826E-02 1.345424E-02
+ 13 14 2.994420E-01 3.715216E-03 1.112492E-03
+ 13 15 2.872575E-01 6.928545E-02 1.990277E-02
+ 13 16 2.097315E-01 1.531169E-04 3.211343E-05
+ 13 17 3.264144E-01 8.203608E-02 2.677776E-02
+ 13 18 3.483983E-01 5.722968E-02 1.993872E-02
+ 13 19 3.206261E-01 2.735478E-03 8.770658E-04
+ 13 20 3.741526E-01 9.135426E-02 3.418043E-02
+ 13 21 3.931335E-01 1.495461E-01 5.879159E-02
+ 13 22 4.038815E-01 1.206789E-01 4.873995E-02
+ 13 23 4.076629E-01 6.766405E-02 2.758412E-02
+ 13 24 4.090714E-01 2.943561E-02 1.204127E-02
+ 13 25 4.113211E-01 1.038552E-02 4.271785E-03
+ 13 26 4.118640E-01 3.094915E-03 1.274684E-03
+ 13 27 4.077609E-01 8.074975E-04 3.292659E-04
+ 13 28 4.059568E-01 1.850373E-04 7.511713E-05
+ 13 29 4.099485E-01 3.647556E-05 1.495310E-05
+ 13 30 3.956527E-01 6.571635E-06 2.600085E-06
+ 13 31 3.863963E-01 1.086202E-06 4.197043E-07
+ 13 32 4.419336E-01 1.333710E-07 5.894114E-08
+ 13 33 3.341727E-01 1.834670E-08 6.130968E-09
+ 13 34 2.936663E-01 2.351280E-09 6.904917E-10
+ 13 35 2.236467E+00 7.744000E-11 1.731920E-10
+ 13 36 4.822804E-01 1.568160E-11 7.562928E-12
+ 13 37 3.063287E-01 8.702500E-12 2.665826E-12
+ 13 38 5.164445E+00 2.044900E-12 1.056077E-11
+ 13 39 1.619885E+02 1.600000E-13 2.591816E-11
+ 13 40 3.308753E+00 5.712100E-12 1.889993E-11
+ 13 41 3.534175E-01 1.004890E-11 3.551458E-12
+ 13 42 7.528711E-02 7.344100E-12 5.529161E-13
+ 13 43 2.713141E+00 2.250000E-12 6.104567E-12
+ 13 44 3.900704E+02 2.250000E-14 8.776585E-12
+ 13 45 6.990846E+00 8.649000E-13 6.046383E-12
+ 13 46 8.427314E-01 2.433600E-12 2.050871E-12
+ 14 0 1.430459E-01 6.382596E-06 9.130039E-07
+ 14 1 1.462698E-01 1.343543E-04 1.965197E-05
+ 14 2 1.515204E-01 1.307701E-03 1.981434E-04
+ 14 3 1.582550E-01 7.307735E-03 1.156485E-03
+ 14 4 1.659055E-01 2.434492E-02 4.038957E-03
+ 14 5 1.740776E-01 4.572119E-02 7.959033E-03
+ 14 6 1.829009E-01 3.864104E-02 7.067479E-03
+ 14 7 1.958640E-01 4.056592E-03 7.945404E-04
+ 14 8 1.950984E-01 1.566213E-02 3.055658E-03
+ 14 9 2.066843E-01 4.168595E-02 8.615832E-03
+ 14 10 2.210270E-01 3.528510E-03 7.798960E-04
+ 14 11 2.251573E-01 2.802148E-02 6.309242E-03
+ 14 12 2.392477E-01 2.680528E-02 6.413102E-03
+ 14 13 2.407543E-01 1.097276E-02 2.641739E-03
+ 14 14 2.648965E-01 4.328382E-02 1.146573E-02
+ 14 15 2.607761E-01 8.828153E-03 2.302171E-03
+ 14 16 2.985189E-01 5.111412E-02 1.525853E-02
+ 14 17 3.096522E-01 3.105487E-02 9.616207E-03
+ 14 18 3.314445E-01 2.357750E-02 7.814631E-03
+ 14 19 3.518074E-01 9.320053E-02 3.278864E-02
+ 14 20 3.845135E-01 2.077106E-02 7.986755E-03
+ 14 21 3.631030E-01 1.652657E-02 6.000846E-03
+ 14 22 3.920881E-01 9.974698E-02 3.910960E-02
+ 14 23 4.035560E-01 1.376856E-01 5.556383E-02
+ 14 24 4.076980E-01 1.119811E-01 4.565445E-02
+ 14 25 4.091636E-01 6.611068E-02 2.705008E-02
+ 14 26 4.105890E-01 3.070478E-02 1.260704E-02
+ 14 27 4.106648E-01 1.181973E-02 4.853948E-03
+ 14 28 4.079840E-01 3.910868E-03 1.595571E-03
+ 14 29 4.058413E-01 1.126646E-03 4.572396E-04
+ 14 30 4.055137E-01 2.825206E-04 1.145660E-04
+ 14 31 3.985080E-01 6.330462E-05 2.522740E-05
+ 14 32 3.934525E-01 1.268442E-05 4.990719E-06
+ 14 33 4.042455E-01 2.139082E-06 8.647141E-07
+ 14 34 3.725298E-01 3.401572E-07 1.267187E-07
+ 14 35 3.692478E-01 4.704995E-08 1.737309E-08
+ 14 36 5.272753E-01 4.427572E-09 2.334549E-09
+ 14 37 1.293863E-01 5.943844E-10 7.690520E-11
+ 14 38 6.367489E-01 5.535360E-11 3.524634E-11
+ 14 39 4.827498E+02 1.690000E-14 8.158472E-12
+ 14 40 2.592007E+01 7.056000E-13 1.828920E-11
+ 14 41 1.213434E+01 1.876900E-12 2.277494E-11
+ 14 42 1.530595E+00 6.200100E-12 9.489845E-12
+ 14 43 6.853890E-02 7.236100E-12 4.959543E-13
+ 14 44 4.486201E-01 4.202500E-12 1.885326E-12
+ 14 45 6.549733E+00 1.020100E-12 6.681383E-12
+ 14 46 5.127178E+03 1.600000E-15 8.203484E-12
+ 15 0 1.426914E-01 3.259722E-06 4.651342E-07
+ 15 1 1.447555E-01 6.907172E-05 9.998513E-06
+ 15 2 1.491067E-01 6.976777E-04 1.040284E-04
+ 15 3 1.551512E-01 4.181271E-03 6.487293E-04
+ 15 4 1.623350E-01 1.554085E-02 2.522823E-03
+ 15 5 1.701998E-01 3.462565E-02 5.893280E-03
+ 15 6 1.786346E-01 4.006025E-02 7.156148E-03
+ 15 7 1.886035E-01 1.368801E-02 2.581607E-03
+ 15 8 1.855567E-01 2.510123E-03 4.657702E-04
+ 15 9 2.009846E-01 3.368347E-02 6.769860E-03
+ 15 10 2.123664E-01 1.930804E-02 4.100378E-03
+ 15 11 2.168294E-01 4.725414E-03 1.024609E-03
+ 15 12 2.311112E-01 3.818252E-02 8.824408E-03
+ 15 13 2.591846E-01 1.636337E-03 4.241133E-04
+ 15 14 2.522135E-01 3.710570E-02 9.358558E-03
+ 15 15 2.832954E-01 9.179148E-03 2.600410E-03
+ 15 16 2.813528E-01 4.304754E-02 1.211155E-02
+ 15 17 3.178146E-01 7.153328E-03 2.273432E-03
+ 15 18 3.211222E-01 6.726872E-02 2.160148E-02
+ 15 19 3.544790E-01 2.549400E-03 9.037088E-04
+ 15 20 3.530719E-01 5.404523E-02 1.908185E-02
+ 15 21 3.778411E-01 7.541412E-02 2.849455E-02
+ 15 22 4.180974E-01 8.147212E-03 3.406328E-03
+ 15 23 3.846774E-01 2.046768E-02 7.873453E-03
+ 15 24 4.027031E-01 9.124962E-02 3.674650E-02
+ 15 25 4.075061E-01 1.287265E-01 5.245682E-02
+ 15 26 4.089701E-01 1.124403E-01 4.598471E-02
+ 15 27 4.098765E-01 7.234278E-02 2.965161E-02
+ 15 28 4.096435E-01 3.723871E-02 1.525460E-02
+ 15 29 4.075300E-01 1.608880E-02 6.556667E-03
+ 15 30 4.051942E-01 5.972767E-03 2.420131E-03
+ 15 31 4.033164E-01 1.926025E-03 7.767974E-04
+ 15 32 3.987965E-01 5.484435E-04 2.187174E-04
+ 15 33 3.946028E-01 1.384355E-04 5.462701E-05
+ 15 34 3.944635E-01 3.044700E-05 1.201023E-05
+ 15 35 3.833854E-01 6.009558E-06 2.303977E-06
+ 15 36 3.803739E-01 1.034513E-06 3.935016E-07
+ 15 37 3.995501E-01 1.471413E-07 5.879032E-08
+ 15 38 3.203335E-01 2.001659E-08 6.411984E-09
+ 15 39 4.346289E-01 2.034912E-09 8.844317E-10
+ 15 40 5.665915E-01 1.354896E-10 7.676726E-11
+ 15 41 1.118339E-01 1.936000E-11 2.165104E-12
+ 15 42 1.707920E+01 1.368900E-12 2.337972E-11
+ 15 43 5.080403E+00 2.402500E-12 1.220567E-11
+ 15 44 6.218445E-01 5.290000E-12 3.289557E-12
+ 15 45 2.092853E-03 4.622500E-12 9.674212E-15
+ 15 46 1.013180E+00 2.371600E-12 2.402858E-12
+ 16 0 1.426023E-01 1.760796E-06 2.510937E-07
+ 16 1 1.437109E-01 3.733467E-05 5.365397E-06
+ 16 2 1.472662E-01 3.860820E-04 5.685684E-05
+ 16 3 1.526312E-01 2.433412E-03 3.714148E-04
+ 16 4 1.593168E-01 9.817051E-03 1.564021E-03
+ 16 5 1.668647E-01 2.482673E-02 4.142706E-03
+ 16 6 1.749833E-01 3.560091E-02 6.229566E-03
+ 16 7 1.840978E-01 2.080362E-02 3.829899E-03
+ 16 8 2.279905E-01 1.222800E-04 2.787869E-05
+ 16 9 1.957554E-01 1.910428E-02 3.739766E-03
+ 16 10 2.068979E-01 2.853143E-02 5.903093E-03
+ 16 11 2.282926E-01 4.640694E-04 1.059436E-04
+ 16 12 2.249010E-01 2.513416E-02 5.652699E-03
+ 16 13 2.389770E-01 1.731042E-02 4.136793E-03
+ 16 14 2.403333E-01 9.444621E-03 2.269857E-03
+ 16 15 2.637790E-01 3.287265E-02 8.671116E-03
+ 16 16 2.540028E-01 4.316536E-03 1.096412E-03
+ 16 17 2.957287E-01 4.301450E-02 1.272062E-02
+ 16 18 3.035948E-01 1.104945E-02 3.354554E-03
+ 16 19 3.295961E-01 3.632244E-02 1.197173E-02
+ 16 20 3.508345E-01 4.862440E-02 1.705912E-02
+ 16 21 2.861122E-01 6.750654E-04 1.931445E-04
+ 16 22 3.753866E-01 5.907996E-02 2.217782E-02
+ 16 23 3.970937E-01 6.248894E-02 2.481396E-02
+ 16 24 4.215742E-01 8.284103E-03 3.492365E-03
+ 16 25 3.967394E-01 1.240158E-02 4.920195E-03
+ 16 26 4.066679E-01 7.184202E-02 2.921584E-02
+ 16 27 4.083914E-01 1.178342E-01 4.812247E-02
+ 16 28 4.090256E-01 1.175102E-01 4.806467E-02
+ 16 29 4.085843E-01 8.649395E-02 3.534007E-02
+ 16 30 4.066601E-01 5.116883E-02 2.080832E-02
+ 16 31 4.042144E-01 2.538159E-02 1.025960E-02
+ 16 32 4.017318E-01 1.079920E-02 4.338382E-03
+ 16 33 3.980023E-01 4.011487E-03 1.596581E-03
+ 16 34 3.940667E-01 1.311828E-03 5.169478E-04
+ 16 35 3.911571E-01 3.767827E-04 1.473812E-04
+ 16 36 3.852167E-01 9.585252E-05 3.692399E-05
+ 16 37 3.811461E-01 2.138341E-05 8.150203E-06
+ 16 38 3.805931E-01 4.112743E-06 1.565282E-06
+ 16 39 3.630682E-01 6.959063E-07 2.526615E-07
+ 16 40 3.785042E-01 9.690146E-08 3.667761E-08
+ 16 41 3.711811E-01 1.105652E-08 4.103973E-09
+ 16 42 2.486750E-01 1.126945E-09 2.802430E-10
+ 16 43 1.122663E+00 7.123360E-11 7.997136E-11
+ 16 44 6.539768E+00 9.604000E-13 6.280793E-12
+ 16 45 1.696563E+00 4.243600E-12 7.199533E-12
+ 16 46 2.470845E-01 3.459600E-12 8.548134E-13
+ 17 0 1.425850E-01 9.942483E-07 1.417648E-07
+ 17 1 1.430000E-01 2.106590E-05 3.012424E-06
+ 17 2 1.459034E-01 2.210711E-04 3.225503E-05
+ 17 3 1.506468E-01 1.443916E-03 2.175212E-04
+ 17 4 1.568433E-01 6.189534E-03 9.707866E-04
+ 17 5 1.640676E-01 1.719845E-02 2.821708E-03
+ 17 6 1.719121E-01 2.873031E-02 4.939088E-03
+ 17 7 1.805828E-01 2.305308E-02 4.162990E-03
+ 17 8 1.937387E-01 2.775819E-03 5.377836E-04
+ 17 9 1.905596E-01 7.936868E-03 1.512446E-03
+ 17 10 2.024229E-01 2.690467E-02 5.446120E-03
+ 17 11 2.144565E-01 6.630307E-03 1.421913E-03
+ 17 12 2.193023E-01 9.337471E-03 2.047729E-03
+ 17 13 2.321917E-01 2.572875E-02 5.974003E-03
+ 17 14 7.234092E+00 8.775814E-08 6.348505E-07
+ 17 15 2.536789E-01 2.972037E-02 7.539431E-03
+ 17 16 2.911493E-01 3.658338E-03 1.065123E-03
+ 17 17 2.823673E-01 3.315314E-02 9.361365E-03
+ 17 18 3.194096E-01 4.510913E-03 1.440829E-03
+ 17 19 3.207245E-01 4.682220E-02 1.501703E-02
+ 17 20 3.814734E-01 2.378662E-04 9.073961E-05
+ 17 21 3.535175E-01 4.691480E-02 1.658520E-02
+ 17 22 3.806309E-01 3.479954E-02 1.324578E-02
+ 17 23 3.123178E-01 1.013023E-03 3.163850E-04
+ 17 24 3.922200E-01 4.635524E-02 1.818145E-02
+ 17 25 4.060300E-01 5.991682E-02 2.432803E-02
+ 17 26 4.132443E-01 1.827762E-02 7.553121E-03
+ 17 27 3.938417E-01 1.523502E-03 6.000188E-04
+ 17 28 4.066195E-01 4.088935E-02 1.662640E-02
+ 17 29 4.077320E-01 9.456024E-02 3.855524E-02
+ 17 30 4.073023E-01 1.184284E-01 4.823617E-02
+ 17 31 4.054396E-01 1.060238E-01 4.298627E-02
+ 17 32 4.029121E-01 7.513243E-02 3.027177E-02
+ 17 33 4.001608E-01 4.425676E-02 1.770982E-02
+ 17 34 3.966685E-01 2.231221E-02 8.850551E-03
+ 17 35 3.928310E-01 9.786397E-03 3.844400E-03
+ 17 36 3.891909E-01 3.758943E-03 1.462946E-03
+ 17 37 3.845495E-01 1.271939E-03 4.891237E-04
+ 17 38 3.801831E-01 3.782811E-04 1.438161E-04
+ 17 39 3.764573E-01 9.817441E-05 3.695847E-05
+ 17 40 3.695324E-01 2.218043E-05 8.196387E-06
+ 17 41 3.679262E-01 4.261913E-06 1.568069E-06
+ 17 42 3.618174E-01 6.871415E-07 2.486197E-07
+ 17 43 3.456193E-01 9.138529E-08 3.158452E-08
+ 17 44 3.967801E-01 9.289104E-09 3.685732E-09
+ 17 45 2.197019E-01 6.990736E-10 1.535878E-10
+ 17 46 7.338266E-01 5.372890E-11 3.942769E-11
+ 18 0 1.425326E-01 5.777672E-07 8.235067E-08
+ 18 1 1.425142E-01 1.224419E-05 1.744971E-06
+ 18 2 1.449217E-01 1.296991E-04 1.879622E-05
+ 18 3 1.491365E-01 8.683300E-04 1.294997E-04
+ 18 4 1.548910E-01 3.889821E-03 6.024981E-04
+ 18 5 1.618021E-01 1.158243E-02 1.874061E-03
+ 18 6 1.694102E-01 2.158996E-02 3.657559E-03
+ 18 7 1.777798E-01 2.128237E-02 3.783577E-03
+ 18 8 1.883449E-01 5.697265E-03 1.073051E-03
+ 18 9 1.842796E-01 2.263269E-03 4.170743E-04
+ 18 10 1.987007E-01 1.985734E-02 3.945669E-03
+ 18 11 2.098195E-01 1.200805E-02 2.519522E-03
+ 18 12 2.123759E-01 1.532483E-03 3.254624E-04
+ 18 13 2.274671E-01 2.188956E-02 4.979155E-03
+ 18 14 2.449686E-01 4.166295E-03 1.020611E-03
+ 18 15 2.457885E-01 1.452574E-02 3.570260E-03
+ 18 16 2.696197E-01 1.522346E-02 4.104544E-03
+ 18 17 2.679201E-01 9.807521E-03 2.627632E-03
+ 18 18 3.005371E-01 2.240922E-02 6.734801E-03
+ 18 19 3.095522E-01 1.507750E-02 4.667272E-03
+ 18 20 3.306643E-01 1.691027E-02 5.591621E-03
+ 18 21 3.517878E-01 3.651450E-02 1.284535E-02
+ 18 22 1.647977E-01 6.221108E-05 1.025225E-05
+ 18 23 3.756858E-01 3.815481E-02 1.433422E-02
+ 18 24 3.990627E-01 3.431075E-02 1.369214E-02
+ 18 25 4.793508E-01 5.227511E-04 2.505811E-04
+ 18 26 4.010793E-01 2.287667E-02 9.175357E-03
+ 18 27 4.081861E-01 5.483308E-02 2.238210E-02
+ 18 28 4.102337E-01 3.877108E-02 1.590520E-02
+ 18 29 4.153239E-01 4.978342E-03 2.067625E-03
+ 18 30 4.027761E-01 7.525509E-03 3.031095E-03
+ 18 31 4.053014E-01 4.985837E-02 2.020767E-02
+ 18 32 4.037494E-01 9.615107E-02 3.882093E-02
+ 18 33 4.012060E-01 1.161910E-01 4.661651E-02
+ 18 34 3.983364E-01 1.056435E-01 4.208166E-02
+ 18 35 3.949083E-01 7.803729E-02 3.081757E-02
+ 18 36 3.911120E-01 4.869502E-02 1.904521E-02
+ 18 37 3.872675E-01 2.619472E-02 1.014436E-02
+ 18 38 3.829835E-01 1.229717E-02 4.709612E-03
+ 18 39 3.786231E-01 5.060824E-03 1.916145E-03
+ 18 40 3.743603E-01 1.824072E-03 6.828604E-04
+ 18 41 3.693729E-01 5.738717E-04 2.119727E-04
+ 18 42 3.652100E-01 1.558233E-04 5.690823E-05
+ 18 43 3.603491E-01 3.602460E-05 1.298143E-05
+ 18 44 3.544620E-01 6.948232E-06 2.462885E-06
+ 18 45 3.543714E-01 1.080498E-06 3.828976E-07
+ 18 46 3.366336E-01 1.304799E-07 4.392391E-08
+ 19 0 1.424131E-01 3.367829E-07 4.796230E-08
+ 19 1 1.421830E-01 7.148458E-06 1.016389E-06
+ 19 2 1.442392E-01 7.618863E-05 1.098938E-05
+ 19 3 1.480381E-01 5.186769E-04 7.678394E-05
+ 19 4 1.534272E-01 2.396443E-03 3.676796E-04
+ 19 5 1.600603E-01 7.495975E-03 1.199808E-03
+ 19 6 1.674728E-01 1.509431E-02 2.527886E-03
+ 19 7 1.756194E-01 1.705993E-02 2.996054E-03
+ 19 8 1.852869E-01 6.775613E-03 1.255432E-03
+ 19 9 1.718985E-01 3.284971E-04 5.646817E-05
+ 19 10 1.956889E-01 1.246284E-02 2.438839E-03
+ 19 11 2.066090E-01 1.278386E-02 2.641261E-03
+ 19 12 5.113919E-01 7.063562E-07 3.612249E-07
+ 19 13 2.239156E-01 1.382134E-02 3.094814E-03
+ 19 14 2.377134E-01 8.424347E-03 2.002580E-03
+ 19 15 2.382288E-01 4.346381E-03 1.035433E-03
+ 19 16 2.612662E-01 1.766230E-02 4.614561E-03
+ 19 17 2.302009E-01 6.200135E-04 1.427277E-04
+ 19 18 2.913550E-01 2.373201E-02 6.914442E-03
+ 19 19 2.789010E-01 6.533330E-04 1.822152E-04
+ 19 20 3.260564E-01 2.739765E-02 8.933180E-03
+ 19 21 3.508425E-01 7.699652E-03 2.701365E-03
+ 19 22 3.515345E-01 1.511116E-02 5.312095E-03
+ 19 23 3.791102E-01 3.096526E-02 1.173925E-02
+ 19 24 4.467444E-01 1.228354E-03 5.487602E-04
+ 19 25 3.898293E-01 1.777870E-02 6.930657E-03
+ 19 26 4.058866E-01 3.586814E-02 1.455840E-02
+ 19 27 4.134313E-01 1.263111E-02 5.222094E-03
+ 19 28 3.949351E-01 1.205677E-03 4.761642E-04
+ 19 29 4.069929E-01 2.758840E-02 1.122828E-02
+ 19 30 4.081879E-01 4.867106E-02 1.986694E-02
+ 19 31 4.083127E-01 3.347124E-02 1.366673E-02
+ 19 32 4.085202E-01 5.702724E-03 2.329678E-03
+ 19 33 3.990301E-01 3.865654E-03 1.542512E-03
+ 19 34 3.986116E-01 3.670489E-02 1.463099E-02
+ 19 35 3.959947E-01 8.179681E-02 3.239111E-02
+ 19 36 3.926544E-01 1.117817E-01 4.389157E-02
+ 19 37 3.888897E-01 1.147216E-01 4.461404E-02
+ 19 38 3.849979E-01 9.566354E-02 3.683027E-02
+ 19 39 3.808348E-01 6.739575E-02 2.566665E-02
+ 19 40 3.765384E-01 4.093300E-02 1.541284E-02
+ 19 41 3.722229E-01 2.163767E-02 8.054036E-03
+ 19 42 3.676842E-01 9.986247E-03 3.671785E-03
+ 19 43 3.632647E-01 4.010355E-03 1.456820E-03
+ 19 44 3.587442E-01 1.389860E-03 4.986040E-04
+ 19 45 3.540903E-01 4.097932E-04 1.451038E-04
+ 19 46 3.500525E-01 1.005349E-04 3.519250E-05
+ 20 0 1.422701E-01 1.860887E-07 2.647486E-08
+ 20 1 1.419656E-01 3.958946E-06 5.620340E-07
+ 20 2 1.437929E-01 4.236578E-05 6.091898E-06
+ 20 3 1.472986E-01 2.915170E-04 4.294004E-05
+ 20 4 1.524180E-01 1.374513E-03 2.095006E-04
+ 20 5 1.588337E-01 4.442676E-03 7.056467E-04
+ 20 6 1.660985E-01 9.415681E-03 1.563931E-03
+ 20 7 1.740860E-01 1.161615E-02 2.022208E-03
+ 20 8 1.833369E-01 5.738044E-03 1.051995E-03
+ 20 9 2.716008E-02 1.375507E-06 3.735887E-08
+ 20 10 1.934263E-01 6.785056E-03 1.312408E-03
+ 20 11 2.043840E-01 9.855271E-03 2.014260E-03
+ 20 12 2.207888E-01 4.324882E-04 9.548856E-05
+ 20 13 2.213373E-01 7.100963E-03 1.571708E-03
+ 20 14 2.341332E-01 8.180197E-03 1.915256E-03
+ 20 15 2.278099E-01 7.390400E-04 1.683606E-04
+ 20 16 2.562530E-01 1.267770E-02 3.248697E-03
+ 20 17 3.275934E-01 2.810169E-04 9.205930E-05
+ 20 18 2.848717E-01 1.481840E-02 4.221344E-03
+ 20 19 3.289824E-01 8.314001E-04 2.735160E-04
+ 20 20 3.214464E-01 1.902518E-02 6.115575E-03
+ 20 21 3.898334E-01 8.051652E-05 3.138803E-05
+ 20 22 3.536551E-01 1.943922E-02 6.874779E-03
+ 20 23 3.835952E-01 9.724252E-03 3.730176E-03
+ 20 24 3.592285E-01 3.290589E-03 1.182073E-03
+ 20 25 3.948489E-01 2.237226E-02 8.833665E-03
+ 20 26 4.112430E-01 1.149175E-02 4.725900E-03
+ 20 27 3.669680E-01 2.889568E-04 1.060379E-04
+ 20 28 4.067552E-01 1.683010E-02 6.845731E-03
+ 20 29 4.091340E-01 2.685358E-02 1.098671E-02
+ 20 30 4.110580E-01 1.141134E-02 4.690724E-03
+ 20 31 3.545936E-01 3.849073E-05 1.364857E-05
+ 20 32 4.041619E-01 1.465563E-02 5.923249E-03
+ 20 33 4.031201E-01 3.693653E-02 1.488986E-02
+ 20 34 4.007762E-01 3.873760E-02 1.552511E-02
+ 20 35 3.984087E-01 1.868063E-02 7.442523E-03
+ 20 36 3.986963E-01 9.988419E-04 3.982346E-04
+ 20 37 3.889535E-01 8.237134E-03 3.203862E-03
+ 20 38 3.858658E-01 4.168679E-02 1.608551E-02
+ 20 39 3.821283E-01 8.380512E-02 3.202431E-02
+ 20 40 3.780692E-01 1.137386E-01 4.300106E-02
+ 20 41 3.738489E-01 1.204154E-01 4.501716E-02
+ 20 42 3.695874E-01 1.055989E-01 3.902802E-02
+ 20 43 3.652252E-01 7.897596E-02 2.884401E-02
+ 20 44 3.608845E-01 5.105226E-02 1.842397E-02
+ 20 45 3.565503E-01 2.863606E-02 1.021020E-02
+ 20 46 3.522296E-01 1.388760E-02 4.891626E-03
+ 21 0 1.421585E-01 8.117371E-08 1.153953E-08
+ 21 1 1.418414E-01 1.730330E-06 2.454324E-07
+ 21 2 1.435445E-01 1.856024E-05 2.664220E-06
+ 21 3 1.468780E-01 1.284670E-04 1.886898E-05
+ 21 4 1.518350E-01 6.126432E-04 9.302069E-05
+ 21 5 1.581146E-01 2.017185E-03 3.189464E-04
+ 21 6 1.652880E-01 4.400430E-03 7.273383E-04
+ 21 7 1.731802E-01 5.698776E-03 9.869153E-04
+ 21 8 1.822340E-01 3.148568E-03 5.737762E-04
+ 21 9 2.296359E-01 2.269322E-05 5.211179E-06
+ 21 10 1.920144E-01 2.844474E-03 5.461799E-04
+ 21 11 2.030745E-01 5.077725E-03 1.031157E-03
+ 21 12 2.167509E-01 5.085697E-04 1.102329E-04
+ 21 13 2.197467E-01 2.785566E-03 6.121189E-04
+ 21 14 2.322543E-01 4.611515E-03 1.071044E-03
+ 21 15 2.042757E-01 5.579702E-05 1.139797E-05
+ 21 16 2.534487E-01 5.984257E-03 1.516702E-03
+ 21 17 2.916833E-01 6.905144E-04 2.014115E-04
+ 21 18 2.807935E-01 6.203231E-03 1.741827E-03
+ 21 19 3.141591E-01 1.525930E-03 4.793847E-04
+ 21 20 3.182580E-01 8.086203E-03 2.573499E-03
+ 21 21 3.251923E-01 4.049895E-04 1.316995E-04
+ 21 22 3.533941E-01 1.054948E-02 3.728125E-03
+ 21 23 3.930625E-01 1.681221E-03 6.608251E-04
+ 21 24 3.712191E-01 4.881234E-03 1.812008E-03
+ 21 25 3.970684E-01 1.055485E-02 4.190998E-03
+ 21 26 4.227498E-01 1.559932E-03 6.594611E-04
+ 21 27 3.985541E-01 2.966727E-03 1.182401E-03
+ 21 28 4.082144E-01 1.176286E-02 4.801770E-03
+ 21 29 4.106013E-01 8.327203E-03 3.419160E-03
+ 21 30 4.226701E-01 3.335905E-04 1.409987E-04
+ 21 31 4.045815E-01 4.511668E-03 1.825337E-03
+ 21 32 4.057372E-01 1.492348E-02 6.055010E-03
+ 21 33 4.043641E-01 1.529271E-02 6.183825E-03
+ 21 34 4.025955E-01 5.351281E-03 2.154402E-03
+ 21 35 3.835409E-01 8.127563E-05 3.117253E-05
+ 21 36 3.937342E-01 8.834797E-03 3.478562E-03
+ 21 37 3.908644E-01 2.406821E-02 9.407407E-03
+ 21 38 3.872742E-01 3.066921E-02 1.187739E-02
+ 21 39 3.836089E-01 2.206734E-02 8.465228E-03
+ 21 40 3.800111E-01 6.590418E-03 2.504432E-03
+ 21 41 3.696429E-01 1.806726E-04 6.678434E-05
+ 21 42 3.700873E-01 1.397202E-02 5.170868E-03
+ 21 43 3.661616E-01 4.678574E-02 1.713114E-02
+ 21 44 3.619776E-01 8.659863E-02 3.134677E-02
+ 21 45 3.577797E-01 1.181042E-01 4.225527E-02
+ 21 46 3.536152E-01 1.306567E-01 4.620219E-02
+
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/Ni_NIST.dat b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/Ni_NIST.dat
new file mode 100644
index 000000000..1551da276
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/Ni_NIST.dat
@@ -0,0 +1,1466 @@
+366
+4 0 1 2 0.0
+6 19224 2 2 0.0
+4 19233 3 2 0.0
+2 28839 4 2 0.0
+4 28839 5 2 0.0
+2 83284 6 3 0.0
+4 83318 7 3 0.0
+6 83365 8 3 0.0
+2 86137 9 3 0.0
+4 86221 10 3 0.0
+6 88107 11 2 0.0
+4 88151 12 2 0.0
+2 88171 13 2 0.0
+2 93582 14 3 0.0
+2 94771 15 3 0.0
+4 94793 16 3 0.0
+6 94831 17 3 0.0
+8 94882 18 3 0.0
+2 95475 19 3 0.0
+4 95494 20 3 0.0
+6 95532 21 3 0.0
+4 96751 22 3 0.0
+4 96788 23 3 0.0
+6 96864 24 3 0.0
+2 97770 25 3 0.0
+4 97806 26 3 0.0
+6 99663 27 3 0.0
+4 99664 28 3 0.0
+2 103620 29 4 0.0
+4 103670 30 4 0.0
+6 103740 31 4 0.0
+2 104140 32 4 0.0
+4 104220 33 4 0.0
+4 104620 34 3 0.0
+2 104650 35 3 0.0
+4 104660 36 3 0.0
+6 104680 37 3 0.0
+8 104720 38 3 0.0
+10 104770 39 3 0.0
+6 104810 40 3 0.0
+6 104830 41 3 0.0
+4 104860 42 3 0.0
+8 104880 43 3 0.0
+2 104890 44 3 0.0
+2 104980 45 3 0.0
+4 105000 46 3 0.0
+6 105010 47 3 0.0
+8 105020 48 3 0.0
+4 105120 49 3 0.0
+6 105140 50 3 0.0
+2 106480 51 4 0.0
+2 106760 52 4 0.0
+4 106780 53 4 0.0
+6 106810 54 4 0.0
+8 106870 55 4 0.0
+2 106980 56 4 0.0
+4 107000 57 4 0.0
+6 107040 58 4 0.0
+4 107180 59 4 0.0
+6 107250 60 4 0.0
+4 107450 61 4 0.0
+2 107590 62 4 0.0
+4 107630 63 4 0.0
+2 109810 64 5 0.0
+4 109860 65 5 0.0
+6 109930 66 5 0.0
+2 110040 67 5 0.0
+4 110100 68 5 0.0
+4 110190 69 4 0.0
+6 110210 70 4 0.0
+4 110220 71 4 0.0
+2 110250 72 4 0.0
+8 110250 73 4 0.0
+6 110290 74 4 0.0
+6 110300 75 4 0.0
+10 110300 76 4 0.0
+4 110320 77 4 0.0
+6 110350 78 4 0.0
+8 110350 79 4 0.0
+2 110350 80 4 0.0
+8 110360 81 4 0.0
+6 110390 82 4 0.0
+8 110390 83 4 0.0
+2 110390 84 4 0.0
+4 110400 85 4 0.0
+6 110400 86 4 0.0
+10 110400 87 4 0.0
+8 110400 88 4 0.0
+8 110400 89 4 0.0
+4 110400 90 4 0.0
+6 110400 91 4 0.0
+4 110450 92 4 0.0
+2 110460 93 4 0.0
+4 110460 94 4 0.0
+6 110470 95 4 0.0
+12 110470 96 4 0.0
+10 110470 97 4 0.0
+4 110490 98 4 0.0
+6 110490 99 4 0.0
+8 110500 100 4 0.0
+6 110500 101 4 0.0
+10 110500 102 4 0.0
+8 110500 103 4 0.0
+4 110520 104 3 0.0
+6 110540 105 3 0.0
+6 110710 106 3 0.0
+8 110720 107 3 0.0
+2 111060 108 5 0.0
+2 111140 109 5 0.0
+4 111170 110 5 0.0
+2 111200 111 5 0.0
+6 111200 112 5 0.0
+4 111210 113 5 0.0
+8 111260 114 5 0.0
+2 111270 115 5 0.0
+4 111290 116 5 0.0
+6 111330 117 5 0.0
+4 111500 118 5 0.0
+4 111850 119 5 0.0
+6 111910 120 5 0.0
+2 112290 121 3 0.0
+4 112320 122 3 0.0
+2 112570 123 6 0.0
+4 112610 124 6 0.0
+6 112680 125 6 0.0
+2 112690 126 6 0.0
+4 112740 127 6 0.0
+4 112760 128 5 0.0
+6 112760 129 5 0.0
+8 112800 130 5 0.0
+4 112800 131 5 0.0
+2 112810 132 5 0.0
+6 112810 133 5 0.0
+6 112820 134 5 0.0
+8 112830 135 5 0.0
+6 112830 136 5 0.0
+4 112840 137 5 0.0
+10 112860 138 5 0.0
+8 112870 139 5 0.0
+2 112870 140 5 0.0
+10 112880 141 5 0.0
+8 112880 142 5 0.0
+4 112880 143 5 0.0
+6 112880 144 5 0.0
+8 112890 145 5 0.0
+2 112900 146 5 0.0
+4 112910 147 5 0.0
+6 112910 148 5 0.0
+8 112910 149 5 0.0
+4 112930 150 5 0.0
+6 112950 151 5 0.0
+2 112950 152 5 0.0
+4 112950 153 5 0.0
+12 112950 154 5 0.0
+10 112950 155 5 0.0
+6 112960 156 5 0.0
+4 112960 157 5 0.0
+8 112970 158 5 0.0
+10 112970 159 5 0.0
+8 112970 160 5 0.0
+6 113310 161 6 0.0
+4 113350 162 6 0.0
+8 113370 163 6 0.0
+6 113400 164 6 0.0
+2 114030 165 7 0.0
+4 114070 166 7 0.0
+2 114110 167 7 0.0
+4 114120 168 6 0.0
+6 114130 169 6 0.0
+6 114150 170 7 0.0
+4 114170 171 6 0.0
+6 114170 172 6 0.0
+8 114170 173 6 0.0
+8 114180 174 6 0.0
+6 114180 175 6 0.0
+2 114180 176 6 0.0
+6 114190 177 6 0.0
+4 114200 178 6 0.0
+4 114210 179 7 0.0
+8 114220 180 6 0.0
+6 114220 181 6 0.0
+10 114220 182 6 0.0
+8 114220 183 6 0.0
+6 114220 184 6 0.0
+4 114220 185 6 0.0
+10 114250 186 6 0.0
+2 114250 187 6 0.0
+8 114260 188 6 0.0
+2 114270 189 6 0.0
+4 114270 190 6 0.0
+6 114270 191 6 0.0
+8 114270 192 6 0.0
+4 114280 193 6 0.0
+6 114290 194 6 0.0
+2 114300 195 6 0.0
+4 114300 196 6 0.0
+10 114300 197 6 0.0
+12 114300 198 6 0.0
+4 114300 199 6 0.0
+6 114300 200 6 0.0
+6 114310 201 6 0.0
+8 114310 202 6 0.0
+10 114310 203 6 0.0
+8 114310 204 6 0.0
+8 114550 205 7 0.0
+2 114890 206 8 0.0
+4 114940 207 8 0.0
+4 114950 208 7 0.0
+6 114960 209 7 0.0
+2 114960 210 8 0.0
+4 114990 211 7 0.0
+6 115000 212 7 0.0
+8 115000 213 7 0.0
+2 115010 214 7 0.0
+6 115010 215 7 0.0
+4 115020 216 7 0.0
+6 115020 217 8 0.0
+4 115030 218 8 0.0
+10 115080 219 7 0.0
+8 115090 220 7 0.0
+2 115090 221 7 0.0
+8 115090 222 7 0.0
+4 115090 223 7 0.0
+6 115090 224 7 0.0
+4 115100 225 7 0.0
+6 115110 226 7 0.0
+2 115450 227 9 0.0
+4 115480 228 9 0.0
+2 115480 229 9 0.0
+4 115500 230 9 0.0
+6 115500 231 8 0.0
+2 115530 232 8 0.0
+4 115540 233 8 0.0
+8 115540 234 8 0.0
+6 115540 235 8 0.0
+6 115580 236 9 0.0
+4 115600 237 8 0.0
+10 115610 238 8 0.0
+2 115620 239 8 0.0
+4 115620 240 8 0.0
+6 115620 241 8 0.0
+8 115620 242 8 0.0
+2 115620 243 8 0.0
+4 115630 244 8 0.0
+6 115630 245 8 0.0
+8 115630 246 8 0.0
+6 115630 247 8 0.0
+2 115830 248 10 0.0
+2 115840 249 10 0.0
+4 115840 250 10 0.0
+4 115880 251 10 0.0
+8 115890 252 9 0.0
+2 115890 253 9 0.0
+6 115890 254 9 0.0
+4 115890 255 9 0.0
+4 115890 256 9 0.0
+2 115890 257 9 0.0
+8 115900 258 9 0.0
+6 115900 259 9 0.0
+6 115960 260 10 0.0
+4 115970 261 9 0.0
+4 115990 262 9 0.0
+6 115990 263 9 0.0
+2 115990 264 9 0.0
+6 115990 265 9 0.0
+2 116110 266 11 0.0
+4 116110 267 11 0.0
+6 116120 268 11 0.0
+4 116120 269 11 0.0
+2 116120 270 11 0.0
+2 116160 271 10 0.0
+4 116160 272 10 0.0
+6 116160 273 10 0.0
+8 116160 274 10 0.0
+4 116160 275 10 0.0
+2 116160 276 10 0.0
+6 116160 277 10 0.0
+8 116160 278 10 0.0
+4 116240 279 10 0.0
+6 116240 280 10 0.0
+2 116260 281 10 0.0
+6 116260 282 10 0.0
+4 116260 283 10 0.0
+2 116280 284 3 0.0
+2 116300 285 12 0.0
+4 116300 286 12 0.0
+4 116310 287 12 0.0
+2 116310 288 12 0.0
+6 116310 289 12 0.0
+4 116350 290 11 0.0
+2 116350 291 11 0.0
+8 116360 292 11 0.0
+6 116360 293 11 0.0
+8 116370 294 11 0.0
+4 116370 295 11 0.0
+6 116370 296 11 0.0
+2 116370 297 11 0.0
+6 116440 298 11 0.0
+4 116440 299 11 0.0
+2 116440 300 11 0.0
+6 116440 301 11 0.0
+4 116440 302 11 0.0
+4 116470 303 13 0.0
+2 116470 304 13 0.0
+2 116500 305 12 0.0
+4 116500 306 12 0.0
+4 116580 307 12 0.0
+6 116580 308 12 0.0
+2 116580 309 12 0.0
+6 116620 310 12 0.0
+4 116620 311 12 0.0
+4 119210 312 4 0.0
+6 119210 313 4 0.0
+8 119810 314 3 0.0
+10 120150 315 3 0.0
+8 120150 316 3 0.0
+6 120150 317 3 0.0
+4 120160 318 3 0.0
+4 120310 319 3 0.0
+2 120310 320 3 0.0
+2 120570 321 3 0.0
+6 121200 322 2 0.0
+6 122250 323 4 0.0
+8 122250 324 4 0.0
+12 125690 325 4 0.0
+10 125690 326 4 0.0
+6 131000 327 3 0.0
+4 142080 328 3 0.0
+6 142080 329 3 0.0
+8 142080 330 3 0.0
+2 144360 331 3 0.0
+4 144360 332 3 0.0
+6 144360 333 3 0.0
+6 154440 334 4 0.0
+2 154440 335 4 0.0
+4 154440 336 4 0.0
+2 158320 337 5 0.0
+4 158320 338 5 0.0
+6 158320 339 5 0.0
+4 160240 340 6 0.0
+6 160240 341 6 0.0
+2 160240 342 6 0.0
+2 161330 343 7 0.0
+6 161330 344 7 0.0
+4 161330 345 7 0.0
+6 162000 346 8 0.0
+4 162000 347 8 0.0
+2 162000 348 8 0.0
+6 162440 349 9 0.0
+4 162440 350 9 0.0
+2 162440 351 9 0.0
+6 162770 352 10 0.0
+4 162770 353 10 0.0
+2 162770 354 10 0.0
+2 163000 355 11 0.0
+6 163000 356 11 0.0
+4 163000 357 11 0.0
+4 163160 358 12 0.0
+6 163160 359 12 0.0
+2 163160 360 12 0.0
+2 163300 361 13 0.0
+4 163300 362 13 0.0
+6 163300 363 13 0.0
+2 163400 364 14 0.0
+4 163400 365 14 0.0
+6 163400 366 14 0.0
+
+1097
+865.23 1 236 4 6 3740000 0 0
+865.84 1 230 4 4 3740000 0 0
+866.18 1 227 4 2 3730000 0 0
+869.4 1 217 4 6 5560000 0 0
+870.03 1 207 4 4 5550000 0 0
+870.37 1 206 4 2 5540000 0 0
+875.28 1 187 4 2 34000000 0 0
+875.66 1 178 4 4 33900000 0 0
+875.72 1 177 4 6 33900000 0 0
+876.07 1 170 4 6 8810000 0 0
+876.65 1 166 4 4 8790000 0 0
+876.99 1 165 4 2 8780000 0 0
+885.97 1 140 4 2 55800000 0 0
+886.23 1 137 4 4 55800000 0 0
+886.33 1 134 4 6 55800000 0 0
+887.46 1 125 4 6 15100000 0 0
+888.02 1 124 4 4 15100000 0 0
+888.37 1 123 4 2 15100000 0 0
+906.21 1 80 4 2 99900000 0 0
+906.43 1 77 4 4 99900000 0 0
+906.62 1 75 4 6 99800000 0 0
+909.7 1 66 4 6 29300000 0 0
+910.28 1 65 4 4 29200000 0 0
+910.64 1 64 4 2 29200000 0 0
+952.3 1 47 4 6 9190000 0 0
+952.41 1 46 4 4 12500000 0 0
+952.52 1 45 4 2 8820000 0 0
+953.41 1 44 4 2 193000000 0 0
+953.65 1 42 4 4 183000000 0 0
+953.97 1 41 4 6 170000000 0 0
+954.1 1 40 4 6 33000000 0 0
+963.99 1 31 4 6 70700000 0 0
+964.63 1 30 4 4 67600000 0 0
+965.04 1 29 4 2 57600000 0 0
+980.62 2 322 6 6 333000000 0 0
+980.71 3 322 4 6 22900000 0 0
+989.26 2 319 6 4 99500000 0 0
+989.34 3 320 4 2 112000000 0 0
+989.35 3 319 4 4 10900000 0 0
+990.77 2 318 6 4 24900000 0 0
+990.83 2 317 6 6 235000000 0 0
+990.86 3 318 4 4 226000000 0 0
+990.91 3 317 4 6 16500000 0 0
+1000.1 2 313 6 6 37200000 0 0
+1000.1 2 312 6 4 3920000 0 0
+1000.2 3 312 4 4 36200000 0 0
+1000.2 3 313 4 6 2720000 0 0
+1067.6 2 145 6 8 35300000 0 0
+1068.5 2 133 6 6 2340000 0 0
+1068.6 3 133 4 6 32800000 0 0
+1082.7 5 322 4 6 126000000 0 0
+1090.2 4 321 2 2 65500000 0 0
+1090.2 5 321 4 2 131000000 0 0
+1093.2 4 320 2 2 78800000 0 0
+1093.2 5 320 4 2 38500000 0 0
+1093.2 4 319 2 4 19900000 0 0
+1093.3 5 319 4 4 99600000 0 0
+1095.1 4 318 2 4 1150000 0 0
+1095.2 5 317 4 6 1400000 0 0
+1097.2 2 81 6 8 63500000 0 0
+1098.2 2 74 6 6 4230000 0 0
+1098.3 3 74 4 6 59100000 0 0
+1100.4 2 68 6 4 36000000 0 0
+1100.5 3 68 4 4 4000000 0 0
+1101.3 3 67 4 2 39900000 0 0
+1106.5 4 312 2 4 3040000 0 0
+1106.6 5 313 4 6 3520000 0 0
+1106.6 5 312 4 4 739000 0 0
+1134.2 1 13 4 2 158000000 0 0
+1134.4 1 12 4 4 154000000 0 0
+1135 1 11 4 6 150000000 0 0
+1163.9 2 50 6 6 75200000 0 0
+1164 3 50 4 6 1270000 0 0
+1164.2 2 49 6 4 5170000 0 0
+1164.3 3 49 4 4 69400000 0 0
+1167.4 2 43 6 8 129000000 0 0
+1168.3 3 41 4 6 23600000 0 0
+1168.4 2 40 6 6 4240000 0 0
+1168.5 3 40 4 6 124000000 0 0
+1170.7 3 35 4 2 53100000 0 0
+1171.1 2 34 6 4 56000000 0 0
+1171.2 3 34 4 4 2840000 0 0
+1176.5 2 33 6 4 92200000 0 0
+1176.6 3 33 4 4 10200000 0 0
+1177.7 3 32 4 2 102000000 0 0
+1189 5 151 4 6 24800000 0 0
+1189.2 4 150 2 4 20700000 0 0
+1189.2 5 150 4 4 4130000 0 0
+1190.9 4 132 2 2 14600000 0 0
+1190.9 5 132 4 2 7300000 0 0
+1191 4 131 2 4 3650000 0 0
+1191 5 131 4 4 18200000 0 0
+1199.5 1 8 4 6 401000000 0 0
+1200.2 1 7 4 4 399000000 0 0
+1200.7 1 6 4 2 398000000 0 0
+1225 5 95 4 6 44100000 0 0
+1225.4 4 92 2 4 36700000 0 0
+1225.4 5 92 4 4 7340000 0 0
+1228.4 4 72 2 2 27000000 0 0
+1228.4 5 72 4 2 13500000 0 0
+1228.8 4 71 2 4 6760000 0 0
+1228.8 5 71 4 4 33800000 0 0
+1243.2 2 28 6 4 33400000 0 0
+1243.2 2 27 6 6 321000000 0 0
+1243.3 3 28 4 4 309000000 0 0
+1243.3 3 27 4 6 23500000 0 0
+1310.5 5 50 4 6 84200000 0 0
+1310.9 4 49 2 4 66800000 0 0
+1311 5 49 4 4 18900000 0 0
+1316 5 41 4 6 40400 0 0
+1316.3 5 40 4 6 1420000 0 0
+1319 4 35 2 2 56200000 0 0
+1319 5 35 4 2 27600000 0 0
+1319.7 4 34 2 4 20200000 0 0
+1319.7 5 34 4 4 63300000 0 0
+1326.6 4 33 2 4 1790000 0 0
+1326.6 5 33 4 4 8950000 0 0
+1327.9 4 32 2 2 7140000 0 0
+1327.9 5 32 4 2 3570000 0 0
+1411.9 4 28 2 4 42500000 0 0
+1411.9 5 28 4 4 9590000 0 0
+1411.9 5 27 4 6 51000000 0 0
+1492.6 2 10 6 4 313000000 0 0
+1492.8 3 10 4 4 35100000 0 0
+1494.7 3 9 4 2 372000000 0 0
+1742.7 4 10 2 4 23400000 0 0
+1742.7 5 10 4 4 116000000 0 0
+1745.2 4 9 2 2 92200000 0 0
+1745.3 5 9 4 2 44500000 0 0
+3467.5 1 5 4 4 0.00621 0 0
+3467.5 1 5 4 4 1.66E-07 0 0
+3467.5 1 4 4 2 0.00252 0 0
+3467.5 1 4 4 2 1.14E-08 0 0
+3819.4 9 122 2 4 895000 0 0
+3823.1 9 121 2 2 3700000 0 0
+3831.5 10 122 4 4 4670000 0 0
+3835.3 10 121 4 2 1890000 0 0
+3888.7 9 119 2 4 2090000 0 0
+3893.3 10 120 4 6 2500000 0 0
+3901.3 10 119 4 4 414000 0 0
+4012.3 9 108 2 2 575000 0 0
+4025.7 10 108 4 2 1140000 0 0
+4096.2 23 322 4 6 80500 0 0
+4101.1 9 104 2 4 3480000 0 0
+4109.1 24 322 6 6 1230000 0 0
+4111.1 10 105 4 6 3900000 0 0
+4115.1 10 104 4 4 662000 0 0
+4138.8 6 61 2 4 280000 0 0
+4144.6 7 61 4 4 609000 0 0
+4152.7 8 61 6 4 1010000 0 0
+4251.1 23 320 4 2 2590000 0 0
+4251.4 23 319 4 4 224000 0 0
+4265.2 24 319 6 4 2260000 0 0
+4274.5 26 322 4 6 828000 0 0
+4279.3 23 318 4 4 5010000 0 0
+4280.4 23 317 4 6 361000 0 0
+4293.4 24 318 6 4 557000 0 0
+4294.4 24 317 6 6 5210000 0 0
+4357.5 24 314 6 8 5100000 0 0
+4386.8 25 321 2 2 884000 0 0
+4393.6 26 321 4 2 1760000 0 0
+4436.4 25 320 2 2 2990000 0 0
+4436.7 25 319 2 4 751000 0 0
+4443.4 26 320 4 2 1410000 0 0
+4443.7 26 319 4 4 3810000 0 0
+4467.1 25 318 2 4 20400 0 0
+4475.4 26 317 4 6 27600 0 0
+4653.1 9 63 2 4 240000 0 0
+4661.8 9 62 2 2 672000 0 0
+4664.2 25 312 2 4 1510000 0 0
+4671.2 10 63 4 4 749000 0 0
+4672 26 313 4 6 1800000 0 0
+4672 26 312 4 4 302000 0 0
+4679.9 10 62 4 2 269000 0 0
+4916.3 9 51 2 2 808000 0 0
+4936.5 10 51 4 2 1760000 0 0
+5199.3 1 3 4 4 1.9E-05 0 0
+5199.3 1 3 4 4 3.6E-06 0 0
+5201.3 14 132 2 2 1870000 0 0
+5201.7 1 2 4 6 2.45E-07 0 0
+5201.7 1 2 4 6 5.52E-06 0 0
+5203.1 14 131 2 4 1870000 0 0
+5282.7 11 58 6 6 245000 0 0
+5311.9 22 236 4 6 94000 0 0
+5330.1 11 55 6 8 205000 0 0
+5334.9 22 230 4 4 92800 0 0
+5345.5 11 54 6 6 61000 0 0
+5348 22 227 4 2 92100 0 0
+5355.9 11 53 6 4 10100 0 0
+5358.1 12 54 4 6 141000 0 0
+5368.5 12 53 4 4 107000 0 0
+5374.1 13 53 2 4 83400 0 0
+5374.2 12 52 4 2 33300 0 0
+5379.8 13 52 2 2 166000 0 0
+5473.3 22 217 4 6 139000 0 0
+5498.1 22 207 4 4 137000 0 0
+5511.7 22 206 4 2 136000 0 0
+5513.2 15 147 2 4 129000 0 0
+5514.6 15 146 2 2 257000 0 0
+5519.6 16 148 4 6 120000 0 0
+5520.1 16 147 4 4 205000 0 0
+5521.5 16 146 4 2 256000 0 0
+5530.9 17 149 6 8 72600 0 0
+5531.1 17 148 6 6 292000 0 0
+5531.5 17 147 6 4 178000 0 0
+5546.5 18 149 8 8 433000 0 0
+5546.7 18 148 8 6 95900 0 0
+5558.9 15 128 2 4 994000 0 0
+5561.9 18 138 8 10 1420000 0 0
+5565.8 17 130 6 8 1210000 0 0
+5565.8 16 129 4 6 1060000 0 0
+5565.9 16 128 4 4 396000 0 0
+5577.4 17 129 6 6 342000 0 0
+5577.5 17 128 6 4 28100 0 0
+5581.6 18 130 8 8 200000 0 0
+5593.3 18 129 8 6 13500 0 0
+5714.7 22 187 4 2 89400 0 0
+5730.9 22 178 4 4 88700 0 0
+5733.7 22 177 4 6 88500 0 0
+5736 19 147 2 4 447000 0 0
+5737.5 19 146 2 2 894000 0 0
+5741.5 20 148 4 6 749000 0 0
+5742 20 147 4 4 571000 0 0
+5743.6 20 146 4 2 178000 0 0
+5748.6 22 170 4 6 221000 0 0
+5754.1 21 149 6 8 1060000 0 0
+5754.2 21 148 6 6 319000 0 0
+5754.8 21 147 6 4 53100 0 0
+5773.6 22 166 4 4 218000 0 0
+5788.4 22 165 4 2 216000 0 0
+6001.1 14 72 2 2 3640000 0 0
+6010.1 14 71 2 4 3580000 0 0
+6188.8 23 151 4 6 9020 0 0
+6196 23 150 4 4 121000 0 0
+6203.7 22 140 4 2 280000 0 0
+6216.1 22 137 4 4 278000 0 0
+6218.2 24 151 6 6 125000 0 0
+6221.4 22 134 4 6 277000 0 0
+6225.5 24 150 6 4 13300 0 0
+6239.4 24 145 6 8 281000 0 0
+6240.3 23 133 4 6 262000 0 0
+6270.2 24 133 6 6 18500 0 0
+6277.2 22 125 4 6 375000 0 0
+6305.7 22 124 4 4 370000 0 0
+6323.3 22 123 4 2 367000 0 0
+6400.2 15 85 2 4 395000 0 0
+6404.1 15 84 2 2 789000 0 0
+6407 16 86 4 6 368000 0 0
+6409.4 16 85 4 4 630000 0 0
+6413.4 16 84 4 2 786000 0 0
+6421.6 17 89 6 8 223000 0 0
+6422.4 17 86 6 6 897000 0 0
+6424.8 17 85 6 4 547000 0 0
+6442.7 18 89 8 8 1330000 0 0
+6443.5 18 86 8 6 294000 0 0
+6483.5 15 69 2 4 3430000 0 0
+6484.5 18 76 8 10 4900000 0 0
+6485.5 16 70 4 6 3670000 0 0
+6486.6 17 73 6 8 4200000 0 0
+6493 16 69 4 4 1370000 0 0
+6501.3 17 70 6 6 1180000 0 0
+6508.1 18 73 8 8 691000 0 0
+6508.8 17 69 6 4 97000 0 0
+6522.9 18 70 8 6 46600 0 0
+6597.7 25 150 2 4 90800 0 0
+6605 26 151 4 6 109000 0 0
+6608 16 66 4 6 88700 0 0
+6613.2 26 150 4 4 18000 0 0
+6624.4 17 66 6 6 793000 0 0
+6628.8 15 65 2 4 220000 0 0
+6638.8 16 65 4 4 1400000 0 0
+6646.8 18 66 8 6 3490000 0 0
+6648.3 15 64 2 2 2180000 0 0
+6650.1 25 132 2 2 137000 0 0
+6653 25 131 2 4 34200 0 0
+6655.3 17 65 6 4 2740000 0 0
+6658.3 16 64 4 2 2170000 0 0
+6665.9 26 132 4 2 67900 0 0
+6668.8 26 131 4 4 170000 0 0
+6702.3 19 85 2 4 1500000 0 0
+6706.7 19 84 2 2 2990000 0 0
+6708 20 86 4 6 2510000 0 0
+6710.6 20 85 4 4 1910000 0 0
+6715 20 84 4 2 596000 0 0
+6722.8 19 80 2 2 195000 0 0
+6724.5 21 89 6 8 3560000 0 0
+6725.3 21 86 6 6 1070000 0 0
+6728 21 85 6 4 178000 0 0
+6731.1 20 80 4 2 973000 0 0
+6735.2 19 77 2 4 485000 0 0
+6743.5 20 77 4 4 155000 0 0
+6753.9 20 75 4 6 347000 0 0
+6761.1 21 77 6 4 518000 0 0
+6771.5 21 75 6 6 802000 0 0
+6928.6 20 66 4 6 775000 0 0
+6947.1 21 66 6 6 1830000 0 0
+6953.5 19 65 2 4 1030000 0 0
+6962.4 20 65 4 4 467000 0 0
+6975 19 64 2 2 383000 0 0
+6981.1 21 65 6 4 983000 0 0
+6984 20 64 4 2 2040000 0 0
+7308.6 23 95 4 6 40300 0 0
+7321 23 92 4 4 541000 0 0
+7349.6 24 95 6 6 555000 0 0
+7353.4 22 80 4 2 1320000 0 0
+7362.2 24 92 6 4 59100 0 0
+7368.2 22 77 4 4 1310000 0 0
+7380.5 22 75 4 6 1300000 0 0
+7408.2 23 74 4 6 1520000 0 0
+7408.3 24 81 6 8 1630000 0 0
+7425.7 6 22 2 4 5950000 0 0
+7430.8 23 72 4 2 906000 0 0
+7444.3 7 22 4 4 12400000 0 0
+7444.7 23 71 4 4 90100 0 0
+7450.3 24 74 6 6 107000 0 0
+7470.4 8 22 6 4 19300000 0 0
+7487.2 24 71 6 4 797000 0 0
+7509.7 23 68 4 4 230000 0 0
+7548.3 23 67 4 2 2850000 0 0
+7553 24 68 6 4 1790000 0 0
+7589.7 22 66 4 6 701000 0 0
+7630.3 22 65 4 4 690000 0 0
+7656.2 22 64 4 2 683000 0 0
+7705.6 62 321 2 2 693000 0 0
+7729.3 63 321 4 2 1370000 0 0
+7888.4 25 92 2 4 686000 0 0
+7896.1 26 95 4 6 821000 0 0
+7901.2 27 122 6 4 28200000 0 0
+7901.5 28 122 4 4 3280000 0 0
+7910.6 26 92 4 4 136000 0 0
+7917.6 28 121 4 2 31300000 0 0
+8107.9 25 68 2 4 236000 0 0
+8131.4 26 68 4 4 1170000 0 0
+8152.9 25 67 2 2 929000 0 0
+8168.5 27 120 6 6 13200000 0 0
+8168.8 28 120 4 6 939000 0 0
+8176.7 26 67 4 2 460000 0 0
+8187.1 7 21 4 6 8580000 0 0
+8190.3 6 20 2 4 12700000 0 0
+8202.6 6 19 2 2 4950000 0 0
+8203.7 27 119 6 4 1390000 0 0
+8204 28 119 4 4 12500000 0 0
+8213 7 20 4 4 4840000 0 0
+8218.6 8 21 6 6 22300000 0 0
+8225.4 7 19 4 2 26400000 0 0
+8244.7 8 20 6 4 13600000 0 0
+8570.1 9 26 2 4 4920000 0 0
+8596.4 9 25 2 2 20900000 0 0
+8631.6 10 26 4 4 26600000 0 0
+8658.1 27 113 6 4 5460000 0 0
+8658.3 10 25 4 2 10500000 0 0
+8658.5 28 113 4 4 606000 0 0
+8669.3 28 111 4 2 6040000 0 0
+8682.7 8 18 6 8 24600000 0 0
+8685.8 7 17 4 6 18000000 0 0
+8688.5 6 16 2 4 10900000 0 0
+8705.6 6 15 2 2 21000000 0 0
+8714.1 7 16 4 4 12800000 0 0
+8721.2 8 17 6 6 6750000 0 0
+8731.3 7 15 4 2 3760000 0 0
+8749.8 8 16 6 4 1040000 0 0
+9031.4 14 35 2 2 30200000 0 0
+9048.4 27 107 6 8 28000000 0 0
+9052 27 106 6 6 1880000 0 0
+9052.4 28 106 4 6 26000000 0 0
+9063 14 34 2 4 29500000 0 0
+9190 27 105 6 6 24400000 0 0
+9190.4 28 105 4 6 1760000 0 0
+9210.1 27 104 6 4 2700000 0 0
+9210.5 28 104 4 4 23300000 0 0
+9363.8 104 322 4 6 951000 0 0
+9384.7 105 322 6 6 13600000 0 0
+9389.4 9 23 2 4 22400000 0 0
+9395.4 10 24 4 6 26300000 0 0
+9398.4 14 33 2 4 28200 0 0
+9463.3 10 23 4 4 3980000 0 0
+9466.8 14 32 2 2 436000 0 0
+9533.1 106 322 6 6 13100 0 0
+9537.1 107 322 8 6 289000 0 0
+9779.6 15 46 2 4 1180000 0 0
+9789.5 16 47 4 6 1130000 0 0
+9791 15 45 2 2 2990000 0 0
+9801.2 16 46 4 4 2750000 0 0
+9812.7 16 45 4 2 5300000 0 0
+9816.7 17 48 6 8 656000 0 0
+9825.4 17 47 6 6 4950000 0 0
+9837.3 17 46 6 4 4500000 0 0
+9866 18 48 8 8 9620000 0 0
+9874.9 18 47 8 6 2970000 0 0
+9886.1 15 44 2 2 2930000 0 0
+9908.2 16 44 4 2 311000 0 0
+9911.9 15 42 2 4 758000 0 0
+9934.2 16 42 4 4 3640000 0 0
+9949.8 17 43 6 8 1080000 0 0
+9968.5 16 41 4 6 760000 0 0
+9971.2 17 42 6 4 450000 0 0
+9983.2 16 40 4 6 810000 0 0
+10000 18 43 8 8 920000 0 0
+10006 17 41 6 6 2280000 0 0
+10021 17 40 6 6 2260000 0 0
+10057 18 41 8 6 1390000 0 0
+10108 15 36 2 4 27000000 0 0
+10112 16 37 4 6 29300000 0 0
+10115 17 38 6 8 33000000 0 0
+10117 18 39 8 10 38200000 0 0
+10131 16 36 4 4 9890000 0 0
+10150 17 37 6 6 7440000 0 0
+10168 18 38 8 8 3980000 0 0
+10170 17 36 6 4 495000 0 0
+10203 18 37 8 6 281000 0 0
+10214 104 320 4 2 9100000 0 0
+10216 104 319 4 4 848000 0 0
+10241 105 319 6 4 8000000 0 0
+10379 104 318 4 4 20100000 0 0
+10385 104 317 4 6 1470000 0 0
+10401 2 5 6 4 0.000978 0 0
+10401 2 5 6 4 0.0529 0 0
+10401 2 4 6 2 0.0303 0 0
+10405 105 318 6 4 2220000 0 0
+10410 3 5 4 4 0.00175 0 0
+10410 3 5 4 4 0.0226 0 0
+10410 3 4 4 2 0.00109 0 0
+10410 3 4 4 2 0.0452 0 0
+10411 105 317 6 6 20600000 0 0
+10503 19 46 2 4 6170000 0 0
+10510 20 47 4 6 12500000 0 0
+10516 19 45 2 2 18100000 0 0
+10523 20 46 4 4 15400000 0 0
+10537 20 45 4 2 7280000 0 0
+10542 21 48 6 8 23900000 0 0
+10553 21 47 6 6 11500000 0 0
+10566 21 46 6 4 3300000 0 0
+10588 106 318 6 4 2070000 0 0
+10594 106 317 6 6 104000 0 0
+10599 107 317 8 6 1980000 0 0
+10626 19 44 2 2 3390000 0 0
+10647 20 44 4 2 4010000 0 0
+10656 19 42 2 4 5550000 0 0
+10676 111 321 2 2 2260000 0 0
+10677 20 42 4 4 257000 0 0
+10692 113 321 4 2 4490000 0 0
+10716 20 41 4 6 4180000 0 0
+10721 21 42 6 4 2290000 0 0
+10733 20 40 4 6 1030000 0 0
+10761 21 41 6 6 2370000 0 0
+10790 105 314 6 8 21600000 0 0
+10986 106 314 6 8 371000 0 0
+10992 107 314 8 8 10200000 0 0
+11183 16 31 4 6 201000 0 0
+11230 17 31 6 6 2090000 0 0
+11241 15 30 2 4 600000 0 0
+11260 122 322 4 6 2920000 0 0
+11269 16 30 4 4 4130000 0 0
+11295 18 31 8 6 10800000 0 0
+11297 15 29 2 2 6920000 0 0
+11317 17 30 6 4 9020000 0 0
+11326 16 29 4 2 7360000 0 0
+11509 104 312 4 4 109000 0 0
+11509 104 313 4 6 13100 0 0
+11540 105 313 6 6 116000 0 0
+11540 105 312 6 4 13700 0 0
+11569 11 22 6 4 2080000 0 0
+11628 12 22 4 4 1320000 0 0
+11655 13 22 2 4 639000 0 0
+11766 106 312 6 4 11600000 0 0
+11766 106 313 6 6 552000 0 0
+11772 107 313 8 6 11000000 0 0
+11967 23 50 4 6 54900 0 0
+12002 23 49 4 4 5040000 0 0
+12078 24 50 6 6 6120000 0 0
+12089 121 321 2 2 5220000 0 0
+12113 24 49 6 4 753000 0 0
+12127 122 321 4 2 10300000 0 0
+12133 20 31 4 6 2950000 0 0
+12190 21 31 6 6 7110000 0 0
+12207 19 30 2 4 4080000 0 0
+12232 32 122 2 4 55400 0 0
+12235 20 30 4 4 1520000 0 0
+12271 32 121 2 2 219000 0 0
+12274 19 29 2 2 1430000 0 0
+12292 22 44 4 2 13800000 0 0
+12293 21 30 6 4 3760000 0 0
+12299 61 236 4 6 32800 0 0
+12302 20 29 4 2 7410000 0 0
+12332 22 42 4 4 12700000 0 0
+12348 33 122 4 4 290000 0 0
+12385 22 41 4 6 12800000 0 0
+12388 33 121 4 2 127000 0 0
+12423 61 230 4 4 31900 0 0
+12465 23 40 4 6 21600000 0 0
+12473 24 43 6 8 22800000 0 0
+12473 121 320 2 2 10700000 0 0
+12476 121 319 2 4 2670000 0 0
+12494 61 227 4 2 31300 0 0
+12513 122 320 4 2 5210000 0 0
+12516 122 319 4 4 13200000 0 0
+12555 27 63 6 4 164000 0 0
+12556 28 63 4 4 18200 0 0
+12584 24 40 6 6 929000 0 0
+12619 28 62 4 2 179000 0 0
+12692 29 118 2 4 82800 0 0
+12712 23 35 4 2 2450000 0 0
+12720 121 318 2 4 140000 0 0
+12762 122 318 4 4 20600 0 0
+12765 30 118 4 4 163000 0 0
+12771 122 317 4 6 169000 0 0
+12775 23 34 4 4 547000 0 0
+12877 31 118 6 4 238000 0 0
+12901 24 34 6 4 2590000 0 0
+12973 32 119 2 4 854000 0 0
+12980 34 122 4 4 35700 0 0
+13014 33 120 4 6 1020000 0 0
+13023 34 121 4 2 35300 0 0
+13045 35 122 2 4 14100 0 0
+13049 29 116 2 4 91700 0 0
+13055 30 117 4 6 65900 0 0
+13073 29 115 2 2 36500 0 0
+13089 35 121 2 2 47100 0 0
+13104 33 119 4 4 166000 0 0
+13126 30 116 4 4 28800 0 0
+13150 30 115 4 2 179000 0 0
+13173 31 117 6 6 150000 0 0
+13176 27 60 6 6 426000 0 0
+13177 28 60 4 6 30400 0 0
+13200 61 217 4 6 49200 0 0
+13245 31 116 6 4 94700 0 0
+13258 29 110 2 4 25400 0 0
+13268 30 112 4 6 42500 0 0
+13288 31 114 6 8 60500 0 0
+13296 29 109 2 2 50300 0 0
+13299 27 59 6 4 44400 0 0
+13300 28 59 4 4 399000 0 0
+13337 30 110 4 4 31900 0 0
+13345 61 207 4 4 47600 0 0
+13375 30 109 4 2 9880 0 0
+13390 31 112 6 6 17700 0 0
+13426 61 206 4 2 46700 0 0
+13433 9 14 2 2 3440000 0 0
+13452 23 33 4 4 491000 0 0
+13460 31 110 6 4 2910 0 0
+13468 11 21 6 6 536000 0 0
+13538 11 20 6 4 314000 0 0
+13548 12 21 4 6 199000 0 0
+13585 10 14 4 2 6390000 0 0
+13591 24 33 6 4 5360000 0 0
+13592 23 32 4 2 6630000 0 0
+13606 25 49 2 4 11200000 0 0
+13619 12 20 4 4 112000 0 0
+13628 26 50 4 6 13900000 0 0
+13653 12 19 4 2 587000 0 0
+13655 13 20 2 4 284000 0 0
+13672 26 49 4 4 3020000 0 0
+13690 13 19 2 2 108000 0 0
+13717 34 120 4 6 98400 0 0
+13817 34 119 4 4 16000 0 0
+13891 35 119 2 4 79000 0 0
+14094 40 120 6 6 20200 0 0
+14147 32 113 2 4 15300 0 0
+14176 32 111 2 2 61000 0 0
+14199 40 119 6 4 416000 0 0
+14236 43 120 8 6 393000 0 0
+14303 33 113 4 4 74200 0 0
+14317 22 31 4 6 1330000 0 0
+14332 33 111 4 2 29500 0 0
+14459 22 30 4 4 1180000 0 0
+14459 32 108 2 2 65000 0 0
+14459 121 312 2 4 5230000 0 0
+14513 122 313 4 6 6200000 0 0
+14513 122 312 4 4 1040000 0 0
+14527 25 35 2 2 2310000 0 0
+14553 22 29 4 2 1100000 0 0
+14602 26 35 4 2 1140000 0 0
+14609 25 34 2 4 706000 0 0
+14621 33 108 4 2 126000 0 0
+14685 26 34 4 4 1750000 0 0
+14698 61 187 4 2 180000 0 0
+14761 11 18 6 8 996000 0 0
+14805 61 178 4 4 176000 0 0
+14824 61 177 4 6 176000 0 0
+14873 11 17 6 6 280000 0 0
+14923 61 170 4 6 78300 0 0
+14956 11 16 6 4 44600 0 0
+14971 12 17 4 6 667000 0 0
+14978 41 118 6 4 182000 0 0
+15055 12 16 4 4 485000 0 0
+15057 42 118 4 4 119000 0 0
+15093 61 166 4 4 75700 0 0
+15099 13 16 2 4 387000 0 0
+15106 12 15 4 2 147000 0 0
+15117 44 118 2 4 59000 0 0
+15151 13 15 2 2 751000 0 0
+15157 34 113 4 4 41800 0 0
+15190 34 111 4 2 16600 0 0
+15195 61 165 4 2 74200 0 0
+15203 37 114 6 8 623 0 0
+15246 35 113 2 4 8210 0 0
+15279 35 111 2 2 32600 0 0
+15281 38 114 8 8 12100 0 0
+15291 36 112 4 6 1130 0 0
+15335 37 112 6 6 20400 0 0
+15381 41 117 6 6 43000 0 0
+15382 36 110 4 4 23200 0 0
+15396 39 114 10 8 103000 0 0
+15415 38 112 8 6 94200 0 0
+15427 37 110 6 4 92500 0 0
+15433 36 109 4 2 115000 0 0
+15463 42 117 4 6 18100 0 0
+15479 41 116 6 4 27100 0 0
+15500 25 33 2 4 1120000 0 0
+15562 42 116 4 4 7910 0 0
+15587 26 33 4 4 5050000 0 0
+15596 42 115 4 2 49100 0 0
+15626 44 116 2 4 24400 0 0
+15660 44 115 2 2 9700 0 0
+15683 32 104 2 4 86600 0 0
+15687 25 32 2 2 3590000 0 0
+15775 26 32 4 2 1680000 0 0
+15796 46 117 4 6 1940 0 0
+15798 51 132 2 2 1290000 0 0
+15815 51 131 2 4 1280000 0 0
+15815 33 105 4 6 91700 0 0
+15827 47 117 6 6 17300 0 0
+15850 48 117 8 6 76800 0 0
+15870 45 116 2 4 4780 0 0
+15874 33 104 4 4 13200 0 0
+15900 46 116 4 4 30400 0 0
+15905 45 115 2 2 47500 0 0
+15931 47 116 6 4 59500 0 0
+15935 46 115 4 2 47200 0 0
+16259 52 147 2 4 108000 0 0
+16271 52 146 2 2 215000 0 0
+16307 53 148 4 6 99600 0 0
+16311 53 147 4 4 171000 0 0
+16324 53 146 4 2 213000 0 0
+16362 52 140 2 2 76800 0 0
+16403 54 149 6 8 59800 0 0
+16404 54 148 6 6 240000 0 0
+16408 54 147 6 4 147000 0 0
+16411 49 113 4 4 10900 0 0
+16415 53 140 4 2 76000 0 0
+16449 52 137 2 4 7560 0 0
+16450 49 111 4 2 109000 0 0
+16476 50 113 6 4 97200 0 0
+16503 53 137 4 4 47900 0 0
+16540 53 134 4 6 2970 0 0
+16550 55 149 8 8 350000 0 0
+16551 55 148 8 6 77600 0 0
+16601 54 137 6 4 92600 0 0
+16639 54 134 6 6 26300 0 0
+16663 52 128 2 4 985000 0 0
+16687 55 138 8 10 1400000 0 0
+16713 54 130 6 8 1200000 0 0
+16717 53 129 4 6 1050000 0 0
+16718 53 128 4 4 390000 0 0
+16790 55 134 8 6 114000 0 0
+16818 54 129 6 6 333000 0 0
+16819 54 128 6 4 27400 0 0
+16865 34 105 4 6 41600 0 0
+16866 55 130 8 8 193000 0 0
+16867 56 147 2 4 444000 0 0
+16880 56 146 2 2 886000 0 0
+16907 57 148 4 6 741000 0 0
+16912 57 147 4 4 564000 0 0
+16925 57 146 4 2 176000 0 0
+16933 34 104 4 4 11300 0 0
+16973 55 129 8 6 12900 0 0
+16979 56 140 2 2 60100 0 0
+17023 57 140 4 2 298000 0 0
+17024 58 149 6 8 1040000 0 0
+17025 58 148 6 6 311000 0 0
+17030 58 147 6 4 51800 0 0
+17044 35 104 2 4 29300 0 0
+17072 56 137 2 4 148000 0 0
+17117 57 137 4 4 46900 0 0
+17157 57 134 4 6 105000 0 0
+17239 58 137 6 4 155000 0 0
+17279 58 134 6 6 239000 0 0
+17352 59 151 4 6 19100 0 0
+17409 59 150 4 4 255000 0 0
+17566 60 151 6 6 257000 0 0
+17624 60 150 6 4 27300 0 0
+17736 60 145 6 8 923000 0 0
+17763 59 133 4 6 858000 0 0
+17778 59 132 4 2 352000 0 0
+17799 59 131 4 4 35100 0 0
+17988 60 133 6 6 59000 0 0
+18025 60 131 6 4 304000 0 0
+18433 49 105 4 6 6220 0 0
+18434 61 140 4 2 504000 0 0
+18514 49 104 4 4 59400 0 0
+18515 50 105 6 6 69200 0 0
+18545 61 137 4 4 495000 0 0
+18591 61 134 4 6 491000 0 0
+18732 62 150 2 4 431000 0 0
+18806 63 151 4 6 511000 0 0
+18872 63 150 4 4 84200 0 0
+19099 61 125 4 6 137000 0 0
+19365 61 124 4 4 131000 0 0
+19532 61 123 4 2 128000 0 0
+19686 111 284 2 2 7610 0 0
+19742 113 284 4 2 15100 0 0
+24538 118 236 4 6 16600 0 0
+25037 118 230 4 4 15700 0 0
+25097 121 284 2 2 29900 0 0
+25260 122 284 4 2 58600 0 0
+25328 118 227 4 2 15100 0 0
+26157 29 61 2 4 729000 0 0
+26466 30 61 4 4 1410000 0 0
+26544 51 72 2 2 4120000 0 0
+26721 51 71 2 4 4040000 0 0
+26953 31 61 6 4 2000000 0 0
+27497 52 85 2 4 395000 0 0
+27571 52 84 2 2 783000 0 0
+27601 53 86 4 6 364000 0 0
+27646 53 85 4 4 622000 0 0
+27720 53 84 4 2 771000 0 0
+27845 52 80 2 2 234000 0 0
+27865 54 89 6 8 216000 0 0
+27879 54 86 6 6 869000 0 0
+27925 54 85 6 4 528000 0 0
+27998 53 80 4 2 230000 0 0
+28058 52 77 2 4 22900 0 0
+28214 53 77 4 4 144000 0 0
+28292 55 89 8 8 1240000 0 0
+28307 55 86 8 6 275000 0 0
+28396 53 75 4 6 8840 0 0
+28410 118 217 4 6 25400 0 0
+28504 54 77 6 4 275000 0 0
+28690 54 75 6 6 77100 0 0
+28707 32 63 2 4 769000 0 0
+29039 32 62 2 2 2970000 0 0
+29089 118 207 4 4 23700 0 0
+29104 52 69 2 4 3990000 0 0
+29115 55 76 8 10 5700000 0 0
+29120 53 70 4 6 4270000 0 0
+29130 54 73 6 8 4880000 0 0
+29143 55 75 8 6 327000 0 0
+29271 53 69 4 4 1570000 0 0
+29283 56 85 2 4 1810000 0 0
+29354 33 63 4 4 3600000 0 0
+29366 57 86 4 6 3010000 0 0
+29366 56 84 2 2 3580000 0 0
+29417 57 85 4 4 2280000 0 0
+29430 54 70 6 6 1340000 0 0
+29476 118 206 4 2 22800 0 0
+29501 57 84 4 2 707000 0 0
+29584 54 69 6 4 109000 0 0
+29598 55 73 8 8 773000 0 0
+29643 29 57 2 4 1720000 0 0
+29674 30 58 4 6 1240000 0 0
+29678 56 80 2 2 289000 0 0
+29701 33 62 4 2 1390000 0 0
+29708 58 89 6 8 4150000 0 0
+29724 58 86 6 6 1240000 0 0
+29776 58 85 6 4 206000 0 0
+29780 29 56 2 2 679000 0 0
+29815 57 80 4 2 1420000 0 0
+29906 55 70 8 6 50800 0 0
+29920 56 77 2 4 705000 0 0
+30040 30 57 4 4 529000 0 0
+30060 57 77 4 4 222000 0 0
+30181 30 56 4 2 3260000 0 0
+30267 57 75 4 6 490000 0 0
+30288 31 58 6 6 2710000 0 0
+30419 59 95 4 6 86800 0 0
+30435 58 77 6 4 723000 0 0
+30635 59 92 4 4 1150000 0 0
+30648 58 75 6 6 1100000 0 0
+30670 31 57 6 4 1680000 0 0
+31084 60 95 6 6 1140000 0 0
+31309 60 92 6 4 119000 0 0
+31687 29 53 2 4 1310000 0 0
+31763 53 66 4 6 58900 0 0
+31773 30 54 4 6 2180000 0 0
+31886 29 52 2 2 2570000 0 0
+31917 31 55 6 8 3070000 0 0
+32132 54 66 6 6 512000 0 0
+32142 30 53 4 4 1600000 0 0
+32161 60 81 6 8 4720000 0 0
+32222 59 74 4 6 4380000 0 0
+32281 52 65 2 4 140000 0 0
+32346 30 52 4 2 492000 0 0
+32478 31 54 6 6 874000 0 0
+32487 53 65 4 4 881000 0 0
+32654 59 72 4 2 1000000 0 0
+32701 55 66 8 6 2160000 0 0
+32749 52 64 2 2 1340000 0 0
+32864 31 53 6 4 141000 0 0
+32872 54 65 6 4 1670000 0 0
+32917 32 59 2 4 2120000 0 0
+32924 59 71 4 4 97900 0 0
+32961 53 64 4 2 1320000 0 0
+32968 60 74 6 6 292000 0 0
+32987 33 60 4 6 2530000 0 0
+33192 34 63 4 4 20200 0 0
+33622 35 63 2 4 3880 0 0
+33636 34 62 4 2 7750 0 0
+33704 60 71 6 4 821000 0 0
+33771 33 59 4 4 393000 0 0
+34078 35 62 2 2 14900 0 0
+34122 57 66 4 6 699000 0 0
+34234 59 68 4 4 203000 0 0
+34431 61 80 4 2 2640000 0 0
+34607 58 66 6 6 1560000 0 0
+34757 61 77 4 4 2560000 0 0
+34768 23 28 4 4 12200 0 0
+34770 56 65 2 4 917000 0 0
+34774 23 27 4 6 995 0 0
+34959 57 65 4 4 289000 0 0
+34983 62 92 2 4 2650000 0 0
+35034 61 75 4 6 2500000 0 0
+35052 59 67 4 2 1890000 0 0
+35079 60 68 6 4 1700000 0 0
+35187 63 95 4 6 3130000 0 0
+35314 56 64 2 2 350000 0 0
+35468 58 65 6 4 934000 0 0
+35477 63 92 4 4 509000 0 0
+35509 57 64 4 2 1720000 0 0
+35716 24 28 6 4 1360 0 0
+35722 24 27 6 6 11900 0 0
+36388 118 187 4 2 195000 0 0
+37056 118 178 4 4 184000 0 0
+37172 118 177 4 6 183000 0 0
+37640 62 72 2 2 273000 0 0
+37805 118 170 4 6 42600 0 0
+37913 34 60 4 6 257000 0 0
+37999 62 71 2 4 66500 0 0
+38160 41 61 6 4 949000 0 0
+38213 63 72 4 2 131000 0 0
+38583 63 71 4 4 317000 0 0
+38671 42 61 4 4 608000 0 0
+38914 118 166 4 4 39000 0 0
+38951 34 59 4 4 39500 0 0
+39070 44 61 2 4 295000 0 0
+39545 35 59 2 4 189000 0 0
+39599 118 165 4 2 37000 0 0
+39756 62 68 2 4 414000 0 0
+39866 49 63 4 4 97400 0 0
+40248 50 63 6 4 852000 0 0
+40306 61 66 4 6 302000 0 0
+40395 63 68 4 4 1970000 0 0
+40509 49 62 4 2 929000 0 0
+40862 62 67 2 2 1520000 0 0
+40938 40 60 6 6 46900 0 0
+41241 104 151 4 6 20500 0 0
+41478 61 65 4 4 277000 0 0
+41538 63 67 4 2 725000 0 0
+41563 104 150 4 4 271000 0 0
+41650 105 151 6 6 279000 0 0
+41978 105 150 6 4 29200 0 0
+42151 40 59 6 4 902000 0 0
+42163 43 60 8 6 858000 0 0
+42255 61 64 4 2 262000 0 0
+42619 105 145 6 8 1310000 0 0
+42864 32 51 2 2 268000 0 0
+43640 104 133 4 6 1140000 0 0
+43735 104 132 4 2 265000 0 0
+43781 67 122 2 4 63400 0 0
+43860 104 131 4 4 26200 0 0
+44098 105 133 6 6 79000 0 0
+44281 67 121 2 2 245000 0 0
+44323 105 131 6 4 229000 0 0
+44323 33 51 4 2 485000 0 0
+45127 68 122 4 4 290000 0 0
+45209 41 58 6 6 88500 0 0
+45658 68 121 4 2 112000 0 0
+45755 37 55 6 8 4210 0 0
+45928 42 58 4 6 36200 0 0
+46063 41 57 6 4 53800 0 0
+46475 38 55 8 8 79000 0 0
+46505 36 54 4 6 7370 0 0
+46810 42 57 4 4 15200 0 0
+46877 49 60 4 6 9200 0 0
+46918 37 54 6 6 131000 0 0
+47153 42 56 4 2 92800 0 0
+47299 36 53 4 4 147000 0 0
+47395 44 57 2 4 45700 0 0
+47407 50 60 6 6 125000 0 0
+47554 39 55 10 8 647000 0 0
+47626 71 122 4 4 3230 0 0
+47676 38 54 8 6 587000 0 0
+47726 37 53 6 4 576000 0 0
+47742 36 52 4 2 716000 0 0
+47747 44 56 2 2 17900 0 0
+48202 72 122 2 4 623 0 0
+48218 71 121 4 2 1240 0 0
+48475 49 59 4 4 112000 0 0
+48808 72 121 2 2 2400 0 0
+48935 41 55 6 8 48800 0 0
+49000 46 58 4 6 12500 0 0
+49042 50 59 6 4 12100 0 0
+49297 47 58 6 6 111000 0 0
+49518 48 58 8 6 485000 0 0
+49710 45 57 2 4 29900 0 0
+50006 46 57 4 4 188000 0 0
+50097 45 56 2 2 293000 0 0
+50268 41 54 6 6 13500 0 0
+50315 47 57 6 4 364000 0 0
+50398 46 56 4 2 287000 0 0
+51158 42 54 4 6 29900 0 0
+51197 41 53 6 4 2130 0 0
+52121 42 53 4 4 21600 0 0
+52659 42 52 4 2 6530 0 0
+52806 25 28 2 4 2340 0 0
+52848 44 53 2 4 16200 0 0
+53397 92 122 4 4 12400 0 0
+53401 44 52 2 2 31300 0 0
+53696 34 51 4 2 688000 0 0
+53761 47 55 6 8 14200 0 0
+53819 26 28 4 4 492 0 0
+53833 26 27 4 6 2570 0 0
+54024 48 55 8 8 84300 0 0
+54067 95 122 6 4 108000 0 0
+54143 92 121 4 2 119000 0 0
+54831 35 51 2 2 323000 0 0
+55000 46 54 4 6 21700 0 0
+55025 67 119 2 4 552000 0 0
+55374 47 54 6 6 52300 0 0
+55501 68 120 4 6 645000 0 0
+55653 48 54 8 6 17100 0 0
+55742 45 53 2 4 22400 0 0
+56115 46 53 4 4 35100 0 0
+56358 45 52 2 2 43300 0 0
+56504 47 53 6 4 30100 0 0
+56641 109 147 2 4 114000 0 0
+56739 46 52 4 2 42400 0 0
+56788 109 146 2 2 226000 0 0
+57168 68 119 4 4 98400 0 0
+57252 108 132 2 2 1090000 0 0
+57291 110 148 4 6 103000 0 0
+57342 110 147 4 4 176000 0 0
+57467 108 131 2 4 1070000 0 0
+57493 110 146 4 2 218000 0 0
+57719 113 151 4 6 1150000 0 0
+57863 111 150 2 4 951000 0 0
+57914 109 140 2 2 70900 0 0
+58350 113 150 4 4 186000 0 0
+58580 112 149 6 8 58800 0 0
+58596 112 148 6 6 236000 0 0
+58647 110 140 4 2 68300 0 0
+58649 112 147 6 4 144000 0 0
+59016 109 137 2 4 6700 0 0
+59202 64 118 2 4 164000 0 0
+59330 71 120 4 6 169000 0 0
+59778 110 137 4 4 41300 0 0
+60266 110 134 4 6 2520 0 0
+60598 114 149 8 8 319000 0 0
+60615 114 148 8 6 70700 0 0
+60796 65 118 4 4 302000 0 0
+61069 115 147 2 4 500000 0 0
+61199 112 137 6 4 75700 0 0
+61239 71 119 4 4 25600 0 0
+61241 115 146 2 2 993000 0 0
+61539 116 148 4 6 822000 0 0
+61598 116 147 4 4 624000 0 0
+61712 112 134 6 6 21100 0 0
+61755 74 120 6 6 21800 0 0
+61772 116 146 4 2 193000 0 0
+61866 109 128 2 4 1060000 0 0
+62161 111 132 2 2 78200 0 0
+62194 72 119 2 4 122000 0 0
+62415 111 131 2 4 19300 0 0
+62482 114 138 8 10 1470000 0 0
+62552 115 140 2 2 74200 0 0
+62689 110 129 4 6 1090000 0 0
+62704 110 128 4 4 408000 0 0
+62724 113 132 4 2 38100 0 0
+62747 112 130 6 8 1250000 0 0
+62982 113 131 4 4 94000 0 0
+63106 116 140 4 2 362000 0 0
+63120 117 149 6 8 1090000 0 0
+63138 117 148 6 6 326000 0 0
+63200 117 147 6 4 54200 0 0
+63504 66 118 6 4 398000 0 0
+63826 74 119 6 4 415000 0 0
+63840 115 137 2 4 175000 0 0
+63956 114 134 8 6 84200 0 0
+64255 112 129 6 6 329000 0 0
+64269 112 128 6 4 27000 0 0
+64417 116 137 4 4 54400 0 0
+64803 81 120 8 6 377000 0 0
+64985 116 134 4 6 119000 0 0
+65068 114 130 8 8 186000 0 0
+66172 117 137 6 4 169000 0 0
+66691 114 129 8 6 11700 0 0
+66771 117 134 6 6 256000 0 0
+67870 64 116 2 4 457000 0 0
+68014 65 117 4 6 327000 0 0
+68523 64 115 2 2 178000 0 0
+68560 92 120 4 6 4620 0 0
+69669 95 120 6 6 61700 0 0
+69973 65 116 4 4 134000 0 0
+70668 65 115 4 2 810000 0 0
+71122 92 119 4 4 55900 0 0
+71422 66 117 6 6 659000 0 0
+72316 95 119 6 4 5910 0 0
+73051 118 140 4 2 726000 0 0
+73584 66 116 6 4 387000 0 0
+73914 64 110 2 4 311000 0 0
+74212 65 112 4 6 516000 0 0
+74814 118 137 4 4 676000 0 0
+74951 66 114 6 8 715000 0 0
+75113 64 109 2 2 592000 0 0
+75581 118 134 4 6 656000 0 0
+76415 65 110 4 4 360000 0 0
+77697 65 109 4 2 107000 0 0
+78287 66 112 6 6 188000 0 0
+80743 66 110 6 4 28600 0 0
+83237 75 118 6 4 404000 0 0
+84744 118 125 4 6 99300 0 0
+84843 77 118 4 4 255000 0 0
+84922 67 113 2 4 88200 0 0
+85975 67 111 2 2 340000 0 0
+86854 80 118 2 4 119000 0 0
+90136 68 113 4 4 369000 0 0
+90233 118 124 4 4 82300 0 0
+91323 68 111 4 2 142000 0 0
+91512 119 151 4 6 10200 0 0
+93110 119 150 4 4 130000 0 0
+93976 118 123 4 2 72800 0 0
+95376 70 114 6 8 2040 0 0
+96135 120 151 6 6 123000 0 0
+97388 75 117 6 6 37200 0 0
+97543 67 108 2 2 35500 0 0
+97900 120 150 6 4 12500 0 0
+98660 73 114 8 8 36200 0 0
+99072 69 112 4 6 3340 0 0
+99594 77 117 4 6 14900 0 0
+100690 71 113 4 4 825 0 0
+100850 70 112 6 6 57900 0 0
+101450 75 116 6 4 21200 0 0
+101460 120 145 6 8 452000 0 0
+102170 71 111 4 2 316 0 0
+103040 69 110 4 4 62400 0 0
+103300 72 113 2 4 153 0 0
+103850 77 116 4 4 5850 0 0
+104070 75 114 6 8 22400 0 0
+104230 119 133 4 6 389000 0 0
+104420 76 114 10 8 268000 0 0
+104490 68 108 4 2 57700 0 0
+104520 73 112 8 6 244000 0 0
+104770 119 132 4 2 150000 0 0
+104860 72 111 2 2 585 0 0
+104960 70 110 6 4 237000 0 0
+105380 69 109 4 2 292000 0 0
+105390 77 115 4 2 35000 0 0
+105490 119 131 4 4 14700 0 0
+106880 80 116 2 4 16800 0 0
+107370 85 117 4 6 5130 0 0
+108060 86 117 6 6 45300 0 0
+108270 89 117 8 6 200000 0 0
+108510 80 115 2 2 6410 0 0
+110260 120 133 6 6 23500 0 0
+110610 75 112 6 6 5580 0 0
+111130 84 116 2 4 11600 0 0
+111680 120 131 6 4 111000 0 0
+112340 85 116 4 4 71700 0 0
+112890 84 115 2 2 110000 0 0
+113090 86 116 6 4 138000 0 0
+113470 77 112 4 6 12100 0 0
+114140 85 115 4 2 107000 0 0
+115580 75 110 6 4 816 0 0
+116340 86 114 6 8 6100 0 0
+116600 89 114 8 8 36500 0 0
+118700 77 110 4 4 8030 0 0
+118930 71 108 4 2 289000 0 0
+121830 77 109 4 2 2320 0 0
+122590 72 108 2 2 132000 0 0
+122680 80 110 2 4 5690 0 0
+123680 85 112 4 6 8320 0 0
+124590 86 112 6 6 20000 0 0
+124880 89 112 8 6 6580 0 0
+126020 80 109 2 2 10500 0 0
+128310 84 110 2 4 7980 0 0
+129920 85 110 4 4 12300 0 0
+130510 92 113 4 4 11800 0 0
+130920 86 110 6 4 10500 0 0
+131970 84 109 2 2 14700 0 0
+133010 92 111 4 2 111000 0 0
+133670 85 109 4 2 14100 0 0
+134580 95 113 6 4 96600 0 0
+157970 121 150 2 4 60600 0 0
+159740 122 151 4 6 70300 0 0
+164680 122 150 4 4 10700 0 0
+194720 121 132 2 2 899 0 0
+197230 121 131 2 4 216 0 0
+205020 122 132 4 2 385 0 0
+206040 67 104 2 4 13700 0 0
+207800 122 131 4 4 924 0 0
+226750 68 105 4 6 12400 0 0
+239680 68 104 4 4 1740 0 0
+307940 71 105 4 6 1660 0 0
+332290 71 104 4 4 221 0 0
+362490 72 104 2 4 850 0 0
+386780 74 105 6 6 180 0 0
+425990 74 104 6 4 2840 0 0
+548280 81 105 8 6 1270 0 0
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/analyze.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/analyze.ini
new file mode 100644
index 000000000..1849c7c78
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/analyze.ini
@@ -0,0 +1,12 @@
+! hdf5 diff
+h5diff_file = 70degCone2D_Set1_RadiationSurfState.h5
+h5diff_reference_file = 70degCone2D_Set1_reference_RadiationSurfState.h5
+h5diff_data_set = SurfaceData
+h5diff_tolerance_value = 15E-2
+h5diff_tolerance_type = relative
+h5diff_max_differences = 5
+
+! Reshape SurfaceData by removing the last dimension (iBC which is not present in the ref file)
+h5diff_reshape = T
+h5diff_reshape_dim = 3
+h5diff_reshape_value = 2
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/command_line.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/command_line.ini
new file mode 100644
index 000000000..757f4f75e
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/command_line.ini
@@ -0,0 +1 @@
+MPI=6
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/externals.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/externals.ini
new file mode 100644
index 000000000..5ad6aeb28
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/externals.ini
@@ -0,0 +1,9 @@
+! --- Externals Tool Reggie
+MPI = 1, 1 ! Single execution
+externalbinary = ./bin/piclas2vtk, ./bin/piclas2vtk ! Relative binary path in build directory
+externaldirectory = piclas2vtk.ini, piclas2vtk.ini ! Directory name, where the files are located for the external tool reggie
+externalruntime = post, post ! Run after piclas is completed (post: after, pre: before)
+cmd_suffix = 70degCone2D_Set1_RadiationState.h5, 70degCone2D_Set1_RadiationSurfState.h5 ! Suffix for the binary execution
+nocrosscombination:MPI,externalbinary,externaldirectory,externalruntime,cmd_suffix
+
+
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini
new file mode 100644
index 000000000..03416414d
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini
@@ -0,0 +1,148 @@
+! =============================================================================== !
+! EQUATION (linearscalaradvection)
+! =============================================================================== !
+IniExactFunc = 0
+
+! =============================================================================== !
+! DISCRETIZATION
+! =============================================================================== !
+N = 1 ! Polynomial degree
+NAnalyze = 1 ! Number of analyze points
+
+! =============================================================================== !
+! MESH
+! =============================================================================== !
+MeshFile = mesh_70degCone2D_Set1_noWake_mesh.h5
+useCurveds = F
+TrackingMethod = triatracking
+WeightDistributionMethod = 1
+! =============================================================================== !
+! OUTPUT / VISUALIZATION
+! =============================================================================== !
+ProjectName = 70degCone2D_Set1
+Logging = F
+printRandomSeeds = F
+IterDisplayStep = 100
+! =============================================================================== !
+! CALCULATION
+! =============================================================================== !
+tend = 2.0E-3 ! End time
+Analyze_dt = 4.0E-3 ! Timestep of analyze outputs
+CFLscale = 0.2 ! Scaling of theoretical CFL number
+PartWeightLoadBalance = T
+DoInitialAutoRestart = T
+InitialAutoRestart-PartWeightLoadBalance = T
+LoadBalanceMaxSteps = 2
+CalcSurfaceImpact = T
+UseH5IOLoadBalance = T
+! =============================================================================== !
+! BOUNDARIES
+! =============================================================================== !
+Part-nBounds = 5
+Part-Boundary1-SourceName = IN
+Part-Boundary1-Condition = open
+Part-Boundary2-SourceName = OUT
+Part-Boundary2-Condition = open
+Part-Boundary3-SourceName = WALL
+Part-Boundary3-Condition = reflective
+Part-Boundary3-PhotonSpecularReflection = false
+Part-Boundary3-PhotonEnACC = 0.5
+Part-Boundary3-WallTemp = 300.
+Part-Boundary3-TransACC = 1.
+Part-Boundary3-MomentumACC = 1.
+Part-Boundary3-VibACC = 1.
+Part-Boundary3-RotACC = 1.
+Part-Boundary4-SourceName = SYMAXIS
+Part-Boundary4-Condition = symmetric_axis
+Part-Boundary5-SourceName = ROTSYM
+Part-Boundary5-Condition = symmetric
+Part-FIBGMdeltas = (/0.001,0.001,0.01/)
+! =============================================================================== !
+! PARTICLES
+! =============================================================================== !
+Part-maxParticleNumber = 1
+Part-nSpecies = 2
+! =============================================================================== !
+! Species1 - N
+! =============================================================================== !
+Part-Species1-MassIC = 2.32600E-26 ! N Molecular Mass
+Part-Species1-MacroParticleFactor = 2.5E10
+
+Part-Species1-SpeciesName = N
+Part-Species1-InteractionID = 1
+Part-Species1-Tref = 273 ! K
+Part-Species1-dref = 3.0E-10 ! m
+Part-Species1-omega = 0.24
+
+Part-Species1-DoRadiation = T
+Part-Species1-RadiationIonizationEn = 117345 ! Ionization Energy, cm-1
+Part-Species1-RadiationMass_u = 14.0067 ! Mass, u
+Part-Species1-RadiationRadius_A = 0.7 ! Radius, A
+Part-Species1-Starkex = 0.33 ! Stark Index
+Part-Species1-NuclCharge = 1 ! Charge (1:neutral particles, 2:ions)
+Radiation-Species1-SpectraFileName = Ni_NIST.dat
+! =============================================================================== !
+! Species2 - N2
+! =============================================================================== !
+Part-Species2-MacroParticleFactor = 2.5E10
+Part-Species2-MassIC = 4.65200E-26 ! N2 Molecular Mass
+
+Part-Species2-SpeciesName = N2
+Part-Species2-InteractionID = 2
+Part-Species2-Tref = 273
+Part-Species2-dref = 4.07E-10
+Part-Species2-omega = 0.24
+Part-Species2-CharaTempVib = 3393.3
+Part-Species2-Ediss_eV = 9.759
+Part-Species2-CharaTempRot = 2.87
+
+Part-Species2-DoRadiation = T
+Part-Species2-RadiationIonizationEn = 125668.22 ! Ionization Energy, cm-1
+Radiation-Species2-SpectraFileName = N2i.dat
+! =============================================================================== !
+! DSMC
+! =============================================================================== !
+UseDSMC = true
+Particles-DSMCReservoirSim = true
+Particles-DSMC-CollisMode = 2 !(1:elast coll, 2: elast + rela, 3:chem)
+Part-NumberOfRandomSeeds = 2
+Particles-RandomSeed1 = 1
+Particles-RandomSeed2 = 2
+Particles-DSMC-CalcQualityFactors = T
+Particles-ManualTimeStep = 5E-2
+Particles-HaloEpsVelo=1E20
+! =============================================================================== !
+! Radiation
+! =============================================================================== !
+Radiation-RadType = 1 ! 1:particle radiation, 2:black body radiation, 3:rad solver
+Radiation-bb-atoms = t ! atomic line radiation (t,f)
+Radiation-bb-molecules = t ! molecular band radiation (t,f)
+Radiation-bf = f ! bound-free radiation (t,f)
+Radiation-ff = f ! free-free radiation (t,f)
+Radiation-MinWaveLen = 300 ! minimum wavelength, nm
+Radiation-MaxWaveLen = 900 ! maximum Wavelength, nm
+Radiation-WaveLenDiscr = 60000 ! number of discretization points
+Radiation-WaveLenReductionFactor = 1 !Spectral binning factor for radiative transfer
+
+Radiation-MacroRadInput= t
+Radiation-MacroInput-Filename=70degCone2D_Set1_ConeHot_DSMCState_000.00020000000000000.h5
+Radiation-UseElectronicExcitation = t
+! =============================================================================== !
+! Radiative Transfer
+! =============================================================================== !
+Radiation-NumPhotonsPerCell = 2000
+Radiation-AbsorptionModel = 1 ! 1:analytical 2:MC
+Radiation-DirectionModel = 2 ! 1:random 2:spiral(random or center)
+Radiation-PhotonPosModel = 2 ! 1:random 2:Halton
+Radiation-AdaptivePhotonNumEmission = T ! true:photons have same energy, false:PhotonNum per cell is equal
+Radiation-PhotonWaveLengthModel = 1 ! Absorption models: 1:Acceptance Rejection 2:Bisection
+! =============================================================================== !
+! 2D/Axisymmetric Simulation
+! =============================================================================== !
+Particles-Symmetry2D = T
+Particles-Symmetry2DAxisymmetric = T
+Particles-RadialWeighting = T
+Particles-RadialWeighting-PartScaleFactor = 10000
+Particles-RadialWeighting-CloneMode = 2
+Particles-RadialWeighting-CloneDelay = 6
+Particles-RadialWeighting-CellLocalWeighting = F
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/piclas2vtk.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/piclas2vtk.ini
new file mode 100644
index 000000000..26b9fd923
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/piclas2vtk.ini
@@ -0,0 +1 @@
+NVisu = 1
\ No newline at end of file
diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md
new file mode 100644
index 000000000..21c4a4ec5
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/readme.md
@@ -0,0 +1,5 @@
+# Radiation - Hypersonic flow around a 70° Cone (Axisymmetric) - Radiation pipeline
+* Simulation of a the radiation of a hypersonic N2-N flow around a 70° blunted cone
+* Read-in of a DSMC-State file to calculate the radiation
+* Radiation of N2 and N (bound-bound transitions)
+* Comparison of the radiative heat flux with a reference surface state file
diff --git a/regressioncheck/WEK_Radiation/builds.ini b/regressioncheck/WEK_Radiation/builds.ini
new file mode 100644
index 000000000..4b565029a
--- /dev/null
+++ b/regressioncheck/WEK_Radiation/builds.ini
@@ -0,0 +1,17 @@
+! relative binary path in build directory
+binary=./bin/piclas
+
+! fixed compiler flags
+CMAKE_BUILD_TYPE = RELEASE
+LIBS_BUILD_HDF5 = OFF
+PICLAS_POLYNOMIAL_DEGREE = N
+PICLAS_EQNSYSNAME = maxwell
+PICLAS_TIMEDISCMETHOD = Radiation
+LIBS_USE_MPI = ON
+PICLAS_NODETYPE = GAUSS
+PICLAS_INTKIND8 = ON,OFF
+
+!PICLAS_MEASURE_MPI_WAIT = ON
+
+! exclude combinations
+!EXCLUDE:PICLAS_EQNSYSNAME=poisson,PICLAS_TIMEDISCMETHOD=DSMC
diff --git a/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/analyze.ini b/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/analyze.ini
index e631023bc..0829259b4 100644
--- a/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/analyze.ini
+++ b/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/analyze.ini
@@ -1,4 +1,4 @@
compare_data_file_name = PartAnalyze.csv
compare_data_file_reference = Database_Velec_2651843_ref.csv,Database_Velec_2982275_ref.csv,Database_Velec_3232654_ref.csv,Database_Velec_4032796_ref.csv,Database_Velec_5926739_ref.csv,Database_Velec_8381675_ref.csv,Database_Velec_11853478_ref.csv,Database_Velec_2651843_ref.csv,Database_Velec_2982275_ref.csv,Database_Velec_3232654_ref.csv,Database_Velec_4032796_ref.csv,Database_Velec_5926739_ref.csv,Database_Velec_8381675_ref.csv,Database_Velec_11853478_ref.csv
-compare_data_file_tolerance = 0.30
+compare_data_file_tolerance = 0.40
compare_data_file_tolerance_type = relative
diff --git a/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/cube_mesh.h5 b/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/cube_mesh.h5
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md b/regressioncheck/WEK_Reservoir/MCC_N2_XSec_Elec/readme.md
old mode 100755
new mode 100644
diff --git a/regressioncheck/WEK_Reservoir/builds.ini b/regressioncheck/WEK_Reservoir/builds.ini
index 3bd7c1fa7..ae811b804 100644
--- a/regressioncheck/WEK_Reservoir/builds.ini
+++ b/regressioncheck/WEK_Reservoir/builds.ini
@@ -6,7 +6,7 @@ CMAKE_BUILD_TYPE=RELEASE
LIBS_BUILD_HDF5 =OFF
PICLAS_POLYNOMIAL_DEGREE=N
PICLAS_EQNSYSNAME=maxwell
-PICLAS_TIMEDISCMETHOD=RESERVOIR
+PICLAS_TIMEDISCMETHOD=DSMC
LIBS_USE_MPI =ON
PICLAS_NODETYPE=GAUSS
diff --git a/regressioncheck/run_basic/poisson/parameter.ini b/regressioncheck/run_basic/poisson/parameter.ini
index 5e8648cbe..c766acdd6 100644
--- a/regressioncheck/run_basic/poisson/parameter.ini
+++ b/regressioncheck/run_basic/poisson/parameter.ini
@@ -121,29 +121,9 @@ Part-PartLorentzType = 3 ! old
! =============================================================================== !
! DSMC
! =============================================================================== !
-! UseDSMC=false
-! Particles-DSMCReservoirSim=false
-! Particles-NumberForDSMCOutputs=0
-! Part-TimeFracForSampling=0.0
-! Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
-! Part-NumberOfRandomSeeds =2
-! Particles-RandomSeed1= 1
-! Particles-RandomSeed2= 2
-! !ManualTimeStep=3.3E-13
-!
-! Particles-HaloEpsVelo=300E6
-! epsCG=1e-6 ! 1.0E-6
-! maxIterCG=2000 !'500'
-! ! MISC
-!
-! xyzPhysicalMinMax = (/-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,-5.00E-01,5.00E-01,/) !
-
-
-
UseDSMC=T ! yolo
Particles-DSMC-ElectronicModel= 1
Particles-DSMCElectronicDatabase=DSMCSpecies_electronic_state_full_Data.h5 ! when supplied: doQK=true
-Particles-DSMCReservoirSim=false
Particles-NumberForDSMCOutputs=0
Part-TimeFracForSampling=0.0
Particles-DSMC-CollisMode=3 !(1:elast coll, 2: elast + rela, 3:chem)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5a63bdd47..8c5a8b5d8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -28,7 +28,6 @@ SET_PROPERTY(CACHE PICLAS_TIMEDISCMETHOD PROPERTY STRINGS Euler-Explicit
RK4
RK14
DSMC
- RESERVOIR
FP-Flow
BGK-Flow
CN
@@ -39,7 +38,8 @@ SET_PROPERTY(CACHE PICLAS_TIMEDISCMETHOD PROPERTY STRINGS Euler-Explicit
ROS3
ROS4
ROS46
- ROS6)
+ ROS6
+ Radiation)
# =========================================================================
# Shared memory region splitting
@@ -63,14 +63,14 @@ IF(PICLAS_SHARED_MEMORY STREQUAL "MPI_COMM_TYPE_SHARED")
UNSET(PICLAS_SHARED_MEMORY_CORES CACHE)
ADD_DEFINITIONS(-DCORE_SPLIT=0)
MESSAGE(STATUS "Shared memory split type for subcommunicators set to node-level")
-ELSEIF(PICLAS_SHARED_MEMORY STREQUAL "PICLAS_COMM_TYPE_NODE")
- SET(PICLAS_SHARED_MEMORY_CORES "2" CACHE STRING "Number of cores per node when setting PICLAS_SHARED_MEMORY=PICLAS_COMM_TYPE_NODE. All cores must be on the same physical node!")
- ADD_DEFINITIONS(-DCORE_SPLIT=${PICLAS_SHARED_MEMORY_CORES})
- MESSAGE(STATUS "Shared memory split type for subcommunicators set to sub-node-level with user-specific value [PICLAS_SHARED_MEMORY_CORES = ${PICLAS_SHARED_MEMORY_CORES}] cores per node")
ELSEIF(PICLAS_SHARED_MEMORY STREQUAL "OMPI_COMM_TYPE_CORE")
UNSET(PICLAS_SHARED_MEMORY_CORES CACHE)
ADD_DEFINITIONS(-DCORE_SPLIT=1)
MESSAGE(STATUS "Shared memory split type for subcommunicators set to core-level")
+ELSEIF(PICLAS_SHARED_MEMORY STREQUAL "PICLAS_COMM_TYPE_NODE")
+ SET(PICLAS_SHARED_MEMORY_CORES "2" CACHE STRING "Number of cores per node when setting PICLAS_SHARED_MEMORY=PICLAS_COMM_TYPE_NODE. All cores must be on the same physical node!")
+ ADD_DEFINITIONS(-DCORE_SPLIT=${PICLAS_SHARED_MEMORY_CORES})
+ MESSAGE(STATUS "Shared memory split type for subcommunicators set to sub-node-level with user-specific value [PICLAS_SHARED_MEMORY_CORES = ${PICLAS_SHARED_MEMORY_CORES}] cores per node")
ENDIF()
# =========================================================================
@@ -79,7 +79,7 @@ ENDIF()
CMAKE_DEPENDENT_OPTION(PICLAS_LOADBALANCE "Use load balance time measurement" ON "LIBS_USE_MPI" OFF)
OPTION(PICLAS_INTKIND8 "Enable particle numbers larger than 2147483647 (on most systems, huge(4-byte-integer)))" OFF)
-IF (PICLAS_INTKIND8)
+IF(PICLAS_INTKIND8)
ADD_DEFINITIONS(-DINTKIND8)
ENDIF()
@@ -160,8 +160,6 @@ IF(PICLAS_PARTICLES)
ELSE()
IF(PICLAS_TIMEDISCMETHOD STREQUAL "DSMC")
MESSAGE(SEND_ERROR "DSMC cannot be used without particles.")
- ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "RESERVOIR")
- MESSAGE(SEND_ERROR "RESERVOIR cannot be used without particles.")
ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "BGK-Flow")
MESSAGE(SEND_ERROR "BGK-Flow cannot be used without particles.")
ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "FP-Flow")
@@ -240,9 +238,6 @@ ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "RK14")
ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "DSMC")
FILE(GLOB timediscF90 ${CMAKE_CURRENT_SOURCE_DIR}/src/timedisc/timedisc_TimeStep_DSMC.f90)
ADD_DEFINITIONS(-DPP_TimeDiscMethod=4)
-ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "RESERVOIR")
- FILE(GLOB timediscF90 ${CMAKE_CURRENT_SOURCE_DIR}/src/timedisc/timedisc_TimeStep_DSMC_Debug.f90)
- ADD_DEFINITIONS(-DPP_TimeDiscMethod=42)
ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "CN")
FILE(GLOB timediscF90 ${CMAKE_CURRENT_SOURCE_DIR}/src/timedisc/timedisc_TimeStepByImplicitRK.f90)
ADD_DEFINITIONS(-DPP_TimeDiscMethod=120 -DIMPA)
@@ -285,6 +280,9 @@ ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "FP-Flow")
ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "BGK-Flow")
FILE(GLOB timediscF90 ${CMAKE_CURRENT_SOURCE_DIR}/src/timedisc/timedisc_TimeStep_BGK.f90)
ADD_DEFINITIONS(-DPP_TimeDiscMethod=400)
+ELSEIF(PICLAS_TIMEDISCMETHOD STREQUAL "Radiation")
+ FILE(GLOB timediscF90 ${CMAKE_CURRENT_SOURCE_DIR}/src/timedisc/timedisc_TimeStep_Radiation.f90)
+ ADD_DEFINITIONS(-DPP_TimeDiscMethod=600)
ELSE()
MESSAGE(SEND_ERROR "Unknown time discretization method.")
ENDIF()
@@ -364,7 +362,7 @@ ENDIF()
IF(BUILD_TYPE_LC MATCHES "sanitize" AND LIBS_USE_MPI)
SET(ACTIVATE_UNIT_TEST OFF)
# Check if unit tests were previously activated
- IF(PICLAS_UNITTESTS)
+ IF(PICLAS_UNITTESTS AND LIBS_MPI_NAME MATCHES "OpenMPI")
MESSAGE(WARNING "Unit tests automatically disabled (PICLAS_UNITTESTS=OFF) with\n CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}\n LIBS_USE_MPI = ${LIBS_USE_MPI}\nas the tests will always fail due to memory errors returned from the MPI library.")
SET(PICLAS_UNITTESTS OFF)
ENDIF()
@@ -491,7 +489,12 @@ ENDIF()
#./src/piclaslib.f90)
FILE(GLOB_RECURSE particlesF90 ./src/particles/*.f90
./src/posti/superB/*.f90
- ./src/interpolation/eval_xyz.f90)
+ ./src/interpolation/eval_xyz.f90
+ ./src/radiation/ray_tracing/*.f90
+ ./src/radiation/radiative_transfer/radtrans_vars.f90
+ ./src/radiation/radiative_transfer/tracking/*.f90
+ ./src/radiation/radiation_solver/radiation_vars.f90)
+
FILE(GLOB noparticlesF90 ./src/particles/analyze/particle_analyze_vars.f90
./src/particles/particle_mesh/particle_surfaces_vars.f90
./src/particles/particle_mesh/particle_mesh_vars.f90
@@ -503,6 +506,8 @@ FILE(GLOB noparticlesF90 ./src/particles/analyze/particle_analyze_vars.f90
FILE(GLOB_RECURSE extraeF90 ./src/extrae/*.f90)
+FILE(GLOB_RECURSE radiationF90 ./src/radiation/*.f90)
+
IF(PICLAS_EXTRAE)
LIST(APPEND piclasF90 ${extraeF90})
ENDIF(PICLAS_EXTRAE)
@@ -528,6 +533,9 @@ IF (PICLAS_PARTICLES)
ELSE()
LIST(APPEND piclasF90 ${noparticlesF90})
ENDIF(PICLAS_PARTICLES)
+IF (PICLAS_TIMEDISCMETHOD STREQUAL "Radiation")
+ LIST(APPEND piclasF90 ${radiationF90})
+ENDIF()
# define libs
ADD_LIBRARY( libpiclasstaticF90 OBJECT ${piclasF90} )
@@ -557,6 +565,8 @@ SET_TARGET_PROPERTIES(libpiclasshared PROPERTIES OUTPUT_NAME "libpiclas")
ADD_DEPENDENCIES(libpiclasshared libpiclasstatic userblocklib stacksizelib memusagelib ${INTERNALLIBS})
ADD_EXEC(piclas ./src/piclas.f90)
ADD_DEPENDENCIES(piclas libpiclasstatic userblocklib stacksizelib memusagelib ${INTERNALLIBS})
+# Make sure that the script is executed even though cmake is not explicitly executed after the commit is changed in git
+ADD_DEPENDENCIES(piclas UpdateGitCommitHash)
# special compiler flags to avoid warnings for empty functions of testcase.f90 and overwrite of intrinsic abort in globals.f90
IF (CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
diff --git a/src/analyze/analyze.f90 b/src/analyze/analyze.f90
index c82d7d771..300a6c5a1 100644
--- a/src/analyze/analyze.f90
+++ b/src/analyze/analyze.f90
@@ -333,11 +333,11 @@ SUBROUTINE InitAnalyze()
END DO ! iElem = 1, nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , PPWCellMin , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , PPWCellMax , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , PPWCellMin , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , PPWCellMax , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(PPWCellMin , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(PPWCellMax , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(PPWCellMin , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(PPWCellMax , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -421,11 +421,11 @@ SUBROUTINE CalcError(time,L_2_Error,L_Inf_Error)
END DO ! iElem=1,PP_nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , PP_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , PP_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , PP_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , PP_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(L_2_Error , 0 , PP_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(L_Inf_Error , 0 , PP_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(L_2_Error , 0 , PP_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(L_Inf_Error , 0 , PP_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -497,11 +497,11 @@ SUBROUTINE CalcErrorPartSource(PartSource_nVar,L_2_PartSource,L_Inf_PartSource)
END DO ! iElem=1,PP_nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , L_2_PartSource , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_PartSource , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_2_PartSource , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_PartSource , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(L_2_PartSource , 0 , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(L_Inf_PartSource , 0 , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(L_2_PartSource , 0 , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(L_Inf_PartSource , 0 , PartSource_nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -577,7 +577,7 @@ SUBROUTINE CalcErrorStateFiles(nVar,N1,N2,U1,U2)
! Interpolate values of Error-Grid from GP's
DO iElem=1,nElems
- ! Interpolate the Jacobian to the analyze grid: be carefull we interpolate the inverse of the inverse of the jacobian ;-)
+ ! Interpolate the Jacobian to the analyze grid: be careful we interpolate the inverse of the inverse of the Jacobian ;-)
J_N(1,0:N1,0:N1,0:N1)=1./sJ(:,:,:,iElem)
CALL ChangeBasis3D(1,N1,NAnalyze,Vdm_GaussN_NAnalyze1,J_N(1:1,0:N1,0:N1,0:N1),J_NAnalyze(1:1,:,:,:))
@@ -602,13 +602,13 @@ SUBROUTINE CalcErrorStateFiles(nVar,N1,N2,U1,U2)
END DO ! iElem=1,nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , volume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , volume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(L_2_Error , L_2_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(volume , volume2 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(L_Inf_Error , L_Inf_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(L_2_Error , L_2_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(volume , volume2 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(L_Inf_Error , L_Inf_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -707,13 +707,13 @@ SUBROUTINE CalcErrorStateFileSigma(nVar,N1,U1)
END DO ! iElem=1,nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , volume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , volume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(L_2_Error , L_2_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(volume , volume2 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(L_Inf_Error , L_Inf_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(L_2_Error , L_2_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(volume , volume2 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(L_Inf_Error , L_Inf_Error2 , nVar , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -825,6 +825,7 @@ SUBROUTINE FinalizeAnalyze()
! Finalizes variables necessary for analyse subroutines
!===================================================================================================================================
! MODULES
+USE MOD_Globals
#if PP_nVar>=6
USE MOD_Analyze_Vars ,ONLY: CalcPoyntingInt
USE MOD_AnalyzeField ,ONLY: FinalizePoyntingInt
@@ -844,6 +845,9 @@ SUBROUTINE FinalizeAnalyze()
! OUTPUT VARIABLES
!----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
+#if USE_HDG && USE_MPI
+INTEGER :: iEDCBC
+#endif /*USE_HDG && USE_MPI*/
!===================================================================================================================================
#if PP_nVar>=6
IF(CalcPoyntingInt) CALL FinalizePoyntingInt()
@@ -856,6 +860,9 @@ SUBROUTINE FinalizeAnalyze()
SDEALLOCATE(EDC%FieldBoundaries)
SDEALLOCATE(EDC%BCIDToEDCBCID)
#if USE_MPI
+ DO iEDCBC = 1, EDC%NBoundaries
+ IF(EDC%COMM(iEDCBC)%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(EDC%COMM(iEDCBC)%UNICATOR,iERROR)
+ END DO
SDEALLOCATE(EDC%COMM)
#endif /*USE_MPI*/
END IF ! CalcElectricTimeDerivative
@@ -1238,13 +1245,13 @@ SUBROUTINE PerformAnalyze(OutputTime,FirstOrLastIter,OutPutHDF5)
IF(OutPutHDF5 .AND. MeasureTrackTime)THEN
#if USE_MPI
IF(MPIRoot) THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , nTracks , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE , tTracking , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE , tLocalization , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , nTracks , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , tTracking , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , tLocalization , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
ELSE ! no Root
- CALL MPI_REDUCE(nTracks , RECI , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(tTracking , RECR , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(tLocalization , RECR , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(nTracks , RECI , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(tTracking , RECR , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(tLocalization , RECR , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
END IF
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(132("-"))')
@@ -1276,9 +1283,9 @@ SUBROUTINE PerformAnalyze(OutputTime,FirstOrLastIter,OutPutHDF5)
! TotalSideBoundingBoxVolume=SUM(SideBoundingBoxVolume)
!#if USE_MPI
! IF(MPIRoot) THEN
-! CALL MPI_REDUCE(MPI_IN_PLACE, TotalSideBoundingBoxVolume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+! CALL MPI_REDUCE(MPI_IN_PLACE, TotalSideBoundingBoxVolume , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
! ELSE ! no Root
-! CALL MPI_REDUCE(TotalSideBoundingBoxVolume , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+! CALL MPI_REDUCE(TotalSideBoundingBoxVolume , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
! END IF
!#endif /*USE_MPI*/
! SWRITE(UNIT_stdOut,'(A35,E15.7)') ' Total Volume of SideBoundingBox: ' , TotalSideBoundingBoxVolume
@@ -1408,13 +1415,13 @@ SUBROUTINE CodeAnalyzeOutput(TIME)
! MPI Communication
#if USE_MPI
IF(MPIRoot) THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , rBoundingBoxChecks , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE , rPerformBezierClip , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE , rPerformBezierNewton , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , rBoundingBoxChecks , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , rPerformBezierClip , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , rPerformBezierNewton , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
ELSE ! no Root
- CALL MPI_REDUCE(rBoundingBoxChecks , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(rPerformBezierClip , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(rPerformBezierNewton , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(rBoundingBoxChecks , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(rPerformBezierClip , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(rPerformBezierNewton , rDummy , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
END IF
#endif /*USE_MPI*/
@@ -1471,12 +1478,15 @@ SUBROUTINE InitCalcElectricTimeDerivativeSurface()
! MODULES
USE MOD_Globals
USE MOD_Preproc
-USE MOD_Mesh_Vars ,ONLY: nBCs,BoundaryType,BoundaryName,nBCSides,BC
+USE MOD_Mesh_Vars ,ONLY: nBCs,BoundaryType
USE MOD_Analyze_Vars ,ONLY: DoFieldAnalyze,CalcElectricTimeDerivative,EDC
USE MOD_Equation_Vars ,ONLY: Et
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+#if USE_MPI
+USE MOD_Mesh_Vars ,ONLY: BoundaryName,nBCSides,BC
+#endif /*USE_MPI*/
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------!
! INPUT / OUTPUT VARIABLES
@@ -1554,7 +1564,7 @@ SUBROUTINE InitCalcElectricTimeDerivativeSurface()
EDC%COMM(iEDCBC)%ID=iEDCBC
! create new emission communicator for electric displacement current communication. Pass MPI_INFO_NULL as rank to follow the original ordering
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, color, MPI_INFO_NULL, EDC%COMM(iEDCBC)%UNICATOR, iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, EDC%COMM(iEDCBC)%UNICATOR, iError)
! Find my rank on the shared communicator, comm size and proc name
IF(BConProc(iEDCBC))THEN
diff --git a/src/analyze/analyze_vars.f90 b/src/analyze/analyze_vars.f90
index 26b8f403e..95a63f36b 100644
--- a/src/analyze/analyze_vars.f90
+++ b/src/analyze/analyze_vars.f90
@@ -15,6 +15,9 @@
!===================================================================================================================================
MODULE MOD_Analyze_Vars
! MODULES
+#if USE_MPI
+USE MOD_Globals
+#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
PUBLIC
@@ -94,14 +97,10 @@ MODULE MOD_Analyze_Vars
#if USE_MPI
TYPE tMPIGROUP
- INTEGER :: ID !< MPI communicator ID
- INTEGER :: UNICATOR !< MPI communicator for electric displacement current
- INTEGER :: Request !< MPI request for asynchronous communication
- INTEGER :: nProcs !< number of MPI processes for particles
- INTEGER :: MyRank !< MyRank of PartMPIVAR%COMM
- LOGICAL :: MPIRoot !< Root, MPIRank=0
- INTEGER,ALLOCATABLE :: GroupToComm(:) !< list containing the rank in PartMPI%COMM
- INTEGER,ALLOCATABLE :: CommToGroup(:) !< list containing the rank in PartMPI%COMM
+ INTEGER :: ID !< MPI communicator ID
+ INTEGER :: UNICATOR=MPI_COMM_NULL !< MPI communicator for electric displacement current
+ INTEGER :: nProcs !< number of MPI processes for particles
+ INTEGER :: MyRank !< MyRank within communicator
END TYPE
#endif /*USE_MPI*/
diff --git a/src/analyze/analyzefield.f90 b/src/analyze/analyzefield.f90
index 3e9080bc2..ff43be39e 100644
--- a/src/analyze/analyzefield.f90
+++ b/src/analyze/analyzefield.f90
@@ -97,7 +97,7 @@ SUBROUTINE AnalyzeField(Time)
INTEGER :: iPlane
REAL :: PoyntingIntegral(1:nPoyntingIntPlanes)
#endif /*PP_nVar>=6*/
-CHARACTER(LEN=150) :: formatStr
+CHARACTER(LEN=1000) :: formatStr
#if (PP_nVar==8)
INTEGER,PARAMETER :: helpInt=4
#else
@@ -126,7 +126,7 @@ SUBROUTINE AnalyzeField(Time)
'HDG-Norm' &
#endif /*USE_HDG*/
/)
-CHARACTER(LEN=255),ALLOCATABLE :: tmpStr(:) ! needed because PerformAnalyze is called multiple times at the beginning
+CHARACTER(LEN=500),ALLOCATABLE :: tmpStr(:) ! needed because PerformAnalyze is called multiple times at the beginning
CHARACTER(LEN=5000) :: tmpStr2
CHARACTER(LEN=1),PARAMETER :: delimiter=","
INTEGER :: I,iBoundary
@@ -558,7 +558,7 @@ SUBROUTINE CalcPoyntingIntegral(PoyntingIntegral,doProlong)
END DO ! iElems
#if USE_MPI
- CALL MPI_REDUCE (PoyntingIntegral(:) , SumSabs(:) , nPoyntingIntPlanes , MPI_DOUBLE_PRECISION ,MPI_SUM, 0, MPI_COMM_WORLD,IERROR)
+ CALL MPI_REDUCE(PoyntingIntegral(:) , SumSabs(:) , nPoyntingIntPlanes , MPI_DOUBLE_PRECISION ,MPI_SUM, 0, MPI_COMM_PICLAS,IERROR)
PoyntingIntegral(:) = SumSabs(:)
#endif /*USE_MPI*/
@@ -803,7 +803,7 @@ SUBROUTINE GetPoyntingIntPlane()
! prolonged values of mu_r and no MPI information has to be sent. The master side cannot currently be outside of the dielectric
! region (e.g. in vacuum) because that is not allowed. If this would be allowed that MPI rank would need the information of the
! prolonged dielectric material properties from the slave side
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,PoyntingUseMuR_Inv,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,PoyntingUseMuR_Inv,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
#endif
! Determine mu_r on faces within a dielectric region for calculating the Poynting vector and communicate the
! prolonged values via MPI
@@ -815,9 +815,9 @@ SUBROUTINE GetPoyntingIntPlane()
#if USE_MPI
sumFaces=0
sumAllFaces=0
- CALL MPI_REDUCE(nFaces , sumFaces , nPoyntingIntPlanes , MPI_INTEGER, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(nFaces , sumFaces , nPoyntingIntPlanes , MPI_INTEGER, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
!nFaces(:) = sumFaces(:)
- CALL MPI_REDUCE(nPoyntingIntSides , sumAllFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(nPoyntingIntSides , sumAllFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
!nPoyntingIntSides = sumAllFaces
#else
sumFaces=nFaces
@@ -996,18 +996,18 @@ SUBROUTINE CalcPotentialEnergy(WEl)
#if USE_MPI
! todo: only one reduce with array
IF(MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,WEl , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,WEl , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#if (PP_nVar==8)
- CALL MPI_REDUCE(MPI_IN_PLACE,WMag , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,Wphi , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,Wpsi , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,WMag , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,Wphi , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,Wpsi , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#endif /*PP_nVar=8*/
ELSE
- CALL MPI_REDUCE(WEl ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(WEl ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#if (PP_nVar==8)
- CALL MPI_REDUCE(WMag ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
- CALL MPI_REDUCE(Wphi ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
- CALL MPI_REDUCE(Wpsi ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(WMag ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(Wphi ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(Wpsi ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#endif /*PP_nVar=8*/
END IF
#endif /*USE_MPI*/
@@ -1197,14 +1197,14 @@ SUBROUTINE CalcPotentialEnergy_Dielectric(WEl)
#if USE_MPI
IF(MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,WEl , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,WEl , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#if (PP_nVar==8)
- CALL MPI_REDUCE(MPI_IN_PLACE,WMag , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,WMag , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#endif /*PP_nVar=8*/
ELSE
- CALL MPI_REDUCE(WEl ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(WEl ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#if (PP_nVar==8)
- CALL MPI_REDUCE(WMag ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(WMag ,RD , 1 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#endif /*PP_nVar=8*/
END IF
#endif /*USE_MPI*/
@@ -1502,7 +1502,7 @@ SUBROUTINE CalculateAverageElectricPotential()
!AverageElectricPotentialProc = AverageElectricPotentialProc / (1e-4 * 1.28e-2)
#if USE_MPI
- CALL MPI_ALLREDUCE(AverageElectricPotentialProc , AverageElectricPotential , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , MPI_COMM_WORLD , IERROR)
+ CALL MPI_ALLREDUCE(AverageElectricPotentialProc , AverageElectricPotential , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , MPI_COMM_PICLAS , IERROR)
#else
AverageElectricPotential = AverageElectricPotentialProc
#endif /*USE_MPI*/
@@ -1585,7 +1585,7 @@ SUBROUTINE GetAverageElectricPotentialPlane()
END DO !iElem=1,nElems
#if USE_MPI
-CALL MPI_ALLREDUCE(nAverageElecPotSides , AverageElectricPotentialFaces , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_WORLD , IERROR)
+CALL MPI_ALLREDUCE(nAverageElecPotSides , AverageElectricPotentialFaces , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_PICLAS , IERROR)
#else
AverageElectricPotentialFaces=nAverageElecPotSides
#endif /*USE_MPI*/
diff --git a/src/equations/magnetostatic/calctimestep.f90 b/src/equations/magnetostatic/calctimestep.f90
index d9563065c..4f671a249 100644
--- a/src/equations/magnetostatic/calctimestep.f90
+++ b/src/equations/magnetostatic/calctimestep.f90
@@ -74,7 +74,7 @@ FUNCTION CALCTIMESTEP()
END DO ! iElem=1,PP_nElems
TimeStep(2)=MIN(TimeStep(2),4./maxLambda_v)
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
#endif
CalcTimeStep=MINVAL(TimeStep)
IF(CalcTimeStep.NE.CalcTimeStep)THEN
diff --git a/src/equations/magnetostatic_poisson/calctimestep.f90 b/src/equations/magnetostatic_poisson/calctimestep.f90
index 4ab2db30a..89b9f318f 100644
--- a/src/equations/magnetostatic_poisson/calctimestep.f90
+++ b/src/equations/magnetostatic_poisson/calctimestep.f90
@@ -74,7 +74,7 @@ FUNCTION CALCTIMESTEP()
END DO ! iElem=1,PP_nElems
TimeStep(2)=MIN(TimeStep(2),4./maxLambda_v)
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
#endif
CalcTimeStep=MINVAL(TimeStep)
IF(CalcTimeStep.NE.CalcTimeStep)THEN
diff --git a/src/equations/maxwell/calctimestep.f90 b/src/equations/maxwell/calctimestep.f90
index 44cb6b4e0..c4bbf5d7a 100644
--- a/src/equations/maxwell/calctimestep.f90
+++ b/src/equations/maxwell/calctimestep.f90
@@ -103,7 +103,7 @@ FUNCTION CALCTIMESTEP()
END IF
END DO ! iElem
#if USE_MPI
-CALL MPI_ALLREDUCE(locTimeStepConv,TimeStepConv,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(locTimeStepConv,TimeStepConv,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
#else
TimeStepConv=locTimeStepConv
#endif /*USE_MPI*/
diff --git a/src/equations/maxwell/equation.f90 b/src/equations/maxwell/equation.f90
index 34e6231f4..4e04d47ff 100644
--- a/src/equations/maxwell/equation.f90
+++ b/src/equations/maxwell/equation.f90
@@ -1326,7 +1326,7 @@ SUBROUTINE GetWaveGuideRadius(DoSide)
END DO
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,TERadius,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,TERadius,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
LBWRITE(UNIT_StdOut,*) ' Found waveguide radius of ', TERadius
@@ -1342,7 +1342,7 @@ SUBROUTINE InitExactFlux()
USE MOD_PreProc
USE MOD_Globals ,ONLY: abort,UNIT_stdOut,mpiroot,CollectiveStop
#if USE_MPI
-USE MOD_Globals ,ONLY: MPI_COMM_WORLD,MPI_SUM,MPI_INTEGER,IERROR
+USE MOD_Globals ,ONLY: MPI_COMM_PICLAS,MPI_SUM,MPI_INTEGER,IERROR
#endif
USE MOD_Mesh_Vars ,ONLY: nElems,ElemToSide,SideToElem,lastMPISide_MINE
USE MOD_Interfaces ,ONLY: FindElementInRegion,FindInterfacesInRegion,CountAndCreateMappings
@@ -1406,7 +1406,7 @@ SUBROUTINE InitExactFlux()
#if USE_MPI
sumExactFluxMasterInterFaces=0
- CALL MPI_REDUCE(nExactFluxMasterInterFaces , sumExactFluxMasterInterFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(nExactFluxMasterInterFaces , sumExactFluxMasterInterFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#else
sumExactFluxMasterInterFaces=nExactFluxMasterInterFaces
#endif /*USE_MPI*/
@@ -1430,7 +1430,7 @@ SUBROUTINE InitExactFlux()
#if USE_MPI
sumExactFluxMasterInterFaces=0
- CALL MPI_REDUCE(nExactFluxMasterInterFaces , sumExactFluxMasterInterFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_WORLD, IERROR)
+ CALL MPI_REDUCE(nExactFluxMasterInterFaces , sumExactFluxMasterInterFaces , 1 , MPI_INTEGER, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
#else
sumExactFluxMasterInterFaces=nExactFluxMasterInterFaces
#endif /*USE_MPI*/
@@ -1462,7 +1462,7 @@ SUBROUTINE InitExactFlux()
SDEALLOCATE(ElemToExactFlux)
SDEALLOCATE(FaceToExactFlux)
SDEALLOCATE(FaceToExactFluxInter)
-!CALL MPI_BARRIER(MPI_COMM_WORLD, iError)
+!CALL MPI_BARRIER(MPI_COMM_PICLAS, iError)
!stop
END SUBROUTINE InitExactFlux
@@ -1591,7 +1591,7 @@ PPURE SUBROUTINE ExactFunc_TE_Circular_Waveguide(t,x,resu)
!===================================================================================================================================
! MODULES
USE MOD_Globals
-USE MOD_Globals_Vars ,ONLY: c,c2,eps0,PI,c_inv,mu0
+USE MOD_Globals_Vars ,ONLY: c,PI,c_inv,mu0
USE MOD_Equation_Vars ,ONLY: TEScale,TEPulse,TEFrequency,TEPolarization
USE MOD_Equation_Vars ,ONLY: TERadius,TEModeRoot,TEDelay,TEPulseSigma,TEPulseSeriesFrequence
USE MOD_Equation_Vars ,ONLY: TEPulseNumber,TEDirection,TEMode,TEPulseShape
diff --git a/src/equations/maxwell/getboundaryflux.f90 b/src/equations/maxwell/getboundaryflux.f90
index 2a42d0ac2..4bc0c47f1 100644
--- a/src/equations/maxwell/getboundaryflux.f90
+++ b/src/equations/maxwell/getboundaryflux.f90
@@ -97,7 +97,7 @@ SUBROUTINE InitBC()
END DO
MaxBCStateGLobal=MaxBCState
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! Sanity check for BCs
@@ -451,7 +451,7 @@ SUBROUTINE ReadBCFlow(FileName)
REAL,ALLOCATABLE :: xGP_tmp(:),wBary_tmp(:),wGP_tmp(:)
!===================================================================================================================================
SWRITE(UNIT_StdOut,'(A,A)')' Read BC state from file "',FileName
-CALL OpenDataFile(FileName,create=.FALSE.,readOnly=.TRUE.,single=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,readOnly=.TRUE.,single=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL GetDataProps('DG_Solution',nVar_HDF5,N_HDF5,nElems_HDF5,NodeType_HDF5)
IF(((N_HDF5.NE.PP_N) .OR. (TRIM(NodeType_HDF5).NE.TRIM(NodeType))))THEN
InterpolateSolution=.TRUE.
diff --git a/src/equations/maxwell_pois/calctimestep.f90 b/src/equations/maxwell_pois/calctimestep.f90
index 60da337f2..828da56b4 100644
--- a/src/equations/maxwell_pois/calctimestep.f90
+++ b/src/equations/maxwell_pois/calctimestep.f90
@@ -102,7 +102,7 @@ FUNCTION CALCTIMESTEP()
END IF
END DO ! iElem
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStepConv,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStepConv,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
CalcTimeStep=TimeStepConv
END FUNCTION CALCTIMESTEP
diff --git a/src/equations/maxwell_pois/equation.f90 b/src/equations/maxwell_pois/equation.f90
index 824bbe885..231e0aa0e 100644
--- a/src/equations/maxwell_pois/equation.f90
+++ b/src/equations/maxwell_pois/equation.f90
@@ -1121,7 +1121,7 @@ SUBROUTINE StartExchangeMPIData_Pois(FaceData,LowerBound,UpperBound,SendRequest,
SideID_start=OffsetMPISides_send(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_send(iNbProc,SendID)
CALL MPI_ISEND(FaceData(:,:,:,SideID_start:SideID_end),nSendVal,MPI_DOUBLE_PRECISION, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,SendRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,SendRequest(iNbProc),iError)
END IF
! Start receive face data
IF(nMPISides_rec(iNbProc,SendID).GT.0)THEN
@@ -1129,7 +1129,7 @@ SUBROUTINE StartExchangeMPIData_Pois(FaceData,LowerBound,UpperBound,SendRequest,
SideID_start=OffsetMPISides_rec(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_rec(iNbProc,SendID)
CALL MPI_IRECV(FaceData(:,:,:,SideID_start:SideID_end),nRecVal,MPI_DOUBLE_PRECISION, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,RecRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,RecRequest(iNbProc),iError)
END IF
END DO !iProc=1,nNBProcs
END SUBROUTINE StartExchangeMPIData_Pois
diff --git a/src/equations/maxwell_pois/getboundaryflux.f90 b/src/equations/maxwell_pois/getboundaryflux.f90
index a17c2959e..ceb927151 100644
--- a/src/equations/maxwell_pois/getboundaryflux.f90
+++ b/src/equations/maxwell_pois/getboundaryflux.f90
@@ -102,7 +102,7 @@ SUBROUTINE InitBC()
END DO
MaxBCStateGLobal=MaxBCState
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! Sanity check for BCs
@@ -422,7 +422,7 @@ SUBROUTINE ReadBCFlow(FileName)
REAL,ALLOCATABLE :: xGP_tmp(:),wBary_tmp(:),wGP_tmp(:)
!===================================================================================================================================
SWRITE(UNIT_StdOut,'(A,A)')' Read BC state from file "',FileName
-CALL OpenDataFile(FileName,create=.FALSE.,readOnly=.TRUE.,single=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,readOnly=.TRUE.,single=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL GetDataProps('DG_Solution',nVar_HDF5,N_HDF5,nELems_HDF5,NodeType_HDF5)
IF(((N_HDF5.NE.PP_N) .OR. (TRIM(NodeType_HDF5).NE.TRIM(NodeType))))THEN
diff --git a/src/equations/poisson/calctimestep.f90 b/src/equations/poisson/calctimestep.f90
index 4ab2db30a..89b9f318f 100644
--- a/src/equations/poisson/calctimestep.f90
+++ b/src/equations/poisson/calctimestep.f90
@@ -74,7 +74,7 @@ FUNCTION CALCTIMESTEP()
END DO ! iElem=1,PP_nElems
TimeStep(2)=MIN(TimeStep(2),4./maxLambda_v)
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,TimeStep,2,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
#endif
CalcTimeStep=MINVAL(TimeStep)
IF(CalcTimeStep.NE.CalcTimeStep)THEN
diff --git a/src/equations/poisson/equation.f90 b/src/equations/poisson/equation.f90
index d8c12a2aa..53b432d58 100644
--- a/src/equations/poisson/equation.f90
+++ b/src/equations/poisson/equation.f90
@@ -135,7 +135,7 @@ SUBROUTINE InitEquation()
CHARACTER(LEN=255) :: BCName
INTEGER :: nRefStateMax
INTEGER :: nLinState,nLinStateMax
-INTEGER,PARAMETER :: BYTypeRefstate(1:4)=(/5,51,52,60/)
+INTEGER,PARAMETER :: BCTypeRefstate(1:4)=(/5,51,52,60/)
CHARACTER(LEN=32) :: hilf
!===================================================================================================================================
IF((.NOT.InterpolationInitIsDone).OR.EquationInitIsDone)THEN
@@ -148,6 +148,14 @@ SUBROUTINE InitEquation()
! Read in boundary parameters
IniExactFunc = GETINT('IniExactFunc')
+! Sanity checks
+SELECT CASE (IniExactFunc)
+CASE(800,801,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite
+#if ! (defined(CODE_ANALYZE) && USE_PETSC && PARTICLES)
+ CALL abort(__STAMP__,'IniExactFunc=800,801,900 requires PICLAS_CODE_ANALYZE=ON, PICLAS_PETSC=ON and PICLAS_PARTICLES=ON')
+#endif /*! (defined(CODE_ANALYZE) && USE_PETSC && PARTICLES)*/
+END SELECT
+
! Sanity Check BCs
nRefStateMax = 0
nLinStateMax = 0
@@ -156,7 +164,7 @@ SUBROUTINE InitEquation()
BCType = BoundaryType(i,BC_TYPE)
BCState = BoundaryType(i,BC_STATE)
BCName = BoundaryName(i)
- IF(ANY(BCType.EQ.BYTypeRefstate).AND.BCState.LE.0) THEN
+ IF(ANY(BCType.EQ.BCTypeRefstate).AND.BCState.LE.0) THEN
SWRITE(*,'(A)') "Error found for the following boundary condition"
SWRITE(*,'(A,I0)') " BC: ",i
SWRITE(*,'(A,I0)') " Type: ",BCType
@@ -164,7 +172,7 @@ SUBROUTINE InitEquation()
SWRITE(*,'(A)') " Name: "//TRIM(BCName)
WRITE(UNIT=hilf,FMT='(I0)') BCType
CALL abort(__STAMP__,'BCState is <= 0 for BCType='//TRIM(hilf)//' is not allowed! Set a positive integer for the n-th RefState')
- ELSEIF(ANY(BCType.EQ.BYTypeRefstate).AND.BCState.GT.0)THEN
+ ELSEIF(ANY(BCType.EQ.BCTypeRefstate).AND.BCState.GT.0)THEN
nRefStateMax = MAX(nRefStateMax,BCState)
ELSEIF(BCType.EQ.7.AND.BCState.GT.0)THEN
nLinStateMax = MAX(nLinStateMax,BCState)
@@ -287,7 +295,7 @@ SUBROUTINE InitCoupledPowerPotential()
USE MOD_ReadInTools ,ONLY: GETREALARRAY,GETREAL,GETINTFROMSTR,CountOption
USE MOD_Mesh_Vars ,ONLY: BoundaryType,nBCs
#if USE_MPI
-USE MOD_Globals ,ONLY: IERROR,MPI_COMM_NULL,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,MPI_INFO_NULL,MPI_UNDEFINED,MPIRoot
+USE MOD_Globals ,ONLY: IERROR,MPI_COMM_NULL,MPI_DOUBLE_PRECISION,MPI_COMM_PICLAS,MPI_INFO_NULL,MPI_UNDEFINED,MPIRoot
USE MOD_Globals ,ONLY: UNIT_StdOut
USE MOD_HDG_Vars ,ONLY: CPPCOMM
USE MOD_Mesh_Vars ,ONLY: nBCSides,BC
@@ -377,8 +385,8 @@ SUBROUTINE InitCoupledPowerPotential()
! set communicator id
CPPCOMM%ID = CPPBoundaries
-! create new emission communicator for electric potential boundary condition communication. Pass MPI_INFO_NULL as rank to follow the original ordering
-CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, color, MPI_INFO_NULL, CPPCOMM%UNICATOR, iError)
+! create new emission communicator for coupled power potential communication. Pass MPI_INFO_NULL as rank to follow the original ordering
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, CPPCOMM%UNICATOR, iError)
! Find my rank on the shared communicator, comm size and proc name
IF(BConProc)THEN
@@ -473,16 +481,20 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
! Specifies all the initial conditions. The state in conservative variables is returned.
!===================================================================================================================================
! MODULES
-USE MOD_Globals ,ONLY: Abort,mpiroot
+USE MOD_Globals ,ONLY: Abort
USE MOD_Globals_Vars ,ONLY: PI,ElementaryCharge,eps0
USE MOD_Equation_Vars ,ONLY: IniCenter,IniHalfwidth,IniAmplitude,RefState,LinPhi,LinPhiHeight,LinPhiNormal,LinPhiBasePoint
#if defined(PARTICLES)
USE MOD_HDG_Vars ,ONLY: CoupledPowerPotential,UseCoupledPowerPotential,BiasVoltage,UseBiasVoltage
-USE MOD_Particle_Vars ,ONLY: Species,nSpecies
+USE MOD_Particle_Vars ,ONLY: Species,nSpecies!,PartState,PDM
#endif /*defined(PARTICLES)*/
USE MOD_Dielectric_Vars ,ONLY: DielectricRatio,Dielectric_E_0,DielectricRadiusValue,DielectricEpsR
USE MOD_Mesh_Vars ,ONLY: ElemBaryNGeo
USE MOD_HDG_Vars ,ONLY: FPC,EPC
+USE MOD_TimeDisc_Vars ,ONLY: time
+#if USE_MPI
+USE MOD_Globals ,ONLY: mpiroot
+#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -500,6 +512,9 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL :: Omega,r1,r2,r_2D,r_3D,r_bary,cos_theta,eps1,eps2,xi,a(3),b(3),Q
+#if defined(PARTICLES)
+INTEGER :: i!,iPart
+#endif /*defined(PARTICLES)*/
!===================================================================================================================================
SELECT CASE (ExactFunction)
#if defined(PARTICLES)
@@ -528,7 +543,7 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
! Amplitude, Frequency and Phase Shift supplied by RefState
! RefState(1,iRefState): amplitude
! RefState(2,iRefState): frequency
- ! RefState(3,iRefState): phase shift
+ ! efState(3,iRefState): phase shift
Omega = 2.*PI*RefState(2,iRefState)
r1 = RefState(1,iRefState) / 2.0
Resu(:) = r1*(COS(Omega*t+RefState(3,iRefState)) + 1.0)
@@ -546,7 +561,7 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
Resu(:) = RefState(1,iRefState)*COS(Omega*t+RefState(3,iRefState))
#if defined(PARTICLES)
END IF ! UseCoupledPowerPotential
- ! Add bias potential (only if bias voltage model is activated, BYType is 51 for DC or 52 for AC)
+ ! Add bias potential (only if bias voltage model is activated, BCType is 51 for DC or 52 for AC)
IF(UseBiasVoltage) Resu(:) = Resu(:) + BiasVoltage%BVData(1)
#endif /*defined(PARTICLES)*/
CASE(0) ! constant 0.
@@ -565,6 +580,8 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
resu(:)=IniAmplitude*(1/r2-1/r1)
CASE(104) ! solution to Laplace's equation: Phi_xx + Phi_yy + Phi_zz = 0
resu(1) = ( COS(x(1))+SIN(x(1)) )*( COS(x(2))+SIN(x(2)) )*( COSH(SQRT(2.0)*x(3))+SINH(SQRT(2.0)*x(3)) )
+CASE(105) ! 3D periodic test case
+ resu(1)= SIN(x(1) + 1) * SIN(x(2) + 2) * SIN(x(3) + 3)
CASE(200) ! Dielectric Sphere of Radius R in constant electric field E_0 from book:
! John David Jackson, Classical Electrodynamics, 3rd edition, New York: Wiley, 1999.
! E_0 : constant electric field in z-direction far away from sphere
@@ -739,7 +756,7 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
SWRITE(*,*) "r1=",r1
CALL abort(__STAMP__,'Point source in dielectric region: Cannot evaluate the exact function at the singularity!')
END IF
- resu(1:PP_nVar) = (2.0*Q/eps12) * 1./r1
+ resu(1:PP_nVar) = (2.0*Q/eps12) * 1./r1
END IF
END ASSOCIATE
CASE(500) ! Coaxial capacitor with Floating Boundary Condition (FPC) with from
@@ -772,12 +789,70 @@ SUBROUTINE ExactFunc(ExactFunction,x,resu,t,ElemID,iRefState,iLinState,BCState)
END ASSOCIATE
END ASSOCIATE
END ASSOCIATE
+#if !(USE_PETSC)
+ CALL abort(__STAMP__,'ExactFunc=500 requires PICLAS_PETSC=ON')
+#endif /*!(USE_PETSC)*/
CASE(600) ! 2 cubes with two different charges
IF(ALLOCATED(FPC%Charge))THEN
FPC%Charge(1)=5.0
FPC%Charge(2)=10.0
END IF ! ALLOCATED(FPC%Charge)
resu = 0.
+#if !(USE_PETSC)
+ CALL abort(__STAMP__,'ExactFunc=600 requires PICLAS_PETSC=ON')
+#endif /*!(USE_PETSC)*/
+CASE(700) ! Analytical solution of a charged particle moving in cylindrical coordinates between two grounded walls
+#if defined(PARTICLES)
+ eps1 = -ElementaryCharge/(4.0*PI*eps0)
+ !eps1 = -ElementaryCharge/(PI*eps0)
+ !eps1 = -ElementaryCharge/((4*PI*eps0)**(3./2.))
+ !IF(ALLOCATED(Species))THEN
+ !eps1 = -Species(1)%ChargeIC/(4.0*PI*eps0)
+ !eps1 = Species(1)%ChargeIC/(PI*eps0)
+ !ELSE
+ !eps1=0
+ !END IF ! ALLOCATED(Species)
+ r1 = x(1)**2 + x(2)**2
+ resu = 0.
+ !DO iPart = 1, PDM%ParticleVecLength
+ !IF(.NOT.PDM%ParticleInside(iPart)) CYCLE
+ !ASSOCIATE( z => x(3), zq => PartState(3,1), H => 80e-3, iMax => 20 )
+ ASSOCIATE( z => x(3), zq => 70e-3-5e6*time, H => 80e-3, iMax => 20 )
+ resu = resu + 1./SQRT(r1+(z-zq)**2) - 1./SQRT(r1+(z+zq)**2)
+ DO i = 1, iMax
+ resu = resu + 1./SQRT(r1+(z+REAL(2*i)*H-zq)**2) + 1./SQRT(r1+(z-REAL(2*i)*H-zq)**2)
+ END DO ! i = 1, iMax
+ DO i = 1, iMax
+ resu = resu - 1./SQRT(r1+(z+REAL(2*i)*H+zq)**2) - 1./SQRT(r1+(z-REAL(2*i)*H+zq)**2)
+ END DO ! i = 1, iMax
+ END ASSOCIATE
+ resu = eps1 * resu
+ !END DO ! iPart = 1, PDM%ParticleVecLength
+#else
+ CALL abort(__STAMP__,'ExactFunc=700 requires PARTICLES=ON')
+#endif /*defined(PARTICLES)*/
+CASE(800,801,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite
+ resu = 0.
+ ASSOCIATE( x => x(1) , &
+ y => x(2) , &
+ z => x(3) , &
+ L => 1e-3 , &
+ d => 1e-8 , &
+ eps1 => 1e1 , &
+ sigma => 1e-2 , &
+ rho0 => -1e-4 , &
+ Phi0 => -1e1 )
+ ASSOCIATE( PhiF => ((d/L)/((d/L)+eps1))*( L*(sigma + 0.5*rho0*L)/eps0 + Phi0 ) )
+ ASSOCIATE( a => 0.5*rho0*L/eps0 + (Phi0 - PhiF)/L ,&
+ b => PhiF)
+ IF(x.GE.0.0)THEN
+ resu = -0.5*rho0*x**2/eps0 + a*x + b
+ ELSE
+ resu = b * (x/d + 1.0)
+ END IF ! x.GE.0.0
+ END ASSOCIATE
+ END ASSOCIATE
+ END ASSOCIATE
CASE DEFAULT
CALL abort(__STAMP__,'Exactfunction not specified!', IntInfoOpt=ExactFunction)
END SELECT ! ExactFunction
@@ -876,7 +951,11 @@ SUBROUTINE DivCleaningDamping()
END SUBROUTINE DivCleaningDamping
+#if defined(CODE_ANALYZE)
+ SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_linear_phi)
+#else
PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_linear_phi)
+#endif /*defined(CODE_ANALYZE)*/
!===================================================================================================================================
! Determine the right-hand-side of Poisson's equation (either by an analytic function or deposition of charge from particles)
! TODO: currently particles are enforced, which means that they over-write the exact function solution because
@@ -889,13 +968,17 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li
USE MOD_Globals
USE MOD_PreProc
USE MOD_Mesh_Vars ,ONLY: Elem_xGP
+USE MOD_Globals_Vars ,ONLY: eps0
#ifdef PARTICLES
USE MOD_PICDepo_Vars ,ONLY: PartSource,DoDeposition
USE MOD_HDG_Vars ,ONLY: ElemToBRRegion,UseBRElectronFluid,RegionElectronRef
-USE MOD_Globals_Vars ,ONLY: eps0
#if IMPA
USE MOD_LinearSolver_Vars ,ONLY: ExplicitPartSource
#endif
+#if defined(CODE_ANALYZE)
+USE MOD_Mesh_Vars ,ONLY: offSetElem
+USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared
+#endif /*defined(CODE_ANALYZE)*/
#endif /*PARTICLES*/
USE MOD_Equation_Vars ,ONLY: IniExactFunc
USE MOD_Equation_Vars ,ONLY: IniCenter,IniHalfwidth,IniAmplitude
@@ -912,14 +995,18 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li
REAL,INTENT(IN),OPTIONAL :: Phi
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-REAL :: x(3)
+REAL :: xvec(3)
REAL :: r1,r2
REAL,DIMENSION(3) :: dx1,dx2,dr1dx,dr2dx,dr1dx2,dr2dx2
#ifdef PARTICLES
-REAL :: source_e
+REAL :: source_e ! Electron charge density for Boltzmann relation (electrons as isothermal fluid!)
INTEGER :: RegionID
+#if defined(CODE_ANALYZE)
+REAL :: ElemCharLengthX
+#endif /*defined(CODE_ANALYZE)*/
#endif /*PARTICLES*/
!===================================================================================================================================
+ASSOCIATE( x => Elem_xGP(1,i,j,k,iElem), y => Elem_xGP(2,i,j,k,iElem), z => Elem_xGP(3,i,j,k,iElem))
IF(PRESENT(warning_linear)) warning_linear=.FALSE. ! Initialize
IF(PRESENT(warning_linear_phi)) warning_linear_phi=0. ! Initialize
! Calculate IniExactFunc before particles are superimposed, because the IniExactFunc might be needed by the CalcError function
@@ -927,24 +1014,56 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li
CASE(0) ! Particles
resu=0. ! empty
CASE(103)
- x(1:3) = Elem_xGP(1:3,i,j,k,iElem)
- dx1=(x(:)-(IniCenter(:)-(/IniHalfwidth,0.,0./)))
- dx2=(x(:)-(IniCenter(:)+(/IniHalfwidth,0.,0./)))
+ dx1=(Elem_xGP(1:3,i,j,k,iElem)-(IniCenter(:)-(/IniHalfwidth,0.,0./)))
+ dx2=(Elem_xGP(1:3,i,j,k,iElem)-(IniCenter(:)+(/IniHalfwidth,0.,0./)))
r1=SQRT(SUM(dx1**2))
r2=SQRT(SUM(dx2**2))
dr1dx(:)= r1*dx1
dr2dx(:)= r2*dx2
dr1dx2(:)= r1+dr1dx(:)*dx1
dr2dx2(:)= r2+dr2dx(:)*dx2
- resu(1)=- IniAmplitude*( SUM((r1*dr1dx2(:)-2*dr1dx(:)**2)/(r1*r1*r1)) &
- -SUM((r2*dr2dx2(:)-2*dr2dx(:)**2)/(r2*r2*r2)) )
+ resu(1)=- IniAmplitude*( SUM((r1*dr1dx2(:)-2*dr1dx(:)**2)/(r1*r1*r1)) - SUM((r2*dr2dx2(:)-2*dr2dx(:)**2)/(r2*r2*r2)) )
+CASE(105) ! 3D periodic test case
+ xvec(1:3) = Elem_xGP(1:3,i,j,k,iElem)
+ resu(1)=-3 * SIN(xvec(1) + 1) * SIN(xvec(2) + 2) * SIN(xvec(3) + 3)
CASE DEFAULT
resu=0.
- ! CALL abort(__STAMP__,&
- !'Exactfunction not specified!',999,999.)
END SELECT ! ExactFunction
-#ifdef PARTICLES
+#if defined(PARTICLES)
+#if defined(CODE_ANALYZE)
+! Specific source terms after particle deposition
+SELECT CASE(IniExactFunc)
+CASE(800) ! plasma between electrodes + particles
+ ! Check Dirichlet elements
+ IF(ElemHasDirichletBC(iElem))THEN
+ ! Get length on element in 1D
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iElem + offsetElem) ) ! 1-2: Min, Max value; 1-3: x,y,z
+ ElemCharLengthX = ABS(Bounds(2,1)-Bounds(1,1)) ! ABS(max - min)
+ ! Add scaled value in BC elements
+ IF((x.GT.0.0).AND.(x.LT.1.0e-3))THEN
+ IF(x.GT.0.5e-3)THEN
+ ! Negative gradient
+ PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*(1e-3-x)/ElemCharLengthX
+ ELSE
+ ! Positive gradient
+ PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*x/ElemCharLengthX
+ END IF ! x.GT.0.5e-3
+ END IF ! (x.GT.0.0).AND.(x.LT.1.0e-3)
+ !WRITE (*,*) "x,source =", x,PartSource(4,i,j,k,iElem),NINT(x*1e9), " nm", " TRUE"
+ END ASSOCIATE
+ ELSE
+ ! Add constant value
+ IF((x.GT.0.0).AND.(x.LT.1.0e-3)) PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4
+ !WRITE (*,*) "x,source =", x,PartSource(4,i,j,k,iElem),NINT(x*1e9), " nm"
+ END IF ! ElemHasDirichletBC(iElem)
+CASE(801) ! plasma between electrodes + particles: Linear source
+ IF(x.GT.0.0)THEN
+ PartSource(4,i,j,k,iElem) = PartSource(4,i,j,k,iElem) - 1e-4*(1.0 - Elem_xGP(2,i,j,k,iElem)/1e-3)
+ END IF ! x.GT.0.0
+END SELECT
+#endif /*defined(CODE_ANALYZE)*/
+
IF(DoDeposition)THEN
source_e=0.
IF(UseBRElectronFluid.AND.PRESENT(Phi))THEN
@@ -952,7 +1071,7 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li
IF (RegionID .NE. 0) THEN
source_e = Phi-RegionElectronRef(2,RegionID)
IF (source_e .LT. 0.) THEN
- source_e = RegionElectronRef(1,RegionID) & !--- boltzmann relation (electrons as isothermal fluid!)
+ source_e = RegionElectronRef(1,RegionID) & !--- Boltzmann relation (electrons as isothermal fluid!)
* EXP( (source_e) / RegionElectronRef(3,RegionID) )
ELSE
! Store delta for output
@@ -972,11 +1091,54 @@ PPURE SUBROUTINE CalcSourceHDG(i,j,k,iElem,resu, Phi, warning_linear, warning_li
resu(1)= - (PartSource(4,i,j,k,iElem)-source_e)/eps0
#endif
END IF
-#endif /*PARTICLES*/
+#endif /*defined(PARTICLES)*/
+END ASSOCIATE
END SUBROUTINE CalcSourceHDG
+#if defined(PARTICLES) && defined(CODE_ANALYZE)
+!===================================================================================================================================
+!> Check if elements has at least one side that is a Dirichlet BC
+!===================================================================================================================================
+LOGICAL FUNCTION ElemHasDirichletBC(iElem) RESULT(L)
+! MODULES
+USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_Mesh_Vars ,ONLY: offSetElem
+USE MOD_Mesh_Vars ,ONLY: BoundaryType
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: BCType,BCIndex,GlobalSideID,iLocSide
+!===================================================================================================================================
+L = .FALSE.
+! Check 6 local sides for Dirichlet BC
+DO iLocSide = 1, 6
+ GlobalSideID = GetGlobalNonUniqueSideID(iElem+offSetElem,iLocSide)
+ BCIndex = SideInfo_Shared(SIDE_BCID,GlobalSideID)
+ ! Only check BC sides with BC index > 0
+ IF(BCIndex.GT.0)THEN
+ ! Get boundary type
+ BCType = BoundaryType(BCIndex,BC_TYPE)
+ ! Check if Dirichlet BC has been found
+ SELECT CASE(BCType)
+ CASE(HDGDIRICHLETBCSIDEIDS) ! Dirichlet
+ L = .TRUE.
+ RETURN
+ END SELECT ! BCType
+ END IF ! BCIndex.GT.0
+END DO ! iLocSide = 1, 6
+END FUNCTION ElemHasDirichletBC
+#endif /*defined(PARTICLES) && defined(CODE_ANALYZE)*/
+
+
FUNCTION shapefunc(r)
!===================================================================================================================================
! Implementation of (possibly several different) shapefunctions
diff --git a/src/equations/poisson/getboundaryflux.f90 b/src/equations/poisson/getboundaryflux.f90
index 2d8ad66fb..d767fafb3 100644
--- a/src/equations/poisson/getboundaryflux.f90
+++ b/src/equations/poisson/getboundaryflux.f90
@@ -95,7 +95,7 @@ SUBROUTINE InitBC()
END DO
MaxBCStateGLobal=MaxBCState
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,MaxBCStateGlobal,1,MPI_INTEGER,MPI_MAX,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! Sanity check for BCs
diff --git a/src/globals/array_operations.f90 b/src/globals/array_operations.f90
new file mode 100644
index 000000000..9bb99dc50
--- /dev/null
+++ b/src/globals/array_operations.f90
@@ -0,0 +1,328 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (piclas.boltzplatz.eu/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Array_Operations
+!===================================================================================================================================
+! Contains tools for array related operations.
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE ChangeSizeArray
+ MODULE PROCEDURE ChangeSizeArrayLOG1, ChangeSizeArrayLOG2, &
+ ChangeSizeArrayINT1, ChangeSizeArrayINT2, &
+ ChangeSizeArrayREAL1, ChangeSizeArrayREAL2, ChangeSizeArrayREAL3
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: ChangeSizeArray
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE ChangeSizeArrayLOG1(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Logical 1D
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+LOGICAL,ALLOCATABLE,INTENT(INOUT) :: Vec(:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+LOGICAL,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+LOGICAL,ALLOCATABLE :: TempVec(:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayLOG1
+
+
+SUBROUTINE ChangeSizeArrayLOG2(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Logical 2D, last dimension
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+LOGICAL,ALLOCATABLE,INTENT(INOUT) :: Vec(:,:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+LOGICAL,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+LOGICAL,ALLOCATABLE :: TempVec(:,:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(SIZE(Vec,1),NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(:,1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(:,OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(:,1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayLOG2
+
+
+SUBROUTINE ChangeSizeArrayINT1(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Integer 1D
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,ALLOCATABLE,INTENT(INOUT) :: Vec(:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+INTEGER,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER,ALLOCATABLE :: TempVec(:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayINT1
+
+
+SUBROUTINE ChangeSizeArrayINT2(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Integer 2D, last dimension
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,ALLOCATABLE,INTENT(INOUT) :: Vec(:,:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+INTEGER,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER,ALLOCATABLE :: TempVec(:,:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(SIZE(Vec,1),NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(:,1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(:,OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(:,1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayINT2
+
+
+SUBROUTINE ChangeSizeArrayREAL1(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Real 1D
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL,ALLOCATABLE,INTENT(INOUT) :: Vec(:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+REAL,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL,ALLOCATABLE :: TempVec(:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayREAL1
+
+
+SUBROUTINE ChangeSizeArrayREAL2(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Real 2D, last dimension
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL,ALLOCATABLE,INTENT(INOUT) :: Vec(:,:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+REAL,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL,ALLOCATABLE :: TempVec(:,:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(SIZE(Vec,1),NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(:,1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(:,OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(:,1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayREAL2
+
+
+SUBROUTINE ChangeSizeArrayREAL3(Vec,OldSize,NewSize,Default)
+!===================================================================================================================================
+! Change size of a vector, Real 3D, last dimension
+! If NewSize>OldSize and PRESENT(Default): New entries are initialized with default
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL,ALLOCATABLE,INTENT(INOUT) :: Vec(:,:,:)
+INTEGER,INTENT(IN) :: OldSize, NewSize
+REAL,INTENT(IN),OPTIONAL :: Default
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL,ALLOCATABLE :: TempVec(:,:,:)
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! Allocate new memory space
+ALLOCATE(TempVec(SIZE(Vec,1),SIZE(Vec,2),NewSize),STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate new Array in ChangeSizeArray')
+
+! Write old data to new memory space
+IF(NewSize.GT.OldSize) THEN
+ TempVec(:,:,1:OldSize)=Vec
+ IF(PRESENT(Default)) TempVec(:,:,OldSize+1:NewSize) = Default
+ELSE
+ TempVec=Vec(:,:,1:NewSize)
+END IF
+
+! Switch array pointer
+CALL MOVE_ALLOC(TempVec,Vec)
+
+END SUBROUTINE ChangeSizeArrayREAL3
+
+
+END MODULE MOD_Array_Operations
diff --git a/src/globals/globals.f90 b/src/globals/globals.f90
index ce1737da8..9b0c83cb3 100644
--- a/src/globals/globals.f90
+++ b/src/globals/globals.f90
@@ -36,24 +36,28 @@ MODULE MOD_Globals
INTEGER :: myRank,myLocalRank,myLeaderRank,myWorkerRank
INTEGER :: nProcessors,nLocalProcs,nLeaderProcs,nWorkerProcs
LOGICAL :: GlobalNbrOfParticlesUpdated ! When FALSE, then global number of particles needs to be determined
-INTEGER :: MPI_COMM_NODE ! local node subgroup
-INTEGER :: MPI_COMM_LEADERS ! all node masters
-INTEGER :: MPI_COMM_WORKERS ! all non-master nodes
LOGICAL :: MPIRoot,MPILocalRoot
#if USE_MPI
!#include "mpif.h"
INTEGER :: MPIStatus(MPI_STATUS_SIZE)
+INTEGER :: MPI_COMM_NODE ! local node subgroup
+INTEGER :: MPI_COMM_LEADERS ! all node masters
+INTEGER :: MPI_COMM_WORKERS ! all non-master nodes
+INTEGER :: MPI_COMM_PICLAS ! all nodes
#else
-INTEGER,PARAMETER :: MPI_COMM_WORLD=-1 ! DUMMY when compiling single (MPI=OFF)
+INTEGER,PARAMETER :: MPI_COMM_PICLAS=-1 ! DUMMY when compiling single (MPI=OFF)
+INTEGER,PARAMETER :: MPI_COMM_LEADERS=-1 ! DUMMY when compiling single (MPI=OFF)
#endif
LOGICAL :: MemoryMonitor !> Flag for turning RAM monitoring ON/OFF. Used for the detection of RAM overflows (e.g. due to memory leaks)
INTEGER :: doPrintHelp ! 0: no help, 1: help, 2: markdown-help
+! SELECTED_INT_KIND(R) return the kind value of the smallest integer type that can represent all values ranging from -10^R (exclusive)
+! to 10^R (exclusive). If there is no integer kind that accommodates this range, SELECTED_INT_KIND returns -1.
#ifdef INTKIND8
-INTEGER, PARAMETER :: IK = SELECTED_INT_KIND(18)
+INTEGER, PARAMETER :: IK = SELECTED_INT_KIND(18) ! Value of selected_int_kind(18) is 8
#else
-INTEGER, PARAMETER :: IK = SELECTED_INT_KIND(8)
+INTEGER, PARAMETER :: IK = SELECTED_INT_KIND(8) ! Value of selected_int_kind(8) is 4
#endif
#if defined(PARTICLES)
@@ -65,6 +69,31 @@ MODULE MOD_Globals
MODULE PROCEDURE ReOpenLogFile
END INTERFACE
+! Overload the MPI interface because MPICH fails to provide it
+! > https://github.com/pmodels/mpich/issues/2659
+! > https://www.mpi-forum.org/docs/mpi-3.1/mpi31-report/node263.htm
+#if LIBS_MPICH_FIX_SHM_INTERFACE
+INTERFACE MPI_WIN_ALLOCATE_SHARED
+ SUBROUTINE PMPI_WIN_ALLOCATE_SHARED(SIZE, DISP_UNIT, INFO, COMM, BASEPTR, WIN, IERROR)
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
+ IMPORT :: MPI_ADDRESS_KIND
+ INTEGER :: DISP_UNIT, INFO, COMM, WIN, IERROR
+ INTEGER(KIND=MPI_ADDRESS_KIND) :: SIZE
+ TYPE(C_PTR) :: BASEPTR
+ END SUBROUTINE
+END INTERFACE
+
+INTERFACE MPI_WIN_SHARED_QUERY
+ SUBROUTINE PMPI_WIN_SHARED_QUERY(WIN, RANK, SIZE, DISP_UNIT, BASEPTR, IERROR)
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
+ IMPORT :: MPI_ADDRESS_KIND
+ INTEGER :: WIN, RANK, DISP_UNIT, IERROR
+ INTEGER(KIND=MPI_ADDRESS_KIND) :: SIZE
+ TYPE(C_PTR) :: BASEPTR
+ END SUBROUTINE
+END INTERFACE
+#endif /*LIBS_MPICH_FIX_SHM_INTERFACE*/
+
INTERFACE Abort
MODULE PROCEDURE AbortProg
END INTERFACE Abort
@@ -187,6 +216,7 @@ END SUBROUTINE processmemusage
PUBLIC :: setstacksizeunlimited
PUBLIC :: processmemusage
+PUBLIC :: WarningMemusage
!===================================================================================================================================
CONTAINS
@@ -371,7 +401,7 @@ SUBROUTINE AbortProg(SourceFile,SourceLine,CompDate,CompTime,ErrorMessage,IntInf
WRITE(UNIT_stdOut,*)'Program abort caused on Proc ',myRank,' in File : ',TRIM(SourceFile),' Line ',SourceLine
WRITE(UNIT_stdOut,*)'This file was compiled at ',TRIM(CompDate),' ',TRIM(CompTime)
WRITE(UNIT_stdOut,'(A10,A)',ADVANCE='NO')'Message: ',TRIM(ErrorMessage)
-IF(PRESENT(IntInfoOpt)) WRITE(UNIT_stdOut,'(I8)',ADVANCE='NO')IntInfo
+IF(PRESENT(IntInfoOpt)) WRITE(UNIT_stdOut,'(I0)',ADVANCE='NO')IntInfo
IF(PRESENT(RealInfoOpt)) WRITE(UNIT_stdOut,'(ES25.14E3)')RealInfo
WRITE(UNIT_stdOut,*)
WRITE(UNIT_stdOut,'(A,A,A)')'See ',TRIM(ErrorFileName),' for more details'
@@ -387,7 +417,7 @@ SUBROUTINE AbortProg(SourceFile,SourceLine,CompDate,CompTime,ErrorMessage,IntInf
#if USE_MPI
signalout=2 ! MPI_ABORT requires an output error-code /=0
errOut = 1
-CALL MPI_ABORT(MPI_COMM_WORLD,signalout,errOut)
+CALL MPI_ABORT(MPI_COMM_PICLAS,signalout,errOut)
#endif
STOP 2
END SUBROUTINE AbortProg
@@ -460,7 +490,7 @@ SUBROUTINE CollectiveStop(SourceFile,SourceLine,CompDate,CompTime,ErrorMessage,I
CALL FLUSH(UNIT_stdOut)
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
CALL MPI_FINALIZE(iError)
#endif
ERROR STOP 1
@@ -804,7 +834,7 @@ FUNCTION PICLASTIME()
IF(PRESENT(Comm))THEN
CALL MPI_BARRIER(Comm,iError)
ELSE
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
END IF
PiclasTime=MPI_WTIME()
#else
@@ -1485,4 +1515,95 @@ END SUBROUTINE DisplayNumberOfParticles
#endif /*defined(PARTICLES)*/
+!===================================================================================================================================
+!> Check the current memory usage and display a message if a certain threshold is reached
+!===================================================================================================================================
+SUBROUTINE WarningMemusage(Threshold)
+! MODULES
+USE MOD_Globals_Vars ,ONLY: memory
+#if USE_MPI
+USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,myLeaderGroupRank
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SHARED,MPI_COMM_SHARED
+#if defined(MEASURE_MPI_WAIT)
+USE MOD_MPI_Vars ,ONLY: MPIW8TimeMM,MPIW8CountMM
+#endif /*defined(MEASURE_MPI_WAIT)*/
+#endif /*USE_MPI*/
+!USE MOD_StringTools ,ONLY: set_formatting,clear_formatting
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+REAL,INTENT(IN) :: Threshold
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+CHARACTER(32) :: hilf,hilf2,hilf3
+#if USE_MPI
+REAL :: ProcMemoryUsed ! Used memory on a single proc
+REAL :: NodeMemoryUsed ! Sum of used memory across one compute node
+#endif /*USE_MPI*/
+REAL :: MemUsagePercent
+#if defined(MEASURE_MPI_WAIT)
+INTEGER(KIND=8) :: CounterStart,CounterEnd
+REAL(KIND=8) :: Rate
+#endif /*defined(MEASURE_MPI_WAIT)*/
+!===================================================================================================================================
+CALL ProcessMemUsage(memory(1),memory(2),memory(3)) ! memUsed,memAvail,memTotal
+
+! Only CN roots communicate available and total memory info (count once per node)
+#if USE_MPI
+#if defined(MEASURE_MPI_WAIT)
+CALL SYSTEM_CLOCK(count=CounterStart)
+#endif /*defined(MEASURE_MPI_WAIT)*/
+IF(nProcessors.GT.1)THEN
+ ! Collect data on node roots
+ ProcMemoryUsed = memory(1)
+ IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(ProcMemoryUsed , NodeMemoryUsed , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_SHARED , IERROR)
+ memory(1) = NodeMemoryUsed
+ ELSE
+ CALL MPI_REDUCE(ProcMemoryUsed , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_SHARED , IERROR)
+ END IF
+
+ ! collect data from node roots on first root node
+ IF (myComputeNodeRank.EQ.0) THEN ! only leaders
+ IF (myLeaderGroupRank.EQ.0) THEN ! first node leader MUST be MPIRoot
+ CALL MPI_REDUCE(MPI_IN_PLACE , memory(1:3) , 3 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_LEADERS_SHARED , IERROR)
+ ELSE
+ CALL MPI_REDUCE(memory(1:3) , 0 , 3 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_LEADERS_SHARED , IERROR)
+ END IF ! myLeaderGroupRank.EQ.0
+ END IF ! myComputeNodeRank.EQ.0
+END IF ! nProcessors.EQ.1
+#if defined(MEASURE_MPI_WAIT)
+CALL SYSTEM_CLOCK(count=CounterEnd, count_rate=Rate)
+MPIW8TimeMM = MPIW8TimeMM + REAL(CounterEnd-CounterStart,8)/Rate
+MPIW8CountMM = MPIW8CountMM + 1_8
+#endif /*defined(MEASURE_MPI_WAIT)*/
+#endif /*USE_MPI*/
+
+! --------------------------------------------------
+! Only MPI root outputs the data to file
+! --------------------------------------------------
+IF(.NOT.MPIRoot)RETURN
+
+! Sanity checks
+IF(ABS(memory(3)).LE.0.) CALL abort(__STAMP__,'Could not retrieve total available memory')
+IF((Threshold.GT.1.0).OR.(Threshold.LE.0.0)) CALL abort(__STAMP__,'Threshold in WarningMemusage must be in the range 0 < X <= 1')
+! Convert kB to GB
+memory(1:3)=memory(1:3)/1048576.
+! Check if X% of the total memory available is reached
+MemUsagePercent = (memory(1)/memory(3))*100.0
+!MemUsagePercent = 99.32
+IF(MemUsagePercent.GT.Threshold)THEN
+ WRITE(UNIT=hilf ,FMT='(F16.1)') memory(1)
+ WRITE(UNIT=hilf2,FMT='(F16.1)') memory(3)
+ WRITE(UNIT=hilf3,FMT='(F5.1)') MemUsagePercent
+ !CALL set_formatting("red")
+ !SWRITE(UNIT_stdOut,'(A,F5.2,A)') ' WARNING: Memory reaching maximum, RAM is at ',MemUsagePercent,'%'
+ WRITE(UNIT_stdOut,'(A)') "WARNING: Allocated memory ["//TRIM(ADJUSTL(hilf))//&
+ "] GB on at least one node is close to the global limit of ["&
+ //TRIM(ADJUSTL(hilf2))//"] GB, which is "//TRIM(ADJUSTL(hilf3))//"%. Watch out for the OOM killer!"
+ !CALL clear_formatting()
+END IF
+
+END SUBROUTINE WarningMemusage
+
END MODULE MOD_Globals
diff --git a/src/globals/globals_vars.f90 b/src/globals/globals_vars.f90
index d88e8fd49..32615b10e 100644
--- a/src/globals/globals_vars.f90
+++ b/src/globals/globals_vars.f90
@@ -23,7 +23,7 @@ MODULE MOD_Globals_Vars
!-----------------------------------------------------------------------------------------------------------------------------------
CHARACTER(LEN=6),PARAMETER :: ProgramName = 'PICLas' !> name of this program
INTEGER,PARAMETER :: MajorVersion = 3 !> FileVersion number saved in each hdf5 file with hdf5 header
-INTEGER,PARAMETER :: MinorVersion = 0 !> FileVersion number saved in each hdf5 file with hdf5 header
+INTEGER,PARAMETER :: MinorVersion = 1 !> FileVersion number saved in each hdf5 file with hdf5 header
INTEGER,PARAMETER :: PatchVersion = 0 !> FileVersion number saved in each hdf5 file with hdf5 header
REAL,PARAMETER :: FileVersionReal = REAL(MajorVersion,8)+REAL(MinorVersion,8)/10.+REAL(PatchVersion,8)/100.
!> OLD number saved in each hdf5 file with hdf5 header
@@ -64,6 +64,8 @@ MODULE MOD_Globals_Vars
REAL, PARAMETER :: Joule2eV=6.241506363094e+18 !> Conversion factor [J] -> [eV] (Joule to electron volt)
REAL, PARAMETER :: eV2Joule=1.60217734e-19 !> Conversion factor [eV] -> [J] (electron volt to Joule)
CHARACTER(LEN=5) :: TimeStampLenStr,TimeStampLenStr2 !> Strings for timestamp format of time
+REAL,PARAMETER :: BohrRadius = 5.2917721067E-11 !> Radius, 1st Bohr orbit for H (a0) [m]
+REAL,PARAMETER :: AtomicMassUnit = 1.660539040E-27 !> Atomic mass unit [kg]
REAL,PARAMETER :: maxEXP= LOG(HUGE(maxexp))
! Set variables (natural constants and derived quantities) from user input or hard coded
diff --git a/src/hdg/elem_mat.f90 b/src/hdg/elem_mat.f90
index d7fd7b25c..894bef4ed 100644
--- a/src/hdg/elem_mat.f90
+++ b/src/hdg/elem_mat.f90
@@ -285,7 +285,7 @@ SUBROUTINE Elem_Mat(td_iter)
END DO !g1
END DO !g2
END DO !g3
-
+
! Invert Dhat
#ifdef VDM_ANALYTICAL
! Computes InvDhat via analytical expression (only works for Lagrange polynomials, hence the "analytical"
@@ -359,14 +359,6 @@ SUBROUTINE Elem_Mat(td_iter)
Smat_BC(:,:,iLocSide,iBCSide) = Smat(:,:,iLocSide,locBCSideID,ElemID)
END DO
END DO
-! Fill ZeroPotentialSide Smat
-IF (ZeroPotentialSideID.GT.0) THEN
- locBCSideID = SideToElem(S2E_LOC_SIDE_ID,ZeroPotentialSideID)
- ElemID = SideToElem(S2E_ELEM_ID,ZeroPotentialSideID)
- DO iLocSide=1,6
- Smat_zeroPotential(:,:,iLocSide) = Smat(:,:,iLocSide,locBCSideID,ElemID)
- END DO
-END IF
! Fill Smat for PETSc with remaining DOFs
DO iElem=1,PP_nElems
DO iLocSide=1,6
@@ -377,6 +369,11 @@ SUBROUTINE Elem_Mat(td_iter)
jSideID=ElemToSide(E2S_SIDE_ID,jLocSide,iElem)
jPETScGlobal=PETScGlobal(jSideID)
IF (iPETScGlobal.GT.jPETScGlobal) CYCLE
+ IF(SetZeroPotentialDOF.AND.(iPETScGlobal.EQ.0)) THEN
+ ! The first DOF is set to constant 0 -> lambda_{1,1} = 0
+ Smat(:,1,jLocSide,iLocSide,iElem) = 0
+ IF(jPETScGlobal.EQ.iPETScGlobal) Smat(1,1,jLocSide,iLocSide,iElem) = 1
+ END IF
PetscCallA(MatSetValuesBlocked(Smat_petsc,1,iPETScGlobal,1,jPETScGlobal,Smat(:,:,jLocSide,iLocSide,iElem),ADD_VALUES,ierr))
END DO
END DO
diff --git a/src/hdg/fillmortar_hdg.f90 b/src/hdg/fillmortar_hdg.f90
index 3a1ca87ea..b25250440 100644
--- a/src/hdg/fillmortar_hdg.f90
+++ b/src/hdg/fillmortar_hdg.f90
@@ -67,7 +67,6 @@ SUBROUTINE InitMortar_HDG()
#if USE_PETSC
USE MOD_HDG_Vars ,ONLY: SmallMortarType
#if USE_MPI
-USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_WORLD
USE MOD_MPI ,ONLY: StartReceiveMPIDataInt,StartSendMPIDataInt,FinishExchangeMPIData
USE MOD_MPI_Vars
#endif /*USE_MPI*/
diff --git a/src/hdg/hdg.f90 b/src/hdg/hdg.f90
index 92454b3f2..b39d1196d 100644
--- a/src/hdg/hdg.f90
+++ b/src/hdg/hdg.f90
@@ -81,7 +81,6 @@ SUBROUTINE DefineParametersHDG()
CALL prms%CreateIntOption( 'HDGSkipInit' ,'Number of time step iterations until the HDG solver is called (i.e. all intermediate calls are skipped) while time < HDGSkip_t0 (if HDGSkip > 0)', '0')
CALL prms%CreateRealOption( 'HDGSkip_t0' ,'Time during which HDGSkipInit is used instead of HDGSkip (if HDGSkip > 0)', '0.')
CALL prms%CreateLogicalOption('HDGDisplayConvergence' ,'Display divergence criteria: Iterations, RunTime and Residual', '.FALSE.')
-CALL prms%CreateIntOption( 'HDGZeroPotentialDir' ,'Direction in which a Dirichlet condition with phi=0 is superimposed on the boundary conditions (1: x, 2: y, 3: z). The default chooses the direction automatically when no other Dirichlet boundary conditions are defined.','-1')
CALL prms%CreateRealArrayOption( 'EPC-Resistance' , 'Vector (length corresponds to the number of EPC boundaries) with the resistance for each EPC in Ohm', no=0)
#if defined(PARTICLES)
CALL prms%CreateLogicalOption( 'UseBiasVoltage' , 'Activate usage of bias voltage adjustment (for specific boundaries only)', '.FALSE.')
@@ -128,7 +127,6 @@ SUBROUTINE InitHDG()
USE PETSc
USE MOD_Mesh_Vars ,ONLY: nMPISides_YOUR
#if USE_MPI
-USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_WORLD
USE MOD_MPI ,ONLY: StartReceiveMPIDataInt,StartSendMPIDataInt,FinishExchangeMPIData
USE MOD_MPI_Vars
#endif /*USE_MPI*/
@@ -148,6 +146,7 @@ SUBROUTINE InitHDG()
INTEGER :: i,j,k,r,iElem,SideID
INTEGER :: BCType,BCState
REAL :: D(0:PP_N,0:PP_N)
+INTEGER :: nDirichletBCsidesGlobal
#if USE_PETSC
PetscErrorCode :: ierr
INTEGER :: iProc
@@ -273,8 +272,21 @@ SUBROUTINE InitHDG()
CALL InitBV()
#endif /*defined(PARTICLES)*/
-! Check if zero potential must be set on a boundary (or periodic side)
-CALL InitZeroPotential()
+! Get the global number of Dirichlet boundaries. If there are none, the potential of a single DOF must be set.
+#if USE_MPI
+ CALL MPI_ALLREDUCE(nDirichletBCsides , nDirichletBCsidesGlobal , 1 , MPI_INTEGER , MPI_MAX , MPI_COMM_PICLAS , IERROR)
+#else
+ nDirichletBCsidesGlobal = nDirichletBCsides
+#endif /*USE_MPI*/
+#if USE_PETSC
+IF(nDirichletBCsidesGlobal.EQ.0) THEN
+#else
+IF(MPIroot .AND. (nDirichletBCsidesGlobal.EQ.0)) THEN
+#endif
+ SetZeroPotentialDOF = .TRUE.
+ELSE
+ SetZeroPotentialDOF = .FALSE.
+END IF
IF(nDirichletBCsides.GT.0)ALLOCATE(DirichletBC(nDirichletBCsides))
IF(nNeumannBCsides .GT.0)THEN
@@ -321,8 +333,7 @@ SUBROUTINE InitHDG()
END IF
END DO
nPETScUniqueSides = nSides-nDirichletBCSides-nMPISides_YOUR-nMortarMasterSides-nConductorBCsides
-IF(ZeroPotentialSideID.GT.0) nPETScUniqueSides = nPETScUniqueSides - 1
-CALL MPI_ALLGATHER(nPETScUniqueSides,1,MPI_INTEGER,OffsetPETScSideMPI,1,MPI_INTEGER,MPI_COMM_WORLD,IERROR)
+CALL MPI_ALLGATHER(nPETScUniqueSides,1,MPI_INTEGER,OffsetPETScSideMPI,1,MPI_INTEGER,MPI_COMM_PICLAS,IERROR)
DO iProc=1, myrank
OffsetPETScSide = OffsetPETScSide + OffsetPETScSideMPI(iProc)
END DO
@@ -333,9 +344,9 @@ SUBROUTINE InitHDG()
ALLOCATE(PETScLocalToSideID(nPETScUniqueSides+nMPISides_YOUR))
PETScGlobal=-1
PETScLocalToSideID=-1
-PETScLocalID=0 ! = nSides-nDirichletBCSides (-ZeroPotentialSide)
+PETScLocalID=0 ! = nSides-nDirichletBCSides
DO SideID=1,nSides!-nMPISides_YOUR
- IF((MaskedSide(SideID).GT.0).OR.(SideID.EQ.ZeroPotentialSideID)) CYCLE
+ IF(MaskedSide(SideID).GT.0) CYCLE
PETScLocalID=PETScLocalID+1
PETScLocalToSideID(PETScLocalID)=SideID
PETScGlobal(SideID)=PETScLocalID+OffsetPETScSide-1 ! PETSc arrays start at 0!
@@ -430,10 +441,6 @@ SUBROUTINE InitHDG()
#if USE_PETSC
ALLOCATE(Smat_BC(nGP_face,nGP_face,6,nDirichletBCSides))
Smat_BC = 0.
-IF(ZeroPotentialSideID.GT.0) THEN
- ALLOCATE(Smat_zeroPotential(nGP_face,nGP_face,6))
- Smat_zeroPotential = 0.
-END IF
PetscCallA(MatCreate(PETSC_COMM_WORLD,Smat_petsc,ierr))
PetscCallA(MatSetBlockSize(Smat_petsc,nGP_face,ierr))
@@ -446,7 +453,7 @@ SUBROUTINE InitHDG()
! ALLOCATE(FPC%GroupGlobal(1:FPC%nFPCBounds))
! FPC%GroupGlobal(1:FPC%nFPCBounds) = FPC%Group(1:FPC%nFPCBounds,3)
! ! TODO is this allreduce required?
-! !CALL MPI_ALLREDUCE(FPC%Group(1:FPC%nFPCBounds,3),FPC%GroupGlobal(1:FPC%nFPCBounds), FPC%nFPCBounds, MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_WORLD, IERROR)
+! !CALL MPI_ALLREDUCE(FPC%Group(1:FPC%nFPCBounds,3),FPC%GroupGlobal(1:FPC%nFPCBounds), FPC%nFPCBounds, MPI_DOUBLE_PRECISION, MPI_SUM, MPI_COMM_PICLAS, IERROR)
! nAffectedBlockSides = MAXVAL(FPC%GroupGlobal(:))
! DEALLOCATE(FPC%GroupGlobal)
! nAffectedBlockSides = MAX(22,nAffectedBlockSides*6)
@@ -526,130 +533,6 @@ SUBROUTINE InitHDG()
END SUBROUTINE InitHDG
-!===================================================================================================================================
-!> Check if any Dirichlet BCs are present (globally, not only on the local processor).
-!> If there are none, an arbitrary potential is set at one of the boundaries to ensure
-!> convergence of the HDG solver. This is required for setups where fully periodic and/or Neumann boundaries are solely used.
-!> This only works for Cartesian meshes, i.e., that the boundary faces must be perpendicular to two of the three Cartesian axes
-!===================================================================================================================================
-SUBROUTINE InitZeroPotential()
-! MODULES
-USE MOD_PreProc
-USE MOD_Globals
-USE MOD_HDG_Vars ,ONLY: ZeroPotentialSideID,HDGZeroPotentialDir
-USE MOD_Mesh ,ONLY: GetMeshMinMaxBoundaries
-USE MOD_Mesh_Vars ,ONLY: nBCs,BoundaryType,nSides,BC,xyzMinMax,NGeo,Face_xGP
-USE MOD_ReadInTools ,ONLY: PrintOption,GETINT
-#if USE_LOADBALANCE
-USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
-#endif /*USE_LOADBALANCE*/
-IMPLICIT NONE
-!----------------------------------------------------------------------------------------------------------------------------------!
-! INPUT / OUTPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-INTEGER :: SideID,BCAlpha,BCType,BCState,iBC,nZeroPotentialSides,nZeroPotentialSidesGlobal,ZeroPotentialDir
-INTEGER :: nZeroPotentialSidesMax,BCSide
-REAL,DIMENSION(3) :: x,v1,v2,v3
-REAL :: norm,I(3,3)
-!===================================================================================================================================
-! Initialize variables
-HDGZeroPotentialDir = GETINT('HDGZeroPotentialDir')
-ZeroPotentialSideID = -1
-I(:,1) = (/1. , 0. , 0./)
-I(:,2) = (/0. , 1. , 0./)
-I(:,3) = (/0. , 0. , 1./)
-
-! Every processor has to check every BC
-DO iBC=1,nBCs
- BCType = BoundaryType(iBC,BC_TYPE) ! 1
- BCState = BoundaryType(iBC,BC_STATE) ! 2
- SELECT CASE(BCType)
- CASE(1) ! periodic
- ! do nothing
- CASE(HDGDIRICHLETBCSIDEIDS) ! Dirichlet
- ZeroPotentialSideID = 0 ! no zero potential required
- EXIT ! as soon as one Dirichlet BC is found, no zero potential must be used
- CASE(10,11) ! Neumann
- ! do nothing
- CASE(20) ! FPC
- ! do nothing
- CASE DEFAULT ! unknown BCType
- CALL CollectiveStop(__STAMP__,' unknown BC Type in hdg.f90!',IntInfo=BCType)
- END SELECT ! BCType
-END DO
-
-! If a Dirichlet BC is found ZeroPotentialSideID is zero and the following is skipped
-IF(ZeroPotentialSideID.EQ.-1)THEN
- ! Check if the user has selected a specific direction
- IF(HDGZeroPotentialDir.EQ.-1)THEN
- ! Select the direction (x, y or z), which has the largest extent (to account for 1D and 2D setups for example)
- CALL GetMeshMinMaxBoundaries()
-
- ! Calc max extents in each direction for comparison
- x(1) = xyzMinMax(2)-xyzMinMax(1)
- x(2) = xyzMinMax(4)-xyzMinMax(3)
- x(3) = xyzMinMax(6)-xyzMinMax(5)
- ZeroPotentialDir=MAXLOC(x,DIM=1)
- ELSE
- ZeroPotentialDir = HDGZeroPotentialDir
- END IF ! HDGZeroPotentialDir.EQ.-1
- CALL PrintOption('Zero potential side activated in direction (1: x, 2: y, 3: z)','OUTPUT',IntOpt=ZeroPotentialDir)
-
- nZeroPotentialSides = 0 ! Initialize
- DO SideID=1,nSides ! Periodic sides are not within the 1,nBCSides list !
- IF(MAXVAL(ABS(Face_xGP(:,:,:,SideID))).LE.0.) CYCLE ! slave sides
- BCSide=BC(SideID)
- IF(BCSide.EQ.0) CYCLE ! inner sides
- BCType =BoundaryType(BCSide,BC_TYPE)
- BCState=BoundaryType(BCSide,BC_STATE)
- BCAlpha=BoundaryType(BCSide,BC_ALPHA)
- IF(BCType.EQ.0) CYCLE ! skip inner sides
-
- ! Check if the normal vector of the face points in the direction (or negative direction) of the ZeroPotentialDir (tolerance 1e-5)
- v1(:) = Face_xGP(1:3 , NGeo , 0 , SideID) - Face_xGP(1:3 , 0 , 0 , SideID)
- v2(:) = Face_xGP(1:3 , 0 , NGeo , SideID) - Face_xGP(1:3 , 0 , 0 , SideID)
- v3(:) = CROSSNORM(v1,v2)
- norm = ABS(DOT_PRODUCT(I(:,ZeroPotentialDir),v3))
- IF(ALMOSTEQUALRELATIVE(norm, 1.0, 1E-5))THEN
- ZeroPotentialSideID = SideID
- nZeroPotentialSides = nZeroPotentialSides + 1
- END IF ! ALMOSTEQUALRELATIVE(norm, 1.0, 1E-5)
- END DO
-
-#if USE_MPI
- ! Combine number of found zero potential sides to make sure that at least one is found
- IF(MPIroot)THEN
- CALL MPI_REDUCE(nZeroPotentialSides , nZeroPotentialSidesGlobal , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(nZeroPotentialSides , nZeroPotentialSidesMax , 1 , MPI_INTEGER , MPI_MAX , 0 , MPI_COMM_WORLD , IERROR)
- ELSE
- CALL MPI_REDUCE(nZeroPotentialSides , 0 , 1 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
- CALL MPI_REDUCE(nZeroPotentialSides , 0 , 1 , MPI_INTEGER , MPI_MAX , 0 , MPI_COMM_WORLD , IERROR)
- END IF
-#else
- nZeroPotentialSidesGlobal = nZeroPotentialSides
-#endif /*USE_MPI*/
- LBWRITE(UNIT_StdOut,'(A,I0)') " Found (global) number of zero potential sides: ", nZeroPotentialSidesMax
-
- ! Sanity checks for root
- IF(MPIroot)THEN
- ! 1) multiples sides found
- IF(nZeroPotentialSidesMax.GT.1)THEN
- LBWRITE(UNIT_StdOut,'(A)') " WARNING: Found more than 1 zero potential side on a proc and currently, only one can be considered."
- LBWRITE(UNIT_StdOut,'(A,I0,A)') " WARNING: nZeroPotentialSidesGlobal: ", nZeroPotentialSidesMax, " (may lead to problems)"
- END IF
-
- ! 2) no sides found
- IF(nZeroPotentialSidesGlobal.EQ.0)THEN
- WRITE(UNIT_StdOut,*) " Sanity check: this fails when the mesh is not Cartesian. This needs to be implemented if required."
- CALL abort(__STAMP__,'Setup has no Dirichlet BCs and no zero potential sides where found.')
- END IF
- END IF
-END IF ! ZeroPotentialSideID.EQ.0
-
-END SUBROUTINE InitZeroPotential
-
-
!===================================================================================================================================
!> Create containers and communicators for each floating boundary condition where impacting charges are accumulated.
!>
@@ -664,7 +547,7 @@ END SUBROUTINE InitZeroPotential
!===================================================================================================================================
SUBROUTINE InitFPC()
! MODULES
-USE MOD_Globals ! ,ONLY: MPIRoot,iError,myrank,UNIT_stdOut,MPI_COMM_WORLD
+USE MOD_Globals ! ,ONLY: MPIRoot,iError,myrank,UNIT_stdOut,MPI_COMM_PICLAS
USE MOD_Preproc
USE MOD_Mesh_Vars ,ONLY: nBCs,BoundaryType
USE MOD_Analyze_Vars ,ONLY: DoFieldAnalyze
@@ -681,6 +564,8 @@ SUBROUTINE InitFPC()
USE MOD_Particle_MPI_Vars ,ONLY: halo_eps
USE MOD_Mesh_Vars ,ONLY: nElems, offsetElem
#endif /*USE_MPI && defined(PARTICLES)*/
+USE MOD_Equation_Vars ,ONLY: IniExactFunc
+USE MOD_Particle_Mesh_Vars ,ONLY: GEO
IMPLICIT NONE
! INPUT / OUTPUT VARIABLES
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -770,6 +655,26 @@ SUBROUTINE InitFPC()
ALLOCATE(FPC%ChargeProc(1:FPC%nUniqueFPCBounds))
FPC%ChargeProc = 0.
+! Set initial value depending on IniExactFunc
+SELECT CASE (IniExactFunc)
+CASE(800,900) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite
+ ! Set initial value
+ FPC%Charge(1) = 1.0e-2*(GEO%ymaxglob-GEO%yminglob)*(GEO%zmaxglob-GEO%zminglob) ! C/m2
+ FPC%Voltage(1) = 1.1293922903231239 ! V
+CASE(801) ! Dielectric slab on electrode (left) with plasma between slab and other electrode opposite: 2D case
+ ! Set initial value
+ FPC%Charge(1) = 5e-11*(1.0 - 0.05) ! C/m2
+ FPC%Charge(2) = 5e-11*(1.0 - 0.15) ! C/m2
+ FPC%Charge(3) = 5e-11*(1.0 - 0.25) ! C/m2
+ FPC%Charge(4) = 5e-11*(1.0 - 0.35) ! C/m2
+ FPC%Charge(5) = 5e-11*(1.0 - 0.45) ! C/m2
+ FPC%Charge(6) = 5e-11*(1.0 - 0.55) ! C/m2
+ FPC%Charge(7) = 5e-11*(1.0 - 0.65) ! C/m2
+ FPC%Charge(8) = 5e-11*(1.0 - 0.75) ! C/m2
+ FPC%Charge(9) = 5e-11*(1.0 - 0.85) ! C/m2
+ FPC%Charge(10) = 5e-11*(1.0 - 0.95) ! C/m2
+END SELECT
+
!! 3.) Create Mapping from field BC index to floating boundary condition BC index
!ALLOCATE(FPC%BCIDToFPCBCID(nBCs))
!FPC%BCIDToFPCBCID = -1
@@ -881,7 +786,7 @@ SUBROUTINE InitFPC()
FPC%COMM(iUniqueFPCBC)%ID=iUniqueFPCBC
! create new emission communicator for floating boundary condition communication. Pass MPI_INFO_NULL as rank to follow the original ordering
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, color, MPI_INFO_NULL, FPC%COMM(iUniqueFPCBC)%UNICATOR, iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, FPC%COMM(iUniqueFPCBC)%UNICATOR, iError)
! Find my rank on the shared communicator, comm size and proc name
IF(BConProc(iUniqueFPCBC))THEN
@@ -946,7 +851,7 @@ END SUBROUTINE InitFPC
!===================================================================================================================================
SUBROUTINE InitEPC()
! MODULES
-USE MOD_Globals ! ,ONLY: MPIRoot,iError,myrank,UNIT_stdOut,MPI_COMM_WORLD
+USE MOD_Globals ! ,ONLY: MPIRoot,iError,myrank,UNIT_stdOut,MPI_COMM_PICLAS
USE MOD_Preproc
USE MOD_Mesh_Vars ,ONLY: nBCs,BoundaryType
USE MOD_Analyze_Vars ,ONLY: DoFieldAnalyze
@@ -1160,7 +1065,7 @@ SUBROUTINE InitEPC()
! Create new emission communicator for Electric potential boundary condition communication.
! Pass MPI_INFO_NULL as rank to follow the original ordering
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, color, MPI_INFO_NULL, EPC%COMM(iUniqueEPCBC)%UNICATOR, iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, EPC%COMM(iUniqueEPCBC)%UNICATOR, iError)
! Find my rank on the shared communicator, comm size and proc name
IF(BConProc(iUniqueEPCBC))THEN
@@ -1233,7 +1138,7 @@ SUBROUTINE InitBV()
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
#if USE_MPI
-USE MOD_Globals ,ONLY: IERROR,MPI_COMM_NULL,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,MPI_INFO_NULL,MPI_UNDEFINED,MPIRoot
+USE MOD_Globals ,ONLY: IERROR,MPI_COMM_NULL,MPI_DOUBLE_PRECISION,MPI_COMM_PICLAS,MPI_INFO_NULL,MPI_UNDEFINED,MPIRoot
USE MOD_Mesh_Vars ,ONLY: nBCSides,BC
#endif /*USE_MPI*/
IMPLICIT NONE
@@ -1246,9 +1151,9 @@ SUBROUTINE InitBV()
! ! 51: cos(wt) function with DC bias
! ! 52: cos(wt) function with DC bias + coupled power for AC potential adjustment
INTEGER :: BCType,BVBoundaries,BCState,iBoundary
-INTEGER :: SideID,iBC,iPBC
+INTEGER :: iBC,iPBC
#if USE_MPI
-INTEGER :: color
+INTEGER :: color,SideID
LOGICAL :: BConProc
#endif /*USE_MPI*/
!===================================================================================================================================
@@ -1334,7 +1239,7 @@ SUBROUTINE InitBV()
BiasVoltage%COMM%ID = BVBoundaries
! Create new emission communicator for electric potential boundary condition communication. Pass MPI_INFO_NULL as rank to follow the original ordering
-CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, color, MPI_INFO_NULL, BiasVoltage%COMM%UNICATOR, iError)
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, BiasVoltage%COMM%UNICATOR, iError)
! Find my rank on the shared communicator, comm size and process name
IF(BConProc)THEN
@@ -1904,7 +1809,7 @@ SUBROUTINE HDGLinear(time,U_out)
KSPConvergedReason :: reason
PetscInt :: iterations
PetscReal :: petscnorm
-INTEGER :: ElemID,iBCSide,locBCSideID, PETScLocalID
+INTEGER :: ElemID,iBCSide,PETScLocalID
INTEGER :: PETScID_start, PETScID_stop
REAL :: timeStartPiclas,timeEndPiclas
REAL :: RHS_conductor(nGP_face)
@@ -2002,7 +1907,7 @@ SUBROUTINE HDGLinear(time,U_out)
#endif
! Floating boundary BCs
-#if USE_PETSC && defined(PARTICLES)
+#if USE_PETSC
IF(UseFPC)THEN
#if USE_MPI
! Communicate the accumulated charged on each BC to all processors on the communicator
@@ -2021,10 +1926,10 @@ SUBROUTINE HDGLinear(time,U_out)
! Apply charge to RHS, which this is done below: RHS_conductor(1)=FPC%Charge(iUniqueFPCBC)/eps0
END IF ! UseFPC
-#endif /*USE_PETSC && defined(PARTICLES)*/
+#endif /*USE_PETSC*/
- ! Check if zero potential sides are present
- IF(ZeroPotentialSideID.GT.0) lambda(iVar,:,ZeroPotentialSideID) = ZeroPotentialValue
+ ! Set potential to zero
+ IF(SetZeroPotentialDOF) lambda(iVar,1,1) = 0.
END DO
!volume source (volume RHS of u system)
@@ -2087,19 +1992,6 @@ SUBROUTINE HDGLinear(time,U_out)
RHS_face(1,:,SideID),1)
END DO
END DO
-!!!! add ZeroPotentialSide
-IF(ZeroPotentialSideID.GT.0)THEN
- locBCSideID = SideToElem(S2E_LOC_SIDE_ID,ZeroPotentialSideID)
- ElemID = SideToElem(S2E_ELEM_ID,ZeroPotentialSideID)
- DO iLocSide=1,6
- SideID = ElemToSide(E2S_SIDE_ID,iLocSide,ElemID)
- IF(PETScGlobal(SideID).EQ.-1) CYCLE
- CALL DGEMV('N',nGP_face,nGP_face,-1., &
- Smat_zeroPotential(:,:,iLocSide), nGP_face, &
- lambda(1,:,ZeroPotentialSideID),1,1.,& !add to RHS_face
- RHS_face(1,:,SideID),1)
- END DO
-END IF
#endif
#if (PP_nVar!=1)
@@ -2149,6 +2041,12 @@ SUBROUTINE HDGLinear(time,U_out)
PetscCallA(VecSetValuesBlocked(RHS_petsc,1,nPETScUniqueSidesGlobal-1-FPC%nUniqueFPCBounds+iUniqueFPCBC,RHS_conductor,INSERT_VALUES,ierr))
END DO !iUniqueFPCBC = 1, FPC%nUniqueFPCBounds
END IF ! MPIRoot
+
+ ! Reset the RHS of the first DOF if ZeroPotential must be set
+ IF(MPIroot .AND. SetZeroPotentialDOF) THEN
+ PetscCallA(VecSetValue(RHS_petsc,0,0,INSERT_VALUES,ierr))
+ END IF
+
PetscCallA(VecAssemblyBegin(RHS_petsc,ierr))
PetscCallA(VecAssemblyEnd(RHS_petsc,ierr))
@@ -2720,7 +2618,7 @@ SUBROUTINE CheckNonLinRes(RHS,lambda,converged,Norm_R2)
#if USE_MPI
IF(MPIroot) converged=(Norm_R2.LT.EpsNonLinear**2)
- CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
#else
converged=(Norm_R2.LT.EpsNonLinear**2)
#endif /*USE_MPI*/
@@ -2804,14 +2702,14 @@ SUBROUTINE CG_solver(RHS,lambda,iVar)
IF(useRelativeAbortCrit)THEN
#if USE_MPI
IF(MPIroot) converged=(Norm_R2.LT.1e-16)
- CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
#else
converged=(Norm_R2.LT.1e-16)
#endif /*USE_MPI*/
ELSE
#if USE_MPI
IF(MPIroot) converged=(Norm_R2.LT.EpsCG**2)
- CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
#else
converged=(Norm_R2.LT.EpsCG**2)
#endif /*USE_MPI*/
@@ -2873,7 +2771,7 @@ SUBROUTINE CG_solver(RHS,lambda,iVar)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
- CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(converged,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterEnd, count_rate=Rate)
@@ -2966,7 +2864,7 @@ END SUBROUTINE DisplayConvergence
SUBROUTINE EvalResidual(RHS,lambda,R,iVar)
! MODULES
USE MOD_Globals
-USE MOD_HDG_Vars ,ONLY: nGP_face,nDirichletBCSides,DirichletBC,ZeroPotentialSideID,ZeroPotentialValue
+USE MOD_HDG_Vars ,ONLY: nGP_face,nDirichletBCSides,DirichletBC,SetZeroPotentialDOF
USE MOD_Mesh_Vars ,ONLY: nSides
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -2999,8 +2897,8 @@ SUBROUTINE EvalResidual(RHS,lambda,R,iVar)
R(:,DirichletBC(BCsideID))=0.
END DO ! SideID=1,nSides
- ! Set potential to zero
- IF(ZeroPotentialSideID.GT.0) R(:,ZeroPotentialSideID)= 0.
+ ! Set residual to zero
+ IF(SetZeroPotentialDOF) R(1,1) = 0.
#if (PP_nVar!=1)
END IF
@@ -3022,7 +2920,7 @@ END SUBROUTINE EvalResidual
SUBROUTINE MatVec(lambda, mv, iVar)
! MODULES
USE MOD_Globals
-USE MOD_HDG_Vars ,ONLY: Smat,nGP_face,nDirichletBCSides,DirichletBC,ZeroPotentialSideID,ZeroPotentialValue
+USE MOD_HDG_Vars ,ONLY: Smat,nGP_face,nDirichletBCSides,DirichletBC,SetZeroPotentialDOF
USE MOD_Mesh_Vars ,ONLY: nSides, SideToElem, ElemToSide, nMPIsides_YOUR
USE MOD_FillMortar_HDG ,ONLY: BigToSmallMortar_HDG,SmallToBigMortar_HDG
#if USE_MPI
@@ -3159,13 +3057,13 @@ SUBROUTINE MatVec(lambda, mv, iVar)
IF (iVar.EQ.4) THEN
#endif
-!set mv on Dirichlet BC to zero!
-DO BCsideID=1,nDirichletBCSides
- mv(:,DirichletBC(BCsideID))=0.
-END DO ! SideID=1,nSides
+ !set mv on Dirichlet BC to zero!
+ DO BCsideID=1,nDirichletBCSides
+ mv(:,DirichletBC(BCsideID))=0.
+ END DO ! SideID=1,nSides
! Set potential to zero
- IF(ZeroPotentialSideID.GT.0) mv(:,ZeroPotentialSideID) = 0.
+ IF(SetZeroPotentialDOF) mv(1,1) = 0.
#if (PP_nVar!=1)
END IF
@@ -3238,7 +3136,7 @@ SUBROUTINE VectorDotProduct(dim1,A,B,Resu)
#if USE_MPI
ResuSend=Resu
- CALL MPI_ALLREDUCE(ResuSend,Resu,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(ResuSend,Resu,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif
#if defined(MEASURE_MPI_WAIT)
@@ -3392,14 +3290,13 @@ END SUBROUTINE RestartHDG
!===================================================================================================================================
SUBROUTINE FinalizeHDG()
! MODULES
-USE MOD_globals
+USE MOD_Globals
USE MOD_HDG_Vars
#if USE_PETSC
USE petsc
#endif
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance,UseH5IOLoadBalance
-USE MOD_HDG_Vars ,ONLY: lambda, nGP_face
USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared
USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem,nSides,SideToNonUniqueGlobalSide
USE MOD_Mesh_Tools ,ONLY: LambdaSideToMaster,GetMasteriLocSides
@@ -3416,6 +3313,9 @@ SUBROUTINE FinalizeHDG()
INTEGER :: NonUniqueGlobalSideID
INTEGER :: iSide
#endif /*USE_LOADBALANCE*/
+#if USE_MPI
+INTEGER :: iBC
+#endif /*USE_MPI*/
!===================================================================================================================================
HDGInitIsDone = .FALSE.
#if USE_PETSC
@@ -3427,7 +3327,6 @@ SUBROUTINE FinalizeHDG()
SDEALLOCATE(PETScGlobal)
SDEALLOCATE(PETScLocalToSideID)
SDEALLOCATE(Smat_BC)
-SDEALLOCATE(Smat_zeroPotential)
SDEALLOCATE(SmallMortarType)
#endif
SDEALLOCATE(NonlinVolumeFac)
@@ -3475,6 +3374,9 @@ SUBROUTINE FinalizeHDG()
SDEALLOCATE(FPC%VoltageProc)
SDEALLOCATE(FPC%ChargeProc)
#if USE_MPI
+DO iBC = 1, FPC%nUniqueFPCBounds
+ IF(FPC%COMM(iBC)%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(FPC%COMM(iBC)%UNICATOR,iERROR)
+END DO
SDEALLOCATE(FPC%COMM)
#endif /*USE_MPI*/
@@ -3498,7 +3400,14 @@ SUBROUTINE FinalizeHDG()
SDEALLOCATE(EPC%VoltageProc)
SDEALLOCATE(EPC%ChargeProc)
#if USE_MPI
+DO iBC = 1, EPC%nUniqueEPCBounds
+ IF(EPC%COMM(iBC)%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(EPC%COMM(iBC)%UNICATOR,iERROR)
+END DO
SDEALLOCATE(EPC%COMM)
+#if defined(PARTICLES)
+IF(BiasVoltage%COMM%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(BiasVoltage%COMM%UNICATOR,iERROR)
+IF(CPPCOMM%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(CPPCOMM%UNICATOR,iERROR)
+#endif /*defined(PARTICLES)*/
#endif /*USE_MPI*/
#if USE_LOADBALANCE
@@ -3531,4 +3440,4 @@ SUBROUTINE FinalizeHDG()
END SUBROUTINE FinalizeHDG
-END MODULE MOD_HDG
\ No newline at end of file
+END MODULE MOD_HDG
diff --git a/src/hdg/hdg_vars.f90 b/src/hdg/hdg_vars.f90
index 1c1d83384..0e00f127b 100644
--- a/src/hdg/hdg_vars.f90
+++ b/src/hdg/hdg_vars.f90
@@ -19,6 +19,9 @@
!===================================================================================================================================
MODULE MOD_HDG_Vars
! MODULES
+#if USE_MPI
+USE MOD_Globals
+#endif /*USE_MPI*/
#if USE_PETSC
USE PETSc
#endif
@@ -46,11 +49,10 @@ MODULE MOD_HDG_Vars
VecScatter :: scatter_conductors_petsc
IS :: idx_local_conductors_petsc
IS :: idx_global_conductors_petsc
-INTEGER,ALLOCATABLE :: PETScGlobal(:) !< PETScGlobal(SideID) maps the local SideID to global PETScSideID
+INTEGER,ALLOCATABLE :: PETScGlobal(:) !< PETScGlobal(SideID) maps the local SideID to global PETScSideID
INTEGER,ALLOCATABLE :: PETScLocalToSideID(:) !< PETScLocalToSideID(PETScLocalSideID) maps the local PETSc side to SideID
REAL,ALLOCATABLE :: Smat_BC(:,:,:,:) !< side to side matrix for dirichlet (D) BCs, (ngpface,ngpface,6Sides,DSides)
-REAL,ALLOCATABLE :: Smat_zeroPotential(:,:,:) !< side to side matrix for zero potential Side, (ngpface,ngpface,6Sides)
-INTEGER :: nPETScSides !< nSides - nDirichletSides - nZeroPotentialSides
+INTEGER :: nPETScSides !< nSides - nDirichletSides
INTEGER :: nPETScUniqueSides !< nPETScSides - nMPISides_YOUR
INTEGER :: nPETScUniqueSidesGlobal
#endif
@@ -71,13 +73,9 @@ MODULE MOD_HDG_Vars
REAL,ALLOCATABLE :: qn_face(:,:,:) !< for Neumann BC
REAL,ALLOCATABLE :: qn_face_MagStat(:,:,:) !< for Neumann BC
INTEGER :: nDirichletBCsides
-INTEGER :: ZeroPotentialSideID !< SideID, where the solution is set zero to enforce convergence
-REAL,PARAMETER :: ZeroPotentialValue=0. !< This can be set to an arbitrary value (in the range of the potential solution)
-INTEGER :: HDGZeroPotentialDir !< Direction in which a Dirichlet condition with phi=0 is superimposed on the boundary
- !< conditions. Default chooses the direction automatically when no other Dirichlet
- !< boundary conditions are defined.
INTEGER :: nNeumannBCsides
INTEGER :: nConductorBCsides !< Number of processor-local sides that are conductors (FPC) in [1:nBCSides]
+LOGICAL :: SetZeroPotentialDOF !< Flag to set a single DOF, if only periodic and Neumann boundaries are present
INTEGER,ALLOCATABLE :: ConductorBC(:)
INTEGER,ALLOCATABLE :: DirichletBC(:)
INTEGER,ALLOCATABLE :: NeumannBC(:)
@@ -161,15 +159,11 @@ MODULE MOD_HDG_Vars
#if USE_MPI
TYPE tMPIGROUP
- INTEGER :: ID !< MPI communicator ID
- INTEGER :: UNICATOR !< MPI communicator for floating boundary condition
- INTEGER :: Request !< MPI request for asynchronous communication
- INTEGER :: nProcs !< number of MPI processes part of the FPC group
- INTEGER :: nProcsWithSides !< number of MPI processes part of the FPC group and actual FPC sides
- INTEGER :: MyRank !< MyRank of PartMPIVAR%COMM
- LOGICAL :: MPIRoot !< Root, MPIRank=0
- INTEGER,ALLOCATABLE :: GroupToComm(:) !< list containing the rank in PartMPI%COMM
- INTEGER,ALLOCATABLE :: CommToGroup(:) !< list containing the rank in PartMPI%COMM
+ INTEGER :: ID !< MPI communicator ID
+ INTEGER :: UNICATOR=MPI_COMM_NULL !< MPI communicator for floating boundary condition
+ INTEGER :: nProcs !< number of MPI processes part of the FPC group
+ INTEGER :: nProcsWithSides !< number of MPI processes part of the FPC group and actual FPC sides
+ INTEGER :: MyRank !< MyRank within communicator
END TYPE
#endif /*USE_MPI*/
diff --git a/src/init/define_parameters_init.f90 b/src/init/define_parameters_init.f90
index 800065b9a..6371741dc 100644
--- a/src/init/define_parameters_init.f90
+++ b/src/init/define_parameters_init.f90
@@ -80,10 +80,15 @@ SUBROUTINE InitDefineParameters()
USE MOD_Particle_TimeStep ,ONLY: DefineParametersVariableTimeStep
USE MOD_DSMC_Symmetry ,ONLY: DefineParametersParticleSymmetry
USE MOD_SuperB_Init ,ONLY: DefineParametersSuperB
+USE MOD_RayTracing_Init ,ONLY: DefineParametersRayTracing
#if USE_MPI
USE mod_readIMD ,ONLY: DefineParametersReadIMDdata
#endif
#endif
+#if (PP_TimeDiscMethod==600)
+USE MOD_RadiationTrans_Init ,ONLY: DefineParametersRadiationTrans
+USE MOD_Radiation_Init ,ONLY: DefineParametersRadiation
+#endif
!----------------------------------------------------------------------------------------------------------------------------------!
! Insert modules here
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -124,6 +129,7 @@ SUBROUTINE InitDefineParameters()
CALL DefineParametersAnalyze()
CALL DefineParametersRecordPoints()
#ifdef PARTICLES
+CALL DefineParametersRayTracing()
CALL DefineParametersSuperB()
CALL DefineParametersParticles()
CALL DefineParametersParticleEmission()
@@ -149,6 +155,10 @@ SUBROUTINE InitDefineParameters()
#if (PP_TimeDiscMethod==400)
CALL DefineParametersBGK()
#endif
+#if (PP_TimeDiscMethod==600)
+CALL DefineParametersRadiation()
+CALL DefineParametersRadiationTrans()
+#endif
CALL DefineParametersSurfModel()
CALL DefineParametersSurfModelAnalyze()
#if USE_MPI && defined(PARTICLES)
diff --git a/src/init/piclas_init.f90 b/src/init/piclas_init.f90
index 1727796d6..3d2c40383 100644
--- a/src/init/piclas_init.f90
+++ b/src/init/piclas_init.f90
@@ -43,7 +43,8 @@ SUBROUTINE DefineParametersPiclas()
CALL prms%CreateIntOption( 'TimeStampLength' , 'Length of the floating number time stamp' , '21')
#ifdef PARTICLES
-CALL prms%CreateLogicalOption( 'UseDSMC' , "Flag for using DSMC in Calculation" , '.FALSE.')
+CALL prms%CreateLogicalOption( 'UseDSMC' , "Flag for using DSMC methods" , '.FALSE.')
+CALL prms%CreateLogicalOption( 'UseRayTracing' , "Flag for using ray tracing tools" , '.FALSE.')
#endif
END SUBROUTINE DefineParametersPiclas
@@ -84,8 +85,6 @@ SUBROUTINE InitPiclas(IsLoadBalance)
#endif /*USE_MPI*/
#ifdef PARTICLES
USE MOD_DSMC_Vars ,ONLY: UseDSMC
-USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, VarTimeStep
-USE MOD_Particle_TimeStep ,ONLY: InitPartTimeStep
USE MOD_ParticleInit ,ONLY: InitParticleGlobals,InitParticles
USE MOD_TTMInit ,ONLY: InitTTM,InitIMD_TTM_Coupling
USE MOD_TTM_Vars ,ONLY: DoImportTTMFile
@@ -93,7 +92,6 @@ SUBROUTINE InitPiclas(IsLoadBalance)
USE MOD_SurfaceModel_Analyze ,ONLY: InitSurfModelAnalyze
USE MOD_Particle_MPI ,ONLY: InitParticleMPI
USE MOD_DSMC_Symmetry ,ONLY: Init_Symmetry
-USE MOD_PICDepo_Method ,ONLY: InitDepositionMethod
#if USE_MPI
USE mod_readIMD ,ONLY: initReadIMDdata,read_IMD_results
#endif /* USE_MPI */
@@ -104,6 +102,10 @@ SUBROUTINE InitPiclas(IsLoadBalance)
#if USE_HDG
USE MOD_HDG ,ONLY: InitHDG
#endif
+#if (PP_TimeDiscMethod==600)
+USE MOD_RadiationTrans_Init ,ONLY: InitRadiationTransport
+USE MOD_Radiation_Init ,ONLY: InitRadiation
+#endif
USE MOD_Interfaces ,ONLY: InitInterfaces
USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETREALARRAY,GETINT
USE MOD_TimeDisc_Vars ,ONLY: TEnd
@@ -153,17 +155,7 @@ SUBROUTINE InitPiclas(IsLoadBalance)
END IF
#ifdef PARTICLES
-!--- Variable time step
-VarTimeStep%UseLinearScaling = GETLOGICAL('Part-VariableTimeStep-LinearScaling')
-VarTimeStep%UseDistribution = GETLOGICAL('Part-VariableTimeStep-Distribution')
-IF (VarTimeStep%UseLinearScaling.OR.VarTimeStep%UseDistribution) THEN
- UseVarTimeStep = .TRUE.
- IF(.NOT.IsLoadBalance) CALL InitPartTimeStep()
-ELSE
- UseVarTimeStep = .FALSE.
-END IF
-CALL InitParticleGlobals()
-CALL InitDepositionMethod()
+CALL InitParticleGlobals(IsLoadBalance)
#endif
CALL InitMesh(2)
@@ -198,6 +190,11 @@ SUBROUTINE InitPiclas(IsLoadBalance)
CALL InitHDG() ! Hybridizable Discontinuous Galerkin Method (HDGSEM)
#endif
+#if (PP_TimeDiscMethod==600)
+CALL InitRadiation()
+CALL InitRadiationTransport()
+#endif
+
#ifdef PARTICLES
! Old IMD format
CALL InitTTM() ! FD grid based data from a Two-Temperature Model (TTM) from Molecular Dynamics (MD) Code IMD
@@ -259,6 +256,7 @@ SUBROUTINE FinalizePiclas(IsLoadBalance)
USE MOD_MPI_Shared ,ONLY: FinalizeMPIShared
#endif /*USE_MPI*/
#ifdef PARTICLES
+USE MOD_RayTracing_Init ,ONLY: FinalizeRayTracing
USE MOD_Particle_Surfaces ,ONLY: FinalizeParticleSurfaces
USE MOD_InitializeBackgroundField ,ONLY: FinalizeBackGroundField
USE MOD_SuperB_Init ,ONLY: FinalizeSuperB
@@ -287,10 +285,18 @@ SUBROUTINE FinalizePiclas(IsLoadBalance)
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: FinalizeParticleMPI
USE MOD_Particle_MPI_Vars ,ONLY: ParticleMPIInitisdone
+#if defined(MEASURE_MPI_WAIT)
+USE MOD_MPI ,ONLY: OutputMPIW8Time
+#endif /*defined(MEASURE_MPI_WAIT)*/
#endif /*USE_MPI*/
#endif /*PARTICLES*/
USE MOD_IO_HDF5 ,ONLY: FinalizeElemData,ElementOut
USE MOD_TimeDiscInit ,ONLY: FinalizeTimeDisc
+#if (PP_TimeDiscMethod==600)
+USE MOD_Radiation_Init ,ONLY: FinalizeRadiation
+USE MOD_RadiationTrans_Init ,ONLY: FinalizeRadiationTransport
+USE MOD_Photon_Tracking ,ONLY: FinalizePhotonSurfSample
+#endif
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT VARIABLES
@@ -323,6 +329,7 @@ SUBROUTINE FinalizePiclas(IsLoadBalance)
CALL FinalizeMesh()
CALL FinalizeMortar()
#ifdef PARTICLES
+CALL FinalizeRayTracing()
CALL FinalizeSurfaceModel()
CALL FinalizeSurfaceModelAnalyze()
CALL FinalizeParticleBoundarySampling()
@@ -360,6 +367,12 @@ SUBROUTINE FinalizePiclas(IsLoadBalance)
ParticleMPIInitIsDone=.FALSE.
#endif /*USE_MPI*/
+#if (PP_TimeDiscMethod==600)
+CALL FinalizeRadiation()
+CALL FinalizeRadiationTransport()
+CALL FinalizePhotonSurfSample()
+#endif
+
CALL FinalizeTTM() ! FD grid based data from a Two-Temperature Model (TTM) from Molecular Dynamics (MD) Code IMD
#endif /*PARTICLES*/
@@ -380,6 +393,13 @@ SUBROUTINE FinalizePiclas(IsLoadBalance)
#if USE_MPI
! Free the communicators!
CALL FinalizeMPIShared()
+#if defined(MEASURE_MPI_WAIT)
+ ! Collect the MPI_WAIT() over all procs and output
+ IF(nProcessors.GT.1) CALL OutputMPIW8Time()
+#endif /*defined(MEASURE_MPI_WAIT)*/
+ ! Free the last communicator after OutputMPIW8Time
+ CALL MPI_BARRIER (MPI_COMM_PICLAS,iError)
+ IF(MPI_COMM_PICLAS.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(MPI_COMM_PICLAS,IERROR)
#endif /*USE_MPI*/
ELSE
CALL DisplaySimulationTime(Time, StartTime, 'RUNNING')
diff --git a/src/interfaces/interfaces.f90 b/src/interfaces/interfaces.f90
index 868e33f6d..589462382 100644
--- a/src/interfaces/interfaces.f90
+++ b/src/interfaces/interfaces.f90
@@ -64,14 +64,14 @@ SUBROUTINE InitInterfaces
!===================================================================================================================================
!> Check every face and set the correct identifier for selecting the corresponding Riemann solver
!> possible connections are (Master <-> Slave direction is important):
-!> - vaccuum <-> vacuum : RIEMANN_VACUUM = 0
+!> - vacuum <-> vacuum : RIEMANN_VACUUM = 0
!> - PML <-> vacuum : RIEMANN_PML = 1
!> - PML <-> PML : RIEMANN_PML = 1
!> - dielectric <-> dielectric : RIEMANN_DIELECTRIC = 2
!> - dielectric -> vacuum : RIEMANN_DIELECTRIC2VAC = 3 ! for conservative fluxes (one flux)
-!> - vacuum -> dielectri : RIEMANN_VAC2DIELECTRIC = 4 ! for conservative fluxes (one flux)
+!> - vacuum -> dielectric : RIEMANN_VAC2DIELECTRIC = 4 ! for conservative fluxes (one flux)
!> - dielectric -> vacuum : RIEMANN_DIELECTRIC2VAC_NC = 5 ! for non-conservative fluxes (two fluxes)
-!> - vacuum -> dielectri : RIEMANN_VAC2DIELECTRIC_NC = 6 ! for non-conservative fluxes (two fluxes)
+!> - vacuum -> dielectric : RIEMANN_VAC2DIELECTRIC_NC = 6 ! for non-conservative fluxes (two fluxes)
!===================================================================================================================================
! MODULES
USE MOD_globals
@@ -128,29 +128,53 @@ SUBROUTINE InitInterfaces
! b) - dielectric <-> dielectric : RIEMANN_DIELECTRIC = 2
! a1) - dielectric -> vacuum : RIEMANN_DIELECTRIC2VAC = 3 or 5 (when using non-conservative fluxes)
! a2) - vacuum -> dielectric : RIEMANN_VAC2DIELECTRIC = 4 or 6 (when using non-conservative fluxes)
+ ! am1) - vacuum -> dielectric mortar : RIEMANN_VAC2DIELECTRIC = 4 or 6 (when using non-conservative fluxes)
+ ! am2) - dielectric -> vacuum mortar : RIEMANN_DIELECTRIC2VAC = 3 or 5 (when using non-conservative fluxes)
IF(DoDielectric) THEN
IF (isDielectricFace(SideID))THEN ! 1.) RiemannDielectric
IF(isDielectricInterFace(SideID))THEN
! a) physical <-> dielectric region: for Riemann solver, select A+ and A- as functions of f(Eps0,Mu0) or f(EpsR,MuR)
ElemID = SideToElem(S2E_ELEM_ID,SideID) ! get master element ID for checking if it is in a physical or dielectric region
- IF(MortarType(1,SideID).GE.0) CALL abort(__STAMP__,'Mortars not fully implemented for dielectric <-> vacuum interfaces')
IF(ElemID.EQ.-1) THEN
- InterfaceRiemann(SideID)=-1
- CYCLE ! skip
- END IF
- IF(isDielectricElem(ElemID))THEN
- ! a1) master is DIELECTRIC and slave PHYSICAL
- IF(DielectricFluxNonConserving)THEN ! use one flux (conserving) or two fluxes (non-conserving) at the interface
- InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC_NC ! use two different Riemann solvers
+ IF(MortarType(1,SideID).EQ.0) THEN
+ ! small mortar slave sides have no corresponding master element
+ IF(SideToElem(S2E_NB_ELEM_ID,SideID).GT.0) THEN
+ IF(isDielectricElem(SideToElem(S2E_NB_ELEM_ID,SideID)))THEN
+ ! am1) big elem is PHYSICAL and small slave DIELECTRIC
+ IF(DielectricFluxNonConserving)THEN
+ InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC_NC ! use two different Riemann solvers
+ ELSE
+ InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC ! A+(EpsR,MuR) and A-(Eps0,Mu0)
+ END IF
+ ELSE
+ ! am2) big elem is DIELECTRIC and small slave PHYSICAL
+ IF(DielectricFluxNonConserving)THEN ! use one flux (conserving) or two fluxes (non-conserving) at the interface
+ InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC_NC ! use two different Riemann solvers
+ ELSE
+ InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC ! A+(Eps0,Mu0) and A-(EpsR,MuR)
+ END IF
+ END IF
+ ELSE
+ InterfaceRiemann(SideID)=-1
+ END IF
ELSE
- InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC ! A+(Eps0,Mu0) and A-(EpsR,MuR)
+ InterfaceRiemann(SideID)=-1
END IF
ELSE
- ! a2) master is PHYSICAL and slave DIELECTRIC
- IF(DielectricFluxNonConserving)THEN
- InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC_NC ! use two different Riemann solvers
+ IF(isDielectricElem(ElemID))THEN
+ ! a1) master is DIELECTRIC and slave PHYSICAL
+ IF(DielectricFluxNonConserving)THEN ! use one flux (conserving) or two fluxes (non-conserving) at the interface
+ InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC_NC ! use two different Riemann solvers
+ ELSE
+ InterfaceRiemann(SideID)=RIEMANN_DIELECTRIC2VAC ! A+(Eps0,Mu0) and A-(EpsR,MuR)
+ END IF
ELSE
- InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC ! A+(EpsR,MuR) and A-(Eps0,Mu0)
+ ! a2) master is PHYSICAL and slave DIELECTRIC
+ IF(DielectricFluxNonConserving)THEN
+ InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC_NC ! use two different Riemann solvers
+ ELSE
+ InterfaceRiemann(SideID)=RIEMANN_VAC2DIELECTRIC ! A+(EpsR,MuR) and A-(Eps0,Mu0)
+ END IF
END IF
END IF
ELSE
@@ -822,9 +846,9 @@ SUBROUTINE CountAndCreateMappings(TypeName,&
END DO
sumGlobalFaces = 0
sumGlobalInterFaces = 0
- CALL MPI_REDUCE(nElems ,nGlobalSpecialElems,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
- CALL MPI_REDUCE(nMasterfaces ,nGlobalFaces ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
- CALL MPI_REDUCE(nMasterInterFaces,nGlobalInterfaces ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
+ CALL MPI_REDUCE(nElems ,nGlobalSpecialElems,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
+ CALL MPI_REDUCE(nMasterfaces ,nGlobalFaces ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(nMasterInterFaces,nGlobalInterfaces ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
#else
nGlobalSpecialElems = nElems
sumGlobalFaces = nFaces
diff --git a/src/interpolation/interpolation.f90 b/src/interpolation/interpolation.f90
index 3f61db08b..2d2567e96 100644
--- a/src/interpolation/interpolation.f90
+++ b/src/interpolation/interpolation.f90
@@ -46,10 +46,6 @@ MODULE MOD_Interpolation
MODULE PROCEDURE GetNodesAndWeights
END INTERFACE
-INTERFACE GetVandermonde
- MODULE PROCEDURE GetVandermonde
-END INTERFACE
-
INTERFACE GetDerivativeMatrix
MODULE PROCEDURE GetDerivativeMatrix
END INTERFACE
@@ -166,7 +162,7 @@ SUBROUTINE InitInterpolation(NIn,NAnalyzeIn)
END SUBROUTINE InitInterpolation
-SUBROUTINE InitInterpolationBasis(N_in, xGP ,wGP, wBary ,L_Minus ,L_Plus , L_PlusMinus,swGP, wGPSurf, Vdm_Leg ,sVdm_Leg)
+SUBROUTINE InitInterpolationBasis(N_in, xGP ,wGP, wBary ,L_Minus ,L_Plus , L_PlusMinus,swGP, wGPSurf, Vdm_Leg ,sVdm_Leg, NodeType_in)
!============================================================================================================================
! Initialize basis for Gauss-points of order N.
! Calculate positions of Gauss-points, integration weights and barycentric weights. Prepare basis evaluation at -1 and +1.
@@ -192,6 +188,7 @@ SUBROUTINE InitInterpolationBasis(N_in, xGP ,wGP, wBary ,L_Minus ,L_Plus , L_Plu
REAL,ALLOCATABLE,DIMENSION(:,:),INTENT(OUT),OPTIONAL:: wGPSurf !< Vandermonde Nodal->Modal
REAL,ALLOCATABLE,DIMENSION(:,:),INTENT(OUT),OPTIONAL:: Vdm_Leg !< Vandermonde Nodal->Modal
REAL,ALLOCATABLE,DIMENSION(:,:),INTENT(OUT),OPTIONAL:: sVdm_Leg !< Vandermonde Modal->Nodal
+CHARACTER(LEN=*),INTENT(IN),OPTIONAL :: NodeType_in !< Type of 1D points
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -203,7 +200,11 @@ SUBROUTINE InitInterpolationBasis(N_in, xGP ,wGP, wBary ,L_Minus ,L_Plus , L_Plu
ALLOCATE(L_Minus(0:N_in), L_Plus(0:N_in))
ALLOCATE(L_PlusMinus(0:N_in,6))
-CALL GetNodesAndWeights(N_in,NodeType,xGP,wGP,wBary)
+IF(PRESENT(NodeType_in))THEN
+ CALL GetNodesAndWeights(N_in , NodeType_in , xGP , wGP , wBary)
+ELSE
+ CALL GetNodesAndWeights(N_in , NodeType , xGP , wGP , wBary)
+END IF ! PRESENT(NodeType_in)
IF(PRESENT(wGPSurf))THEN
ALLOCATE(wGPSurf(0:N_in,0:N_in))
@@ -319,8 +320,8 @@ SUBROUTINE GetVandermonde(N_in,NodeType_in,N_out,NodeType_out,Vdm_In_Out,Vdm_Out
! INPUT/OUTPUT VARIABLES
INTEGER,INTENT(IN) :: N_in !> Input polynomial degree
INTEGER,INTENT(IN) :: N_out !> Output polynomial degree
-CHARACTER(LEN=255),INTENT(IN) :: NodeType_in !> Type of 1D input points
-CHARACTER(LEN=255),INTENT(IN) :: NodeType_out !> Type of 1D output points
+CHARACTER(LEN=*),INTENT(IN) :: NodeType_in !> Type of 1D input points
+CHARACTER(LEN=*),INTENT(IN) :: NodeType_out !> Type of 1D output points
LOGICAL,INTENT(IN),OPTIONAL :: modal !> Switch if a modal Vandermonde should be build
REAL,INTENT(OUT) :: Vdm_In_out(0:N_out,0:N_in) !> Vandermonde In->Out
REAL,INTENT(OUT),OPTIONAL :: Vdm_Out_In(0:N_in,0:N_out) !> Vandermonde Out->in
diff --git a/src/io_hdf5/hdf5_input.f90 b/src/io_hdf5/hdf5_input.f90
index ce039326a..ba63360cf 100644
--- a/src/io_hdf5/hdf5_input.f90
+++ b/src/io_hdf5/hdf5_input.f90
@@ -102,6 +102,11 @@ FUNCTION ISVALIDHDF5FILE(FileName,FileVersionRealOpt,FileVersionIntOpt)
CHARACTER(LEN=255) :: ProgramName
LOGICAL :: help
!===================================================================================================================================
+IF(.NOT.FILEEXISTS(FileName))THEN
+ SWRITE(UNIT_stdOut,'(A)')' ERROR: The file does not exit! FileName: '//TRIM(FileName)
+ isValidHDF5File=.FALSE.
+ RETURN
+END IF ! .NOT.FILEEXISTS(FileName)
isValidHDF5File=.TRUE.
iError=0
FileVersionRealRef=-1.0
@@ -182,7 +187,7 @@ FUNCTION ISVALIDMESHFILE(MeshFileName)
CALL H5PCREATE_F(H5P_FILE_ACCESS_F, Plist_ID, iError)
#if USE_MPI
! Setup file access property list with parallel I/O access (MPI)
-CALL H5PSET_FAPL_MPIO_F(Plist_ID,MPI_COMM_WORLD, MPIInfo, iError)
+CALL H5PSET_FAPL_MPIO_F(Plist_ID,MPI_COMM_PICLAS, MPIInfo, iError)
#endif /*USE_MPI*/
! Check if file exists
@@ -214,6 +219,7 @@ FUNCTION ISVALIDMESHFILE(MeshFileName)
! Close FORTRAN predefined datatypes
CALL H5CLOSE_F(iError)
END IF
+
END FUNCTION ISVALIDMESHFILE
!==================================================================================================================================
@@ -312,22 +318,29 @@ END SUBROUTINE GetAttributeSize
!> during this operation.
!> auto error messages off
!==================================================================================================================================
-SUBROUTINE DatasetExists(Loc_ID,DSetName,Exists,attrib)
+SUBROUTINE DatasetExists(Loc_ID_in,DSetName,Exists,attrib,DSetName_attrib)
! MODULES
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------
-! INPUT/OUTPUT VARIABLES
-CHARACTER(LEN=*) :: DSetName !< name if dataset to be checked
-INTEGER(HID_T),INTENT(IN) :: Loc_ID !< ID of dataset
-LOGICAL,INTENT(IN),OPTIONAL :: attrib !< check dataset or attribute
-LOGICAL,INTENT(OUT) :: Exists !< result: dataset exists
+! INPUT VARIABLES
+CHARACTER(LEN=*) :: DSetName !< name if dataset to be checked
+INTEGER(HID_T),INTENT(IN) :: Loc_ID_in !< ID of dataset
+LOGICAL,INTENT(IN),OPTIONAL :: attrib !< check dataset or attribute
+CHARACTER(LEN=*),OPTIONAL :: DSetName_attrib !< name if dataset to be checked
+! OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: Exists !< result: dataset exists
!----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
+INTEGER(HID_T) :: Loc_ID
LOGICAL :: attrib_loc
!==================================================================================================================================
-
+Loc_ID=Loc_ID_in
IF (PRESENT(attrib)) THEN
attrib_loc=attrib
+ IF(PRESENT(DSetName_attrib))THEN
+ ! Open dataset
+ IF(TRIM(DSetName_attrib).NE.'') CALL H5DOPEN_F(File_ID, TRIM(DSetName_attrib),Loc_ID, iError)
+ END IF
ELSE
attrib_loc=.FALSE.
END IF
@@ -637,7 +650,7 @@ SUBROUTINE ReadAttribute(Loc_ID_in,AttribName,nVal,DatasetName,RealScalar,IntSca
CALL H5AOPEN_F(Loc_ID, TRIM(AttribName), Attr_ID, iError)
IF(iError.NE.0) CALL abort(__STAMP__,&
- 'Attribute '//TRIM(AttribName)//' does not exist or h5 file already opened by a differen program')
+ 'Attribute ['//TRIM(AttribName)//'] does not exist or h5 file already opened by a differen program')
IF(PRESENT(RealArray)) RealArray=0.
IF(PRESENT(RealScalar)) RealScalar=0.
@@ -699,7 +712,7 @@ SUBROUTINE GetHDF5NextFileName(FileName,NextFileName_HDF5)
! INPUT/OUTPUT VARIABLES
CHARACTER(LEN=*),INTENT(IN) :: FileName !< filename to check
#if USE_MPI
-LOGICAL,INTENT(IN) :: single !< switch whether file is being accessed in parallel my MPI_COMM_WORLD
+LOGICAL,INTENT(IN) :: single !< switch whether file is being accessed in parallel my MPI_COMM_PICLAS
#endif
CHARACTER(LEN=255),INTENT(OUT) :: NextFileName_HDF5 !< output: follow up file according to checked file opened
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -720,7 +733,7 @@ SUBROUTINE GetHDF5NextFileName(FileName,NextFileName_HDF5)
#if USE_MPI
IF(.NOT.single)THEN
! Set property list to MPI IO
- CALL H5PSET_FAPL_MPIO_F(Plist_ID, MPI_COMM_WORLD, MPI_INFO_NULL, iError)
+ CALL H5PSET_FAPL_MPIO_F(Plist_ID, MPI_COMM_PICLAS, MPI_INFO_NULL, iError)
END IF
#endif /*USE_MPI*/
! Open file
diff --git a/src/io_hdf5/hdf5_input_particle.f90 b/src/io_hdf5/hdf5_input_particle.f90
index 9eade00d6..35b8134d9 100644
--- a/src/io_hdf5/hdf5_input_particle.f90
+++ b/src/io_hdf5/hdf5_input_particle.f90
@@ -187,7 +187,6 @@ SUBROUTINE ReadEmissionVariablesFromHDF5()
USE MOD_Globals
!USE MOD_PreProc
USE MOD_Particle_Vars ,ONLY: Species,nSpecies
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Vars ,ONLY: NeutralizationBalanceGlobal
!USE MOD_Particle_Vars ,ONLY: NeutralizationBalance
USE MOD_HDF5_Input ,ONLY: ReadArray,DatasetExists
@@ -215,7 +214,7 @@ SUBROUTINE ReadEmissionVariablesFromHDF5()
! Only the root reads the data and replaces his value, which will be communicated via the all-reduce (he also does the
! initial output)
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
IF(.NOT.FILEEXISTS(RestartFile)) &
CALL abort(__STAMP__,'Error in ReadEmissionVariablesFromHDF5() becuase RestartFile does not exist: '//TRIM(RestartFile))
@@ -242,7 +241,7 @@ SUBROUTINE ReadEmissionVariablesFromHDF5()
! ! Communicate number of particles with all procs in the same init group to the global root for output
! InitGroup=Species(iSpec)%Init(iInit)%InitCOMM
! ! Only processors which are part of group take part in the communication
-! CALL MPI_BCAST(Box_X, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, iError)
+! CALL MPI_BCAST(Box_X, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_PICLAS, iError)
!#endif /*USE_MPI*/
END SELECT
diff --git a/src/io_hdf5/hdf5_output.f90 b/src/io_hdf5/hdf5_output.f90
index 0658c5ae7..cac55731e 100644
--- a/src/io_hdf5/hdf5_output.f90
+++ b/src/io_hdf5/hdf5_output.f90
@@ -117,7 +117,7 @@ SUBROUTINE WriteTimeAverage(MeshFileName,OutputTime,PreviousTime,VarNamesAvg,Var
CALL CloseDataFile()
END IF
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! Reopen file and write DG solution
@@ -147,7 +147,7 @@ SUBROUTINE WriteTimeAverage(MeshFileName,OutputTime,PreviousTime,VarNamesAvg,Var
CALL CloseDataFile()
END IF
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! Reopen file and write DG solution
@@ -172,7 +172,7 @@ SUBROUTINE WriteTimeAverage(MeshFileName,OutputTime,PreviousTime,VarNamesAvg,Var
END SUBROUTINE WriteTimeAverage
-SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputTime,FileNameIn,WriteUserblockIn)
+SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputTime,FileNameIn,WriteUserblockIn,NIn,NodeType_in)
!===================================================================================================================================
! Subroutine that generates the output file on a single processor and writes all the necessary attributes (better MPI performance)
!===================================================================================================================================
@@ -200,10 +200,12 @@ SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputT
CHARACTER(LEN=*),INTENT(IN) :: TypeString
CHARACTER(LEN=*),INTENT(IN),OPTIONAL :: FileNameIn
INTEGER,INTENT(IN) :: nVar
+INTEGER,INTENT(IN),OPTIONAL :: NIn
CHARACTER(LEN=255) :: StrVarNames(nVar)
CHARACTER(LEN=*),INTENT(IN) :: MeshFileName
REAL,INTENT(IN) :: OutputTime
LOGICAL,INTENT(IN),OPTIONAL :: WriteUserblockIn
+CHARACTER(LEN=*),INTENT(IN),OPTIONAL :: NodeType_in !< Type of 1D points
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -215,7 +217,14 @@ SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputT
CHARACTER(LEN=255), DIMENSION(1:3),PARAMETER :: TrackingString = (/'refmapping ', 'tracing ', 'triatracking'/)
#endif /*PARTICLES*/
LOGICAL :: WriteUserblock
+INTEGER :: Nloc
!===================================================================================================================================
+! Check if NIn is to be used
+IF(PRESENT(NIn))THEN
+ Nloc = NIn
+ELSE
+ Nloc = PP_N
+END IF ! PRESENT(NIn)
! Create file
IF(PRESENT(FileNameIn))THEN
FileName=FileNameIn
@@ -228,7 +237,7 @@ SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputT
CALL WriteHDF5Header(TRIM(TypeString),File_ID)
! Preallocate the data space for the dataset.
-Dimsf=(/nVar,PP_N+1,PP_N+1,PP_N+1,nGlobalElems/)
+Dimsf=(/nVar,Nloc+1,Nloc+1,Nloc+1,nGlobalElems/)
CALL H5SCREATE_SIMPLE_F(5, Dimsf, FileSpace, iError)
! Create the dataset with default properties.
HDF5DataType=H5T_NATIVE_DOUBLE
@@ -238,13 +247,17 @@ SUBROUTINE GenerateFileSkeleton(TypeString,nVar,StrVarNames,MeshFileName,OutputT
CALL H5SCLOSE_F(FileSpace, iError)
! Write dataset properties "Time","MeshFile","NextFile","NodeType","VarNames"
-CALL WriteAttributeToHDF5(File_ID,'N',1,IntegerScalar=PP_N)
+CALL WriteAttributeToHDF5(File_ID,'N',1,IntegerScalar=Nloc)
CALL WriteAttributeToHDF5(File_ID,'Time',1,RealScalar=OutputTime)
CALL WriteAttributeToHDF5(File_ID,'MeshFile',1,StrScalar=(/TRIM(MeshFileName)/))
-CALL WriteAttributeToHDF5(File_ID,'NodeType',1,StrScalar=(/NodeType/))
+IF(PRESENT(NodeType_in))THEN
+ CALL WriteAttributeToHDF5(File_ID,'NodeType',1,StrScalar=(/NodeType_in/))
+ELSE
+ CALL WriteAttributeToHDF5(File_ID,'NodeType',1,StrScalar=(/NodeType/))
+END IF ! PRESENT(NodeType_in)
CALL WriteAttributeToHDF5(File_ID,'VarNames',nVar,StrArray=StrVarNames)
-CALL WriteAttributeToHDF5(File_ID,'NComputation',1,IntegerScalar=PP_N)
+CALL WriteAttributeToHDF5(File_ID,'NComputation',1,IntegerScalar=Nloc)
#ifdef PARTICLES
CALL WriteAttributeToHDF5(File_ID,'TrackingMethod',1,StrScalar=(/TRIM(TrackingString(TrackingMethod))/))
@@ -825,7 +838,7 @@ SUBROUTINE GatheredWriteArray(FileName,create,DataSetName,rank,nValGlobal,nVal,o
SDEALLOCATE(UStr)
ELSE
#endif
- CALL OpenDataFile(FileName,create=create,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=create,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
IF(PRESENT(RealArray)) CALL WriteArrayToHDF5(DataSetName , rank , nValGlobal , nVal , &
offset , collective , RealArray=RealArray)
IF(PRESENT(IntegerArray)) CALL WriteArrayToHDF5(DataSetName , rank , nValGlobal , nVal , &
@@ -921,8 +934,8 @@ SUBROUTINE DistributedWriteArray(FileName,DataSetName,rank,nValGlobal,nVal,offse
ELSE
! 3: else write with all procs of the given communicator
! communicator_opt has to be the given communicator or else procs that are not in the given communicator might block the write out
- ! e.g. surface communicator contains only procs with physical surface and MPI_COMM_WORLD contains every proc
- ! Consequently, MPI_COMM_WORLD would block communication
+ ! e.g. surface communicator contains only procs with physical surface and MPI_COMM_PICLAS contains every proc
+ ! Consequently, MPI_COMM_PICLAS would block communication
CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=communicator)
IF(PRESENT(RealArray)) CALL WriteArrayToHDF5(DataSetName , rank , nValGlobal , nVal , &
offset , collective , RealArray=RealArray)
diff --git a/src/io_hdf5/hdf5_output_elemdata.f90 b/src/io_hdf5/hdf5_output_elemdata.f90
index 312bd2e2d..3524500ca 100644
--- a/src/io_hdf5/hdf5_output_elemdata.f90
+++ b/src/io_hdf5/hdf5_output_elemdata.f90
@@ -169,7 +169,7 @@ SUBROUTINE WriteMyInvisibleRankToHDF5()
FileName=TRIM(ProjectName)//'_MyInvisibleRank.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('MyInvisibleRank',N_variables,StrVarNames,TRIM(MeshFile),OutputTime,FileNameIn=FileName)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! Write all 'ElemData' arrays to a single container in the state.h5 file
@@ -212,7 +212,7 @@ SUBROUTINE WriteLostRotPeriodicSidesToHDF5()
FileName=TRIM(ProjectName)//'_LostRotPeriodicSides.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('LostRotPeriodicSides',N_variables,StrVarNames,TRIM(MeshFile),OutputTime,FileNameIn=FileName)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! Write all 'ElemData' arrays to a single container in the state.h5 file
diff --git a/src/io_hdf5/hdf5_output_field.f90 b/src/io_hdf5/hdf5_output_field.f90
index 53b54b70e..856793131 100644
--- a/src/io_hdf5/hdf5_output_field.f90
+++ b/src/io_hdf5/hdf5_output_field.f90
@@ -96,10 +96,10 @@ SUBROUTINE WriteDielectricGlobalToHDF5()
FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_DielectricGlobal',OutputTime))//'.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('DielectricGlobal',N_variables,StrVarNames,TRIM(MeshFile),OutputTime)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
IF(MPIRoot)THEN
- CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL WriteAttributeToHDF5(File_ID,'VarNamesDielectricGlobal',N_variables,StrArray=StrVarNames)
CALL CloseDataFile()
END IF ! MPIRoot
@@ -175,9 +175,9 @@ SUBROUTINE WriteBRAverageElemToHDF5(isBRAverageElem)
FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_BRAverageElem',OutputTime))//'.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('BRAverageElem',N_variables,StrVarNames,TRIM(MeshFile),OutputTime)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
- CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL WriteAttributeToHDF5(File_ID,'VarNamesBRAverageElem',N_variables,StrArray=StrVarNames)
CALL CloseDataFile()
@@ -258,9 +258,9 @@ SUBROUTINE WritePMLzetaGlobalToHDF5()
FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_PMLZetaGlobal',OutputTime))//'.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('PMLZetaGlobal',N_variables,StrVarNames,TRIM(MeshFile),OutputTime)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
- CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL WriteAttributeToHDF5(File_ID,'VarNamesPMLzetaGlobal',N_variables,StrArray=StrVarNames)
CALL CloseDataFile()
@@ -372,9 +372,9 @@ SUBROUTINE WriteBGFieldToHDF5(OutputTime)
CALL copy_userblock(TRIM(FileName)//C_NULL_CHAR,TRIM(UserblockTmpFile)//C_NULL_CHAR)
END IF
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
nVal=nGlobalElems ! For the MPI case this must be replaced by the global number of elements (sum over all procs)
@@ -477,9 +477,9 @@ SUBROUTINE WriteBGFieldAnalyticToHDF5()
CALL copy_userblock(TRIM(FileName)//C_NULL_CHAR,TRIM(UserblockTmpFile)//C_NULL_CHAR)
END IF
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
nVal=nGlobalElems ! For the MPI case this must be replaced by the global number of elements (sum over all procs)
@@ -663,9 +663,9 @@ SUBROUTINE WriteErrorNormsToHDF5(OutputTime)
CALL copy_userblock(TRIM(FileName)//C_NULL_CHAR,TRIM(UserblockTmpFile)//C_NULL_CHAR)
END IF
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
nVal=nGlobalElems ! For the MPI case this must be replaced by the global number of elements (sum over all procs)
diff --git a/src/io_hdf5/hdf5_output_particle.f90 b/src/io_hdf5/hdf5_output_particle.f90
index 106243fbc..977387ddc 100644
--- a/src/io_hdf5/hdf5_output_particle.f90
+++ b/src/io_hdf5/hdf5_output_particle.f90
@@ -182,10 +182,10 @@ SUBROUTINE WriteNodeSourceExtToHDF5(OutputTime)
FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_NodeSourceExtGlobal',OutputTime))//'.h5'
IF(MPIRoot) CALL GenerateFileSkeleton('NodeSourceExtGlobal',N_variables,StrVarNames,TRIM(MeshFile),OutputTime)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
IF(MPIRoot)THEN
- CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL WriteAttributeToHDF5(File_ID,'VarNamesNodeSourceExtGlobal',N_variables,StrArray=StrVarNames)
CALL CloseDataFile()
END IF ! MPIRoot
@@ -277,9 +277,6 @@ SUBROUTINE WriteParticleToHDF5(FileName)
USE MOD_Particle_Vars ,ONLY: PartInt,PartData,PartDataSize,locnPart,offsetnPart,PartIntSize,PartDataVarNames
USE MOD_part_tools ,ONLY: UpdateNextFreePosition
USE MOD_DSMC_Vars ,ONLY: UseDSMC, DSMC
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance,UseH5IOLoadBalance
#endif /*USE_LOADBALANCE*/
@@ -360,7 +357,7 @@ SUBROUTINE WriteParticleToHDF5(FileName)
nVal = (/PartDataSize , locnPart /) , &
offset = (/0_IK , offsetnPart/) , &
collective = UseCollectiveIO , offSetDim= 2 , &
- communicator = PartMPI%COMM , RealArray= PartData)
+ communicator = MPI_COMM_PICLAS , RealArray= PartData)
! Output of the element-wise time step as a separate container in state file
IF(VarTimeStep%UseDistribution) THEN
CALL DistributedWriteArray(FileName , &
@@ -369,7 +366,7 @@ SUBROUTINE WriteParticleToHDF5(FileName)
nVal = (/PP_nElems , 1_IK/) , &
offset = (/offsetElem , 0_IK/) , &
collective = UseCollectiveIO , offSetDim = 1 , &
- communicator = PartMPI%COMM , RealArray = VarTimeStep%ElemFac)
+ communicator = MPI_COMM_PICLAS , RealArray = VarTimeStep%ElemFac)
END IF
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
@@ -414,7 +411,7 @@ SUBROUTINE WriteParticleToHDF5(FileName)
nVal = (/MaxQuantNum , locnPart /) , &
offset = (/0_IK , offsetnPart /) , &
collective = UseCollectiveIO , offSetDim = 2 , &
- communicator = PartMPI%COMM , IntegerArray_i4 = VibQuantData)
+ communicator = MPI_COMM_PICLAS , IntegerArray_i4 = VibQuantData)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteArrayToHDF5(DataSetName = 'VibQuantData' , rank = 2 , &
@@ -459,7 +456,7 @@ SUBROUTINE WriteParticleToHDF5(FileName)
nVal = (/MaxElecQuant , locnPart /) , &
offset = (/0_IK , offsetnPart /) , &
collective = UseCollectiveIO , offSetDim = 2 , &
- communicator = PartMPI%COMM , RealArray = ElecDistriData)
+ communicator = MPI_COMM_PICLAS , RealArray = ElecDistriData)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteArrayToHDF5(DataSetName = 'ElecDistriData' , rank = 2 , &
@@ -502,7 +499,7 @@ SUBROUTINE WriteParticleToHDF5(FileName)
nVal = (/3_IK , locnPart /) , &
offset = (/0_IK , offsetnPart /) , &
collective = UseCollectiveIO , offSetDim = 2 , &
- communicator = PartMPI%COMM , RealArray = AD_Data)
+ communicator = MPI_COMM_PICLAS , RealArray = AD_Data)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteArrayToHDF5(DataSetName = 'ADVeloData' , rank = 2 , &
@@ -552,9 +549,6 @@ SUBROUTINE WriteBoundaryParticleToHDF5(MeshFileName,OutputTime,PreviousTime)
USE MOD_Particle_Boundary_Vars ,ONLY: PartStateBoundary,PartStateBoundaryVecLength,nVarPartStateBoundary
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart2
USE MOD_TimeDisc_Vars ,ONLY: iter
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -606,7 +600,7 @@ SUBROUTINE WriteBoundaryParticleToHDF5(MeshFileName,OutputTime,PreviousTime)
! Reopen file and write DG solution
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! 3xPos [m], 3xvelo [m/s], species [-]
@@ -649,7 +643,12 @@ SUBROUTINE WriteBoundaryParticleToHDF5(MeshFileName,OutputTime,PreviousTime)
! Take ABS() from SpecID as is might be negative (for storing particles that are emitted from a surface)
SpecID = INT(ABS(PartStateBoundary(7,pcount)))
IF(SpecID.EQ.0) CALL abort(__STAMP__,'Error in WriteBoundaryParticleToHDF5: SpecID = PartStateBoundary(7,pcount) = 0')
- PartData(8,iPart)=CalcEkinPart2(PartStateBoundary(4:6,pcount),SpecID,1.0) / ElementaryCharge
+ ! Check if photon is emitted during ray tracing
+ IF(SpecID.EQ.999)THEN
+ PartData(8,iPart)=0 ! insert photon energy here
+ ELSE
+ PartData(8,iPart)=CalcEkinPart2(PartStateBoundary(4:6,pcount),SpecID,1.0) / ElementaryCharge
+ END IF ! SpecID.EQ.999
! MPF: Macro particle factor
PartData(9,iPart)=PartStateBoundary(8,pcount)
@@ -720,7 +719,7 @@ SUBROUTINE WriteBoundaryParticleToHDF5(MeshFileName,OutputTime,PreviousTime)
nVal = (/ PartDataSizeLoc, locnPart /) , &
offset = (/ 0_IK , offsetnPart /) , &
collective = UseCollectiveIO , offSetDim = 2 , &
- communicator = PartMPI%COMM , RealArray = PartData)
+ communicator = MPI_COMM_PICLAS , RealArray = PartData)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteArrayToHDF5(DataSetName = 'PartData' , rank = 2 , &
@@ -763,9 +762,6 @@ SUBROUTINE WriteLostParticlesToHDF5(MeshFileName,OutputTime)
USE MOD_Particle_Tracking_Vars ,ONLY: TotalNbrOfMissingParticlesSum
USE MOD_Equation_Vars ,ONLY: StrVarNames
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart2
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -803,7 +799,7 @@ SUBROUTINE WriteLostParticlesToHDF5(MeshFileName,OutputTime)
! Reopen file and write DG solution
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! Set number of local particles
@@ -914,7 +910,7 @@ SUBROUTINE WriteLostParticlesToHDF5(MeshFileName,OutputTime)
nVal = (/ PartLostDataSize , locnPart /) , &
offset = (/ 0_IK , offsetnPart /) , &
collective = UseCollectiveIO , offSetDim = 2 , &
- communicator = PartMPI%COMM , RealArray = PartData)
+ communicator = MPI_COMM_PICLAS , RealArray = PartData)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteArrayToHDF5(DataSetName = 'PartData' , rank = 2 , &
@@ -1011,7 +1007,7 @@ SUBROUTINE WriteAdaptiveInfoToHDF5(FileName)
END DO
WRITE(H5_Name,'(A)') 'AdaptiveInfo'
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
! Associate construct for integer KIND=8 possibility
ASSOCIATE (&
@@ -1047,7 +1043,7 @@ SUBROUTINE WriteAdaptiveRunningAverageToHDF5(FileName)
USE MOD_Timedisc_Vars ,ONLY: iter
USE MOD_Restart_Vars ,ONLY: DoRestart
USE MOD_Mesh_Vars ,ONLY: offsetElem
-USE MOD_Particle_Vars ,ONLY: nSpecies
+USE MOD_Particle_Vars ,ONLY: nSpecies, Species
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCAverage, AdaptBCSampleElemNum, AdaptBCMapSampleToElem, AdaptBCSampIter
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCSampleElemNumGlobal, offSetElemAdaptBCSample, AdaptBCSampIterReadIn
! IMPLICIT VARIABLE HANDLING
@@ -1073,9 +1069,10 @@ SUBROUTINE WriteAdaptiveRunningAverageToHDF5(FileName)
AdaptBCAverageIndex(SampleElemID) = ElemID + offsetElem
END DO
-! Store the position in the array for early restarts
+! Store the position in the array for early restarts and the used weighting factor
IF(MPIRoot)THEN
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
+ CALL WriteAttributeToHDF5(File_ID,'AdaptBCWeightingFactor',nSpecies,RealArray=Species(1:nSpecies)%MacroParticleFactor)
IF(INT(iter,4)+AdaptBCSampIterReadIn.LT.AdaptBCSampIter) THEN
CALL WriteAttributeToHDF5(File_ID,'AdaptBCSampIter',1,IntegerScalar=INT(iter,4)+AdaptBCSampIterReadIn)
ELSE
@@ -1084,7 +1081,7 @@ SUBROUTINE WriteAdaptiveRunningAverageToHDF5(FileName)
CALL CloseDataFile()
END IF
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
! Associate construct for integer KIND=8 possibility
ASSOCIATE (&
AdaptBCSampleElemNumGlobal => INT(AdaptBCSampleElemNumGlobal,IK) ,&
@@ -1121,9 +1118,8 @@ SUBROUTINE WriteAdaptBCPartNumOutToHDF5(FileName)
USE MOD_Timedisc_Vars ,ONLY: iter
USE MOD_Restart_Vars ,ONLY: DoRestart
USE MOD_Particle_Vars ,ONLY: nSpecies, Species
-USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCPartNumOut
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCPartNumOut
#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -1146,9 +1142,9 @@ SUBROUTINE WriteAdaptBCPartNumOutToHDF5(FileName)
#if USE_MPI
IF(MPIRoot)THEN
ALLOCATE(AdaptBCPartNumOutTemp(1:nSpecies,1:nSurfacefluxBCs))
- CALL MPI_REDUCE(AdaptBCPartNumOut,AdaptBCPartNumOutTemp,nSpecies*nSurfacefluxBCs,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(AdaptBCPartNumOut,AdaptBCPartNumOutTemp,nSpecies*nSurfacefluxBCs,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
ELSE
- CALL MPI_REDUCE(AdaptBCPartNumOut,MPI_IN_PLACE ,nSpecies*nSurfacefluxBCs,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(AdaptBCPartNumOut,MPI_IN_PLACE ,nSpecies*nSurfacefluxBCs,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif
@@ -1177,7 +1173,7 @@ SUBROUTINE WriteAdaptiveWallTempToHDF5(FileName)
USE MOD_PreProc
USE MOD_Globals
USE MOD_IO_HDF5
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, nSurfTotalSides, nComputeNodeSurfSides, offsetComputeNodeSurfSide
+USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, nGlobalSurfSides, nComputeNodeSurfSides, offsetComputeNodeSurfSide
USE MOD_Particle_Boundary_Vars ,ONLY: BoundaryWallTemp, SurfSide2GlobalSide
#if USE_MPI
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF
@@ -1201,7 +1197,7 @@ SUBROUTINE WriteAdaptiveWallTempToHDF5(FileName)
CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR)
! Return if no sampling sides
-IF (nSurfTotalSides .EQ.0) RETURN
+IF (nGlobalSurfSides .EQ.0) RETURN
#endif
WRITE(H5_Name,'(A)') 'AdaptiveBoundaryWallTemp'
@@ -1216,7 +1212,7 @@ SUBROUTINE WriteAdaptiveWallTempToHDF5(FileName)
! Associate construct for integer KIND=8 possibility
ASSOCIATE (&
nSurfSample => INT(nSurfSample,IK) , &
- nGlobalSides => INT(nSurfTotalSides,IK) , &
+ nGlobalSides => INT(nGlobalSurfSides,IK) , &
nLocalSides => INT(nComputeNodeSurfSides,IK) , &
offsetSurfSide => INT(offsetComputeNodeSurfSide,IK))
CALL WriteArrayToHDF5(DataSetName = H5_Name , rank = 3 , &
@@ -1275,7 +1271,7 @@ SUBROUTINE WriteVibProbInfoToHDF5(FileName)
END IF
WRITE(H5_Name,'(A)') 'VibProbInfo'
- CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
! Associate construct for integer KIND=8 possibility
ASSOCIATE (&
@@ -1293,7 +1289,7 @@ SUBROUTINE WriteVibProbInfoToHDF5(FileName)
SDEALLOCATE(StrVarNames)
ELSE ! DSMC%VibRelaxProb < 2.0
#if USE_MPI
- CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
#endif
@@ -1318,6 +1314,7 @@ SUBROUTINE WriteClonesToHDF5(FileName)
! MODULES
USE MOD_PreProc
USE MOD_Globals
+USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep
USE MOD_DSMC_Vars ,ONLY: UseDSMC, CollisMode, DSMC, PolyatomMolDSMC, SpecDSMC
USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles
USE MOD_PARTICLE_Vars ,ONLY: nSpecies, usevMPF, Species, PartDataSize
@@ -1376,7 +1373,7 @@ SUBROUTINE WriteClonesToHDF5(FileName)
END SELECT
DO pcount = 0,tempDelay
- locnPart = locnPart + RadialWeighting%ClonePartNum(pcount)
+ locnPart = locnPart + RadialWeighting%ClonePartNum(pcount)
END DO
! Communicate the total number and offset
@@ -1483,11 +1480,10 @@ SUBROUTINE WriteClonesToHDF5(FileName)
END IF
#if USE_MPI
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
#else
CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
#endif
-CALL WriteAttributeToHDF5(File_ID,'VarNamesParticleClones',PartDataSizeLoc,StrArray=StrVarNames)
ASSOCIATE (&
offsetnPart => INT(offsetnPart,IK) ,&
@@ -1530,6 +1526,16 @@ SUBROUTINE WriteClonesToHDF5(FileName)
CALL CloseDataFile()
+! Output of clone species variables as attribute to the dataset
+IF(MPIRoot) THEN
+ CALL OpenDataFile(FileName,create=.FALSE.,single=.TRUE.,readOnly=.FALSE.)
+ CALL WriteAttributeToHDF5(File_ID,'VarNamesParticleClones',PartDataSizeLoc,StrArray=StrVarNames,DatasetName='CloneData')
+ CALL WriteAttributeToHDF5(File_ID,'ManualTimeStep',1,RealScalar=ManualTimeStep,DatasetName='CloneData')
+ CALL WriteAttributeToHDF5(File_ID,'WeightingFactor',1,RealScalar=Species(1)%MacroParticleFactor,DatasetName='CloneData')
+ CALL WriteAttributeToHDF5(File_ID,'RadialWeightingFactor',1,RealScalar=RadialWeighting%PartScaleFactor,DatasetName='CloneData')
+ CALL CloseDataFile()
+END IF
+
DEALLOCATE(StrVarNames)
DEALLOCATE(PartData)
@@ -1612,9 +1618,9 @@ SUBROUTINE WriteElectroMagneticPICFieldToHDF5()
CALL copy_userblock(TRIM(FileName)//C_NULL_CHAR,TRIM(UserblockTmpFile)//C_NULL_CHAR)
END IF
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
nVal=nGlobalElems ! For the MPI case this must be replaced by the global number of elements (sum over all procs)
@@ -1659,7 +1665,6 @@ SUBROUTINE WriteEmissionVariablesToHDF5(FileName)
USE MOD_Globals
!USE MOD_PreProc
USE MOD_Particle_Vars ,ONLY: Species,nSpecies
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Vars ,ONLY: NeutralizationBalanceGlobal
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -1675,7 +1680,7 @@ SUBROUTINE WriteEmissionVariablesToHDF5(FileName)
INTEGER(KIND=IK) :: NeutralizationBalanceTmp(1:1) ! This is a dummy array of size 1 !
!===================================================================================================================================
! Only root writes the data
-IF(.NOT.PartMPI%MPIRoot) RETURN
+IF(.NOT.MPIRoot) RETURN
! Loop over all species and inits
DO iSpec=1,nSpecies
@@ -1718,9 +1723,6 @@ SUBROUTINE GetOffsetAndGlobalNumberOfParts(CallingRoutine,offsetnPart,globnPart,
! MODULES
USE MOD_PreProc
USE MOD_Globals
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1742,11 +1744,11 @@ SUBROUTINE GetOffsetAndGlobalNumberOfParts(CallingRoutine,offsetnPart,globnPart,
#if USE_MPI
locnPart8 = INT(locnPart,8)
locnPart8Recv = 0_IK
-CALL MPI_EXSCAN(locnPart8,locnPart8Recv,1,MPI_INTEGER8,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_EXSCAN(locnPart8,locnPart8Recv,1,MPI_INTEGER8,MPI_SUM,MPI_COMM_PICLAS,iError)
offsetnPart = INT(locnPart8Recv,KIND=IK)
! Last proc calculates the global number and broadcasts it
IF(myrank.EQ.nProcessors-1) locnPart8=locnPart8Recv+locnPart8
-CALL MPI_BCAST(locnPart8,1,MPI_INTEGER8,nProcessors-1,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(locnPart8,1,MPI_INTEGER8,nProcessors-1,MPI_COMM_PICLAS,iError)
!global numbers
globnPart8=locnPart8
GlobalNbrOfParticlesUpdated = .TRUE.
@@ -1766,12 +1768,12 @@ SUBROUTINE GetOffsetAndGlobalNumberOfParts(CallingRoutine,offsetnPart,globnPart,
SimNumSpecMin = 0
SimNumSpecMax = 0
IF(GetMinMaxNbrOfParticles)THEN
- IF (PartMPI%MPIRoot) THEN
- CALL MPI_REDUCE(locnPart , SimNumSpecMin , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , PartMPI%COMM , IERROR)
- CALL MPI_REDUCE(locnPart , SimNumSpecMax , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , PartMPI%COMM , IERROR)
+ IF (MPIRoot) THEN
+ CALL MPI_REDUCE(locnPart , SimNumSpecMin , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(locnPart , SimNumSpecMax , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , MPI_COMM_PICLAS , IERROR)
ELSE
- CALL MPI_REDUCE(locnPart , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , PartMPI%COMM , IERROR)
- CALL MPI_REDUCE(locnPart , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , PartMPI%COMM , IERROR)
+ CALL MPI_REDUCE(locnPart , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(locnPart , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , MPI_COMM_PICLAS , IERROR)
END IF
END IF ! GetMinMaxNbrOfParticles
diff --git a/src/io_hdf5/hdf5_output_state.f90 b/src/io_hdf5/hdf5_output_state.f90
index 76a77c3d9..0ab61552e 100644
--- a/src/io_hdf5/hdf5_output_state.f90
+++ b/src/io_hdf5/hdf5_output_state.f90
@@ -33,6 +33,7 @@ MODULE MOD_HDF5_Output_State
PUBLIC :: WriteStateToHDF5
#if defined(PARTICLES)
PUBLIC :: WriteIMDStateToHDF5
+PUBLIC :: WriteElemDataToSeparateContainer
#endif /*PARTICLES*/
!===================================================================================================================================
@@ -55,7 +56,7 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
#ifdef PARTICLES
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
USE MOD_PICDepo_Vars ,ONLY: OutputSource,PartSource
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_Particle_Boundary_Vars ,ONLY: DoBoundaryParticleOutputHDF5, PartBound
USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge
@@ -170,8 +171,9 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
INTEGER :: SortedOffset,SortedStart,SortedEnd
#ifdef PARTICLES
INTEGER :: i,j,k,iElem
+REAL,ALLOCATABLE :: BVDataHDF5(:,:)
#endif /*PARTICLES*/
-REAL,ALLOCATABLE :: FPCDataHDF5(:,:),EPCDataHDF5(:,:),BVDataHDF5(:,:)
+REAL,ALLOCATABLE :: FPCDataHDF5(:,:),EPCDataHDF5(:,:)
INTEGER :: nVarFPC,nVarEPC
#endif /*USE_HDG*/
!===================================================================================================================================
@@ -237,7 +239,7 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
! Reopen file and write DG solution
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! Associate construct for integer KIND=8 possibility
@@ -404,7 +406,7 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
END IF ! nProcessors.GT.1
#endif /*USE_MPI*/
- ASSOCIATE( nOutputSides => INT(SortedEnd-SortedStart+1,IK) ,&
+ ASSOCIATE( nGlobalOutputSides => INT(SortedEnd-SortedStart+1,IK) ,&
SortedOffset => INT(SortedOffset,IK) ,&
SortedStart => INT(SortedStart,IK) ,&
SortedEnd => INT(SortedEnd,IK) ,&
@@ -412,7 +414,7 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
CALL GatheredWriteArray(FileName,create=.FALSE.,&
DataSetName = 'DG_SolutionLambda', rank=3,&
nValGlobal = (/PP_nVarTmp , nGP_face , nGlobalUniqueSides/) , &
- nVal = (/PP_nVarTmp , nGP_face , nOutputSides/) , &
+ nVal = (/PP_nVarTmp , nGP_face , nGlobalOutputSides/) , &
offset = (/0_IK , 0_IK , SortedOffset/) , &
collective = .TRUE. , &
RealArray = SortedLambda(:,:,SortedStart:SortedEnd))
@@ -491,7 +493,7 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
#ifdef PARTICLES
! output of last source term
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
IF(OutputSource) THEN
#if USE_HDG
@@ -558,12 +560,12 @@ SUBROUTINE WriteStateToHDF5(MeshFileName,OutputTime,PreviousTime)
CALL WriteBoundaryParticleToHDF5(MeshFileName,OutputTime_loc)
END IF
END IF
-IF(UseAdaptive.OR.(nPorousBC.GT.0)) CALL WriteAdaptiveInfoToHDF5(FileName)
+IF(UseAdaptiveBC.OR.(nPorousBC.GT.0)) CALL WriteAdaptiveInfoToHDF5(FileName)
CALL WriteVibProbInfoToHDF5(FileName)
IF(RadialWeighting%PerformCloning) CALL WriteClonesToHDF5(FileName)
IF (PartBound%OutputWallTemp) CALL WriteAdaptiveWallTempToHDF5(FileName)
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! For restart purposes, store the electron bulk temperature in .h5 state
! Only root writes the container
@@ -834,14 +836,6 @@ SUBROUTINE WriteIMDStateToHDF5()
CALL FillParticleData()
CALL WriteStateToHDF5(TRIM(MeshFile),t,tFuture)
SWRITE(UNIT_StdOut,'(A)')' Particles: StateFile (IMD MD data) created. Terminating successfully!'
-#if USE_MPI
- CALL FinalizeMPI()
- CALL MPI_FINALIZE(iERROR)
- IF(iERROR.NE.0)THEN
- CALL abort(__STAMP__, ' MPI_FINALIZE(iERROR) returned non-zero integer value',iERROR)
- END IF
-#endif /*USE_MPI*/
- STOP 0 ! terminate successfully
ELSE
CALL abort(__STAMP__, ' IMDLengthScale.LE.0.0 which is not allowed')
END IF
diff --git a/src/linearsolver/linearoperator/linearoperator.f90 b/src/linearsolver/linearoperator/linearoperator.f90
index 65c1eee4a..1ee47f069 100644
--- a/src/linearsolver/linearoperator/linearoperator.f90
+++ b/src/linearsolver/linearoperator/linearoperator.f90
@@ -311,7 +311,7 @@ SUBROUTINE VectorDotProduct(a,b,resu)
#if USE_MPI
ResuSend=Resu
- CALL MPI_ALLREDUCE(ResuSend,resu,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(ResuSend,resu,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif
END SUBROUTINE VectorDotProduct
diff --git a/src/linearsolver/linearsolver.f90 b/src/linearsolver/linearsolver.f90
index bd8c36bf3..66cf8b44a 100644
--- a/src/linearsolver/linearsolver.f90
+++ b/src/linearsolver/linearsolver.f90
@@ -170,7 +170,7 @@ SUBROUTINE InitLinearSolver()
#if !(USE_HDG)
nDofGlobalMPI=nDofGlobal
#if USE_MPI
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,nDofGlobalMPI,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,nDofGlobalMPI,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif
eps_LinearSolver = GETREAL('eps_LinearSolver','1e-3')
diff --git a/src/linearsolver/newton.f90 b/src/linearsolver/newton.f90
index 9c8832d96..db31953c4 100644
--- a/src/linearsolver/newton.f90
+++ b/src/linearsolver/newton.f90
@@ -172,7 +172,7 @@ SUBROUTINE ImplicitNorm(t,coeff,R,Norm_R,Delta_Norm_R,Delta_Norm_Rel,First)
NormArray(1)=Norm_R
NormArray(2)=Delta_Norm_R
NormArray(3)=Delta_Norm_Rel
-CALL MPI_ALLREDUCE(NormArray,GlobalNormArray,3,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(NormArray,GlobalNormArray,3,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
Norm_R = SQRT(GlobalNormArray(1))
Delta_Norm_R = SQRT(GlobalNormArray(2))
Delta_Norm_Rel = SQRT(GlobalNormArray(3))
diff --git a/src/linearsolver/particlesolver.f90 b/src/linearsolver/particlesolver.f90
index 02ef9d0a6..8b6a8de2e 100644
--- a/src/linearsolver/particlesolver.f90
+++ b/src/linearsolver/particlesolver.f90
@@ -159,9 +159,6 @@ SUBROUTINE SelectImplicitParticles()
USE MOD_TimeDisc_Vars ,ONLY: dt,nRKStages,iter
USE MOD_Globals_Vars ,ONLY: c2_inv
USE MOD_LinearSolver_Vars ,ONLY: DoPrintConvInfo
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
!----------------------------------------------------------------------------------------------------------------------------------!
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -232,12 +229,12 @@ SUBROUTINE SelectImplicitParticles()
IF(.NOT.PartIsImplicit(iPart)) nExp=nExp+1
END DO
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,nExp,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,nImp,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,nExp,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,nImp,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(nExp ,iPart,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(nImp ,iPart,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(nExp ,iPart,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(nImp ,iPart,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(A,I0,x,I0)') ' Particles explicit/implicit ', nExp, nImp
@@ -264,7 +261,6 @@ SUBROUTINE ParticleNewton(t,coeff,Mode,doParticle_In,opt_In,AbortTol_In)
USE MOD_Part_RHS ,ONLY: CalcPartRHS
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#if USE_LOADBALANCE
USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBPauseTime,LBSplitTime
#endif /*USE_LOADBALANCE*/
@@ -422,7 +418,7 @@ SUBROUTINE ParticleNewton(t,coeff,Mode,doParticle_In,opt_In,AbortTol_In)
IF(ANY(DoPartInNewton)) DoNewton=.TRUE.
#if USE_MPI
!set T if at least 1 proc has to do newton
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoNewton,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoNewton,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
IF(DoPrintConvInfo)THEN
@@ -435,7 +431,7 @@ SUBROUTINE ParticleNewton(t,coeff,Mode,doParticle_In,opt_In,AbortTol_In)
END DO ! iPart
#if USE_MPI
!set T if at least 1 proc has to do newton
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,Counter,1,MPI_INTEGER,MPI_SUM,PartMPI%COMM,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,Counter,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(A,I0)') ' Initial particle number in newton: ',Counter
END IF
@@ -487,7 +483,7 @@ SUBROUTINE ParticleNewton(t,coeff,Mode,doParticle_In,opt_In,AbortTol_In)
IF(ANY(DoPartInNewton)) DoNewton=.TRUE.
#if USE_MPI
!set T if at least 1 proc has to do newton
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoNewton,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoNewton,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
IF(DoPrintConvInfo)THEN
Counter=0
@@ -498,7 +494,7 @@ SUBROUTINE ParticleNewton(t,coeff,Mode,doParticle_In,opt_In,AbortTol_In)
END DO ! iPart
#if USE_MPI
!set T if at least 1 proc has to do newton
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,Counter,1,MPI_INTEGER,MPI_SUM,PartMPI%COMM,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,Counter,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
END IF
END DO
@@ -706,7 +702,6 @@ SUBROUTINE Particle_Armijo(t,coeff,AbortTol,nInnerPartNewton)
USE MOD_LinearSolver_Vars ,ONLY: DoFullNewton!,PartNewtonRelaxation
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#if USE_LOADBALANCE
USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBPauseTime,LBSplitTime
#endif /*USE_LOADBALANCE*/
@@ -950,7 +945,7 @@ SUBROUTINE Particle_Armijo(t,coeff,AbortTol,nInnerPartNewton)
CALL LBStartTime(tLBStart)
#endif /*USE_LOADBALANCE*/
!set T if at least 1 proc has to do newton
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSetLambda,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSetLambda,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
#if USE_LOADBALANCE
CALL LBSplitTime(LB_PARTCOMM,tLBStart)
#endif /*USE_LOADBALANCE*/
@@ -1129,7 +1124,7 @@ SUBROUTINE Particle_Armijo(t,coeff,AbortTol,nInnerPartNewton)
IF(ANY(.NOT.PartLambdaAccept)) DoSetLambda=.TRUE.
#if USE_MPI
!set T if at least 1 proc has to do newton
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSetLambda,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSetLambda,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
iCounter=0
DO iPart=1,PDM%ParticleVecLength
@@ -1141,7 +1136,7 @@ SUBROUTINE Particle_Armijo(t,coeff,AbortTol,nInnerPartNewton)
IF(DoPrintConvInfo)THEN
#if USE_MPI
!set T if at least 1 proc has to do newton
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,iCounter,1,MPI_INTEGER,MPI_SUM,PartMPI%COMM,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,iCounter,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
SWRITE(UNIT_stdOut,'(A20,2x,L,2x,I10)') ' Accept?: ', DoSetLambda,iCounter
END IF
diff --git a/src/loadbalance/loadbalance.f90 b/src/loadbalance/loadbalance.f90
index 25d3ca63a..0294162e8 100644
--- a/src/loadbalance/loadbalance.f90
+++ b/src/loadbalance/loadbalance.f90
@@ -488,10 +488,10 @@ SUBROUTINE ComputeImbalance()
!----------------------------------------------------------------------------------------------------------------------------------!
USE MOD_Globals
USE MOD_LoadBalance_Vars ,ONLY: WeightSum, TargetWeight,CurrentImbalance, MaxWeight, MinWeight
-USE MOD_LoadBalance_Vars ,ONLY: ElemTime, PerformLBSample, PerformPartWeightLB, DeviationThreshold
-#if !((PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400))
+USE MOD_LoadBalance_Vars ,ONLY: ElemTime, PerformLBSample, DeviationThreshold
+#if !((PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400))
USE MOD_LoadBalance_Vars ,ONLY: ElemTimeFieldTot,ElemTimeField
-#endif /*!((PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400))*/
+#endif /*!((PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400))*/
#ifdef PARTICLES
USE MOD_LoadBalance_Vars ,ONLY: ElemTimePartTot,ElemTimePart
#endif /*PARTICLES*/
@@ -506,26 +506,26 @@ SUBROUTINE ComputeImbalance()
REAL :: WeightSum_loc
!===================================================================================================================================
-IF(.NOT.PerformLBSample .AND. .NOT.PerformPartWeightLB) THEN
+IF(.NOT.PerformLBSample) THEN
WeightSum = 0.
TargetWeight = 0.
CurrentImbalance = -1.0
ELSE
-#if (PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)
+#if (PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)
WeightSum = 0. ! initialize before adding particle info
#else
! Collect ElemTime for particles and field separately (only on root process)
! Skip the reduce for DSMC timedisc
- CALL MPI_REDUCE(ElemTimeField , ElemTimeFieldTot , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(ElemTimeField , ElemTimeFieldTot , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
WeightSum = ElemTimeFieldTot ! only correct on MPI root
-#endif /*(PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)*/
+#endif /*(PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)*/
#ifdef PARTICLES
- CALL MPI_REDUCE(ElemTimePart , ElemTimePartTot , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IERROR)
+ CALL MPI_REDUCE(ElemTimePart , ElemTimePartTot , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
WeightSum = WeightSum + ElemTimePartTot ! only correct on MPI root
#endif /*PARTICLES*/
! send WeightSum from MPI root to all other procs
- CALL MPI_BCAST(WeightSum,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(WeightSum,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
! Sanity check
IF(.NOT.ISFINITE(WeightSum)) CALL abort(__STAMP__,'Loadbalance: WeightSum is infinite!')
@@ -536,9 +536,9 @@ SUBROUTINE ComputeImbalance()
IPWRITE(*,*) 'Info: The measured time of all elems is zero. ALMOSTZERO(WeightSum)=.TRUE., SUM(ElemTime)=',WeightSum_loc
END IF
- !CALL MPI_ALLREDUCE(WeightSum_loc,TargetWeight,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,iError)
- CALL MPI_ALLREDUCE(WeightSum_loc,MaxWeight ,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_WORLD,iError)
- CALL MPI_ALLREDUCE(WeightSum_loc,MinWeight ,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_WORLD,iError)
+ !CALL MPI_ALLREDUCE(WeightSum_loc,TargetWeight,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
+ CALL MPI_ALLREDUCE(WeightSum_loc,MaxWeight ,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_PICLAS,iError)
+ CALL MPI_ALLREDUCE(WeightSum_loc,MinWeight ,1,MPI_DOUBLE_PRECISION,MPI_MIN,MPI_COMM_PICLAS,iError)
!WeightSum = TargetWeight ! Set total weight for writing to file
!IF(MPIRoot)THEN
diff --git a/src/loadbalance/loadbalance_tools.f90 b/src/loadbalance/loadbalance_tools.f90
index 1efe20742..066ba9805 100644
--- a/src/loadbalance/loadbalance_tools.f90
+++ b/src/loadbalance/loadbalance_tools.f90
@@ -146,7 +146,7 @@ SUBROUTINE DomainDecomposition()
END IF
! 2) Distribute logical information ElemTimeExists
- CALL MPI_BCAST(ElemTimeExists,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(ElemTimeExists,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
! Distribute the elements according to the selected distribution method
CALL ApplyWeightDistributionMethod(ElemTimeExists)
@@ -155,7 +155,7 @@ SUBROUTINE DomainDecomposition()
CALL WeightDistribution_Equal(nProcessors,nGlobalElems,offsetElemMPI)
! Send the load distribution to all other procs
- CALL MPI_BCAST(offsetElemMPI,nProcessors+1,MPI_INTEGER,0,MPI_COMM_WORLD,iERROR)
+ CALL MPI_BCAST(offsetElemMPI,nProcessors+1,MPI_INTEGER,0,MPI_COMM_PICLAS,iERROR)
END IF ! IF(DoRestart.OR.PerformLoadBalance)
@@ -325,7 +325,7 @@ SUBROUTINE ReadElemTime(single)
DO iProc = 0,nProcessors-1
ElemPerProc(iProc) = offsetElemMPIOld(iProc+1) - offsetElemMPIOld(iProc)
END DO
- CALL MPI_GATHERV(ElemTime,nElems,MPI_DOUBLE_PRECISION,ElemGlobalTime,ElemPerProc,offsetElemMPIOld(0:nProcessors-1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iError)
+ CALL MPI_GATHERV(ElemTime,nElems,MPI_DOUBLE_PRECISION,ElemGlobalTime,ElemPerProc,offsetElemMPIOld(0:nProcessors-1),MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
ELSE
ALLOCATE(ElemTimeTmp(1:nElems))
@@ -335,7 +335,7 @@ SUBROUTINE ReadElemTime(single)
counts_recv => INT(MPInElemRecv ) ,&
disp_recv => INT(MPIoffsetElemRecv))
! Communicate PartInt over MPI
- CALL MPI_ALLTOALLV(ElemTime,counts_send,disp_send,MPI_DOUBLE_PRECISION,ElemTimeTmp,counts_recv,disp_recv,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(ElemTime,counts_send,disp_send,MPI_DOUBLE_PRECISION,ElemTimeTmp,counts_recv,disp_recv,MPI_DOUBLE_PRECISION,MPI_COMM_PICLAS,iError)
END ASSOCIATE
DEALLOCATE(ElemTime)
@@ -367,7 +367,7 @@ SUBROUTINE ReadElemTime(single)
! When this happens, the root process and its processors that are on the same node always return ElemTimeExists=T
! This points to a corrupt state file (accompanied by SpecID=0 particles within the file)
! If the load balance step is performed without h5 I/O in the future, this check can be removed
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,'ElemTime',ElemTimeExists)
IF(.NOT.ElemTimeExists) CALL abort(__STAMP__,'ElemTime does not exit for some processors in .h5 which indicates a corrupt state file')
CALL CloseDataFile()
@@ -392,8 +392,8 @@ SUBROUTINE ReadElemTime(single)
END IF ! MPIRoot
! Send from root to all other processes
- CALL MPI_SCATTERV(ElemGlobalTime, ElemProc, offsetElemMPI, MPI_DOUBLE_PRECISION, ElemTime_tmp, nElems, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, IERROR)
-
+ CALL MPI_SCATTERV(ElemGlobalTime, ElemProc, offsetElemMPI, MPI_DOUBLE_PRECISION, ElemTime_tmp, nElems, MPI_DOUBLE_PRECISION, 0, MPI_COMM_PICLAS, IERROR)
+
! Deallocate temporary array
IF(MPIRoot) DEALLOCATE(ElemProc)
END IF ! FlushInitialState
@@ -403,7 +403,7 @@ SUBROUTINE ReadElemTime(single)
SDEALLOCATE(ElemTime_tmp)
ALLOCATE(ElemTime_tmp(1:nElems))
ElemTime_tmp = 0.
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadArray('ElemTime',2,(/1_IK,INT(nElems,IK)/),INT(offsetElem,IK),2,RealArray=ElemTime_tmp)
CALL CloseDataFile()
diff --git a/src/loadbalance/loaddistribution.f90 b/src/loadbalance/loaddistribution.f90
index 1004d2831..2b6596523 100644
--- a/src/loadbalance/loaddistribution.f90
+++ b/src/loadbalance/loaddistribution.f90
@@ -91,7 +91,7 @@ SUBROUTINE SingleStepOptimalPartition(nProcs,OldElems,NewElems,ElemTime)
LoadSend = PreSum(OldElems)
-CALL MPI_EXSCAN(LoadSend,LowerBoundary,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,iERROR)
+CALL MPI_EXSCAN(LoadSend,LowerBoundary,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iERROR)
IF(MPIRoot) LowerBoundary = 0.
UpperBoundary = LowerBoundary + PreSum(OldElems)
@@ -143,7 +143,7 @@ SUBROUTINE SingleStepOptimalPartition(nProcs,OldElems,NewElems,ElemTime)
END IF
END DO ! iRank=minRank,maxRank
-CALL MPI_ALLTOALL(send_count,1,MPI_INTEGER,recv_count,1, MPI_INTEGER,MPI_COMM_WORLD,iERROR)
+CALL MPI_ALLTOALL(send_count,1,MPI_INTEGER,recv_count,1, MPI_INTEGER,MPI_COMM_PICLAS,iERROR)
NewElems = SUM(recv_count)
DEALLOCATE(PreSum,send_count,recv_count,split)
@@ -213,7 +213,7 @@ SUBROUTINE ApplyWeightDistributionMethod(ElemTimeExists)
END DO
! Sanity check
IF(.NOT.ALLOCATED(PartInt)) CALL abort(__STAMP__,'PartInt is not allocated') ! Missing call to FillParticleData()
- CALL MPI_GATHERV(PartInt,nElemsOld,MPI_DOUBLE_PRECISION,PartIntGlob,ElemPerProc,offsetElemMPIOld(0:nProcessors-1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iError)
+ CALL MPI_GATHERV(PartInt,nElemsOld,MPI_DOUBLE_PRECISION,PartIntGlob,ElemPerProc,offsetElemMPIOld(0:nProcessors-1),MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
PartIntExists = .TRUE.
ELSE
! Readin of PartInt: Read in only by MPIRoot in single mode because the root performs the distribution of elements (domain decomposition)
@@ -285,7 +285,7 @@ SUBROUTINE ApplyWeightDistributionMethod(ElemTimeExists)
#endif /*PARTICLES*/
! Distribute PartsInElem to all procs (Every proc needs to get the information to arrive at the same timedisc)
-CALL MPI_BCAST(PartsInElem,nGlobalElems,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(PartsInElem,nGlobalElems,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
! Every proc needs to get the information to arrive at the same timedisc
! No historical data and no particles in restart file
@@ -332,7 +332,7 @@ SUBROUTINE ApplyWeightDistributionMethod(ElemTimeExists)
END SELECT ! WeightDistributionMethod_loc
! Send the load distribution to all other procs
-CALL MPI_BCAST(offsetElemMPI,nProcs+1,MPI_INTEGER,0,MPI_COMM_WORLD,iERROR)
+CALL MPI_BCAST(offsetElemMPI,nProcs+1,MPI_INTEGER,0,MPI_COMM_PICLAS,iERROR)
#ifdef PARTICLES
! Set PartDistri for every processor
@@ -600,7 +600,7 @@ SUBROUTINE WeightDistribution_SingleStepOptimal(nProcs,nGlobalElems,ElemGlobalTi
REAL :: LoadDiff( 0:nProcs-1)
!===================================================================================================================================
! Distribute ElemGlobalTime to all procs
-CALL MPI_BCAST(ElemGlobalTime,nGlobalElems,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(ElemGlobalTime,nGlobalElems,MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
! Do Rebalance
WeightSum = 0.
@@ -698,7 +698,7 @@ SUBROUTINE WeightDistribution_SingleStepOptimal(nProcs,nGlobalElems,ElemGlobalTi
ErrorCode = 0
IF(NewElems.LE.0) ErrorCode = ErrorCode+100
- CALL MPI_ALLGATHER(NewElems,1,MPI_INTEGER,ElemDistri(:),1,MPI_INTEGER,MPI_COMM_WORLD,iERROR)
+ CALL MPI_ALLGATHER(NewElems,1,MPI_INTEGER,ElemDistri(:),1,MPI_INTEGER,MPI_COMM_PICLAS,iERROR)
! calculate proc offset
offsetElemMPI(0) = 0
@@ -1317,7 +1317,7 @@ SUBROUTINE WriteElemTimeStatistics(WriteHeader,time_opt,iter_opt)
! Get process memory info
CALL ProcessMemUsage(memory(1),memory(2),memory(3)) ! memUsed,memAvail,memTotal
-! only CN roots communicate available and total memory info (count once per node)
+! Only CN roots communicate available and total memory info (count once per node)
#if USE_MPI
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
@@ -1379,7 +1379,7 @@ SUBROUTINE WriteElemTimeStatistics(WriteHeader,time_opt,iter_opt)
!MemUsagePercent = 99.32
IF((memory(1).GT.memory(4)).AND.(MemUsagePercent.GT.95.0))THEN
CALL set_formatting("red")
- SWRITE(UNIT_stdOut,'(A,F5.2,A)') ' WARNING: Memory reaching maximum, RAM is at ',MemUsagePercent,'%'
+ SWRITE(UNIT_stdOut,'(A,F6.2,A)') ' WARNING: Memory reaching maximum, RAM is at ',MemUsagePercent,'%'
CALL clear_formatting()
END IF
END IF ! WriteHeader
diff --git a/src/mesh/mesh.f90 b/src/mesh/mesh.f90
index 8e6761d02..8ecdf1833 100644
--- a/src/mesh/mesh.f90
+++ b/src/mesh/mesh.f90
@@ -127,7 +127,8 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT/OUTPUT VARIABLES
INTEGER,INTENT(IN) :: meshMode !< 0: only read and build Elem_xGP,
- !< -1: as 0 + build connectivity and read node info (automatically read for PARTICLES=ON)
+ !< -2: as 0 + build connectivity and always set ReadNodes=T: read node info (automatically read for PARTICLES=ON) + build FacexGP and keep NodeCoords
+ !< -1: as 0 + build connectivity and always set ReadNodes=T: read node info (automatically read for PARTICLES=ON)
!< 1: as 0 + build connectivity
!< 2: as 1 + calc metrics
!< 3: as 2 but skip InitParticleMesh
@@ -199,7 +200,7 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
END IF
IF (.NOT.(PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance))) THEN
#endif /*USE_LOADBALANCE*/
- CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'Ngeo',1,IntScalar=NGeo)
CALL PrintOption('NGeo','INFO',IntOpt=NGeo)
CALL CloseDataFile()
@@ -293,7 +294,7 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
LBWRITE(UNIT_stdOut,'(A)') "NOW CALLING fillMeshInfo..."
#if USE_HDG && USE_LOADBALANCE
! Call with meshMode to check whether, e.g., HDG load balance info need to be determined or not
- CALL fillMeshInfo(ABS(meshMode))
+ CALL fillMeshInfo(meshMode)
#else
CALL fillMeshInfo()
#endif /*USE_HDG && USE_LOADBALANCE*/
@@ -304,7 +305,7 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
END IF ! meshMode.GT.0
-IF (ABS(meshMode).GT.1) THEN
+IF ((ABS(meshMode).GT.1)) THEN
! ----- CONNECTIVITY IS NOW COMPLETE AT THIS POINT -----
@@ -364,7 +365,7 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
#ifndef PARTICLES
! dealloacte pointers
- LBWRITE(UNIT_stdOut,'(A)') "NOW CALLING deleteMeshPointer..."
+ LBWRITE(UNIT_stdOut,'(A)') "InitMesh: NOW CALLING deleteMeshPointer..."
CALL deleteMeshPointer()
#endif
@@ -372,12 +373,12 @@ SUBROUTINE InitMesh(meshMode,MeshFile_IN)
CALL InitElemVolumes()
#ifndef PARTICLES
- DEALLOCATE(NodeCoords)
+ IF(meshMode.GT.1) DEALLOCATE(NodeCoords)
#endif
DEALLOCATE(dXCL_N)
DEALLOCATE(Ja_Face)
- IF(ABS(meshMode).NE.3)THEN
+ IF((ABS(meshMode).NE.3).AND.(meshMode.GT.1))THEN
#ifdef PARTICLES
IF(RadialWeighting%DoRadialWeighting) THEN
usevMPF = .TRUE.
@@ -719,9 +720,9 @@ SUBROUTINE GetMeshMinMaxBoundaries()
xmax_loc(3) = xyzMinMax(6)
! Find global min
- CALL MPI_ALLREDUCE(xmin_loc(1:3),xmin(1:3), 3, MPI_DOUBLE_PRECISION, MPI_MIN, MPI_COMM_WORLD, IERROR)
+ CALL MPI_ALLREDUCE(xmin_loc(1:3),xmin(1:3), 3, MPI_DOUBLE_PRECISION, MPI_MIN, MPI_COMM_PICLAS, IERROR)
! Find global max
- CALL MPI_ALLREDUCE(xmax_loc(1:3),xmax(1:3), 3, MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD, IERROR)
+ CALL MPI_ALLREDUCE(xmax_loc(1:3),xmax(1:3), 3, MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_PICLAS, IERROR)
! Map global min/max values to xyzMinMax(1:6)
xyzMinMax(1) = xmin(1)
@@ -805,6 +806,8 @@ SUBROUTINE InitElemVolumes()
USE MOD_Particle_Mesh_Vars ,ONLY: nComputeNodeElems,offsetComputeNodeElem
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,myComputeNodeRank,MPI_COMM_LEADERS_SHARED
USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared_Win,ElemCharLength_Shared_Win
+#else
+USE MOD_Globals ,ONLY: MPI_COMM_PICLAS
#endif /*PARTICLES*/
#endif /*USE_MPI*/
#if USE_LOADBALANCE
@@ -891,7 +894,7 @@ SUBROUTINE InitElemVolumes()
CALL MPI_BCAST(MeshVolume,1, MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iERROR)
#else
! In this case, no shared array is created and all arrays are processor-local
-CALL MPI_ALLREDUCE(LocalVolume,MeshVolume,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,IERROR)
+CALL MPI_ALLREDUCE(LocalVolume,MeshVolume,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,IERROR)
#endif /*PARTICLES*/
#else
MeshVolume = LocalVolume
@@ -929,8 +932,7 @@ SUBROUTINE setSideRanges()
USE MOD_Globals ,ONLY: UNIT_StdOut
USE MOD_Mesh_Vars ,ONLY: nGlobalUniqueSidesFromMesh,nGlobalUniqueSides,nMortarMPISides,nUniqueSides
#if USE_MPI
-USE MOD_Globals ,ONLY: myrank
-USE MOD_Globals ,ONLY: iError,MPI_COMM_WORLD
+USE MOD_Globals ,ONLY: myrank,MPI_COMM_PICLAS,iError
USE mpi
#endif /*USE_MPI*/
#endif /*USE_HDG*/
@@ -973,7 +975,7 @@ SUBROUTINE setSideRanges()
#if USE_HDG
nUniqueSides = lastMPISide_MINE + nMortarMPISides !big mortars are at the end of the side list!
#if USE_MPI
-CALL MPI_ALLREDUCE(nUniqueSides,nGlobalUniqueSides,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(nUniqueSides,nGlobalUniqueSides,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#else
nGlobalUniqueSides=nSides
#endif /*USE_MPI*/
diff --git a/src/mesh/mesh_readin.f90 b/src/mesh/mesh_readin.f90
index 52a7e9f74..6fe6d1b86 100644
--- a/src/mesh/mesh_readin.f90
+++ b/src/mesh/mesh_readin.f90
@@ -42,6 +42,11 @@ MODULE MOD_Mesh_ReadIn
MODULE PROCEDURE INVMAP
END INTERFACE
+INTERFACE FinalizeMeshReadin
+ MODULE PROCEDURE FinalizeMeshReadin
+END INTERFACE
+
+PUBLIC :: FinalizeMeshReadin
PUBLIC::ReadMesh,Qsort1Int,INVMAP
!===================================================================================================================================
@@ -283,7 +288,7 @@ SUBROUTINE ReadMesh(FileString,ReadNodes)
GETTIME(StartT)
! Get ElemInfo from Mesh file
- CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL GetDataSize(File_ID,'ElemInfo',nDims,HSize)
CALL ReadAttribute(File_ID,'nUniqueSides',1,IntScalar=nGlobalUniqueSidesFromMesh)
CALL ReadAttribute(File_ID,'nSides',1,IntScalar=nNonUniqueGlobalSides)
@@ -383,7 +388,7 @@ SUBROUTINE ReadMesh(FileString,ReadNodes)
#if defined(PARTICLES) && USE_LOADBALANCE
IF (.NOT.PerformLoadBalance) THEN
#endif /*defined(PARTICLES) && USE_LOADBALANCE*/
- CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadBCs()
#if defined(PARTICLES) && USE_LOADBALANCE
END IF
@@ -633,7 +638,7 @@ SUBROUTINE ReadMesh(FileString,ReadNodes)
#if defined(PARTICLES) && USE_LOADBALANCE
IF (.NOT.PerformLoadBalance) &
#endif /*defined(PARTICLES) && USE_LOADBALANCE*/
- CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Backup required if useCurveds=F
NGeoOld = NGeo
@@ -799,7 +804,7 @@ SUBROUTINE ReadMesh(FileString,ReadNodes)
#endif
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,ReduceData,11,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,ReduceData,11,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
nGlobalMortarSides=ReduceData(9)
@@ -1007,7 +1012,7 @@ SUBROUTINE ReadMeshNodes()
offsetNodeID => INT(offsetNodeID,IK) )
ALLOCATE(NodeCoords_indx(3,nNodeIDs))
! read all nodes
- CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadArray('NodeCoords',2,(/3_IK,nNodeIDs/),offsetNodeID,2,RealArray=NodeCoords_indx)
CALL CloseDataFile()
END ASSOCIATE
@@ -1020,7 +1025,7 @@ SUBROUTINE ReadMeshNodes()
nNodeIDs => INT(nNodeIDs,IK) ,&
offsetNodeID => INT(offsetNodeID,IK) )
ALLOCATE(NodeInfo(FirstNodeInd:LastNodeInd))
- CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadArray('GlobalNodeIDs',1,(/nNodeIDs/),offsetNodeID,1,IntegerArray_i4=NodeInfo)
CALL CloseDataFile()
END ASSOCIATE
@@ -1328,4 +1333,94 @@ SUBROUTINE Partition1Int(A,marker)
RETURN
END SUBROUTINE Partition1Int
+
+SUBROUTINE FinalizeMeshReadin(meshMode)
+!===================================================================================================================================
+! Finalizes the shared mesh readin
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Mesh_Vars
+USE MOD_Particle_Mesh_Vars
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars
+USE MOD_Particle_Vars ,ONLY: Symmetry
+#endif
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
+#endif /*USE_LOADBALANCE*/
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: meshMode !< 0: only read and build Elem_xGP,
+ !< -1: as 0 + build connectivity and read node info (automatically read for PARTICLES=ON)
+ !< 1: as 0 + build connectivity
+ !< 2: as 1 + calc metrics
+ !< 3: as 2 but skip InitParticleMesh
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
+#if USE_MPI && defined(PARTICLES)
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+
+! symmetry sides and elem volumes/characteristic lengths
+IF(ABS(meshMode).GT.1)THEN
+ IF(Symmetry%Order.EQ.2) CALL UNLOCK_AND_FREE(SideIsSymSide_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemVolume_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemCharLength_Shared_Win)
+END IF ! ABS(meshMode).GT.1
+#endif /*USE_MPI && defined(PARTICLES)*/
+
+! Then, free the pointers or arrays
+ADEALLOCATE(SideIsSymSide_Shared)
+ADEALLOCATE(ElemVolume_Shared)
+ADEALLOCATE(ElemCharLength_Shared)
+
+#if USE_MPI
+! Free communication arrays
+SDEALLOCATE(displsElem)
+SDEALLOCATE(recvcountElem)
+SDEALLOCATE(displsSide)
+SDEALLOCATE(recvcountSide)
+
+#if USE_LOADBALANCE
+IF (PerformLoadBalance) THEN
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+ RETURN
+END IF
+#endif /*USE_LOADBALANCE*/
+
+! elems
+CALL UNLOCK_AND_FREE(ElemInfo_Shared_Win)
+
+! sides
+#if defined(PARTICLES)
+CALL UNLOCK_AND_FREE(SideInfo_Shared_Win)
+#endif /*defined(PARTICLES)*/
+
+! nodes
+CALL UNLOCK_AND_FREE(NodeInfo_Shared_Win)
+CALL UNLOCK_AND_FREE(NodeCoords_Shared_Win)
+
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+#endif /*USE_MPI*/
+
+ADEALLOCATE(ElemInfo_Shared)
+ADEALLOCATE(SideInfo_Shared)
+ADEALLOCATE(NodeInfo_Shared)
+ADEALLOCATE(NodeCoords_Shared)
+
+! Free communication arrays
+#if USE_MPI
+SDEALLOCATE(displsNode)
+SDEALLOCATE(recvcountNode)
+#endif /*USE_MPI*/
+
+END SUBROUTINE FinalizeMeshReadin
+
+
+
END MODULE MOD_Mesh_ReadIn
diff --git a/src/mesh/mesh_tools.f90 b/src/mesh/mesh_tools.f90
index aee6bafca..e21c50e21 100644
--- a/src/mesh/mesh_tools.f90
+++ b/src/mesh/mesh_tools.f90
@@ -408,7 +408,7 @@ END FUNCTION GetGlobalSide2CNTotalSide
SUBROUTINE GetMasteriLocSides()
! MODULES
USE MOD_PreProc
-USE MOD_globals ,ONLY: abort,MPI_COMM_WORLD
+USE MOD_globals ,ONLY: abort
USE MOD_Mesh_Vars ,ONLY: MortarType,SideToElem,MortarInfo
USE MOD_Mesh_Vars ,ONLY: firstMortarInnerSide,lastMortarInnerSide
USE MOD_HDG_Vars ,ONLY: nGP_face, iLocSides
@@ -547,7 +547,7 @@ END SUBROUTINE LambdaSideToMaster
SUBROUTINE BuildSideToNonUniqueGlobalSide()
! MODULES
#if USE_DEBUG
-USE MOD_Globals ,ONLY: myrank,UNIT_StdOut,MPI_COMM_WORLD
+USE MOD_Globals ,ONLY: myrank,UNIT_StdOut,MPI_COMM_PICLAS
#endif /*USE_DEBUG*/
USE MOD_Globals ,ONLY: iError
USE MOD_Mesh_Vars ,ONLY: MortarType,ElemInfo,SideToNonUniqueGlobalSide,nSides,nElems,ElemToSide,offsetElem,MortarInfo
@@ -562,7 +562,7 @@ SUBROUTINE BuildSideToNonUniqueGlobalSide()
INTEGER :: iMortar,nMortars
INTEGER :: locMortarSide
#if USE_DEBUG
-INTEGER :: checkRank
+INTEGER :: checkRank ! Only for debugging
#endif /*USE_DEBUG*/
!===================================================================================================================================
#if USE_DEBUG
@@ -625,7 +625,7 @@ SUBROUTINE BuildSideToNonUniqueGlobalSide()
END DO
END DO ! iElem
#if USE_DEBUG
-IF(myrank.eq.0.AND.checkRank.GT.-1) read*; CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+IF(myrank.eq.0.AND.checkRank.GT.-1) read*; CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_DEBUG*/
END SUBROUTINE BuildSideToNonUniqueGlobalSide
#endif /*USE_LOADBALANCE*/
@@ -769,4 +769,4 @@ PPURE SUBROUTINE GetCornerNodeMapCGNS(NgeoLoc,CornerNodesCGNS,NodeMapCGNS)
END SUBROUTINE GetCornerNodeMapCGNS
-END MODULE MOD_Mesh_Tools
\ No newline at end of file
+END MODULE MOD_Mesh_Tools
diff --git a/src/mesh/metrics.f90 b/src/mesh/metrics.f90
index e9372a682..39ae37390 100644
--- a/src/mesh/metrics.f90
+++ b/src/mesh/metrics.f90
@@ -409,9 +409,9 @@ SUBROUTINE CalcMetrics(XCL_NGeo_Out,dXCL_NGeo_out)
! Communicate smallest ref. Jacobian and display
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , SmallestscaledJacRef , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , SmallestscaledJacRef , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(SmallestscaledJacRef , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(SmallestscaledJacRef , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
END IF
#endif /*USE_MPI*/
LBWRITE (*,'(A,ES18.10E3,A,I0,A,ES13.5E3)') " Smallest scaled Jacobian in reference system: ",SmallestscaledJacRef,&
diff --git a/src/mesh/prepare_mesh.f90 b/src/mesh/prepare_mesh.f90
index a02668ab6..7209f6129 100644
--- a/src/mesh/prepare_mesh.f90
+++ b/src/mesh/prepare_mesh.f90
@@ -623,7 +623,7 @@ SUBROUTINE setLocalSideIDs()
! CAUTION: MY-MORTAR-MPI-Sides are missing
IF(ALLOCATED(offsetSideMPI))DEALLOCATE(offsetSideMPI)
ALLOCATE(offsetSideMPI(nProcessors))
-CALL MPI_ALLGATHER(nSides-nMPISides_YOUR,1,MPI_INTEGER,offsetSideMPI,1,MPI_INTEGER,MPI_COMM_WORLD,IERROR)
+CALL MPI_ALLGATHER(nSides-nMPISides_YOUR,1,MPI_INTEGER,offsetSideMPI,1,MPI_INTEGER,MPI_COMM_PICLAS,IERROR)
offsetSide=0 ! set default for restart!!!
DO iProc=1, myrank
offsetSide = offsetSide + offsetSideMPI(iProc)
@@ -659,8 +659,8 @@ SUBROUTINE setLocalSideIDs()
ALLOCATE(nNBProcs_glob(1)) ! dummy for debug
ALLOCATE(ProcInfo_glob(1,1)) ! dummy for debug
END IF !MPIroot
-CALL MPI_GATHER(nNBProcs,1,MPI_INTEGER,nNBProcs_glob,1,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
-CALL MPI_GATHER(ProcInfo,9,MPI_INTEGER,ProcInfo_glob,9,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_GATHER(nNBProcs,1,MPI_INTEGER,nNBProcs_glob,1,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
+CALL MPI_GATHER(ProcInfo,9,MPI_INTEGER,ProcInfo_glob,9,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
IF(MPIroot)THEN
nNBmax=MAXVAL(nNBProcs_glob) ! count, total number of columns in table
ALLOCATE(NBinfo_glob(6,nNBmax,0:nProcessors))
@@ -668,7 +668,7 @@ SUBROUTINE setLocalSideIDs()
ELSE
ALLOCATE(NBinfo_glob(1,1,1)) ! dummy for debug
END IF
-CALL MPI_BCAST(nNBmax,1,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(nNBmax,1,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
ALLOCATE(NBinfo(6,nNbmax))
NBinfo=0
NBinfo(1,1:nNBProcs)=NBProc
@@ -677,7 +677,7 @@ SUBROUTINE setLocalSideIDs()
NBinfo(4,1:nNBProcs)=nMPISides_YOUR_Proc
NBinfo(5,1:nNBProcs)=offsetMPISides_MINE(0:nNBProcs-1)
NBinfo(6,1:nNBProcs)=offsetMPISides_YOUR(0:nNBProcs-1)
-CALL MPI_GATHER(NBinfo,6*nNBmax,MPI_INTEGER,NBinfo_glob,6*nNBmax,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_GATHER(NBinfo,6*nNBmax,MPI_INTEGER,NBinfo_glob,6*nNBmax,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
DEALLOCATE(NBinfo)
IF(MPIroot)THEN
OPEN(NEWUNIT=ioUnit,FILE=filename,STATUS='REPLACE')
@@ -932,11 +932,11 @@ SUBROUTINE fillMeshInfo()
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,nSides_flip,5,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
- CALL MPI_REDUCE(MPI_IN_PLACE ,nSides_MortarType,3,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE,nSides_flip,5,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE ,nSides_MortarType,3,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
ELSE
- CALL MPI_REDUCE(nSides_flip,dummy,5,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
- CALL MPI_REDUCE(nSides_MortarType,nSides_MortarType,3,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
+ CALL MPI_REDUCE(nSides_flip,dummy,5,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
+ CALL MPI_REDUCE(nSides_MortarType,nSides_MortarType,3,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
END IF
#endif /*USE_MPI*/
LBWRITE(UNIT_StdOut,'(132("."))')
@@ -1192,7 +1192,7 @@ SUBROUTINE exchangeFlip()
SideID_start=OffsetMPISides_MINE(iNbProc-1)+1
SideID_end =OffsetMPISides_MINE(iNbProc)
CALL MPI_ISEND(Flip_MINE(SideID_start:SideID_end),nSendVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,SendRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,SendRequest(iNbProc),iError)
END IF
! Start receive flip to YOUR
IF(nMPISides_YOUR_Proc(iNbProc).GT.0)THEN
@@ -1200,7 +1200,7 @@ SUBROUTINE exchangeFlip()
SideID_start=OffsetMPISides_YOUR(iNbProc-1)+1
SideID_end =OffsetMPISides_YOUR(iNbProc)
CALL MPI_IRECV(Flip_YOUR(SideID_start:SideID_end),nRecVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,RecRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,RecRequest(iNbProc),iError)
END IF
END DO !iProc=1,nNBProcs
DO iNbProc=1,nNbProcs
@@ -1287,7 +1287,7 @@ SUBROUTINE exchangeElemID()
SideID_end =OffsetMPISides_send(iNbProc,2)
IF(nSendVal.GT.0)THEN
CALL MPI_ISEND(ElemID_MINE(SideID_start:SideID_end),nSendVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,SendRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,SendRequest(iNbProc),iError)
END IF
! Start receive flip to YOUR
nRecVal =nMPISides_rec(iNbProc,2)
@@ -1295,7 +1295,7 @@ SUBROUTINE exchangeElemID()
SideID_end =OffsetMPISides_rec(iNbProc,2)
IF(nRecVal.GT.0)THEN
CALL MPI_IRECV(ElemID_YOUR(SideID_start:SideID_end),nRecVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,RecRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,RecRequest(iNbProc),iError)
END IF
END DO !iProc=1,nNBProcs
DO iNbProc=1,nNbProcs
@@ -1315,7 +1315,7 @@ SUBROUTINE exchangeElemID()
SideID_end =OffsetMPISides_send(iNbProc,1)
IF(nSendVal.GT.0)THEN
CALL MPI_ISEND(ElemID_MINE(SideID_start:SideID_end),nSendVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,SendRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,SendRequest(iNbProc),iError)
END IF
! Start receive flip to YOUR
nRecVal =nMPISides_rec(iNbProc,1)
@@ -1323,7 +1323,7 @@ SUBROUTINE exchangeElemID()
SideID_end =OffsetMPISides_rec(iNbProc,1)
IF(nRecVal.GT.0)THEN
CALL MPI_IRECV(ElemID_YOUR(SideID_start:SideID_end),nRecVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,RecRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,RecRequest(iNbProc),iError)
END IF
END DO !iProc=1,nNBProcs
DO iNbProc=1,nNbProcs
diff --git a/src/mpi/mpi.f90 b/src/mpi/mpi.f90
index 5e4c10f40..eb4577b96 100644
--- a/src/mpi/mpi.f90
+++ b/src/mpi/mpi.f90
@@ -110,17 +110,15 @@ SUBROUTINE InitMPI()
CALL MPI_INIT(iError)
CALL MPI_INITIALIZED(initDone,iError)
IF(.NOT.initDone) CALL MPI_INIT(iError)
- IF(iError .NE. 0) &
- CALL Abort(__STAMP__,'Error in MPI_INIT',iError)
- MPI_COMM_LOC = MPI_COMM_WORLD
+ IF(iError .NE. 0) CALL Abort(__STAMP__,'Error in MPI_INIT',iError)
+ ! General communicator
+ CALL MPI_COMM_DUP (MPI_COMM_WORLD,MPI_COMM_PICLAS,iError)
+ MPI_COMM_LOC = MPI_COMM_PICLAS
END IF
CALL MPI_COMM_RANK(MPI_COMM_LOC, myRank , iError)
CALL MPI_COMM_SIZE(MPI_COMM_LOC, nProcessors, iError)
-IF(iError .NE. 0) &
- CALL Abort(&
- __STAMP__&
- ,'Could not get rank and number of processors',iError)
+IF(iError .NE. 0) CALL Abort(__STAMP__,'Could not get rank and number of processors',iError)
MPIRoot=(myRank .EQ. 0)
#else /*USE_MPI*/
myRank = 0
@@ -130,7 +128,6 @@ SUBROUTINE InitMPI()
MPILocalRoot=.TRUE.
#endif /*USE_MPI*/
-! At this point the initialization is not completed. We first have to create a new MPI communicator. MPIInitIsDone will be set
END SUBROUTINE InitMPI
@@ -198,13 +195,16 @@ SUBROUTINE InitMPIvars()
GroupSize=GETINT('GroupSize','0')
IF(GroupSize.LT.1)THEN ! group procs by node
! Split the node communicator (shared memory) from the global communicator on physical processor or node level
-#if (CORE_SPLIT==1)
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,myRank,0,MPI_COMM_NODE,iError)
-#elif (CORE_SPLIT==0)
+#if (CORE_SPLIT==0)
+ ! 1.) MPI_COMM_TYPE_SHARED
! Note that using SharedMemoryMethod=OMPI_COMM_TYPE_CORE somehow does not work in every case (intel/amd processors)
! Also note that OMPI_COMM_TYPE_CORE is undefined when not using OpenMPI
- CALL MPI_COMM_SPLIT_TYPE(MPI_COMM_WORLD,SharedMemoryMethod,0,MPI_INFO_NULL,MPI_COMM_NODE,IERROR)
+ CALL MPI_COMM_SPLIT_TYPE(MPI_COMM_PICLAS,SharedMemoryMethod,0,MPI_INFO_NULL,MPI_COMM_NODE,IERROR)
+#elif (CORE_SPLIT==1)
+ ! 2.) OMPI_COMM_TYPE_CORE
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,myRank,0,MPI_COMM_NODE,iError)
#else
+ ! 3.) PICLAS_COMM_TYPE_NODE
! Check if more nodes than procs are required or
! if the resulting split would create unequal procs per node
IF((CORE_SPLIT.GE.nProcessors_Global).OR.(MOD(nProcessors_Global,CORE_SPLIT).GT.0))THEN
@@ -216,11 +216,11 @@ SUBROUTINE InitMPIvars()
! Group procs so that every CORE_SPLIT procs are in the same group
color = INT(REAL(myrank*CORE_SPLIT)/REAL(nProcessors_Global))+1
END IF ! (CORE_SPLIT.GE.nProcessors_Global).OR.(MOD().GT.0)
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color,0,MPI_COMM_NODE,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,0,MPI_COMM_NODE,iError)
#endif
ELSE ! use groupsize
color=myRank/GroupSize
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color,0,MPI_COMM_NODE,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,0,MPI_COMM_NODE,iError)
END IF
CALL MPI_COMM_RANK(MPI_COMM_NODE,myLocalRank,iError)
CALL MPI_COMM_SIZE(MPI_COMM_NODE,nLocalProcs,iError)
@@ -240,12 +240,12 @@ SUBROUTINE InitMPIvars()
myLeaderRank=-1
myWorkerRank=-1
IF(myLocalRank.EQ.0)THEN
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,0,0,MPI_COMM_LEADERS,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,0,0,MPI_COMM_LEADERS,iError)
CALL MPI_COMM_RANK( MPI_COMM_LEADERS,myLeaderRank,iError)
CALL MPI_COMM_SIZE( MPI_COMM_LEADERS,nLeaderProcs,iError)
nWorkerProcs=nProcessors-nLeaderProcs
ELSE
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,1,0,MPI_COMM_WORKERS,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,1,0,MPI_COMM_WORKERS,iError)
CALL MPI_COMM_RANK( MPI_COMM_WORKERS,myWorkerRank,iError)
CALL MPI_COMM_SIZE( MPI_COMM_WORKERS,nWorkerProcs,iError)
nLeaderProcs=nProcessors-nWorkerProcs
@@ -284,7 +284,7 @@ SUBROUTINE StartReceiveMPIData(firstDim,FaceData,LowerBound,UpperBound,MPIReques
SideID_start=OffsetMPISides_rec(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_rec(iNbProc,SendID)
CALL MPI_IRECV(FaceData(:,:,:,SideID_start:SideID_end),nRecVal,MPI_DOUBLE_PRECISION, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,MPIRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,MPIRequest(iNbProc),iError)
ELSE
MPIRequest(iNbProc)=MPI_REQUEST_NULL
END IF
@@ -319,7 +319,7 @@ SUBROUTINE StartSendMPIData(firstDim,FaceData,LowerBound,UpperBound,MPIRequest,S
SideID_start=OffsetMPISides_send(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_send(iNbProc,SendID)
CALL MPI_ISEND(FaceData(:,:,:,SideID_start:SideID_end),nSendVal,MPI_DOUBLE_PRECISION, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,MPIRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,MPIRequest(iNbProc),iError)
ELSE
MPIRequest(iNbProc)=MPI_REQUEST_NULL
END IF
@@ -413,14 +413,14 @@ SUBROUTINE StartReceiveMPIDataInt(firstDim,FaceData,LowerBound,UpperBound,MPIReq
SideID_start=OffsetMPISides_rec(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_rec(iNbProc,SendID)
CALL MPI_IRECV(FaceData(:,SideID_start:SideID_end),nRecVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,MPIRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,MPIRequest(iNbProc),iError)
ELSE
MPIRequest(iNbProc)=MPI_REQUEST_NULL
END IF
END DO !iProc=1,nNBProcs
END SUBROUTINE StartReceiveMPIDataInt
-
-
+
+
!===================================================================================================================================
!> See above, but for for send direction
!===================================================================================================================================
@@ -448,7 +448,7 @@ SUBROUTINE StartSendMPIDataInt(firstDim,FaceData,LowerBound,UpperBound,MPIReques
SideID_start=OffsetMPISides_send(iNbProc-1,SendID)+1
SideID_end =OffsetMPISides_send(iNbProc,SendID)
CALL MPI_ISEND(FaceData(:,SideID_start:SideID_end),nSendVal,MPI_INTEGER, &
- nbProc(iNbProc),0,MPI_COMM_WORLD,MPIRequest(iNbProc),iError)
+ nbProc(iNbProc),0,MPI_COMM_PICLAS,MPIRequest(iNbProc),iError)
ELSE
MPIRequest(iNbProc)=MPI_REQUEST_NULL
END IF
@@ -506,6 +506,7 @@ SUBROUTINE FinalizeMPI()
! Free the communicators
IF(MPI_COMM_NODE .NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(MPI_COMM_NODE ,IERROR)
IF(MPI_COMM_LEADERS.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(MPI_COMM_LEADERS,IERROR)
+IF(MPI_COMM_WORKERS.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(MPI_COMM_WORKERS,IERROR)
#if USE_LOADBALANCE
IF (.NOT.(PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance))) THEN
@@ -614,19 +615,19 @@ SUBROUTINE OutputMPIW8Time()
IF(MPIroot)THEN
ALLOCATE(MPIW8TimeProc(MPIW8SIZE*nProcessors))
ALLOCATE(MPIW8CountProc(MPIW8SIZE*nProcessors))
- CALL MPI_REDUCE(MPIW8TimeSim , MPIW8TimeSimeGlobal , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPIW8Time , MPIW8TimeGlobal , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPIW8Count , MPIW8CountGlobal , MPIW8SIZE , MPI_INTEGER8 , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPIW8TimeSim , MPIW8TimeSimeGlobal , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPIW8Time , MPIW8TimeGlobal , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPIW8Count , MPIW8CountGlobal , MPIW8SIZE , MPI_INTEGER8 , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
- CALL MPI_GATHER(MPIW8Time , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPIW8TimeProc , MPIW8SIZE , MPI_DOUBLE_PRECISION , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_GATHER(MPIW8Count , MPIW8SIZE , MPI_INTEGER8 , MPIW8CountProc , MPIW8SIZE , MPI_INTEGER8 , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_GATHER(MPIW8Time , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPIW8TimeProc , MPIW8SIZE , MPI_DOUBLE_PRECISION , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_GATHER(MPIW8Count , MPIW8SIZE , MPI_INTEGER8 , MPIW8CountProc , MPIW8SIZE , MPI_INTEGER8 , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(MPIW8TimeSim , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IError)
- CALL MPI_REDUCE(MPIW8Time , 0 , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , IError)
- CALL MPI_REDUCE(MPIW8Count , 0 , MPIW8SIZE , MPI_INTEGER8 , MPI_SUM , 0 , MPI_COMM_WORLD , IError)
+ CALL MPI_REDUCE(MPIW8TimeSim , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IError)
+ CALL MPI_REDUCE(MPIW8Time , 0 , MPIW8SIZE , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IError)
+ CALL MPI_REDUCE(MPIW8Count , 0 , MPIW8SIZE , MPI_INTEGER8 , MPI_SUM , 0 , MPI_COMM_PICLAS , IError)
- CALL MPI_GATHER(MPIW8Time , MPIW8SIZE , MPI_DOUBLE_PRECISION , 0 , 0 , 0 , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_GATHER(MPIW8Count , MPIW8SIZE , MPI_INTEGER8 , 0 , 0 , 0 , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_GATHER(MPIW8Time , MPIW8SIZE , MPI_DOUBLE_PRECISION , 0 , 0 , 0 , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_GATHER(MPIW8Count , MPIW8SIZE , MPI_INTEGER8 , 0 , 0 , 0 , 0 , MPI_COMM_PICLAS , iError)
END IF
! --------------------------------------------------
diff --git a/src/mpi/mpi_shared.f90 b/src/mpi/mpi_shared.f90
index 57af7f263..22b62057a 100644
--- a/src/mpi/mpi_shared.f90
+++ b/src/mpi/mpi_shared.f90
@@ -45,11 +45,14 @@ MODULE MOD_MPI_Shared
MODULE PROCEDURE Allocate_Shared_Logical_1
MODULE PROCEDURE Allocate_Shared_Logical_2
MODULE PROCEDURE Allocate_Shared_Int_1
+ MODULE PROCEDURE Allocate_Shared_Int_1_nValINT8
+ MODULE PROCEDURE Allocate_Shared_Int_1_nValKIND_DataPointKIND2
MODULE PROCEDURE Allocate_Shared_Int_2
MODULE PROCEDURE Allocate_Shared_Int_3
MODULE PROCEDURE Allocate_Shared_Int_4
! MODULE PROCEDURE Allocate_Shared_Int_1_Kind_IK
MODULE PROCEDURE Allocate_Shared_Real_1
+ MODULE PROCEDURE Allocate_Shared_Real_1_nValINT8
MODULE PROCEDURE Allocate_Shared_Real_2
MODULE PROCEDURE Allocate_Shared_Real_3
MODULE PROCEDURE Allocate_Shared_Real_4
@@ -142,13 +145,16 @@ SUBROUTINE InitMPIShared()
#endif /*! (CORE_SPLIT==0)*/
! Split the node communicator (shared memory) from the global communicator on physical processor or node level
-#if (CORE_SPLIT==1)
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,myRank,0,MPI_COMM_SHARED,iError)
-#elif (CORE_SPLIT==0)
+#if (CORE_SPLIT==0)
+ ! 1.) MPI_COMM_TYPE_SHARED
! Note that using SharedMemoryMethod=OMPI_COMM_TYPE_CORE somehow does not work in every case (intel/amd processors)
! Also note that OMPI_COMM_TYPE_CORE is undefined when not using OpenMPI
- CALL MPI_COMM_SPLIT_TYPE(MPI_COMM_WORLD,SharedMemoryMethod,0,MPI_INFO_NULL,MPI_COMM_SHARED,IERROR)
+ CALL MPI_COMM_SPLIT_TYPE(MPI_COMM_PICLAS,SharedMemoryMethod,0,MPI_INFO_NULL,MPI_COMM_SHARED,IERROR)
+#elif (CORE_SPLIT==1)
+ ! 2.) OMPI_COMM_TYPE_CORE
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,myRank,0,MPI_COMM_SHARED,iError)
#else
+ ! 3.) PICLAS_COMM_TYPE_NODE
! Check if more nodes than procs are required or
! if the resulting split would create unequal procs per node
IF((CORE_SPLIT.GE.nProcessors_Global).OR.(MOD(nProcessors_Global,CORE_SPLIT).GT.0))THEN
@@ -160,7 +166,7 @@ SUBROUTINE InitMPIShared()
! Group procs so that every CORE_SPLIT procs are in the same group
color = INT(REAL(myRank)/REAL(CORE_SPLIT))
END IF ! (CORE_SPLIT.GE.nProcessors_Global).OR.(MOD().GT.0)
- CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color,0,MPI_COMM_SHARED,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,0,MPI_COMM_SHARED,iError)
#endif
! Find my rank on the shared communicator, comm size and proc name
@@ -187,7 +193,7 @@ SUBROUTINE InitMPIShared()
MPI_COMM_LEADERS_SHARED=MPI_COMM_NULL
myLeaderGroupRank=-1
color = MERGE(101,MPI_UNDEFINED,myComputeNodeRank.EQ.0)
-CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color,0,MPI_COMM_LEADERS_SHARED,IERROR)
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,0,MPI_COMM_LEADERS_SHARED,IERROR)
IF(myComputeNodeRank.EQ.0)THEN
CALL MPI_COMM_RANK(MPI_COMM_LEADERS_SHARED,myLeaderGroupRank,IERROR)
CALL MPI_COMM_SIZE(MPI_COMM_LEADERS_SHARED,nLeaderGroupProcs,IERROR)
@@ -246,6 +252,7 @@ SUBROUTINE Allocate_Shared_Logical_1(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_LOGICAL_1'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -256,24 +263,27 @@ SUBROUTINE Allocate_Shared_Logical_1(nVal,SM_WIN,DataPointer&
LWRITE(UNIT_stdOut,'(A,I7,A65,I20)') "myrank=",myrank," Allocated "//TRIM(SM_WIN_NAME)//" with WIN_SIZE = ",WIN_SIZE
#endif /*DEBUG_MEMORY*/
-IF (ASSOCIATED(DataPointer)) CALL abort(&
-__STAMP__&
-,'ERROR: Datapointer (Logical1) already associated'&
+IF (ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') already associated'&
#ifdef DEBUG_MEMORY
//' for '//TRIM(SM_WIN_NAME)//' in file '//TRIM(SM_CALL_FILE)//' in line '//TRIM(hilf)&
#endif /*DEBUG_MEMORY*/
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
+
END SUBROUTINE ALLOCATE_SHARED_LOGICAL_1
@@ -309,6 +319,7 @@ SUBROUTINE Allocate_Shared_Logical_2(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_LOGICAL_2'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -328,15 +339,19 @@ SUBROUTINE Allocate_Shared_Logical_2(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_LOGICAL_2
@@ -372,6 +387,7 @@ SUBROUTINE Allocate_Shared_Int_1(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_INT_1'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -391,15 +407,19 @@ SUBROUTINE Allocate_Shared_Int_1(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_INT_1
@@ -436,6 +456,7 @@ SUBROUTINE Allocate_Shared_Int_2(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_INT_2'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -455,15 +476,19 @@ SUBROUTINE Allocate_Shared_Int_2(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_INT_2
@@ -500,6 +525,7 @@ SUBROUTINE Allocate_Shared_Int_3(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_INT_3'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -519,15 +545,19 @@ SUBROUTINE Allocate_Shared_Int_3(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_INT_3
@@ -564,6 +594,7 @@ SUBROUTINE Allocate_Shared_Int_4(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_INT_4'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -583,15 +614,19 @@ SUBROUTINE Allocate_Shared_Int_4(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_INT_4
@@ -682,6 +717,7 @@ SUBROUTINE Allocate_Shared_Real_1(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_1'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -701,19 +737,218 @@ SUBROUTINE Allocate_Shared_Real_1(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
-
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_1
+SUBROUTINE Allocate_Shared_Real_1_nValINT8(nVal,SM_WIN,DataPointer&
+#ifdef DEBUG_MEMORY
+ ,SM_WIN_NAME,SM_CALL_FILE,SM_CALL_FILE_LINE&
+#endif /*DEBUG_MEMORY*/
+)
+! MODULES
+USE,INTRINSIC :: ISO_C_BINDING
+USE MOD_Globals
+USE MOD_MPI_Vars
+USE MOD_MPI_Shared_Vars
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER(KIND=SELECTED_INT_KIND(18)),INTENT(IN) :: nVal(1) !> Local number of variables in each rank
+INTEGER,INTENT(OUT) :: SM_WIN !> Shared memory window
+REAL ,INTENT(OUT),POINTER :: DataPointer(:) !> Pointer to the RMA window
+#ifdef DEBUG_MEMORY
+CHARACTER(LEN=*),INTENT(IN) :: SM_WIN_NAME !> Shared memory window name
+CHARACTER(LEN=*),INTENT(IN) :: SM_CALL_FILE !> File from which the call comes
+INTEGER,INTENT(IN) :: SM_CALL_FILE_LINE !> Line in file from which the call comes
+#endif /*DEBUG_MEMORY*/
+!----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+TYPE(C_PTR) :: SM_PTR !> Base pointer, translated to DataPointer later
+INTEGER :: DISP_UNIT !> Displacement unit
+INTEGER(KIND=MPI_ADDRESS_KIND) :: WIN_SIZE !> Size of the allocated memory window on current proc
+#if defined(DEBUG_MEMORY)
+CHARACTER(32) :: hilf !> Convert line number from int to string
+#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_1_nValReal8'
+!==================================================================================================================================
+! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
+WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
+DISP_UNIT = 1
+
+#ifdef DEBUG_MEMORY
+WRITE(UNIT=hilf,FMT='(I0)') SM_CALL_FILE_LINE
+LWRITE(UNIT_stdOut,'(A,I7,A65,I20)') "myrank=",myrank," Allocated "//TRIM(SM_WIN_NAME)//" with WIN_SIZE = ",WIN_SIZE
+#endif /*DEBUG_MEMORY*/
+
+IF (ASSOCIATED(DataPointer)) CALL abort(&
+__STAMP__&
+,'ERROR: Datapointer (Real1 INT8) already associated'&
+#ifdef DEBUG_MEMORY
+//' for '//TRIM(SM_WIN_NAME)//' in file '//TRIM(SM_CALL_FILE)//' in line '//TRIM(hilf)&
+#endif /*DEBUG_MEMORY*/
+)
+
+! Allocate MPI-3 remote memory access (RMA) type memory window
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+
+! Node MPI root already knows the location in virtual memory, all other find it here
+IF (myComputeNodeRank.NE.0) THEN
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
+
+! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
+
+END SUBROUTINE Allocate_Shared_Real_1_nValINT8
+
+
+SUBROUTINE Allocate_Shared_Int_1_nValINT8(nVal,SM_WIN,DataPointer&
+#ifdef DEBUG_MEMORY
+ ,SM_WIN_NAME,SM_CALL_FILE,SM_CALL_FILE_LINE&
+#endif /*DEBUG_MEMORY*/
+)
+! MODULES
+USE,INTRINSIC :: ISO_C_BINDING
+USE MOD_Globals
+USE MOD_MPI_Vars
+USE MOD_MPI_Shared_Vars
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER(KIND=SELECTED_INT_KIND(18)),INTENT(IN) :: nVal(1) !> Local number of variables in each rank
+INTEGER,INTENT(OUT) :: SM_WIN !> Shared memory window
+INTEGER ,INTENT(OUT),POINTER :: DataPointer(:) !> Pointer to the RMA window
+#ifdef DEBUG_MEMORY
+CHARACTER(LEN=*),INTENT(IN) :: SM_WIN_NAME !> Shared memory window name
+CHARACTER(LEN=*),INTENT(IN) :: SM_CALL_FILE !> File from which the call comes
+INTEGER,INTENT(IN) :: SM_CALL_FILE_LINE !> Line in file from which the call comes
+#endif /*DEBUG_MEMORY*/
+!----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+TYPE(C_PTR) :: SM_PTR !> Base pointer, translated to DataPointer later
+INTEGER :: DISP_UNIT !> Displacement unit
+INTEGER(KIND=MPI_ADDRESS_KIND) :: WIN_SIZE !> Size of the allocated memory window on current proc
+#if defined(DEBUG_MEMORY)
+CHARACTER(32) :: hilf !> Convert line number from int to string
+#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_1_nValInt8'
+!==================================================================================================================================
+! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
+WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
+DISP_UNIT = 1
+
+#ifdef DEBUG_MEMORY
+WRITE(UNIT=hilf,FMT='(I0)') SM_CALL_FILE_LINE
+LWRITE(UNIT_stdOut,'(A,I7,A65,I20)') "myrank=",myrank," Allocated "//TRIM(SM_WIN_NAME)//" with WIN_SIZE = ",WIN_SIZE
+#endif /*DEBUG_MEMORY*/
+
+IF (ASSOCIATED(DataPointer)) CALL abort(&
+__STAMP__&
+,'ERROR: Datapointer (Integer1 INT8) already associated'&
+#ifdef DEBUG_MEMORY
+//' for '//TRIM(SM_WIN_NAME)//' in file '//TRIM(SM_CALL_FILE)//' in line '//TRIM(hilf)&
+#endif /*DEBUG_MEMORY*/
+)
+
+! Allocate MPI-3 remote memory access (RMA) type memory window
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+
+! Node MPI root already knows the location in virtual memory, all other find it here
+IF (myComputeNodeRank.NE.0) THEN
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
+
+! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
+
+END SUBROUTINE Allocate_Shared_Int_1_nValINT8
+
+
+SUBROUTINE Allocate_Shared_Int_1_nValKIND_DataPointKIND2(nVal,SM_WIN,DataPointer&
+#ifdef DEBUG_MEMORY
+ ,SM_WIN_NAME,SM_CALL_FILE,SM_CALL_FILE_LINE&
+#endif /*DEBUG_MEMORY*/
+)
+! MODULES
+USE,INTRINSIC :: ISO_C_BINDING
+USE MOD_Globals
+USE MOD_MPI_Vars
+USE MOD_MPI_Shared_Vars
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER(KIND=IK),INTENT(IN) :: nVal(1) !> Local number of variables in each rank
+INTEGER,INTENT(OUT) :: SM_WIN !> Shared memory window
+INTEGER(KIND=2),INTENT(OUT),POINTER :: DataPointer(:) !> Pointer to the RMA window
+#ifdef DEBUG_MEMORY
+CHARACTER(LEN=*),INTENT(IN) :: SM_WIN_NAME !> Shared memory window name
+CHARACTER(LEN=*),INTENT(IN) :: SM_CALL_FILE !> File from which the call comes
+INTEGER,INTENT(IN) :: SM_CALL_FILE_LINE !> Line in file from which the call comes
+#endif /*DEBUG_MEMORY*/
+!----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+TYPE(C_PTR) :: SM_PTR !> Base pointer, translated to DataPointer later
+INTEGER :: DISP_UNIT !> Displacement unit
+INTEGER(KIND=MPI_ADDRESS_KIND) :: WIN_SIZE !> Size of the allocated memory window on current proc
+#if defined(DEBUG_MEMORY)
+CHARACTER(32) :: hilf !> Convert line number from int to string
+#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(64),PARAMETER :: FuncName='ALLOCATE_SHARED_INT_1_nValKIND_KIND2'
+!==================================================================================================================================
+! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
+WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
+DISP_UNIT = 1
+
+#ifdef DEBUG_MEMORY
+WRITE(UNIT=hilf,FMT='(I0)') SM_CALL_FILE_LINE
+LWRITE(UNIT_stdOut,'(A,I7,A65,I20)') "myrank=",myrank," Allocated "//TRIM(SM_WIN_NAME)//" with WIN_SIZE = ",WIN_SIZE
+#endif /*DEBUG_MEMORY*/
+
+IF (ASSOCIATED(DataPointer)) CALL abort(&
+__STAMP__&
+,'ERROR: Datapointer (Integer1 INT8) already associated'&
+#ifdef DEBUG_MEMORY
+//' for '//TRIM(SM_WIN_NAME)//' in file '//TRIM(SM_CALL_FILE)//' in line '//TRIM(hilf)&
+#endif /*DEBUG_MEMORY*/
+)
+
+! Allocate MPI-3 remote memory access (RMA) type memory window
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+
+! Node MPI root already knows the location in virtual memory, all other find it here
+IF (myComputeNodeRank.NE.0) THEN
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
+END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
+
+! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
+
+END SUBROUTINE Allocate_Shared_Int_1_nValKIND_DataPointKIND2
!==================================================================================================================================
!> Allocate data with MPI-3 shared memory option
@@ -747,6 +982,7 @@ SUBROUTINE Allocate_Shared_Real_2(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_2'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -766,15 +1002,19 @@ SUBROUTINE Allocate_Shared_Real_2(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_2
@@ -811,6 +1051,7 @@ SUBROUTINE Allocate_Shared_Real_3(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_3'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -830,15 +1071,19 @@ SUBROUTINE Allocate_Shared_Real_3(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_3
@@ -875,6 +1120,7 @@ SUBROUTINE Allocate_Shared_Real_4(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_4'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -894,15 +1140,19 @@ SUBROUTINE Allocate_Shared_Real_4(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_4
@@ -939,6 +1189,7 @@ SUBROUTINE Allocate_Shared_Real_5(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_5'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -958,15 +1209,19 @@ SUBROUTINE Allocate_Shared_Real_5(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_5
@@ -1003,6 +1258,7 @@ SUBROUTINE Allocate_Shared_Real_6(nVal,SM_WIN,DataPointer&
#if defined(DEBUG_MEMORY)
CHARACTER(32) :: hilf !> Convert line number from int to string
#endif /*defined(DEBUG_MEMORY)*/
+CHARACTER(32),PARAMETER :: FuncName='ALLOCATE_SHARED_REAL_6'
!==================================================================================================================================
! Only node MPI root actually allocates the memory, all other nodes allocate memory with zero length but use the same displacement
WIN_SIZE = MERGE(MPI_SIZE(PRODUCT(INT(nVal,KIND=8)),KIND(DataPointer)),INT(0,MPI_ADDRESS_KIND),myComputeNodeRank.EQ.0)
@@ -1022,15 +1278,19 @@ SUBROUTINE Allocate_Shared_Real_6(nVal,SM_WIN,DataPointer&
)
! Allocate MPI-3 remote memory access (RMA) type memory window
-CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN,IERROR)
+CALL MPI_WIN_ALLOCATE_SHARED(WIN_SIZE, DISP_UNIT, MPI_INFO_SHARED_LOOSE, MPI_COMM_SHARED, SM_PTR, SM_WIN, IERROR)
+IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_ALLOCATE_SHARED returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
! Node MPI root already knows the location in virtual memory, all other find it here
IF (myComputeNodeRank.NE.0) THEN
- CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR,IERROR)
+ CALL MPI_WIN_SHARED_QUERY(SM_WIN, 0, WIN_SIZE, DISP_UNIT, SM_PTR, IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR: MPI_WIN_SHARED_QUERY returned IERROR.NE.MPI_SUCCESS ('//TRIM(FuncName)//')')
END IF
+IF (WIN_SIZE.LT.0) CALL abort(__STAMP__,'ERROR: WIN_SIZE ('//TRIM(FuncName)//') is zero')
! SM_PTR can now be associated with a Fortran pointer and thus used to access the shared data
-CALL C_F_POINTER(SM_PTR, DataPointer,nVal)
+CALL C_F_POINTER(SM_PTR, DataPointer, nVal)
+IF (.NOT.ASSOCIATED(DataPointer)) CALL abort(__STAMP__,'ERROR: Datapointer ('//TRIM(FuncName)//') could not be associated')
END SUBROUTINE ALLOCATE_SHARED_REAL_6
@@ -1111,9 +1371,8 @@ SUBROUTINE UNLOCK_AND_FREE_1(SharedWindow,SM_WIN_NAME)
#endif /*DEBUG_MEMORY*/
CALL MPI_WIN_FREE( SharedWindow,iError)
-IF(iError.NE.0)THEN
- CALL abort(__STAMP__,'ERROR in UNLOCK_AND_FREE_1() for '//TRIM(SM_WIN_NAME)//': iError returned non-zero value =',IntInfoOpt=iError)
-END IF ! iError.NE.0
+IF(iError.NE.MPI_SUCCESS) CALL abort(__STAMP__,'ERROR in UNLOCK_AND_FREE_1() for '//TRIM(SM_WIN_NAME)//': non-zero value iError=',&
+ IntInfoOpt=iError)
END SUBROUTINE UNLOCK_AND_FREE_1
diff --git a/src/mpi/mpi_vars.f90 b/src/mpi/mpi_vars.f90
index 038ec10be..211700866 100644
--- a/src/mpi/mpi_vars.f90
+++ b/src/mpi/mpi_vars.f90
@@ -32,7 +32,6 @@ MODULE MOD_MPI_Vars
INTEGER :: iNbProc
INTEGER :: nSendVal,nRecVal,DataSizeSide
INTEGER :: SideID_start,SideID_end
-LOGICAL :: MPIInitIsDone=.FALSE.
#if USE_MPI
INTEGER :: nNbProcs ! number of neighbor procs
INTEGER,ALLOCATABLE :: NbProc(:) ! iProc list of neighbor procs; allocated from 1:nNbProcs
diff --git a/src/output/output.f90 b/src/output/output.f90
index 2844281e5..2d3db661a 100644
--- a/src/output/output.f90
+++ b/src/output/output.f90
@@ -55,9 +55,15 @@ END SUBROUTINE insert_userblock
MODULE PROCEDURE PrintStatusLine
END INTERFACE
+INTERFACE PrintStatusLineRadiation
+ MODULE PROCEDURE PrintStatusLineRadiation
+END INTERFACE
+
+
PUBLIC:: InitOutput
PUBLIC:: PrintStatusLine
PUBLIC:: DefineParametersOutput
+PUBLIC:: PrintStatusLineRadiation
!===================================================================================================================================
CONTAINS
@@ -232,4 +238,69 @@ SUBROUTINE PrintStatusLine(t,dt,tStart,tEnd,mode)
END IF
END SUBROUTINE PrintStatusLine
+
+!==================================================================================================================================
+!> Displays the actual status of the simulation
+!==================================================================================================================================
+SUBROUTINE PrintStatusLineRadiation(t,tStart,tEnd,Phot,outputrank)
+!----------------------------------------------------------------------------------------------------------------------------------!
+! description
+!----------------------------------------------------------------------------------------------------------------------------------!
+! MODULES !
+USE MOD_Globals
+USE MOD_PreProc
+!----------------------------------------------------------------------------------------------------------------------------------!
+! insert modules here
+!----------------------------------------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+! INPUT / OUTPUT VARIABLES
+REAL,INTENT(IN) :: t !< current simulation time
+REAL,INTENT(IN) :: tStart !< start time of simulation
+REAL,INTENT(IN) :: tEnd !< end time of simulation
+LOGICAL, INTENT(IN) :: Phot
+INTEGER, INTENT(IN),OPTIONAL :: outputrank
+!----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: percent,time_remaining,mins,secs,hours,days
+INTEGER :: visRank
+!==================================================================================================================================
+IF (PRESENT(outputrank)) THEN
+ visRank = outputrank
+ELSE
+ visRank = 0
+END IF
+
+IF(myRank.EQ.visRank)THEN
+#ifdef INTEL
+ OPEN(UNIT_stdOut,CARRIAGECONTROL='fortran')
+#endif
+ percent = (t-tStart) / (tend-tStart)
+ CALL CPU_TIME(time_remaining)
+ IF (percent.GT.0.0) time_remaining = time_remaining/percent - time_remaining
+ percent = percent*100.
+ secs = MOD(time_remaining,60.)
+ time_remaining = time_remaining / 60
+ mins = MOD(time_remaining,60.)
+ time_remaining = time_remaining / 60
+ hours = MOD(time_remaining,24.)
+ time_remaining = time_remaining / 24
+ !days = MOD(time_remaining,365.) ! Use this if years are also to be displayed
+ days = time_remaining
+ IF (Phot) THEN
+ WRITE(UNIT_stdOut,'(A,E10.4,A,E10.4,A,A,I6,A1,I0.2,A1,I0.2,A1,I0.2,A,A,A,A4,I3,A4,A1)',ADVANCE='NO') &
+ ' Photon = ', t,' TotalPhotons = ', tEnd, ' ', ' eta = ',INT(days),':',INT(hours),':',INT(mins),':',INT(secs),' |',&
+ REPEAT('☄️ ',CEILING(percent/4)),REPEAT(' ',INT((100-percent)/4)),'| [ ',NINT(percent),'% ] ',&
+ ACHAR(13) ! ACHAR(13) is carriage return
+ ELSE
+ WRITE(UNIT_stdOut,'(A,E10.4,A,E10.4,A,A,I6,A1,I0.2,A1,I0.2,A1,I0.2,A,A,A,A4,I3,A4,A1)',ADVANCE='NO') &
+ ' Elem = ', t,' TotalElems = ', tEnd, ' ', ' eta = ',INT(days),':',INT(hours),':',INT(mins),':',INT(secs),' |',&
+ REPEAT('☢ ',CEILING(percent/4)),REPEAT(' ',INT((100-percent)/4)),'| [ ',NINT(percent),'% ] ',&
+ ACHAR(13) ! ACHAR(13) is carriage return
+ END IF
+#ifdef INTEL
+ CLOSE(UNIT_stdOut)
+#endif
+END IF
+END SUBROUTINE PrintStatusLineRadiation
+
END MODULE MOD_Output
diff --git a/src/output/output_vtk.f90 b/src/output/output_vtk.f90
index bacb6a3d9..1a7264bb5 100644
--- a/src/output/output_vtk.f90
+++ b/src/output/output_vtk.f90
@@ -207,7 +207,7 @@ SUBROUTINE WriteDataToVTK(nVal,NVisu,nElems,VarNames,Coord,Value,FileString,dim,
! get total number of elements on all processors
#if USE_MPI
-CALL MPI_GATHER(nElems,1,MPI_INTEGER,nElems_glob,1,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_GATHER(nElems,1,MPI_INTEGER,nElems_glob,1,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
#else
nElems_glob(0) = nElems
#endif
@@ -309,16 +309,16 @@ SUBROUTINE WriteDataToVTK(nVal,NVisu,nElems,VarNames,Coord,Value,FileString,dim,
DO iProc=1,nProcessors-1
nElems_proc=nElems_glob(iProc)
IF (nElems_proc.GT.0) THEN
- CALL MPI_RECV(buf(:,:,:,1:nElems_proc),nElems_proc*NVisu_elem,MPI_DOUBLE_PRECISION,iProc,0,MPI_COMM_WORLD,MPIstatus,iError)
+ CALL MPI_RECV(buf(:,:,:,1:nElems_proc),nElems_proc*NVisu_elem,MPI_DOUBLE_PRECISION,iProc,0,MPI_COMM_PICLAS,MPIstatus,iError)
WRITE(ivtk) REAL(buf(:,:,:,1:nElems_proc),4)
END IF
END DO !iProc
ELSE
IF (nElems.GT.0) THEN
IF (nValAtLastDimension_loc) THEN
- CALL MPI_SEND(Value(:,:,:,:,iVal),nElems*NVisu_elem,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_WORLD,iError)
+ CALL MPI_SEND(Value(:,:,:,:,iVal),nElems*NVisu_elem,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_PICLAS,iError)
ELSE
- CALL MPI_SEND(Value(iVal,:,:,:,:),nElems*NVisu_elem,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_WORLD,iError)
+ CALL MPI_SEND(Value(iVal,:,:,:,:),nElems*NVisu_elem,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_PICLAS,iError)
END IF
END IF
#endif /*USE_MPI*/
@@ -341,13 +341,13 @@ SUBROUTINE WriteDataToVTK(nVal,NVisu,nElems,VarNames,Coord,Value,FileString,dim,
DO iProc=1,nProcessors-1
nElems_proc=nElems_glob(iProc)
IF (nElems_proc.GT.0) THEN
- CALL MPI_RECV(buf2(:,:,:,:,1:nElems_proc),nElems_proc*NVisu_elem*3,MPI_DOUBLE_PRECISION,iProc,0,MPI_COMM_WORLD,MPIstatus,iError)
+ CALL MPI_RECV(buf2(:,:,:,:,1:nElems_proc),nElems_proc*NVisu_elem*3,MPI_DOUBLE_PRECISION,iProc,0,MPI_COMM_PICLAS,MPIstatus,iError)
WRITE(ivtk) REAL(buf2(:,:,:,:,1:nElems_proc),4)
END IF
END DO !iProc
ELSE
IF (nElems.GT.0) THEN
- CALL MPI_SEND(Coord(:,:,:,:,:),nElems*NVisu_elem*3,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_WORLD,iError)
+ CALL MPI_SEND(Coord(:,:,:,:,:),nElems*NVisu_elem*3,MPI_DOUBLE_PRECISION, 0,0,MPI_COMM_PICLAS,iError)
END IF
#endif /*USE_MPI*/
END IF !MPIroot
diff --git a/src/particles/analyze/particle_analyze.f90 b/src/particles/analyze/particle_analyze.f90
index 2c19eb39f..a2aac15c6 100644
--- a/src/particles/analyze/particle_analyze.f90
+++ b/src/particles/analyze/particle_analyze.f90
@@ -120,12 +120,10 @@ SUBROUTINE InitParticleAnalyze()
USE MOD_PICDepo_Vars ,ONLY: SFAdaptiveSmoothing
USE MOD_ReadInTools ,ONLY: GETLOGICAL, GETINT, GETSTR, GETINTARRAY, GETREALARRAY, GETREAL
USE MOD_ReadInTools ,ONLY: PrintOption
-USE MOD_Particle_Sampling_Vars,ONLY: UseAdaptive
-#if (PP_TimeDiscMethod == 42)
+USE MOD_Particle_Sampling_Vars,ONLY: UseAdaptiveBC
USE MOD_TimeDisc_Vars ,ONLY: TEnd
USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep
USE MOD_Restart_Vars ,ONLY: RestartTime
-#endif
#if USE_MPI
USE MOD_MPI_Shared
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
@@ -521,7 +519,7 @@ SUBROUTINE InitParticleAnalyze()
PartAnalyzeStep = GETINT('Part-AnalyzeStep','1')
IF (PartAnalyzeStep.EQ.0) PartAnalyzeStep = HUGE(PartAnalyzeStep)
-#if (PP_TimeDiscMethod == 42)
+IF(DSMC%ReservoirSimu) THEN
IF(PartAnalyzeStep.NE.HUGE(PartAnalyzeStep)) THEN
IF(MOD(NINT((TEnd-RestartTime)/ManualTimeStep,8),PartAnalyzeStep).NE.0) THEN
SWRITE(UNIT_stdOut,'(A,I0)') 'NINT((TEnd-RestartTime)/ManualTimeStep) = ',NINT((TEnd-RestartTime)/ManualTimeStep,8)
@@ -529,7 +527,7 @@ SUBROUTINE InitParticleAnalyze()
CALL abort(__STAMP__,'Please specify a PartAnalyzeStep, which is a factor of the total number of iterations!')
END IF
END IF
-#endif
+END IF
DoPartAnalyze = .FALSE.
! PIC PPD and time step criteria: Activate DoPartAnalyze flag
@@ -578,7 +576,7 @@ SUBROUTINE InitParticleAnalyze()
!-- Coupled Power
CalcCoupledPower = GETLOGICAL('CalcCoupledPower')
#if USE_HDG
-IF(UseCoupledPowerPotential.AND.(.NOT.CalcCoupledPower)) CALL abort(__STAMP__,'Coupled power potential requires CalcCoupledPower=T')
+IF(UseCoupledPowerPotential.AND.(.NOT.CalcCoupledPower)) CALL abort(__STAMP__,'Coupled power potential requires CalcCoupledPower=T')
#endif /*USE_HDG*/
IF(CalcCoupledPower) THEN
@@ -632,7 +630,7 @@ SUBROUTINE InitParticleAnalyze()
IF(CalcSurfFluxInfo) THEN
ALLOCATE(FlowRateSurfFlux(1:nSpecAnalyze,1:MAXVAL(Species(:)%nSurfacefluxBCs)))
FlowRateSurfFlux = 0.
- IF(UseAdaptive) THEN
+ IF(UseAdaptiveBC) THEN
ALLOCATE(PressureAdaptiveBC(1:nSpecAnalyze,1:MAXVAL(Species(:)%nSurfacefluxBCs)))
PressureAdaptiveBC = 0.
END IF
@@ -814,9 +812,9 @@ SUBROUTINE InitBulkElectronTemp()
END IF ! MPIRoot
#if USE_MPI
! Broadcast from root to other processors. Only root knows if BulkElectronTempExists=T/F so always broadcast message
- CALL MPI_BCAST(BulkElectronTemp,1, MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iERROR)
- IF(SurfModSEEelectronTempAutoamtic) BulkElectronTempSEE = BulkElectronTemp
+ CALL MPI_BCAST(BulkElectronTemp,1, MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iERROR)
#endif /*USE_MPI*/
+ IF(SurfModSEEelectronTempAutoamtic) BulkElectronTempSEE = BulkElectronTemp
END IF ! CalcBulkElectronTemp
END SUBROUTINE InitBulkElectronTemp
@@ -843,23 +841,22 @@ SUBROUTINE AnalyzeParticles(Time)
USE MOD_FPFlow_Vars ,ONLY: FP_MaxRelaxFactor,FP_MaxRotRelaxFactor,FP_MeanRelaxFactor,FP_MeanRelaxFactorCounter
USE MOD_FPFlow_Vars ,ONLY: FP_PrandtlNumber,FPInitDone
USE MOD_Particle_Analyze_Vars
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Vars ,ONLY: Species,nSpecies
USE MOD_PIC_Analyze ,ONLY: CalcDepositedCharge
USE MOD_Restart_Vars ,ONLY: RestartTime,DoRestart
USE MOD_TimeDisc_Vars ,ONLY: iter, dt, IterDisplayStep
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_Particle_Analyze_Tools ,ONLY: CalcNumPartsOfSpec,CalcShapeEfficiencyR,CalcKineticEnergy,CalcKineticEnergyAndMaximum
USE MOD_Particle_Analyze_Tools ,ONLY: CalcNumberDensity,CalcSurfaceFluxInfo,CalcTransTemp,CalcVelocities
USE MOD_Particle_Analyze_Output ,ONLY: DisplayCoupledPowerPart
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
USE MOD_DSMC_Vars ,ONLY: CollisMode
USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume
USE MOD_DSMC_Analyze ,ONLY: CalcMeanFreePath
USE MOD_DSMC_Vars ,ONLY: BGGas
USE MOD_Particle_Analyze_Tools ,ONLY: CalcMixtureTemp, CalcRelaxProbRotVib
#endif
-#if (PP_TimeDiscMethod==42)
+#if (PP_TimeDiscMethod==4)
USE MOD_DSMC_Vars ,ONLY: CollInf, useDSMC, ChemReac, SpecDSMC
USE MOD_Globals_Vars ,ONLY: ElementaryCharge
USE MOD_MCC_Vars ,ONLY: SpecXSec, XSec_Relaxation
@@ -889,14 +886,14 @@ SUBROUTINE AnalyzeParticles(Time)
REAL :: NumSpec(nSpecAnalyze), NumDens(nSpecAnalyze)
REAL :: Ekin(nSpecAnalyze), Temp(nSpecAnalyze)
REAL :: EkinMax(nSpecies)
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
REAL :: ETotal
REAL :: IntEn(nSpecAnalyze,3),IntTemp(nSpecies,3),TempTotal(nSpecAnalyze), Xi_Vib(nSpecies), Xi_Elec(nSpecies)
REAL :: MaxCollProb, MeanCollProb, MeanFreePath
REAL :: NumSpecTmp(nSpecAnalyze), RotRelaxProb(2), VibRelaxProb(2)
INTEGER :: bgSpec
#endif
-#if (PP_TimeDiscMethod==42)
+#if (PP_TimeDiscMethod==4)
INTEGER :: jSpec, iCase, iLevel
REAL, ALLOCATABLE :: CRate(:), RRate(:), VibRelaxRate(:), ElecRelaxRate(:,:)
#endif
@@ -917,31 +914,33 @@ SUBROUTINE AnalyzeParticles(Time)
IF(DoRestart) isRestart = .true.
IF(.NOT.DoPartAnalyze) RETURN
ParticleAnalyzeSampleTime = Time - ParticleAnalyzeSampleTime ! Set ParticleAnalyzeSampleTime=Time at the end of this routine
-#if (PP_TimeDiscMethod==42)
- IF (useDSMC) THEN
- IF (CollisMode.NE.0) THEN
- SDEALLOCATE(CRate)
- ALLOCATE(CRate(CollInf%NumCase + 1))
- CRate = 0.0
- IF(CalcRelaxProb) THEN
- ALLOCATE(VibRelaxRate(CollInf%NumCase))
- VibRelaxRate = 0.0
- IF(ANY(SpecDSMC(:)%UseElecXSec)) THEN
- ALLOCATE(ElecRelaxRate(CollInf%NumCase,MAXVAL(SpecXSec(:)%NumElecLevel)))
- ElecRelaxRate = 0.0
+#if (PP_TimeDiscMethod==4)
+ IF (DSMC%ReservoirSimu) THEN
+ IF (useDSMC) THEN
+ IF (CollisMode.NE.0) THEN
+ SDEALLOCATE(CRate)
+ ALLOCATE(CRate(CollInf%NumCase + 1))
+ CRate = 0.0
+ IF(CalcRelaxProb) THEN
+ ALLOCATE(VibRelaxRate(CollInf%NumCase))
+ VibRelaxRate = 0.0
+ IF(ANY(SpecDSMC(:)%UseElecXSec)) THEN
+ ALLOCATE(ElecRelaxRate(CollInf%NumCase,MAXVAL(SpecXSec(:)%NumElecLevel)))
+ ElecRelaxRate = 0.0
+ END IF
+ END IF
+ IF (CollisMode.EQ.3) THEN
+ SDEALLOCATE(RRate)
+ ALLOCATE(RRate(ChemReac%NumOfReact))
+ RRate = 0.0
END IF
- END IF
- IF (CollisMode.EQ.3) THEN
- SDEALLOCATE(RRate)
- ALLOCATE(RRate(ChemReac%NumOfReact))
- RRate = 0.0
END IF
END IF
END IF
#endif
OutputCounter = 2
unit_index = 535
- IF (PartMPI%MPIRoot) THEN
+ IF (MPIRoot) THEN
INQUIRE(UNIT = unit_index , OPENED = isOpen)
IF (.NOT.isOpen) THEN
outfile = 'PartAnalyze.csv'
@@ -977,7 +976,7 @@ SUBROUTINE AnalyzeParticles(Time)
WRITE(unit_index,'(I3.3,A15,I3.3,A4,I3.3)',ADVANCE='NO') OutputCounter,'-Massflow-Spec-',iSpec,'-SF-',iSF
END IF
OutputCounter = OutputCounter + 1
- IF(UseAdaptive) THEN
+ IF(UseAdaptiveBC) THEN
WRITE(unit_index,'(A1)',ADVANCE='NO') ','
WRITE(unit_index,'(I3.3,A15,I3.3,A4,I3.3)',ADVANCE='NO') OutputCounter,'-Pressure-Spec-',iSpec,'-SF-',iSF
OutputCounter = OutputCounter + 1
@@ -1099,7 +1098,7 @@ SUBROUTINE AnalyzeParticles(Time)
OutputCounter = OutputCounter + 1
END DO
END IF
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
IF (CollisMode.GT.1) THEN
IF(CalcEint(2)) THEN
DO iSpec=1, nSpecAnalyze
@@ -1218,56 +1217,58 @@ SUBROUTINE AnalyzeParticles(Time)
OutputCounter = OutputCounter + 1
END IF
END IF
-#if (PP_TimeDiscMethod==42)
- IF(CalcCollRates) THEN ! calculates collision rates per collision pair
- DO iSpec = 1, nSpecies
- DO jSpec = iSpec, nSpecies
- WRITE(unit_index,'(A1)',ADVANCE='NO') ','
- WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-CollRate', iSpec, '+', jSpec
- OutputCounter = OutputCounter + 1
- END DO
- END DO
- WRITE(unit_index,'(A1)',ADVANCE='NO') ','
- WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-TotalCollRate'
- OutputCounter = OutputCounter + 1
- END IF
- IF(CalcRelaxProb) THEN
- IF(XSec_Relaxation) THEN
+#if (PP_TimeDiscMethod==4)
+ IF (DSMC%ReservoirSimu) THEN
+ IF(CalcCollRates) THEN ! calculates collision rates per collision pair
DO iSpec = 1, nSpecies
DO jSpec = iSpec, nSpecies
- IF(SpecXSec(CollInf%Coll_Case(iSpec,jSpec))%UseVibXSec) THEN
- ! Skip entry if both species are NOT molecules
- IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. &
- ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE
- WRITE(unit_index,'(A1)',ADVANCE='NO') ','
- WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-VibRelaxRate', iSpec, '+', jSpec
- OutputCounter = OutputCounter + 1
- END IF
+ WRITE(unit_index,'(A1)',ADVANCE='NO') ','
+ WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-CollRate', iSpec, '+', jSpec
+ OutputCounter = OutputCounter + 1
END DO
END DO
+ WRITE(unit_index,'(A1)',ADVANCE='NO') ','
+ WRITE(unit_index,'(I3.3,A)',ADVANCE='NO') OutputCounter,'-TotalCollRate'
+ OutputCounter = OutputCounter + 1
END IF
- DO iSpec = 1, nSpecies
- DO jSpec = iSpec, nSpecies
- iCase = CollInf%Coll_Case(iSpec,jSpec)
- IF(SpecXSec(iCase)%UseElecXSec) THEN
- DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
- WRITE(unit_index,'(A1)',ADVANCE='NO') ','
- WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3,A,F0.2)',ADVANCE='NO') OutputCounter,'-ElecRelaxRate', iSpec, '+', jSpec, '-', &
- SpecXSec(iCase)%ElecLevel(iLevel)%Threshold/ElementaryCharge
- OutputCounter = OutputCounter + 1
+ IF(CalcRelaxProb) THEN
+ IF(XSec_Relaxation) THEN
+ DO iSpec = 1, nSpecies
+ DO jSpec = iSpec, nSpecies
+ IF(SpecXSec(CollInf%Coll_Case(iSpec,jSpec))%UseVibXSec) THEN
+ ! Skip entry if both species are NOT molecules
+ IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. &
+ ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE
+ WRITE(unit_index,'(A1)',ADVANCE='NO') ','
+ WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-VibRelaxRate', iSpec, '+', jSpec
+ OutputCounter = OutputCounter + 1
+ END IF
END DO
- END IF
- END DO
- END DO
- END IF
- IF(CalcReacRates) THEN ! calculates reaction rate per reaction
- IF(CollisMode.EQ.3) THEN
- DO iCase=1, ChemReac%NumOfReact
- WRITE(unit_index,'(A1)',ADVANCE='NO') ','
- WRITE(unit_index,'(I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-Reaction', iCase
- OutputCounter = OutputCounter + 1
+ END DO
+ END IF
+ DO iSpec = 1, nSpecies
+ DO jSpec = iSpec, nSpecies
+ iCase = CollInf%Coll_Case(iSpec,jSpec)
+ IF(SpecXSec(iCase)%UseElecXSec) THEN
+ DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
+ WRITE(unit_index,'(A1)',ADVANCE='NO') ','
+ WRITE(unit_index,'(I3.3,A,I3.3,A,I3.3,A,F0.2)',ADVANCE='NO') OutputCounter,'-ElecRelaxRate', iSpec, '+', jSpec, '-', &
+ SpecXSec(iCase)%ElecLevel(iLevel)%Threshold/ElementaryCharge
+ OutputCounter = OutputCounter + 1
+ END DO
+ END IF
+ END DO
END DO
END IF
+ IF(CalcReacRates) THEN ! calculates reaction rate per reaction
+ IF(CollisMode.EQ.3) THEN
+ DO iCase=1, ChemReac%NumOfReact
+ WRITE(unit_index,'(A1)',ADVANCE='NO') ','
+ WRITE(unit_index,'(I3.3,A,I3.3)',ADVANCE='NO') OutputCounter,'-Reaction', iCase
+ OutputCounter = OutputCounter + 1
+ END DO
+ END IF
+ END IF
END IF
#endif
#if USE_HDG
@@ -1323,30 +1324,30 @@ SUBROUTINE AnalyzeParticles(Time)
IF(CalcLaserInteraction)THEN
CALL CalcKineticEnergyAndMaximum(Ekin,EkinMax)
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , EkinMax , nSpecies , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , PartMPI%COMM , iError)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , EkinMax , nSpecies , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(EkinMax , 0. , nSpecies , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , PartMPI%COMM , iError)
+ CALL MPI_REDUCE(EkinMax , 0. , nSpecies , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
END IF
#endif /*USE_MPI*/
ELSE
CALL CalcKineticEnergy(Ekin)
END IF
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , Ekin , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , Ekin , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
ELSE
- CALL MPI_REDUCE(Ekin , 0. , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ CALL MPI_REDUCE(Ekin , 0. , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
END IF
#endif /*USE_MPI*/
END IF
IF(CalcTemp(1)) CALL CalcTransTemp(NumSpec, Temp)
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
! CalcTemp(1) is required for Temp
! CalcEint(1) is required for Ekin
IF(CalcTemp(1).AND.CalcEint(1)) THEN
CALL CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec) ! contains MPI Communication
- IF(PartMPI%MPIRoot) ETotal = Ekin(nSpecAnalyze) + IntEn(nSpecAnalyze,1) + IntEn(nSpecAnalyze,2) + IntEn(nSpecAnalyze,3)
+ IF(MPIRoot) ETotal = Ekin(nSpecAnalyze) + IntEn(nSpecAnalyze,1) + IntEn(nSpecAnalyze,2) + IntEn(nSpecAnalyze,3)
END IF
!-----------------------------------------------------------------------------------------------------------------------------------
! Determine the maximal collision probability for whole reservoir and mean collision probability (only for one cell reservoirs,
@@ -1378,7 +1379,7 @@ SUBROUTINE AnalyzeParticles(Time)
IF(iter.GT.0) THEN
MaxCollProb = DSMC%CollProbMax
IF(DSMC%CollProbMeanCount.GT.0) MeanCollProb = DSMC%CollProbMean / DSMC%CollProbMeanCount
- IF (PartMPI%MPIRoot) THEN
+ IF (MPIRoot) THEN
IF(TempTotal(nSpecAnalyze).GT.0.0) MeanFreePath = CalcMeanFreePath(NumSpecTmp(1:nSpecies), NumSpecTmp(nSpecAnalyze), &
MeshVolume, TempTotal(nSpecAnalyze))
END IF
@@ -1400,8 +1401,8 @@ SUBROUTINE AnalyzeParticles(Time)
#if USE_MPI
! Collect sum on MPIRoot
tmpArray = (/PCoupl, PCouplAverage/)
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE, tmpArray, 2, MPI_DOUBLE_PRECISION, MPI_SUM, 0, PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE, tmpArray, 2, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_PICLAS, IERROR)
PCoupl = tmpArray(1)
PCouplAverage = tmpArray(2)
#endif /*USE_MPI*/
@@ -1426,33 +1427,33 @@ SUBROUTINE AnalyzeParticles(Time)
#endif /*USE_HDG*/
#if USE_MPI
ELSE
- CALL MPI_REDUCE(tmpArray, 0, 2, MPI_DOUBLE_PRECISION, MPI_SUM, 0, PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(tmpArray, 0, 2, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_PICLAS, IERROR)
! Reset for all processes execpt the MPIRoot (this process keeps the old value, which is therefore considered only once in the
! next MPI reduce call)
PCouplAverage = 0.
- END IF ! PartMPI%MPIRoot
+ END IF ! MPIRoot
END IF
! Switch between root and non-root processes
- IF (PartMPI%MPIRoot) THEN
+ IF (MPIRoot) THEN
IF (CalcPartBalance)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,nPartIn(1:nSpecAnalyze) ,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,nPartOut(1:nSpecAnalyze) ,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,PartEkinIn(1:nSpecAnalyze) ,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,PartEkinOut(1:nSpecAnalyze),nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,nPartIn(1:nSpecAnalyze) ,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,nPartOut(1:nSpecAnalyze) ,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,PartEkinIn(1:nSpecAnalyze) ,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,PartEkinOut(1:nSpecAnalyze),nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
ELSE ! no Root
IF (CalcPartBalance)THEN
- CALL MPI_REDUCE(nPartIn ,0,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(nPartOut ,0,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(PartEkinIn ,0,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(PartEkinOut,0,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(nPartIn ,0,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(nPartOut ,0,nSpecAnalyze,MPI_INTEGER ,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(PartEkinIn ,0,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ CALL MPI_REDUCE(PartEkinOut,0,nSpecAnalyze,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif /*USE_MPI*/
END IF
!-----------------------------------------------------------------------------------------------------------------------------------
! Analyze Routines that require MPI_REDUCE of other variables
! Moving Average of PCoupl:
-IF(CalcCoupledPower.AND.PartMPI%MPIRoot) THEN
+IF(CalcCoupledPower.AND.MPIRoot) THEN
! Moving Average of PCoupl:
TimeDelta = Time-RestartTime
IF(ABS(TimeDelta).GT.0.0) PCouplAverage = PCouplAverage / TimeDelta
@@ -1465,7 +1466,7 @@ SUBROUTINE AnalyzeParticles(Time)
#endif /*USE_HDG*/
!-----------------------------------------------------------------------------------------------------------------------------------
! Perform averaging/summation of the MPI communicated variables on the root only (and for the non-MPI case, MPIRoot is set to true)
-IF(PartMPI%MPIRoot) THEN
+IF(MPIRoot) THEN
IF (CalcPartBalance)THEN
IF(nSpecies.GT.1) THEN
nPartIn(nSpecies+1) = SUM(nPartIn(1:nSpecies))
@@ -1488,7 +1489,7 @@ SUBROUTINE AnalyzeParticles(Time)
IF(BGK_MeanRelaxFactorCounter.GT.0) BGK_MeanRelaxFactor = BGK_MeanRelaxFactor / REAL(BGK_MeanRelaxFactorCounter)
END IF
END IF
-END IF ! PartMPI%MPIRoot
+END IF ! MPIRoot
IF(CalcCoupledPower) THEN
! Moving Average of PCoupl for each species
@@ -1497,17 +1498,19 @@ SUBROUTINE AnalyzeParticles(Time)
!-----------------------------------------------------------------------------------------------------------------------------------
!-----------------------------------------------------------------------------------------------------------------------------------
! Calculate the collision rates and reaction rate coefficients (Arrhenius-type chemistry)
-#if (PP_TimeDiscMethod==42)
- IF(iter.GT.0) THEN
- IF(CalcCollRates) CALL CollRates(CRate)
- IF(CalcRelaxProb) THEN
- CALL CalcRelaxRates(NumSpecTmp,VibRelaxRate)
- IF(DSMC%ElectronicModel.EQ.3) THEN
- IF(ANY(SpecXSec(:)%UseElecXSec)) CALL CalcRelaxRatesElec(ElecRelaxRate)
+#if (PP_TimeDiscMethod==4)
+ IF (DSMC%ReservoirSimu) THEN
+ IF(iter.GT.0) THEN
+ IF(CalcCollRates) CALL CollRates(CRate)
+ IF(CalcRelaxProb) THEN
+ CALL CalcRelaxRates(NumSpecTmp,VibRelaxRate)
+ IF(DSMC%ElectronicModel.EQ.3) THEN
+ IF(ANY(SpecXSec(:)%UseElecXSec)) CALL CalcRelaxRatesElec(ElecRelaxRate)
+ END IF
+ END IF
+ IF(CalcReacRates) THEN
+ IF (CollisMode.EQ.3) CALL ReacRates(NumSpecTmp,RRate)
END IF
- END IF
- IF(CalcReacRates) THEN
- IF (CollisMode.EQ.3) CALL ReacRates(NumSpecTmp,RRate)
END IF
END IF
#endif
@@ -1517,7 +1520,7 @@ SUBROUTINE AnalyzeParticles(Time)
! Output Routines
!===================================================================================================================================
#if USE_MPI
-IF (PartMPI%MPIROOT) THEN
+IF (MPIRoot) THEN
#endif /*USE_MPI*/
WRITE(unit_index,'(E23.16E3)',ADVANCE='NO') Time
IF (CalcSimNumSpec) THEN
@@ -1534,7 +1537,7 @@ SUBROUTINE AnalyzeParticles(Time)
DO iSpec = 1, nSpecies
DO iSF = 1, Species(iSpec)%nSurfacefluxBCs
WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', FlowRateSurfFlux(iSpec,iSF)
- IF(UseAdaptive) WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', PressureAdaptiveBC(iSpec,iSF)
+ IF(UseAdaptiveBC) WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', PressureAdaptiveBC(iSpec,iSF)
END DO
END DO
END IF
@@ -1599,7 +1602,7 @@ SUBROUTINE AnalyzeParticles(Time)
END DO
END IF
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509))
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509))
IF (CollisMode.GT.1) THEN
IF(CalcEint(2)) THEN
DO iSpec=1, nSpecAnalyze
@@ -1668,45 +1671,47 @@ SUBROUTINE AnalyzeParticles(Time)
WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', BGK_MaxRotRelaxFactor
END IF
END IF
-#if (PP_TimeDiscMethod==42)
- IF(CalcCollRates) THEN
- DO iCase=1, CollInf%NumCase +1
- WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', CRate(iCase)
- END DO
- END IF
- IF(CalcRelaxProb) THEN
- IF(XSec_Relaxation) THEN
- DO iSpec = 1, nSpecies
- DO jSpec = iSpec, nSpecies
- iCase = CollInf%Coll_Case(iSpec,jSpec)
- IF(SpecXSec(iCase)%UseVibXSec) THEN
- ! Skip entry if both species are NOT molecules
- IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. &
- ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE
- WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', VibRelaxRate(iCase)
- END IF
- END DO
+#if (PP_TimeDiscMethod==4)
+ IF (DSMC%ReservoirSimu) THEN
+ IF(CalcCollRates) THEN
+ DO iCase=1, CollInf%NumCase +1
+ WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', CRate(iCase)
END DO
END IF
- IF(DSMC%ElectronicModel.EQ.3) THEN
- DO iSpec = 1, nSpecies
- DO jSpec = iSpec, nSpecies
- iCase = CollInf%Coll_Case(iSpec,jSpec)
- IF(SpecXSec(iCase)%UseElecXSec) THEN
- DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
- WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', ElecRelaxRate(iCase,iLevel)
- END DO
- END IF
+ IF(CalcRelaxProb) THEN
+ IF(XSec_Relaxation) THEN
+ DO iSpec = 1, nSpecies
+ DO jSpec = iSpec, nSpecies
+ iCase = CollInf%Coll_Case(iSpec,jSpec)
+ IF(SpecXSec(iCase)%UseVibXSec) THEN
+ ! Skip entry if both species are NOT molecules
+ IF(((SpecDSMC(iSpec)%InterID.NE.2).AND.(SpecDSMC(iSpec)%InterID.NE.20)).AND. &
+ ((SpecDSMC(jSpec)%InterID.NE.2).AND.(SpecDSMC(jSpec)%InterID.NE.20))) CYCLE
+ WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', VibRelaxRate(iCase)
+ END IF
+ END DO
+ END DO
+ END IF
+ IF(DSMC%ElectronicModel.EQ.3) THEN
+ DO iSpec = 1, nSpecies
+ DO jSpec = iSpec, nSpecies
+ iCase = CollInf%Coll_Case(iSpec,jSpec)
+ IF(SpecXSec(iCase)%UseElecXSec) THEN
+ DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
+ WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', ElecRelaxRate(iCase,iLevel)
+ END DO
+ END IF
+ END DO
END DO
+ END IF
+ END IF
+ IF(CalcReacRates) THEN
+ DO iCase=1, ChemReac%NumOfReact
+ WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', RRate(iCase)
END DO
END IF
END IF
- IF(CalcReacRates) THEN
- DO iCase=1, ChemReac%NumOfReact
- WRITE(unit_index,CSVFORMAT,ADVANCE='NO') ',', RRate(iCase)
- END DO
- END IF
-#endif /*(PP_TimeDiscMethod==42)*/
+#endif
#if USE_HDG
IF(CalcBRVariableElectronTemp.OR.BRAutomaticElectronRef)THEN ! variable reference electron temperature
DO iRegions=1,BRNbrOfRegions
@@ -1745,11 +1750,11 @@ SUBROUTINE AnalyzeParticles(Time)
! Finish the line with new line character
WRITE(unit_index,'(A)') ''
#if USE_MPI
-END IF ! PartMPI%MPIROOT
+END IF ! MPIRoot
#endif /*USE_MPI*/
!-----------------------------------------------------------------------------------------------------------------------------------
! Reset coupled power to particles if output of coupled power is active
-IF (CalcCoupledPower.AND.PartMPI%MPIRoot) THEN
+IF (CalcCoupledPower.AND.MPIRoot) THEN
IF(ABS(TimeDelta).GT.0.0) PCouplAverage = PCouplAverage * TimeDelta ! PCouplAverage is reset
END IF
!-----------------------------------------------------------------------------------------------------------------------------------
diff --git a/src/particles/analyze/particle_analyze_code.f90 b/src/particles/analyze/particle_analyze_code.f90
index 6fda4b41e..761abe2e4 100644
--- a/src/particles/analyze/particle_analyze_code.f90
+++ b/src/particles/analyze/particle_analyze_code.f90
@@ -568,11 +568,10 @@ END SUBROUTINE CalcErrorParticle
SUBROUTINE AnalyticParticleMovement(time,iter)
! MODULES
USE MOD_Preproc
-USE MOD_Globals ,ONLY: UNIT_StdOut
+USE MOD_Globals ,ONLY: UNIT_StdOut,MPIRoot
USE MOD_Analyze_Vars ,ONLY: OutputErrorNorms
USE MOD_Particle_Analyze_Vars ,ONLY: TrackParticlePosition
USE MOD_PICInterpolation_Vars ,ONLY: L_2_Error_Part,AnalyticPartDim
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------
@@ -588,7 +587,7 @@ SUBROUTINE AnalyticParticleMovement(time,iter)
!===================================================================================================================================
CALL CalcErrorParticle(time,iter,PartStateAnalytic)
-IF(PartMPI%MPIRoot.AND.OutputErrorNorms) THEN
+IF(MPIRoot.AND.OutputErrorNorms) THEN
WRITE(UNIT_StdOut,'(A13,ES16.7)')' Sim time : ',time
WRITE(formatStr,'(A5,I1,A7)')'(A13,',AnalyticPartDim,'ES16.7)'
WRITE(UNIT_StdOut,formatStr)' L2_Part : ',L_2_Error_Part
diff --git a/src/particles/analyze/particle_analyze_output.f90 b/src/particles/analyze/particle_analyze_output.f90
index d7b172548..664aac403 100644
--- a/src/particles/analyze/particle_analyze_output.f90
+++ b/src/particles/analyze/particle_analyze_output.f90
@@ -37,7 +37,10 @@ SUBROUTINE WriteParticleTrackingData(time,iter)
!----------------------------------------------------------------------------------------------------------------------------------!
! MODULES !
!----------------------------------------------------------------------------------------------------------------------------------!
-USE MOD_Globals ,ONLY: FILEEXISTS,unit_stdout,DOTPRODUCT,abort,MPI_COMM_WORLD,iError,MPIRoot
+USE MOD_Globals ,ONLY: FILEEXISTS,unit_stdout,DOTPRODUCT,abort,MPI_COMM_PICLAS,MPIRoot
+#if USE_MPI
+USE MOD_Globals ,ONLY: iError
+#endif /*USE_MPI*/
USE MOD_Restart_Vars ,ONLY: DoRestart
USE MOD_Particle_Vars ,ONLY: PartState, PDM, PEM
USE MOD_Particle_Analyze_Vars ,ONLY: printDiff,printDiffVec,printDiffTime
@@ -112,7 +115,7 @@ SUBROUTINE WriteParticleTrackingData(time,iter)
#if USE_MPI
! Barrier is required is root creates file and other processor prints to this file
-IF(CreateFile) CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+IF(CreateFile) CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
CALL UpdateNextFreePosition()
@@ -214,7 +217,7 @@ SUBROUTINE DisplayCoupledPowerPart()
! Sum the power
#if USE_MPI
-CALL MPI_REDUCE(PTotal(1:nSpecies),SumPTotal(1:nSpecies),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,iError)
+CALL MPI_REDUCE(PTotal(1:nSpecies),SumPTotal(1:nSpecies),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,iError)
#else
SumPTotal(1:nSpecies)=PTotal(1:nSpecies)
#endif
diff --git a/src/particles/analyze/particle_analyze_tools.f90 b/src/particles/analyze/particle_analyze_tools.f90
index d8a7878db..c9703765a 100644
--- a/src/particles/analyze/particle_analyze_tools.f90
+++ b/src/particles/analyze/particle_analyze_tools.f90
@@ -50,13 +50,13 @@ MODULE MOD_Particle_Analyze_Tools
PUBLIC :: CalcTransTemp
PUBLIC :: CalcMixtureTemp
PUBLIC :: CalcTelec,CalcTVibPoly
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
PUBLIC :: CalcRelaxProbRotVib
#endif
PUBLIC :: CalcVelocities
-#if (PP_TimeDiscMethod==42)
+#if (PP_TimeDiscMethod==4)
PUBLIC :: CollRates,CalcRelaxRates,CalcRelaxRatesElec,ReacRates
-#endif /*(PP_TimeDiscMethod==42)*/
+#endif /*(PP_TimeDiscMethod==4)*/
PUBLIC :: CalcPowerDensity
PUBLIC :: CalculatePartElemData
PUBLIC :: CalcCoupledPowerPart, CalcEelec
@@ -184,9 +184,6 @@ SUBROUTINE CalcNumPartsOfSpec(NumSpec,SimNumSpec,CalcNumSpec_IN,CalcSimNumSpec_I
USE MOD_DSMC_Vars ,ONLY: BGGas, DSMC
USE MOD_Particle_Vars ,ONLY: nSpecies, Species
USE MOD_part_tools ,ONLY: GetParticleWeight
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif
!----------------------------------------------------------------------------------------------------------------------------------!
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -238,16 +235,16 @@ SUBROUTINE CalcNumPartsOfSpec(NumSpec,SimNumSpec,CalcNumSpec_IN,CalcSimNumSpec_I
END IF
#if USE_MPI
-IF (PartMPI%MPIRoot) THEN
- IF(CalcNumSpec_IN) CALL MPI_REDUCE(MPI_IN_PLACE , NumSpec , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , SimNumSpecMin , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , SimNumSpecMax , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(MPI_IN_PLACE , SimNumSpec , nSpecAnalyze , MPI_INTEGER_INT_KIND , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+IF (MPIRoot) THEN
+ IF(CalcNumSpec_IN) CALL MPI_REDUCE(MPI_IN_PLACE , NumSpec , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , SimNumSpecMin , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , SimNumSpecMax , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(MPI_IN_PLACE , SimNumSpec , nSpecAnalyze , MPI_INTEGER_INT_KIND , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
ELSE
- IF(CalcNumSpec_IN) CALL MPI_REDUCE(NumSpec , 0 , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , PartMPI%COMM , IERROR)
- IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SimNumSpec , 0 , nSpecAnalyze , MPI_INTEGER_INT_KIND , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ IF(CalcNumSpec_IN) CALL MPI_REDUCE(NumSpec , 0 , nSpecAnalyze , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MIN , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SUM(SimNumSpec) , 0 , 1 , MPI_INTEGER_INT_KIND , MPI_MAX , 0 , MPI_COMM_PICLAS , IERROR)
+ IF(CalcSimNumSpec_IN) CALL MPI_REDUCE(SimNumSpec , 0 , nSpecAnalyze , MPI_INTEGER_INT_KIND , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
END IF
#endif /*USE_MPI*/
@@ -255,7 +252,7 @@ SUBROUTINE CalcNumPartsOfSpec(NumSpec,SimNumSpec,CalcNumSpec_IN,CalcSimNumSpec_I
IF(CalcSimNumSpec_IN)THEN
GlobalNbrOfParticlesUpdated = .TRUE.
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
#endif /*USE_MPI*/
nGlobalNbrOfParticles(1) = INT(SimNumSpecMin,KIND=IK)
nGlobalNbrOfParticles(2) = INT(SimNumSpecMax,KIND=IK)
@@ -264,7 +261,7 @@ SUBROUTINE CalcNumPartsOfSpec(NumSpec,SimNumSpec,CalcNumSpec_IN,CalcSimNumSpec_I
nGlobalNbrOfParticles(5) = MAX(nGlobalNbrOfParticles(2),nGlobalNbrOfParticles(5))
nGlobalNbrOfParticles(6) = MAX(nGlobalNbrOfParticles(3),nGlobalNbrOfParticles(6))
#if USE_MPI
- END IF ! PartMPI%MPIRoot
+ END IF ! MPIRoot
#endif /*USE_MPI*/
END IF ! CalcSimNumSpec_IN
@@ -386,7 +383,6 @@ SUBROUTINE CalculatePartElemData()
USE MOD_Particle_Analyze_Vars ,ONLY: CalcCyclotronFrequency
#if USE_MPI
USE MOD_Globals
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Analyze_Vars ,ONLY: PPDCellResolved,PICTimeCellResolved,PICValidPlasmaCellSum
#endif /*USE_MPI*/
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -397,7 +393,9 @@ SUBROUTINE CalculatePartElemData()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
+#if USE_MPI
INTEGER :: tmpArray(1:6)
+#endif /*USE_MPI*/
!===================================================================================================================================
! electron density
@@ -457,8 +455,8 @@ SUBROUTINE CalculatePartElemData()
tmpArray(6) = PICValidPlasmaCellSum
! Collect sum on MPIRoot
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , tmpArray , 6 , MPI_INTEGER , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , tmpArray , 6 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
IF(CalcPointsPerDebyeLength)THEN
PPDCellResolved(1) = tmpArray(1)
PPDCellResolved(2) = tmpArray(2)
@@ -470,8 +468,8 @@ SUBROUTINE CalculatePartElemData()
END IF ! CalcPICTimeStep
PICValidPlasmaCellSum = tmpArray(6)
ELSE
- CALL MPI_REDUCE(tmpArray , 0 , 6 , MPI_INTEGER , MPI_SUM , 0 , PartMPI%COMM , IERROR)
- END IF ! PartMPI%MPIRoot
+ CALL MPI_REDUCE(tmpArray , 0 , 6 , MPI_INTEGER , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ END IF ! MPIRoot
END IF ! CalcPointsPerDebyeLength.OR.CalcPICTimeStep
#endif /*USE_MPI*/
@@ -781,7 +779,7 @@ SUBROUTINE CalcShapeEfficiencyR()
USE MOD_Particle_Vars
USE MOD_Preproc
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Globals
#endif
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -856,8 +854,8 @@ SUBROUTINE CalcShapeEfficiencyR()
END DO ! i
IF(NbrOfComps.GT.0.0)THEN
#if USE_MPI
- WRITE(*,*) 'ShapeEfficiency (Proc,%,%Elems)',PartMPI%MyRank,100*NbrWithinRadius/NbrOfComps,100*NbrOfElemsWithinRadius/NbrOfElems
- WRITE(*,*) 'ShapeEfficiency (Elems) for Proc',PartMPI%MyRank,'is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
+ WRITE(*,*) 'ShapeEfficiency (Proc,%,%Elems)',myRank,100*NbrWithinRadius/NbrOfComps,100*NbrOfElemsWithinRadius/NbrOfElems
+ WRITE(*,*) 'ShapeEfficiency (Elems) for Proc',myRank,'is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
#else
WRITE(*,*) 'ShapeEfficiency (%,%Elems)',100*NbrWithinRadius/NbrOfComps, 100*NbrOfElemsWithinRadius/NbrOfElems
WRITE(*,*) 'ShapeEfficiency (Elems) is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
@@ -917,8 +915,8 @@ SUBROUTINE CalcShapeEfficiencyR()
END DO ! i
IF(NbrOfComps.GT.0)THEN
#if USE_MPI
- WRITE(*,*) 'ShapeEfficiency (Proc,%,%Elems)',PartMPI%MyRank,100*NbrWithinRadius/NbrOfComps,100*NbrOfElemsWithinRadius/NbrOfElems
- WRITE(*,*) 'ShapeEfficiency (Elems) for Proc',PartMPI%MyRank,'is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
+ WRITE(*,*) 'ShapeEfficiency (Proc,%,%Elems)',myRank,100*NbrWithinRadius/NbrOfComps,100*NbrOfElemsWithinRadius/NbrOfElems
+ WRITE(*,*) 'ShapeEfficiency (Elems) for Proc',myRank,'is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
#else
WRITE(*,*) 'ShapeEfficiency (%,%Elems)',100*NbrWithinRadius/NbrOfComps,100*NbrOfElemsWithinRadius/NbrOfElems
WRITE(*,*) 'ShapeEfficiency (Elems) is',100*NbrOfElemsWithinRadius/NbrOfElems,'%'
@@ -1178,7 +1176,6 @@ PPURE SUBROUTINE CalcNumberDensity(NumSpec,NumDens)
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
USE MOD_Particle_Vars ,ONLY: Species,nSpecies,usevMPF
USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
!----------------------------------------------------------------------------------------------------------------------------------!
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -1193,7 +1190,7 @@ PPURE SUBROUTINE CalcNumberDensity(NumSpec,NumDens)
!===================================================================================================================================
! Only root does calculation
-IF(.NOT.PartMPI%MPIRoot) RETURN
+IF(.NOT.MPIRoot) RETURN
IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN
NumDens(1:nSpecies) = NumSpec(1:nSpecies) / MeshVolume
@@ -1230,9 +1227,6 @@ SUBROUTINE CalcNumberDensityBGGasDistri()
USE MOD_Particle_Vars ,ONLY: nSpecies
USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume,ElemVolume_Shared
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
USE MOD_Mesh_Vars ,ONLY: nElems,offSetElem
!----------------------------------------------------------------------------------------------------------------------------------!
! IMPLICIT VARIABLE HANDLING
@@ -1265,10 +1259,10 @@ SUBROUTINE CalcNumberDensityBGGasDistri()
! Communicate
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , DistriNumDens, BGGas%NumberOfSpecies, MPI_DOUBLE_PRECISION, MPI_SUM, 0,PartMPI%COMM ,IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , DistriNumDens, BGGas%NumberOfSpecies, MPI_DOUBLE_PRECISION, MPI_SUM, 0,MPI_COMM_PICLAS ,IERROR)
ELSE
- CALL MPI_REDUCE(DistriNumDens, 0. , BGGas%NumberOfSpecies, MPI_DOUBLE_PRECISION, MPI_SUM, 0,PartMPI%COMM ,IERROR)
+ CALL MPI_REDUCE(DistriNumDens, 0. , BGGas%NumberOfSpecies, MPI_DOUBLE_PRECISION, MPI_SUM, 0,MPI_COMM_PICLAS ,IERROR)
END IF
#endif /*USE_MPI*/
BGGas%DistributionNumDens = DistriNumDens
@@ -1293,10 +1287,9 @@ SUBROUTINE CalcSurfaceFluxInfo()
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
USE MOD_Particle_Vars ,ONLY: Species,nSpecies,usevMPF,VarTimeStep
USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive, AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCAreaSurfaceFlux
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCAreaSurfaceFlux
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCAverageValBC, AdaptBCAverageMacroVal
USE MOD_Mesh_Vars ,ONLY: SideToElem
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#if USE_MPI
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
#endif /*USE_MPI*/
@@ -1317,7 +1310,7 @@ SUBROUTINE CalcSurfaceFluxInfo()
IF(iter.EQ.0) RETURN
-IF(UseAdaptive) PressureAdaptiveBC = 0.
+IF(UseAdaptiveBC) PressureAdaptiveBC = 0.
! 1) Calculate the processor-local mass flow rate and sum-up the area weighted pressure
DO iSpec = 1, nSpecies
! If usevMPF or DoRadialWeighting then the MacroParticleFactor is already included in the GetParticleWeight
@@ -1342,7 +1335,7 @@ SUBROUTINE CalcSurfaceFluxInfo()
! Reset the mass flow rate
Species(iSpec)%Surfaceflux(iSF)%SampledMassflow = 0.
! Calculate the average pressure
- IF(UseAdaptive) THEN
+ IF(UseAdaptiveBC) THEN
currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
! Average of the BC for the output
IF(.NOT.AdaptBCAverageValBC) THEN
@@ -1371,21 +1364,21 @@ SUBROUTINE CalcSurfaceFluxInfo()
! distribution at the BC, ie. NOT if AdaptBCAverageValBC = T)
#if USE_MPI
MaxSurfaceFluxBCs = MAXVAL(Species(:)%nSurfacefluxBCs)
-IF (PartMPI%MPIRoot) THEN
+IF (MPIRoot) THEN
CALL MPI_REDUCE(MPI_IN_PLACE,FlowRateSurfFlux(1:nSpecAnalyze,1:MaxSurfaceFluxBCs),nSpecAnalyze*MaxSurfaceFluxBCs,&
- MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- IF(UseAdaptive.AND.(.NOT.AdaptBCAverageValBC)) THEN
+ MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ IF(UseAdaptiveBC.AND.(.NOT.AdaptBCAverageValBC)) THEN
CALL MPI_REDUCE(MPI_IN_PLACE,PressureAdaptiveBC(1:nSpecAnalyze,1:MaxSurfaceFluxBCs),nSpecAnalyze*MaxSurfaceFluxBCs,&
- MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
ELSE ! no Root
- CALL MPI_REDUCE(FlowRateSurfFlux,FlowRateSurfFlux,nSpecAnalyze*MaxSurfaceFluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- IF(UseAdaptive.AND.(.NOT.AdaptBCAverageValBC)) CALL MPI_REDUCE(PressureAdaptiveBC,PressureAdaptiveBC,nSpecAnalyze*MaxSurfaceFluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(FlowRateSurfFlux,FlowRateSurfFlux,nSpecAnalyze*MaxSurfaceFluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ IF(UseAdaptiveBC.AND.(.NOT.AdaptBCAverageValBC)) CALL MPI_REDUCE(PressureAdaptiveBC,PressureAdaptiveBC,nSpecAnalyze*MaxSurfaceFluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif /*USE_MPI*/
! 3) Consider Part-AnalyzeStep for FlowRateSurfFlux and determine the average pressure (value does not depend on the Part-AnalyzeStep)
-IF (PartMPI%MPIRoot) THEN
+IF (MPIRoot) THEN
IF(PartAnalyzeStep.GT.1)THEN
IF(PartAnalyzeStep.EQ.HUGE(PartAnalyzeStep))THEN
FlowRateSurfFlux = FlowRateSurfFlux / iter
@@ -1393,7 +1386,7 @@ SUBROUTINE CalcSurfaceFluxInfo()
FlowRateSurfFlux = FlowRateSurfFlux / MIN(PartAnalyzeStep,iter)
END IF
END IF
- IF(UseAdaptive) THEN
+ IF(UseAdaptiveBC) THEN
IF(AdaptBCAverageValBC) THEN
PressureAdaptiveBC(:,:) = AdaptBCAverageMacroVal(3,:,:)
ELSE
@@ -1423,7 +1416,6 @@ SUBROUTINE CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec)
USE MOD_Globals
USE MOD_PARTICLE_Vars ,ONLY: nSpecies
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_DSMC_Vars ,ONLY: SpecDSMC, CollisMode, DSMC
USE MOD_part_tools ,ONLY: CalcXiElec
USE MOD_DSMC_Relaxation ,ONLY: CalcXiVib
@@ -1447,7 +1439,7 @@ SUBROUTINE CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec)
IF (CollisMode.GT.1) THEN
CALL CalcIntTempsAndEn(NumSpec,IntTemp,IntEn)
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
TempTotal = 0.0
Xi_Vib = 0.0
Xi_Elec = 0.0
@@ -1486,7 +1478,7 @@ SUBROUTINE CalcMixtureTemp(NumSpec,Temp,IntTemp,IntEn,TempTotal,Xi_Vib,Xi_Elec)
END IF
END IF
ELSE
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
TempTotal = Temp
IntTemp = 0.0
IntEn = 0.0
@@ -1507,7 +1499,6 @@ SUBROUTINE CalcIntTempsAndEn(NumSpec,IntTemp,IntEn)
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
USE MOD_Particle_Vars ,ONLY: PartSpecies, Species, PDM, nSpecies, usevMPF
USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, SpecDSMC, DSMC
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
@@ -1549,19 +1540,19 @@ SUBROUTINE CalcIntTempsAndEn(NumSpec,IntTemp,IntEn)
END DO
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,EVib ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,ERot ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
- IF(DSMC%ElectronicModel.GT.0) CALL MPI_REDUCE(MPI_IN_PLACE,Eelec,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,EVib ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,ERot ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ IF(DSMC%ElectronicModel.GT.0) CALL MPI_REDUCE(MPI_IN_PLACE,Eelec,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(EVib ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(ERot ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
- IF(DSMC%ElectronicModel.GT.0) CALL MPI_REDUCE(Eelec ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(EVib ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(ERot ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
+ IF(DSMC%ElectronicModel.GT.0) CALL MPI_REDUCE(Eelec ,RD ,nSpecies, MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
! final computation is only done for the root
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
! Calc TVib, TRot
DO iSpec = 1, nSpecies
NumSpecTemp = NumSpec(iSpec)
@@ -1632,7 +1623,6 @@ SUBROUTINE CalcTransTemp(NumSpec, Temp)
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_Particle_Vars ,ONLY: PartSpecies, PartState, Species, PDM
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo
USE MOD_Particle_Vars ,ONLY: CalcBulkElectronTemp,BulkElectronTemp,BulkElectronTempSpecID
#if USE_MPI
@@ -1672,14 +1662,14 @@ SUBROUTINE CalcTransTemp(NumSpec, Temp)
END DO
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,PartVandV2,nSpecies*6,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,PartVandV2,nSpecies*6,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(PartVandV2 ,PartVandV2,nSpecies*6,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(PartVandV2 ,PartVandV2,nSpecies*6,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
DO iSpec=1, nSpecies
IF(NumSpec(iSpec).NE.0) THEN
! Compute velocity averages
@@ -1707,7 +1697,7 @@ SUBROUTINE CalcTransTemp(NumSpec, Temp)
END IF
! For SEE model that used the bulk electron temperature, use the global electron temperature
-IF(PartMPI%MPIRoot.AND.CalcBulkElectronTemp)THEN
+IF(MPIRoot.AND.CalcBulkElectronTemp)THEN
ASSOCIATE( Te => BulkElectronTemp ,&
T => Temp(BulkElectronTempSpecID)*Kelvin2eV)
! Smooth the bulk electron temperature by adjusting the difference by 50%
@@ -1715,7 +1705,7 @@ SUBROUTINE CalcTransTemp(NumSpec, Temp)
END ASSOCIATE
END IF
#if USE_MPI
-IF(CalcBulkElectronTemp) CALL MPI_BCAST(BulkElectronTemp,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iError)
+IF(CalcBulkElectronTemp) CALL MPI_BCAST(BulkElectronTemp,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
IF(SurfModSEEelectronTempAutoamtic) BulkElectronTempSEE = BulkElectronTemp
#endif /*USE_MPI*/
@@ -1888,7 +1878,7 @@ REAL FUNCTION CalcTVibPoly(MeanEVib, iSpec)
END FUNCTION CalcTVibPoly
-#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==42 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
+#if (PP_TimeDiscMethod==2 || PP_TimeDiscMethod==4 || PP_TimeDiscMethod==300 || PP_TimeDiscMethod==400 || (PP_TimeDiscMethod>=501 && PP_TimeDiscMethod<=509) || PP_TimeDiscMethod==120)
SUBROUTINE CalcRelaxProbRotVib(RotRelaxProb,VibRelaxProb)
!===================================================================================================================================
! Calculates global rotational and vibrational relaxation probability for PartAnalyse.csv
@@ -1899,9 +1889,6 @@ SUBROUTINE CalcRelaxProbRotVib(RotRelaxProb,VibRelaxProb)
USE MOD_Particle_Vars ,ONLY: nSpecies
USE MOD_DSMC_Vars ,ONLY: DSMC, VarVibRelaxProb, CollisMode
USE MOD_Mesh_Vars ,ONLY: nElems, nGlobalElems
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1929,13 +1916,13 @@ SUBROUTINE CalcRelaxProbRotVib(RotRelaxProb,VibRelaxProb)
RotRelaxProb(2) = 0
END IF
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,RotRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,RotRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
- RotRelaxProb(2) = RotRelaxProb(2) / REAL(PartMPI%nProcs)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,RotRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,RotRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
+ RotRelaxProb(2) = RotRelaxProb(2) / REAL(nProcessors)
ELSE
- CALL MPI_REDUCE(RotRelaxProb(1),RotRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(RotRelaxProb(2),RotRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(RotRelaxProb(1),RotRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(RotRelaxProb(2),RotRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
ELSE
@@ -1953,25 +1940,25 @@ SUBROUTINE CalcRelaxProbRotVib(RotRelaxProb,VibRelaxProb)
END DO
VibRelaxProb(2)=VibRelaxProb(2)/(REAL(nSpecies)*REAL(nGlobalElems))
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,VibRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,VibRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,VibRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,VibRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(VibRelaxProb(1),VibRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(VibRelaxProb(2),VibRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(VibRelaxProb(1),VibRelaxProb(1),1,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(VibRelaxProb(2),VibRelaxProb(2),1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
ELSE
VibRelaxProb = 0.
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,1),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,2),nSpecies,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,3),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,1),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,2),nSpecies,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%CalcVibProb(1:nSpecies,3),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,1),DSMC%CalcVibProb(1:nSpecies,1),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,2),DSMC%CalcVibProb(1:nSpecies,2),nSpecies,MPI_DOUBLE_PRECISION,MPI_MAX,0,PartMPI%COMM, IERROR)
- CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,3),DSMC%CalcVibProb(1:nSpecies,3),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,1),DSMC%CalcVibProb(1:nSpecies,1),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,2),DSMC%CalcVibProb(1:nSpecies,2),nSpecies,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS, IERROR)
+ CALL MPI_REDUCE(DSMC%CalcVibProb(1:nSpecies,3),DSMC%CalcVibProb(1:nSpecies,3),nSpecies,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
IF(MPIRoot)THEN
@@ -2004,7 +1991,6 @@ SUBROUTINE CalcVelocities(PartVtrans, PartVtherm,NumSpec,SimNumSpec)
USE MOD_Globals
USE MOD_Particle_Analyze_Vars ,ONLY: VeloDirs
USE MOD_Particle_Vars ,ONLY: PartState, PartSpecies, PDM, nSpecies, PartMPF, usevMPF
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Analyze_Vars ,ONLY: nSpecAnalyze
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -2044,14 +2030,14 @@ SUBROUTINE CalcVelocities(PartVtrans, PartVtherm,NumSpec,SimNumSpec)
END DO
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,PartVtrans ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,PartVtrans ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(PartVtrans ,RD ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(PartVtrans ,RD ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
IF (usevMPF) THEN
DO dir = 1,3
IF (VeloDirs(dir) .OR. VeloDirs(4)) THEN
@@ -2080,7 +2066,7 @@ SUBROUTINE CalcVelocities(PartVtrans, PartVtherm,NumSpec,SimNumSpec)
END IF
#if USE_MPI
- CALL MPI_BCAST(PartVtrans,4*nSpecies, MPI_DOUBLE_PRECISION,0,PartMPI%COMM,iERROR)
+ CALL MPI_BCAST(PartVtrans,4*nSpecies, MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iERROR)
#endif /*USE_MPI*/
! calculate thermal velocity
@@ -2101,14 +2087,14 @@ SUBROUTINE CalcVelocities(PartVtrans, PartVtherm,NumSpec,SimNumSpec)
END DO
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,PartVtherm,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,PartVtherm,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(PartVtherm ,RD ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(PartVtherm ,RD ,4*nSpecies,MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
- IF(PartMPI%MPIRoot)THEN
+ IF(MPIRoot)THEN
DO dir = 1,3
IF (VeloDirs(dir) .OR. VeloDirs(4)) THEN
DO iSpec = 1,nSpecies
@@ -2138,7 +2124,7 @@ SUBROUTINE CalcVelocities(PartVtrans, PartVtherm,NumSpec,SimNumSpec)
END SUBROUTINE CalcVelocities
-#if (PP_TimeDiscMethod==42)
+#if (PP_TimeDiscMethod==4)
SUBROUTINE CollRates(CRate)
!===================================================================================================================================
!> Calculate the collision rate per species pairing by diving the summed up variables by the current timestep
@@ -2149,7 +2135,6 @@ SUBROUTINE CollRates(CRate)
USE MOD_TimeDisc_Vars ,ONLY: dt, iter
USE MOD_Particle_Vars ,ONLY: VarTimeStep
USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -2165,14 +2150,14 @@ SUBROUTINE CollRates(CRate)
!===================================================================================================================================
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%NumColl,CollInf%NumCase + 1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,DSMC%NumColl,CollInf%NumCase + 1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
ELSE
- CALL MPI_REDUCE(DSMC%NumColl,DSMC%NumColl,CollInf%NumCase + 1,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(DSMC%NumColl,DSMC%NumColl,CollInf%NumCase + 1,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif /*USE_MPI*/
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
DSMC%NumColl(CollInf%NumCase + 1) = SUM(DSMC%NumColl(1:CollInf%NumCase))
DO iCase=1, CollInf%NumCase
! Species-specific time step
@@ -2218,9 +2203,6 @@ SUBROUTINE CalcRelaxRates(NumSpec,VibRelaxProbCase)
USE MOD_TimeDisc_Vars ,ONLY: dt, iter
USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep
USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -2236,15 +2218,15 @@ SUBROUTINE CalcRelaxRates(NumSpec,VibRelaxProbCase)
#if USE_MPI
IF(XSec_Relaxation) THEN
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,SpecXSec(:)%VibCount,CollInf%NumCase,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,SpecXSec(:)%VibCount,CollInf%NumCase,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(SpecXSec(:)%VibCount,SpecXSec(:)%VibCount,CollInf%NumCase,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(SpecXSec(:)%VibCount,SpecXSec(:)%VibCount,CollInf%NumCase,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
END IF
#endif /*USE_MPI*/
VibRelaxProbCase = 0.
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
IF(XSec_Relaxation) THEN
DO iSpec=1,nSpecies
IF(NumSpec(iSpec).LE.0.0) CYCLE
@@ -2293,7 +2275,6 @@ SUBROUTINE CalcRelaxRatesElec(ElecRelaxRate)
USE MOD_MCC_Vars ,ONLY: SpecXSec
USE MOD_TimeDisc_Vars ,ONLY: dt, iter
USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -2321,14 +2302,14 @@ SUBROUTINE CalcRelaxRatesElec(ElecRelaxRate)
END DO
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,ElecRelaxRate,CollInf%NumCase*MaxLevel,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,ElecRelaxRate,CollInf%NumCase*MaxLevel,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
ELSE
- CALL MPI_REDUCE(ElecRelaxRate,ElecRelaxRate,CollInf%NumCase*MaxLevel,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(ElecRelaxRate,ElecRelaxRate,CollInf%NumCase*MaxLevel,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif /*USE_MPI*/
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
DO iCase=1, CollInf%NumCase
IF(SpecXSec(iCase)%UseElecXSec) THEN
! Species-specific time step
@@ -2371,7 +2352,6 @@ SUBROUTINE ReacRates(NumSpec, RRate)
USE MOD_TimeDisc_Vars ,ONLY: dt, iter
USE MOD_Particle_Vars ,ONLY: Species, nSpecies, VarTimeStep
USE MOD_Particle_Mesh_Vars ,ONLY: MeshVolume
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Analyze_Vars ,ONLY: PartAnalyzeStep
USE MOD_Particle_TimeStep ,ONLY: GetSpeciesTimeStep
! IMPLICIT VARIABLE HANDLING
@@ -2392,14 +2372,14 @@ SUBROUTINE ReacRates(NumSpec, RRate)
!===================================================================================================================================
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE ,ChemReac%NumReac,ChemReac%NumOfReact,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE ,ChemReac%NumReac,ChemReac%NumOfReact,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
ELSE
- CALL MPI_REDUCE(ChemReac%NumReac,RD ,ChemReac%NumOfReact,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(ChemReac%NumReac,RD ,ChemReac%NumOfReact,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
#endif /*USE_MPI*/
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
DO iReac=1, ChemReac%NumOfReact
iCase = ChemReac%ReactCase(iReac)
! Species-specific time step
diff --git a/src/particles/bgk/bgk_adaptation.f90 b/src/particles/bgk/bgk_adaptation.f90
index 798a570be..f9d39cb2c 100644
--- a/src/particles/bgk/bgk_adaptation.f90
+++ b/src/particles/bgk/bgk_adaptation.f90
@@ -51,6 +51,7 @@ SUBROUTINE BGK_octree_adapt(iElem)
USE MOD_FP_CollOperator ,ONLY: FP_CollisionOperator
USE MOD_BGK_Vars ,ONLY: BGKInitDone,BGK_MeanRelaxFactor,BGK_MeanRelaxFactorCounter,BGK_MaxRelaxFactor
USE MOD_BGK_Vars ,ONLY: BGK_QualityFacSamp, BGK_MaxRotRelaxFactor, BGK_PrandtlNumber, BGK_ExpectedPrandtlNumber
+USE MOD_BGK_Vars ,ONLY: BGK_Viscosity, BGK_ThermalConductivity
USE MOD_FPFlow_Vars ,ONLY: FPInitDone, FP_PrandtlNumber, FP_QualityFacSamp
USE MOD_FPFlow_Vars ,ONLY: FP_MaxRelaxFactor, FP_MaxRotRelaxFactor, FP_MeanRelaxFactor, FP_MeanRelaxFactorCounter
USE MOD_part_tools ,ONLY: GetParticleWeight
@@ -75,7 +76,7 @@ SUBROUTINE BGK_octree_adapt(iElem)
IF(DSMC%CalcQualityFactors) THEN
IF(BGKInitDone) THEN
BGK_MeanRelaxFactorCounter = 0; BGK_MeanRelaxFactor = 0.; BGK_MaxRelaxFactor = 0.; BGK_MaxRotRelaxFactor = 0.
- BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.
+ BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.; BGK_Viscosity=0.; BGK_ThermalConductivity=0.
END IF
IF(FPInitDone) THEN
FP_MeanRelaxFactorCounter = 0; FP_MeanRelaxFactor = 0.; FP_MaxRelaxFactor = 0.; FP_MaxRotRelaxFactor = 0.; FP_PrandtlNumber = 0.
@@ -207,6 +208,8 @@ SUBROUTINE BGK_octree_adapt(iElem)
BGK_QualityFacSamp(5,iElem) = BGK_QualityFacSamp(5,iElem) + BGK_MaxRotRelaxFactor
BGK_QualityFacSamp(6,iElem) = BGK_QualityFacSamp(6,iElem) + BGK_PrandtlNumber
BGK_QualityFacSamp(7,iElem) = BGK_QualityFacSamp(7,iElem) + BGK_ExpectedPrandtlNumber
+ BGK_QualityFacSamp(8,iElem) = BGK_QualityFacSamp(8,iElem) + BGK_Viscosity
+ BGK_QualityFacSamp(9,iElem) = BGK_QualityFacSamp(9,iElem) + BGK_ThermalConductivity
END IF
IF(FPInitDone) THEN
FP_QualityFacSamp(1,iElem) = FP_QualityFacSamp(1,iElem) + FP_MeanRelaxFactor
@@ -440,6 +443,7 @@ SUBROUTINE BGK_quadtree_adapt(iElem)
USE MOD_FP_CollOperator ,ONLY: FP_CollisionOperator
USE MOD_BGK_Vars ,ONLY: BGKInitDone,BGK_MeanRelaxFactor,BGK_MeanRelaxFactorCounter,BGK_MaxRelaxFactor
USE MOD_BGK_Vars ,ONLY: BGK_QualityFacSamp, BGK_MaxRotRelaxFactor, BGK_PrandtlNumber, BGK_ExpectedPrandtlNumber
+USE MOD_BGK_Vars ,ONLY: BGK_Viscosity, BGK_ThermalConductivity
USE MOD_FPFlow_Vars ,ONLY: FPInitDone, FP_PrandtlNumber, FP_QualityFacSamp
USE MOD_FPFlow_Vars ,ONLY: FP_MaxRelaxFactor, FP_MaxRotRelaxFactor, FP_MeanRelaxFactor, FP_MeanRelaxFactorCounter
USE MOD_part_tools ,ONLY: GetParticleWeight
@@ -469,7 +473,7 @@ SUBROUTINE BGK_quadtree_adapt(iElem)
IF(DSMC%CalcQualityFactors) THEN
IF(BGKInitDone) THEN
BGK_MeanRelaxFactorCounter = 0; BGK_MeanRelaxFactor = 0.; BGK_MaxRelaxFactor = 0.; BGK_MaxRotRelaxFactor = 0.
- BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.
+ BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.; BGK_Viscosity=0.; BGK_ThermalConductivity=0.
END IF
IF(FPInitDone) THEN
FP_MeanRelaxFactorCounter = 0; FP_MeanRelaxFactor = 0.; FP_MaxRelaxFactor = 0.; FP_MaxRotRelaxFactor = 0.; FP_PrandtlNumber = 0.
@@ -596,6 +600,8 @@ SUBROUTINE BGK_quadtree_adapt(iElem)
BGK_QualityFacSamp(5,iElem) = BGK_QualityFacSamp(5,iElem) + BGK_MaxRotRelaxFactor
BGK_QualityFacSamp(6,iElem) = BGK_QualityFacSamp(6,iElem) + BGK_PrandtlNumber
BGK_QualityFacSamp(7,iElem) = BGK_QualityFacSamp(7,iElem) + BGK_ExpectedPrandtlNumber
+ BGK_QualityFacSamp(8,iElem) = BGK_QualityFacSamp(8,iElem) + BGK_Viscosity
+ BGK_QualityFacSamp(9,iElem) = BGK_QualityFacSamp(9,iElem) + BGK_ThermalConductivity
END IF
IF(FPInitDone) THEN
FP_QualityFacSamp(1,iElem) = FP_QualityFacSamp(1,iElem) + FP_MeanRelaxFactor
diff --git a/src/particles/bgk/bgk_colloperator.f90 b/src/particles/bgk/bgk_colloperator.f90
index a5ff618e2..b431646de 100644
--- a/src/particles/bgk/bgk_colloperator.f90
+++ b/src/particles/bgk/bgk_colloperator.f90
@@ -29,7 +29,7 @@ MODULE MOD_BGK_CollOperator
!-----------------------------------------------------------------------------------------------------------------------------------
! Private Part ---------------------------------------------------------------------------------------------------------------------
! Public Part ----------------------------------------------------------------------------------------------------------------------
-PUBLIC :: BGK_CollisionOperator, ARShakhov, CalcTEquiPoly, CalcTEqui
+PUBLIC :: BGK_CollisionOperator, ARShakhov
!===================================================================================================================================
CONTAINS
@@ -56,7 +56,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
USE MOD_TimeDisc_Vars ,ONLY: dt
USE MOD_BGK_Vars ,ONLY: SpecBGK, BGKDoVibRelaxation, BGKMovingAverage
USE MOD_BGK_Vars ,ONLY: BGK_MeanRelaxFactor, BGK_MeanRelaxFactorCounter, BGK_MaxRelaxFactor, BGK_MaxRotRelaxFactor
-USE MOD_BGK_Vars ,ONLY: BGK_PrandtlNumber
+USE MOD_BGK_Vars ,ONLY: BGK_PrandtlNumber, BGK_Viscosity, BGK_ThermalConductivity
USE MOD_part_tools ,ONLY: GetParticleWeight
#ifdef CODE_ANALYZE
USE MOD_Globals ,ONLY: abort,unit_stdout,myrank
@@ -74,12 +74,13 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL :: vBulk(3), u0ij(3,3), u2, V_rel(3), dtCell
-REAL :: alpha, CellTemp, dens, InnerDOF, NewEn, OldEn, Prandtl, relaxfreq, TEqui
+REAL :: alpha, alphaRot(nSpecies), CellTemp, dens, InnerDOF, NewEn, OldEn, Prandtl, relaxfreq
+REAL :: dynamicvis, thermalcond
INTEGER, ALLOCATABLE :: iPartIndx_NodeRelax(:),iPartIndx_NodeRelaxTemp(:),iPartIndx_NodeRelaxRot(:),iPartIndx_NodeRelaxVib(:)
-INTEGER :: iLoop, iPart, nRelax, iPolyatMole, nXiVibDOF
-REAL, ALLOCATABLE :: Xi_vib_DOF(:), VibEnergyDOF(:,:)
+INTEGER :: iLoop, iPart, nRelax, nXiVibDOF
+REAL, ALLOCATABLE :: Xi_vib_DOF(:,:), VibEnergyDOF(:,:)
INTEGER :: iSpec, nSpec(nSpecies), jSpec, nRotRelax, nVibRelax
-REAL :: OldEnRot, NewEnRot, NewEnVib
+REAL :: OldEnRot, NewEnRot(nSpecies), NewEnVib(nSpecies)
REAL :: TotalMass, u2Spec(nSpecies), u2i(3), vBulkAll(3)
REAL :: SpecTemp(nSpecies)
#ifdef CODE_ANALYZE
@@ -88,11 +89,13 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
REAL,PARAMETER :: RelMomTol=1e-6 ! Relative tolerance applied to conservation of momentum before/after reaction
REAL,PARAMETER :: RelEneTol=1e-12 ! Relative tolerance applied to conservation of energy before/after reaction
#endif /* CODE_ANALYZE */
-REAL :: totalWeightSpec(nSpecies), totalWeight, partWeight, CellTemptmp
-REAL :: EVibSpec(nSpecies), ERotSpec(nSpecies), Xi_VibSpec(nSpecies), Xi_RotSpec(nSpecies),Xi_Vib_oldSpec(nSpecies)
-REAL :: TVibSpec(nSpecies), TRotSpec(nSpecies), RotExpSpec(nSpecies), VibExpSpec(nSpecies)
-REAL :: collisionfreqSpec(nSpecies),rotrelaxfreqSpec(nSpecies), vibrelaxfreqSpec(nSpecies), Xi_RotTotal
-INTEGER :: nVibRelaxSpec(nSpecies), nRotRelaxSpec(nSpecies)
+REAL :: totalWeightSpec(nSpecies), totalWeight, totalWeight2, partWeight, CellTemptmp, MassIC_Mixture
+REAL :: EVibSpec(nSpecies), Xi_VibSpec(nSpecies), Xi_VibSpecNew(nSpecies)
+REAL :: ERotSpec(nSpecies), Xi_RotSpec(nSpecies), Xi_RotTotal
+REAL :: CellTempRel, TEqui
+REAL :: TVibSpec(nSpecies), TRotSpec(nSpecies), VibRelaxWeightSpec(nSpecies), RotRelaxWeightSpec(nSpecies)
+REAL :: collisionfreqSpec(nSpecies), rotrelaxfreqSpec(nSpecies), vibrelaxfreqSpec(nSpecies)
+REAL :: betaR(nSpecies), betaV(nSpecies)
!===================================================================================================================================
#ifdef CODE_ANALYZE
! Momentum and energy conservation check: summing up old values
@@ -104,6 +107,7 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
Momentum_old(1:3) = Momentum_old(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight
Energy_old = Energy_old + DOTPRODUCT(PartState(4:6,iPart))*0.5*Species(iSpec)%MassIC*partWeight
IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ ! Add internal energies (vibration, rotation) for molecules and molecular ions
Energy_old = Energy_old + (PartStateIntEn(1,iPart) + PartStateIntEn(2,iPart))*partWeight
END IF
END DO
@@ -112,9 +116,10 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
IF(nPart.LE.2) RETURN
! 1.) Moment calculation: Summing up the relative velocities and their squares
-CALL CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, totalWeightSpec, TotalMass, u2, u2Spec, u0ij, &
+CALL CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, totalWeight2, totalWeightSpec, TotalMass, u2, u2Spec, u0ij, &
u2i, OldEn, EVibSpec, ERotSpec, CellTemp, SpecTemp, dtCell)
-IF((CellTemp.LE.0).OR.(MAXVAL(nSpec(:)).EQ.1).OR.(totalWeight.LE.0.0)) RETURN
+
+IF((CellTemp.LE.0.0).OR.(MAXVAL(nSpec(:)).EQ.1).OR.(totalWeight.LE.0.0)) RETURN
IF(UseVarTimeStep) THEN
dtCell = dt * dtCell / totalWeight
@@ -126,41 +131,31 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
! totalWeight contains the weighted particle number
dens = totalWeight / NodeVolume
ELSE
+ ! MPF is the same for all species
dens = totalWeight * Species(1)%MacroParticleFactor / NodeVolume
END IF
IF (BGKMovingAverage) THEN
CALL DoAveraging(dens, u2, u0ij, u2i, CellTemp, AveragingValues)
END IF
-! Calculation of the rotational and vibrational degrees of freedom for molecules
-nXiVibDOF=0 ! Initialize
-IF (nSpecies.EQ.1) THEN
- IF((SpecDSMC(1)%InterID.EQ.2).OR.(SpecDSMC(1)%InterID.EQ.20)) THEN
- IF(SpecDSMC(1)%PolyatomicMol) THEN
- iPolyatMole = SpecDSMC(1)%SpecToPolyArray
- nXiVibDOF = PolyatomMolDSMC(iPolyatMole)%VibDOF
- ALLOCATE(Xi_vib_DOF(nXiVibDOF))
- Xi_vib_DOF(:) = 0.
- END IF
- END IF
-END IF
-CALL CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, TRotSpec, InnerDOF, Xi_VibSpec, Xi_Vib_oldSpec &
- ,Xi_RotSpec)
+CALL CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, TRotSpec, InnerDOF, Xi_VibSpec, Xi_RotSpec)
! 2.) Calculation of the relaxation frequency of the distribution function towards the target distribution function
-CALL CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight, TotalMass, u2Spec, u0ij, u2, SpecTemp, CellTemp, &
- Xi_VibSpec, Xi_RotSpec, Prandtl, relaxfreq)
+CALL CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight, TotalMass, u2Spec, SpecTemp, CellTemp, Xi_VibSpec, &
+ Xi_RotSpec, Prandtl, relaxfreq, dynamicvis, thermalcond, MassIC_Mixture)
IF(DSMC%CalcQualityFactors) THEN
BGK_MeanRelaxFactor = BGK_MeanRelaxFactor + relaxfreq * dtCell
BGK_MeanRelaxFactorCounter = BGK_MeanRelaxFactorCounter + 1
BGK_MaxRelaxFactor = MAX(BGK_MaxRelaxFactor,relaxfreq*dtCell)
BGK_PrandtlNumber = BGK_PrandtlNumber + Prandtl
+ BGK_Viscosity = BGK_Viscosity + dynamicvis
+ BGK_ThermalConductivity = BGK_ThermalConductivity + thermalcond
END IF
! 3.) Treatment of molecules: determination of the rotational and vibrational relaxation frequency using the collision frequency,
-! which is not the same as the relaxation frequency of distribution function, calculated above.
+! which is not the same as the relaxation frequency of distribution function, calculated above
IF(ANY(SpecDSMC(:)%InterID.EQ.2).OR.ANY(SpecDSMC(:)%InterID.EQ.20)) THEN
collisionfreqSpec = 0.0
DO iSpec = 1, nSpecies
@@ -170,79 +165,117 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
ELSE
CellTemptmp = CellTemp
END IF
- collisionfreqSpec(iSpec) = collisionfreqSpec(iSpec) + SpecBGK(iSpec)%CollFreqPreFactor(jSpec) * totalWeightSpec(iSpec)*totalWeightSpec(jSpec) &
- *Dens *CellTemptmp**(-CollInf%omega(iSpec,jSpec) +0.5) /(totalWeight*totalWeight)
+ ! Sum up collision frequencies of species i with itself and the other species
+ ! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 87f
+ ! For SpecBGK(iSpec)%CollFreqPreFactor(jSpec) see bgk_init.f90
+ ! VHS according to M. Pfeiffer, "Extending the particle ellipsoidal statistical Bhatnagar-Gross-Krook method to diatomic
+ ! molecules including quantized vibrational energies", Phys. Fluids 30, 116103 (2018), Eq. (18)
+ collisionfreqSpec(iSpec) = collisionfreqSpec(iSpec) + SpecBGK(iSpec)%CollFreqPreFactor(jSpec) * totalWeightSpec(jSpec) &
+ * (Dens / totalWeight) *CellTemptmp**(-CollInf%omega(iSpec,jSpec) +0.5)
END DO
END DO
+ ! Calculate relaxation frequencies of rotation and vibration with relaxation properties
+ ! M. Pfeiffer, "Extending the particle ellipsoidal statistical Bhatnagar-Gross-Krook method to diatomic molecules including
+ ! quantized vibrational energies", Phys. Fluids 30, 116103 (2018)
+ ! N.E. Gimelshein et. al, "Vibrational relaxation rates in the direct simulation Monte Carlo method", Phys. Fluids 14, 4452 (2018)
+ ! relaxfreqSpec = collisionfreqSpec / collision number Z with RelaxProb = 1/Z
rotrelaxfreqSpec(:) = collisionfreqSpec(:) * DSMC%RotRelaxProb
vibrelaxfreqSpec(:) = collisionfreqSpec(:) * DSMC%VibRelaxProb
- RotExpSpec=0.; VibExpSpec=0.
-
- IF(SpecDSMC(1)%PolyatomicMol) THEN
- CALL CalcTEquiPoly(nPart, CellTemp, TRotSpec(1), TVibSpec(1), nXiVibDOF, Xi_vib_DOF, Xi_Vib_oldSpec(1), RotExpSpec(1), VibExpSpec(1), &
- TEqui, rotrelaxfreqSpec(1), vibrelaxfreqSpec(1), dtCell)
- Xi_VibSpec(1) = SUM(Xi_vib_DOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))
- ELSE
- CALL CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec, Xi_Vib_oldSpec, RotExpSpec, VibExpSpec, &
- TEqui, rotrelaxfreqSpec, vibrelaxfreqSpec, dtCell)
- END IF
+
IF(DSMC%CalcQualityFactors) THEN
BGK_MaxRotRelaxFactor = MAX(BGK_MaxRotRelaxFactor,MAXVAL(rotrelaxfreqSpec(:))*dtCell)
END IF
END IF
-! 4.) Determine the number of particles undergoing a relaxation (including vibration and rotation)
+! 4.) Determine the relaxation temperatures and the number of particles undergoing a relaxation (including vibration + rotation)
ALLOCATE(iPartIndx_NodeRelax(nPart), iPartIndx_NodeRelaxTemp(nPart))
iPartIndx_NodeRelax = 0; iPartIndx_NodeRelaxTemp = 0
ALLOCATE(iPartIndx_NodeRelaxRot(nPart),iPartIndx_NodeRelaxVib(nPart))
iPartIndx_NodeRelaxRot = 0; iPartIndx_NodeRelaxVib = 0
-CALL DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, RotExpSpec, VibExpSpec, nRelax, nRotRelax, nVibRelax, &
- nRotRelaxSpec, nVibRelaxSpec, iPartIndx_NodeRelax, iPartIndx_NodeRelaxTemp, iPartIndx_NodeRelaxRot, &
- iPartIndx_NodeRelaxVib, vBulk, OldEnRot, OldEn)
-IF ((nRelax.EQ.0).AND.(nRotRelax.EQ.0).AND.(nVibRelax.EQ.0)) RETURN
+! Allocate Xi_vib_DOF
+IF(BGKDoVibRelaxation) THEN
+ IF(DSMC%NumPolyatomMolecs.GT.0) THEN
+ nXiVibDOF = MAXVAL(PolyatomMolDSMC(:)%VibDOF)
+ ALLOCATE(Xi_vib_DOF(DSMC%NumPolyatomMolecs,nXiVibDOF))
+ END IF
+END IF
+
+CALL CalcTRelax(ERotSpec, Xi_RotSpec, Xi_VibSpec, EVibSpec, totalWeightSpec, totalWeight, totalWeight2, dtCell, CellTemp, &
+ TRotSpec, TVibSpec, relaxfreq, rotrelaxfreqSpec, vibrelaxfreqSpec, Xi_VibSpecNew, Xi_vib_DOF, nXiVibDOF, CellTempRel, TEqui, &
+ betaR, betaV)
+
+CALL DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, nRelax, nRotRelax, nVibRelax, &
+ RotRelaxWeightSpec, VibRelaxWeightSpec, iPartIndx_NodeRelax, iPartIndx_NodeRelaxTemp, iPartIndx_NodeRelaxRot, &
+ iPartIndx_NodeRelaxVib, vBulk, OldEnRot, OldEn, rotrelaxfreqSpec, vibrelaxfreqSpec, betaR, betaV)
+! Allocate VibEnergyDOF
IF(BGKDoVibRelaxation) THEN
- IF(SpecDSMC(1)%PolyatomicMol) THEN
- ALLOCATE(VibEnergyDOF(nVibRelax,PolyatomMolDSMC(iPolyatMole)%VibDOF))
- END IF
+ IF(DSMC%NumPolyatomMolecs.GT.0) THEN
+ ALLOCATE(VibEnergyDOF(nVibRelax,nXiVibDOF))
+ VibEnergyDOF = 0.0
+ END IF
+END IF
+
+! Return if no particles are undergoing a relaxation
+IF ((nRelax.EQ.0).AND.(nRotRelax.EQ.0).AND.(nVibRelax.EQ.0)) RETURN
+
+! 5.) Determine the new rotational and vibrational states of molecules undergoing a relaxation
+IF(ANY(SpecDSMC(:)%InterID.EQ.2).OR.ANY(SpecDSMC(:)%InterID.EQ.20)) THEN
+ CALL RelaxInnerEnergy(nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib, iPartIndx_NodeRelaxRot, nXiVibDOF, Xi_vib_DOF, &
+ Xi_VibSpecNew, Xi_RotSpec, VibEnergyDOF, TEqui, NewEnVib, NewEnRot)
END IF
-! 5.) Determine the new rotational and vibrational state of molecules undergoing a relaxation
-CALL RelaxInnerEnergy(nPart, nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib, iPartIndx_NodeRelaxRot, nXiVibDOF, Xi_vib_DOF, Xi_VibSpec, &
- Xi_RotSpec , TEqui, VibEnergyDOF, NewEnVib, NewEnRot)
! 6.) Sample new particle velocities from the target distribution function, depending on the chosen model
-CALL SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij, u2i, vBulkAll, CellTemp, vBulk)
+CALL SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij, u2i, vBulkAll, CellTempRel, CellTemp, vBulk, &
+ MassIC_Mixture)
NewEn = 0.
+
+! Calculation of the new bulk velocity
vBulk = vBulk/TotalMass
+
+! Loop over all relaxing particles for calculation of the new energy
DO iLoop = 1, nRelax
iPart = iPartIndx_NodeRelax(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
+ ! Thermal velocity of all relaxing particles
V_rel(1:3) = PartState(4:6,iPart) - vBulk(1:3)
+ ! Sum up kinetic energies
NewEn = NewEn + (V_rel(1)**(2.) + V_rel(2)**(2.) + V_rel(3)**(2.))*0.5*Species(iSpec)%MassIC*partWeight
END DO
+! Loop over all non-relaxing particles for calculation of the new energy
DO iLoop = 1, nPart-nRelax
iPart = iPartIndx_NodeRelaxTemp(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
+ ! Thermal velocity of all non-relaxing particles
V_rel(1:3) = PartState(4:6,iPart) - vBulk(1:3)
+ ! Sum up kinetic energies
NewEn = NewEn + (V_rel(1)**(2.) + V_rel(2)**(2.) + V_rel(3)**(2.))*0.5*Species(iSpec)%MassIC*partWeight
END DO
! 7.) Vibrational energy of the molecules: Ensure energy conservation by scaling the new vibrational states with the factor alpha
IF(ANY(SpecDSMC(:)%InterID.EQ.2).OR.ANY(SpecDSMC(:)%InterID.EQ.20)) THEN
- CALL EnergyConsVib(nPart, nVibRelax, nVibRelaxSpec, iPartIndx_NodeRelaxVib, NewEnVib, OldEn, nXiVibDOF, Xi_VibSpec, VibEnergyDOF, TEqui)
+ CALL EnergyConsVib(nPart, totalWeight, nVibRelax, VibRelaxWeightSpec, iPartIndx_NodeRelaxVib, NewEnVib, OldEn, nXiVibDOF, &
+ VibEnergyDOF, Xi_VibSpecNew, TEqui)
END IF
+! Remaining vibrational + translational energy + old rotational energy for translation and rotation
OldEn = OldEn + OldEnRot
-! 8.) Determine the new particle state and ensure energy conservation by scaling the new velocities with the factor alpha.
Xi_RotTotal = 0.0
DO iSpec = 1, nSpecies
- Xi_RotTotal = Xi_RotTotal + Xi_RotSpec(iSpec)*nRotRelaxSpec(iSpec)
+ ! Sum of relaxing rotational degrees of freedom
+ Xi_RotTotal = Xi_RotTotal + Xi_RotSpec(iSpec)*RotRelaxWeightSpec(iSpec)
END DO
-alpha = SQRT(OldEn/NewEn*(3.*(nPart-1.))/(Xi_RotTotal+3.*(nPart-1.)))
+
+! 8.) Determine the new particle state and ensure energy conservation by scaling the new velocities with the factor alpha
+! Calculation of scaling factor alpha
+alpha = SQRT(OldEn/NewEn*(3.*(totalWeight-1.))/(Xi_RotTotal+3.*(totalWeight-1.)))
+! Calculation of the final particle velocities with vBulkAll (average flow velocity before relaxation), scaling factor alpha,
+! the particle velocity PartState(4:6,iPart) after the relaxation but before the energy conservation and vBulk (average value of
+! the latter)
DO iLoop = 1, nRelax
iPart = iPartIndx_NodeRelax(iLoop)
PartState(4:6,iPart) = vBulkAll(1:3) + alpha*(PartState(4:6,iPart)-vBulk(1:3))
@@ -263,10 +296,20 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
END IF
! 9.) Rotation: Scale the new rotational state of the molecules to ensure energy conservation
-IF ( (nRotRelax.GT.0)) alpha = OldEn/NewEnRot*(Xi_RotTotal/(Xi_RotTotal+3.*(nPart-1.)))
+DO iSpec = 1, nSpecies
+ ! Calculate scaling factor alpha per species, see F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal
+ ! statistical Bhatnagar-Gross-Krook method including internal degrees of freedom", subitted to Phys. Fluids, August 2023
+ IF (NewEnRot(iSpec).GT.0.0) THEN
+ alphaRot(iSpec) = OldEn/NewEnRot(iSpec)*(Xi_RotSpec(iSpec)*RotRelaxWeightSpec(iSpec)/(Xi_RotTotal+3.*(totalWeight-1.)))
+ ELSE
+ alphaRot(iSpec) = 0.0
+ END IF
+END DO
DO iLoop = 1, nRotRelax
iPart = iPartIndx_NodeRelaxRot(iLoop)
- PartStateIntEn( 2,iPart) = alpha*PartStateIntEn( 2,iPart)
+ iSpec = PartSpecies(iPart)
+ ! Scaling of rotational energy with factor alpha
+ PartStateIntEn( 2,iPart) = alphaRot(iSpec)*PartStateIntEn( 2,iPart)
END DO
! CODE ANALYZE: Compare the old momentum and energy of the cell with the new, abort if relative difference is above the limits
@@ -324,8 +367,9 @@ SUBROUTINE BGK_CollisionOperator(iPartIndx_Node, nPart, NodeVolume, AveragingVal
END SUBROUTINE BGK_CollisionOperator
-SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, totalWeightSpec, TotalMass, u2, u2Spec, &
- u0ij, u2i, OldEn, EVibSpec, ERotSpec, CellTemp, SpecTemp, dtCell)
+
+SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, totalWeight2, totalWeightSpec, TotalMass, u2, u2Spec, &
+ u0ij, u2i, OldEn, EVibSpec, ERotSpec, CellTemp, SpecTemp, dtCell)
!===================================================================================================================================
!> Moment calculation: Summing up the relative velocities and their squares
!===================================================================================================================================
@@ -335,6 +379,7 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota
USE MOD_BGK_Vars ,ONLY: BGKDoVibRelaxation, BGKCollModel
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
+USE MOD_Globals ,ONLY: DOTPRODUCT
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -345,14 +390,16 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota
INTEGER, INTENT(OUT) :: nSpec(nSpecies)
REAL, INTENT(OUT) :: u2Spec(nSpecies),u0ij(3,3), OldEn, EVibSpec(nSpecies), ERotSpec(nSpecies), u2i(3), u2
REAL, INTENT(OUT) :: CellTemp, SpecTemp(nSpecies), totalWeightSpec(nSpecies)
-REAL, INTENT(OUT) :: vBulkAll(3), totalWeight, TotalMass, dtCell
+REAL, INTENT(OUT) :: vBulkAll(3), totalWeight, totalWeight2, TotalMass, dtCell
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iLoop, iPart, iSpec, fillMa1, fillMa2
-REAL :: V_rel(1:3), vmag2, partWeight, EnerTotal, totalWeightSpec2(nSpecies), vBulkSpec(3,nSpecies)
-REAL :: tempweight, tempweight2, tempmass, vBulkTemp(3), totalWeight2, totalWeight3
+REAL :: V_rel(1:3), vmag2, EnerTotal, ThermEner, totalWeightSpec2(nSpecies), vBulkSpec(3,nSpecies)
+REAL :: partWeight, tempweight, tempweight2, tempmass, vBulkTemp(3), totalWeight3
+LOGICAL :: validSpec(nSpecies)
!===================================================================================================================================
totalWeightSpec = 0.0; totalWeightSpec2=0.0; vBulkAll=0.0; TotalMass=0.0; vBulkSpec=0.0; nSpec=0; dtCell=0.0
+! Loop over all simulation particles to sum up particle velocities to calculate bulk velocities
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
partWeight = GetParticleWeight(iPart)
@@ -362,31 +409,36 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota
vBulkAll(1:3) = vBulkAll(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight
TotalMass = TotalMass + Species(iSpec)%MassIC*partWeight
vBulkSpec(1:3,iSpec) = vBulkSpec(1:3,iSpec) + PartState(4:6,iPart)*partWeight
- nSpec(iSpec) = nSpec(iSpec) + 1
+ nSpec(iSpec) = nSpec(iSpec) + 1 ! Count number of simulation particles per species
IF(UseVarTimeStep) THEN
dtCell = dtCell + PartTimeStep(iPart)*partWeight
END IF
END DO
totalWeight = SUM(totalWeightSpec)
totalWeight2 = SUM(totalWeightSpec2)
-IF ((MAXVAL(nSpec(:)).EQ.1).OR.(totalWeight.LE.0.0)) RETURN
+
+! Calculate total bulk velocity and bulk velocities per species
vBulkAll(1:3) = vBulkAll(1:3) / TotalMass
DO iSpec = 1, nSpecies
- IF (nSpec(iSpec).GT.0) vBulkSpec(:,iSpec) = vBulkSpec(:,iSpec) /totalWeightSpec(iSpec)
+ IF (nSpec(iSpec).GT.0) vBulkSpec(:,iSpec) = vBulkSpec(:,iSpec) / totalWeightSpec(iSpec)
END DO
totalWeight3 = 0.; u2Spec=0.0; u0ij=0.0; u2i=0.0; OldEn=0.0; EVibSpec=0.0; ERotSpec=0.0
+! Loop over all simulation particles to sum up relative velocities
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
partWeight = GetParticleWeight(iPart)
iSpec = PartSpecies(iPart)
+ ! Calculate thermal velocity with bulk velocity of the species
V_rel(1:3)=PartState(4:6,iPart)-vBulkSpec(1:3,iSpec)
vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
+ ! Summing up thermal velocities (squared) of all particles per species
u2Spec(iSpec) = u2Spec(iSpec) + vmag2*partWeight
+ ! Calculate thermal velocity with bulk velocity of the gas
V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3)
vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
- IF (BGKCollModel.EQ.1) THEN
+ IF (BGKCollModel.EQ.1) THEN ! ESBGK
DO fillMa1 =1, 3
DO fillMa2 =fillMa1, 3
u0ij(fillMa1, fillMa2)= u0ij(fillMa1, fillMa2) &
@@ -394,34 +446,48 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota
END DO
END DO
END IF
- IF (BGKCollModel.EQ.2) THEN
+ IF (BGKCollModel.EQ.2) THEN ! Shakhov
u2i(1:3) = u2i(1:3) + V_rel(1:3)*vmag2 * partWeight*Species(iSpec)%MassIC
totalWeight3 = totalWeight3 + partWeight*partWeight*partWeight
END IF
+
+ ! Sum up old energy of thermal velocities and sum up internal energies --> E_T
OldEn = OldEn + 0.5*Species(iSpec)%MassIC * vmag2*partWeight
IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
IF(BGKDoVibRelaxation) THEN
+ ! EVib without zero-point energy
EVibSpec(iSpec) = EVibSpec(iSpec) + (PartStateIntEn(1,iPart) - SpecDSMC(iSpec)%EZeroPoint) * partWeight
END IF
ERotSpec(iSpec) = ERotSpec(iSpec) + PartStateIntEn(2,iPart) * partWeight
END IF
END DO
-u0ij = u0ij* totalWeight / (TotalMass*(totalWeight - totalWeight2/totalWeight))
-IF (BGKCollModel.EQ.2) THEN
+IF (BGKCollModel.EQ.1) THEN ! ESBGK
+ ! Pressure tensor
+ u0ij = u0ij* totalWeight / (TotalMass*(totalWeight - totalWeight2/totalWeight))
+END IF
+IF (BGKCollModel.EQ.2) THEN ! Shakhov
+ ! Heatflux
u2i = u2i*totalWeight**3/(TotalMass*(totalWeight**3-3.*totalWeight*totalWeight2+2.*totalWeight3))
END IF
-IF (nSpecies.GT.1) THEN
+! Calculation of cell temperature and bulk velocity (squared)
+IF (nSpecies.GT.1) THEN ! mixture
+ validSpec = .FALSE.
SpecTemp = 0.0
EnerTotal = 0.0
tempweight = 0.0; tempweight2 = 0.0; tempmass = 0.0; vBulkTemp = 0.0
DO iSpec = 1, nSpecies
+ ! At least two particles and non-zero squared thermal velocity needed for a valid species
IF ((nSpec(iSpec).GE.2).AND.(.NOT.ALMOSTZERO(u2Spec(iSpec)))) THEN
+ validSpec = .TRUE.
+ ! Calculation of the species temperature --> translational temperatures of the different species
SpecTemp(iSpec) = Species(iSpec)%MassIC * u2Spec(iSpec) &
/(3.0*BoltzmannConst*(totalWeightSpec(iSpec) - totalWeightSpec2(iSpec)/totalWeightSpec(iSpec)))
+ ! Thermal energy
EnerTotal = EnerTotal + 3./2.*BoltzmannConst*SpecTemp(iSpec) * totalWeightSpec(iSpec)
- vmag2 = vBulkSpec(1,iSpec)**(2.) + vBulkSpec(2,iSpec)**(2.) + vBulkSpec(3,iSpec)**(2.)
+ vmag2 = DOTPRODUCT(vBulkSpec(1:3,iSpec))
+ ! Add kinetic energy
EnerTotal = EnerTotal + totalWeightSpec(iSpec) * Species(iSpec)%MassIC / 2. * vmag2
tempweight = tempweight + totalWeightSpec(iSpec)
tempweight2 = tempweight2 + totalWeightSpec2(iSpec)
@@ -429,22 +495,31 @@ SUBROUTINE CalcMoments(nPart, iPartIndx_Node, nSpec, vBulkAll, totalWeight, tota
vBulkTemp(1:3) = vBulkTemp(1:3) + vBulkSpec(1:3,iSpec)*totalWeightSpec(iSpec) * Species(iSpec)%MassIC
END IF
END DO
-
- vBulkTemp(1:3) = vBulkTemp(1:3) / tempmass
- vmag2 = vBulkTemp(1)*vBulkTemp(1) + vBulkTemp(2)*vBulkTemp(2) + vBulkTemp(3)*vBulkTemp(3)
- EnerTotal = EnerTotal - tempmass / 2. * vmag2
- CellTemp = 2. * EnerTotal / (3.*tempweight*BoltzmannConst)
- u2 = 3. * CellTemp * BoltzmannConst * (tempweight - tempweight2/tempweight) / tempmass
-ELSE
+ IF (ANY(validSpec)) THEN
+ vBulkTemp(1:3) = vBulkTemp(1:3) / tempmass
+ ! Squared bulk velocity of the mixture
+ vmag2 = DOTPRODUCT(vBulkTemp(1:3))
+ ! EnerTotal = kinetic energy (tempmass / 2. * vmag2) + thermal energy (3. * tempweight * BoltzmannConst * CellTemp / 2)
+ ThermEner = EnerTotal - tempmass / 2. * vmag2
+ ! Calculation of the cell temperature from the thermal energy --> translational temperature of the mixture
+ CellTemp = 2. * ThermEner / (3.*tempweight*BoltzmannConst)
+ ! Mean squared thermal velocity c^2 of a particle, calculated with the cell temperature and the density-averaged mass
+ u2 = 3. * CellTemp * BoltzmannConst * (tempweight - tempweight2/tempweight) / tempmass
+ ELSE ! only one part per species or cloned species with u2spec = 0 because PartState(4:6) = vBulkAll
+ u2 = OldEn / (TotalMass*(1. - totalWeight2/totalWeight**2)) * 2. ! variance-free
+ CellTemp = TotalMass/totalWeight * u2 / (3.0*BoltzmannConst)
+ END IF
+ELSE ! single species gas
u2 = u2Spec(1) / (totalWeight - totalWeight2/totalWeight)
CellTemp = Species(1)%MassIC * u2 / (3.0*BoltzmannConst)
END IF
END SUBROUTINE CalcMoments
+
SUBROUTINE DoAveraging(dens, u2, u0ij, u2i, CellTemp, AverageValues)
!===================================================================================================================================
-!> Moment calculation: Summing up the relative velocities and their squares
+!> BGK moving average
!===================================================================================================================================
! MODULES
USE MOD_Particle_Vars ,ONLY: Species
@@ -505,18 +580,18 @@ SUBROUTINE DoAveraging(dens, u2, u0ij, u2i, CellTemp, AverageValues)
dens = AverageValues(1)
u2 = AverageValues(2)
END IF
- CellTemp = Species(1)%MassIC * u2 / (3.0*BoltzmannConst)
+CellTemp = Species(1)%MassIC * u2 / (3.0*BoltzmannConst)
END SUBROUTINE DoAveraging
-SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, TRotSpec, InnerDOF, Xi_VibSpec, Xi_Vib_oldSpec &
- ,Xi_RotSpec)
+
+SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, TRotSpec, InnerDOF, Xi_VibSpec, Xi_RotSpec)
!===================================================================================================================================
!> Determine the internal degrees of freedom and the respective temperature (rotation/vibration) for diatomic/polyatomic species
!===================================================================================================================================
! MODULES
USE MOD_Particle_Vars ,ONLY: nSpecies
-USE MOD_DSMC_Vars ,ONLY: SpecDSMC, PolyatomMolDSMC
+USE MOD_DSMC_Vars ,ONLY: SpecDSMC
USE MOD_BGK_Vars ,ONLY: BGKDoVibRelaxation
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
USE MOD_Particle_Analyze_Tools ,ONLY: CalcTVibPoly
@@ -528,41 +603,34 @@ SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, T
REAL, INTENT(IN) :: EVibSpec(nSpecies), ERotSpec(nSpecies), totalWeightSpec(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: TVibSpec(nSpecies), TRotSpec(nSpecies), InnerDOF, Xi_VibSpec(nSpecies), Xi_Vib_oldSpec(nSpecies)
+REAL, INTENT(OUT) :: TVibSpec(nSpecies), TRotSpec(nSpecies), InnerDOF, Xi_VibSpec(nSpecies)
REAL, INTENT(OUT) :: Xi_RotSpec(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iPolyatMole, iSpec, iDOF
-REAL :: exparg
+INTEGER :: iSpec
!===================================================================================================================================
-Xi_VibSpec=0.; InnerDOF=0.; Xi_RotSpec=0.; Xi_Vib_oldSpec=0.; TVibSpec=0.; TRotSpec=0.
+Xi_VibSpec=0.; InnerDOF=0.; Xi_RotSpec=0.; TVibSpec=0.; TRotSpec=0.
DO iSpec = 1, nSpecies
IF (nSpec(iSpec).EQ.0) CYCLE
+ ! Only for molecules
IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
IF(BGKDoVibRelaxation) THEN
- IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
- iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
- TVibSpec(iSpec) = CalcTVibPoly(EVibSpec(iSpec)/totalWeightSpec(iSpec), 1)
- IF (TVibSpec(iSpec).GT.0.0) THEN
- DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
- exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TVibSpec(iSpec)
- IF(CHECKEXP(exparg))THEN
- Xi_VibSpec(iSpec) = Xi_VibSpec(iSpec) + 2.*exparg/(EXP(exparg) - 1.)
- ELSE
- Xi_VibSpec(iSpec) = 0.
- END IF ! CHECKEXP(exparg)
- END DO
- END IF
- ELSE
- TVibSpec(iSpec)=EVibSpec(iSpec) / (totalWeightSpec(iSpec)*BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)
- IF (TVibSpec(iSpec).GT.0.0) THEN
- TVibSpec(iSpec)= SpecDSMC(iSpec)%CharaTVib/LOG(1. + 1./(TVibSpec(iSpec)))
- Xi_VibSpec(iSpec) = 2.* EVibSpec(iSpec) / (totalWeightSpec(iSpec)*BoltzmannConst*TVibSpec(iSpec))
- END IF
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN ! polyatomic
+ ! Calculation of the vibrational temperature (zero-point search) for polyatomic molecules
+ TVibSpec(iSpec) = CalcTVibPoly(EVibSpec(iSpec)/totalWeightSpec(iSpec) + SpecDSMC(iSpec)%EZeroPoint, iSpec)
+ ELSE ! diatomic
+ ! Calculation of vibrational temperature and DOFs from Pfeiffer, Physics of Fluids 30, 116103 (2018), "Extending the
+ ! particle ellipsoidal statistical Bhatnagar-Gross-Krook method to diatomic molecules including quantized vibrational
+ ! energies"
+ ! TVibSpec = vibrational energy without zero-point energy
+ TVibSpec(iSpec) = EVibSpec(iSpec) / (totalWeightSpec(iSpec)*BoltzmannConst*SpecDSMC(iSpec)%CharaTVib)
+ IF (TVibSpec(iSpec).GT.0.0) TVibSpec(iSpec) = SpecDSMC(iSpec)%CharaTVib/LOG(1. + 1./(TVibSpec(iSpec)))
END IF
- Xi_Vib_oldSpec(iSpec) = Xi_VibSpec(iSpec)
+ IF (TVibSpec(iSpec).GT.0.0) Xi_VibSpec(iSpec) = 2.* EVibSpec(iSpec) / (totalWeightSpec(iSpec)*BoltzmannConst*TVibSpec(iSpec))
END IF
Xi_RotSpec(iSpec) = SpecDSMC(iSpec)%Xi_Rot
+ ! Calculation of rotational temperature from Pfeiffer, Physics of Fluids 30, 116103 (2018), "Extending the particle ellipsoidal
+ ! statistical Bhatnagar-Gross-Krook method to diatomic molecules including quantized vibrational energies"
TRotSpec(iSpec) = 2.*ERotSpec(iSpec)/(Xi_RotSpec(iSpec)*totalWeightSpec(iSpec)*BoltzmannConst)
END IF
InnerDOF = InnerDOF + Xi_RotSpec(iSpec) + Xi_VibSpec(iSpec)
@@ -570,8 +638,9 @@ SUBROUTINE CalcInnerDOFs(nSpec, EVibSpec, ERotSpec, totalWeightSpec, TVibSpec, T
END SUBROUTINE CalcInnerDOFs
-SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight, TotalMass, u2Spec, u0ij, u2, SpecTemp, CellTemp, &
- Xi_VibSpec, Xi_RotSpec, Prandtl, relaxfreq)
+
+SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight, TotalMass, u2Spec, SpecTemp, CellTemp, &
+ Xi_VibSpec, Xi_RotSpec, Prandtl, relaxfreq, dynamicvis, thermalcond, MassIC_Mixture)
!===================================================================================================================================
!> Calculate the reference dynamic viscosity, Prandtl number and the resulting relaxation frequency of the distribution function
!===================================================================================================================================
@@ -586,38 +655,46 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight
! INPUT VARIABLES
INTEGER, INTENT(IN) :: nSpec(nSpecies)
REAL, INTENT(IN) :: totalWeightSpec(nSpecies), totalWeight, TotalMass, u2Spec(nSpecies), SpecTemp(nSpecies), CellTemp
-REAL, INTENT(IN) :: u0ij(3,3), u2, Xi_VibSpec(nSpecies), Xi_RotSpec(nSpecies), dens, InnerDOF
+REAL, INTENT(IN) :: Xi_VibSpec(nSpecies), Xi_RotSpec(nSpecies), dens, InnerDOF
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: Prandtl, relaxfreq
+REAL, INTENT(OUT) :: Prandtl, relaxfreq, dynamicvis, thermalcond, MassIC_Mixture
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iSpec, jSpec, INFO
-REAL :: MolarFraction(1:nSpecies), MassFraction(1:nSpecies), MassIC_Mixture
+INTEGER :: iSpec, jSpec
+REAL :: MolarFraction(1:nSpecies), DOFFraction(1:nSpecies), MassFraction(1:nSpecies)
REAL :: PrandtlCorrection, dynamicvisSpec(nSpecies), thermalcondSpec(nSpecies), Phi(nSpecies)
-REAL :: dynamicvis, thermalcond, C_P, nu, A(3,3), W(3), Theta, CellTempSpec(nSpecies+1), Work(100)
+REAL :: TotalDOFWeight, C_P, CellTempSpec(nSpecies+1)
!===================================================================================================================================
-IF (nSpecies.GT.1) THEN
+MassIC_Mixture = TotalMass / totalWeight
+thermalcond=0.
+IF (nSpecies.GT.1) THEN ! gas mixture
MolarFraction(1:nSpecies) = totalWeightSpec(1:nSpecies) / totalWeight
- MassIC_Mixture = TotalMass / totalWeight
MassFraction(1:nSpecies) = MolarFraction(1:nSpecies) * Species(1:nSpecies)%MassIC / MassIC_Mixture
+ DOFFraction(1:nSpecies) = totalWeightSpec(1:nSpecies) * (5.+Xi_RotSpec(1:nSpecies)+Xi_VibSpec(1:nSpecies))
+ TotalDOFWeight = SUM(DOFFraction)
PrandtlCorrection = 0.
C_P = 0.0
DO iSpec = 1, nSpecies
IF (nSpec(iSpec).EQ.0) CYCLE
- PrandtlCorrection = PrandtlCorrection + MolarFraction(iSpec)*MassIC_Mixture/Species(iSpec)%MassIC
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- C_P = C_P + ((5. + (Xi_VibSpec(iSpec)+Xi_RotSpec(iSpec)))/2.) * BoltzmannConst / Species(iSpec)%MassIC * MassFraction(iSpec)
- ELSE
- C_P = C_P + (5./2.) * BoltzmannConst / Species(iSpec)%MassIC * MassFraction(iSpec)
- END IF
+ ! Correction of Pr for calculation of relaxation frequency, see alpha - F. Hild, M. Pfeiffer, "Multi-species modeling in the
+ ! particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method including internal degrees of freedom", subitted to Phys.
+ ! Fluids, August 2023
+ PrandtlCorrection = PrandtlCorrection + DOFFraction(iSpec)*MassIC_Mixture/Species(iSpec)%MassIC/TotalDOFWeight
+ C_P = C_P + ((5. + (Xi_VibSpec(iSpec)+Xi_RotSpec(iSpec)))/2.) * BoltzmannConst / Species(iSpec)%MassIC * MassFraction(iSpec)
END DO
SELECT CASE(BGKMixtureModel)
+ ! Both cases are described in Pfeiffer et. al., Physics of Fluids 33, 036106 (2021),
+ ! "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method for monatomic gas species"
+ ! Extension to poyatomic mixtures according to F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal
+ ! statistical Bhatnagar-Gross-Krook method including internal degrees of freedom", subitted to Phys. Fluids, August 2023
+
CASE (1) ! Wilke's mixing rules
DO iSpec = 1, nSpecies
! Dynamic viscosity per species
+ ! Omega = OmegaVHS + 0.5
IF ((nSpec(iSpec).GE.2).AND.(.NOT.ALMOSTZERO(u2Spec(iSpec)))) THEN
! Species temperature: Sufficient number of particles per species are available
dynamicvisSpec(iSpec) = 30.*SQRT(Species(iSpec)%MassIC* BoltzmannConst*CollInf%Tref(iSpec,iSpec)/Pi) &
@@ -630,14 +707,17 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight
*CollInf%Tref(iSpec,iSpec)**(CollInf%omega(iSpec,iSpec) + 0.5)*CellTemp**(-CollInf%omega(iSpec,iSpec) - 0.5))
END IF
! Thermal conductivity per species (Eucken's formula with a correction by Hirschfelder for the internal degrees of freedom)
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN ! inner DOF
+ ! Istomin et. al., "Eucken correction in high-temperature gases with electronic excitation", J. Chem. Phys. 140,
+ ! 184311 (2014)
thermalcondspec(iSpec) = 0.25 * (15. + 2. * (Xi_VibSpec(iSpec)+Xi_RotSpec(iSpec)) * 1.328) &
* dynamicvisSpec(iSpec) * BoltzmannConst / Species(iSpec)%MassIC
- ELSE
+ ELSE ! atoms
thermalcondspec(iSpec) = 0.25 * 15. * dynamicvisSpec(iSpec) * BoltzmannConst / Species(iSpec)%MassIC
END IF
END DO
Phi= 0.0
+ ! Calculation of factor phi, depending on mass ratios and ratios of dynamic viscosities
DO iSpec = 1, nSpecies
DO jSpec = 1, nSpecies
Phi(iSpec) = Phi(iSpec) &
@@ -649,11 +729,13 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight
END DO
dynamicvis = 0.0
thermalcond = 0.0
+ ! Sum up dynamic viscosities and thermal conductivities of species
DO iSpec = 1, nSpecies
IF (nSpec(iSpec).EQ.0) CYCLE
dynamicvis = dynamicvis + REAL(totalWeightSpec(iSpec)) * dynamicvisSpec(iSpec) / Phi(iSpec)
thermalcond = thermalcond + REAL(totalWeightSpec(iSpec)) * thermalcondspec(iSpec) / Phi(iSpec)
END DO
+
CASE(2) ! Collision integrals (VHS)
DO iSpec = 1, nSpecies
IF ((nSpec(iSpec).LT.2).OR.ALMOSTZERO(u2Spec(iSpec))) THEN
@@ -663,27 +745,29 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight
END IF
END DO
CellTempSpec(nSpecies+1) = CellTemp
- CALL CalcViscosityThermalCondColIntVHS(CellTempSpec(1:nSpecies+1), MolarFraction(1:nSpecies),dens, dynamicvis, thermalcond)
+ CALL CalcViscosityThermalCondColIntVHS(CellTempSpec(1:nSpecies+1), MolarFraction(1:nSpecies),dens, Xi_RotSpec, Xi_VibSpec, &
+ dynamicvis, thermalcond)
END SELECT
+ ! Calculation of Prandtl number
Prandtl = C_P*dynamicvis/thermalcond*PrandtlCorrection
+
IF(DSMC%CalcQualityFactors) BGK_ExpectedPrandtlNumber = BGK_ExpectedPrandtlNumber + Prandtl
- A = u0ij
- CALL DSYEV('N','U',3,A,3,W,Work,100,INFO)
- Theta = u2 / 3.
- nu = 1.-1./Prandtl
- nu= MAX(nu,-Theta/(W(3)-Theta))
- Prandtl = 1./(1.-nu)
+ ! Calculation of relaxation frequency
relaxfreq = Prandtl*dens*BoltzmannConst*CellTemp/dynamicvis
-ELSE
+
+ELSE ! single species gas
+ ! Calculation of reference dynamic viscosity
dynamicvis = 30.*SQRT(Species(1)%MassIC* BoltzmannConst*CollInf%Tref(1,1)/Pi) &
/ (4.*(4.- 2.*CollInf%omega(1,1)) * (6. - 2.*CollInf%omega(1,1))* CollInf%dref(1,1)**2.)
- Prandtl =2.*(InnerDOF + 5.)/(2.*InnerDOF + 15.)
- IF (BGKCollModel.EQ.1) THEN
+ ! Calculation of Prandtl number: Pr = cp*mu/K with inner DOF, atoms: Pr = 2/3
+ Prandtl = 2.*(InnerDOF + 5.)/(2.*InnerDOF + 15.)
+ ! Calculation of relaxation frequency using the exponential ansatz of the viscosity mu
+ IF (BGKCollModel.EQ.1) THEN ! ESBGK: relaxfreq nu = Pr*n*kB*T/mu
relaxfreq = Prandtl*dens*BoltzmannConst*CollInf%Tref(1,1)**(CollInf%omega(1,1) + 0.5) &
/dynamicvis*CellTemp**(-CollInf%omega(1,1) +0.5)
- ELSE
+ ELSE ! relaxfreq nu = n*kB*T/mu
relaxfreq = dens*BoltzmannConst*CollInf%Tref(1,1)**(CollInf%omega(1,1) + 0.5) &
/dynamicvis*CellTemp**(-CollInf%omega(1,1) +0.5)
END IF
@@ -691,9 +775,252 @@ SUBROUTINE CalcGasProperties(nSpec, dens, InnerDOF, totalWeightSpec, totalWeight
END SUBROUTINE CalcGasProperties
-SUBROUTINE DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, RotExpSpec, VibExpSpec, nRelax, nRotRelax, nVibRelax, &
- nRotRelaxSpec, nVibRelaxSpec, iPartIndx_NodeRelax, iPartIndx_NodeRelaxTemp, iPartIndx_NodeRelaxRot, &
- iPartIndx_NodeRelaxVib, vBulk, OldEnRot, OldEn)
+
+SUBROUTINE CalcTRelax(ERotSpec, Xi_RotSpec, Xi_VibSpec, EVibSpec, totalWeightSpec, totalWeight, totalWeight2, dtCell, CellTemp, &
+ TRotSpec, TVibSpec, relaxfreq, rotrelaxfreqSpec, vibrelaxfreqSpec, Xi_VibSpecNew, Xi_vib_DOF, nXiVibDOF, CellTempRel, TEqui, &
+ betaR, betaV)
+!===================================================================================================================================
+!> Calculate the relaxation energies and temperatures
+!===================================================================================================================================
+! MODULES
+USE MOD_Particle_Vars ,ONLY: nSpecies
+USE MOD_DSMC_Vars ,ONLY: PolyatomMolDSMC, SpecDSMC, DSMC
+USE MOD_BGK_Vars ,ONLY: BGKDoVibRelaxation
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst
+USE MOD_Globals ,ONLY: abort
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: nXiVibDOF
+REAL, INTENT(IN) :: TRotSpec(nSpecies), ERotSpec(nSpecies), Xi_RotSpec(nSpecies)
+REAL, INTENT(IN) :: TVibSpec(nSpecies), EVibSpec(nSpecies), Xi_VibSpec(nSpecies)
+REAL, INTENT(IN) :: totalWeightSpec(nSpecies), totalWeight, totalWeight2, CellTemp, dtCell
+REAL, INTENT(IN) :: relaxfreq, rotrelaxfreqSpec(nSpecies), vibrelaxfreqSpec(nSpecies)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL, INTENT(OUT) :: Xi_vib_DOF(DSMC%NumPolyatomMolecs,nXiVibDOF), Xi_VibSpecNew(nSpecies), CellTempRel, TEqui
+REAL, INTENT(OUT) :: betaR(nSpecies), betaV(nSpecies)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iSpec, iDOF, iPolyatMole, i, j
+REAL :: RotFracSpec(nSpecies), VibFracSpec(nSpecies)
+REAL :: ERotSpecMean(nSpecies), EVibSpecMean(nSpecies), ETransRelMean
+REAL :: ERotTtransSpecMean(nSpecies), EVibTtransSpecMean(nSpecies)
+REAL :: TEqui_Old, TEqui_Old2, TEquiNum, TEquiDenom, exparg
+REAL :: eps_prec=1.0E-0
+!===================================================================================================================================
+! According to J. Mathiaud et. al., "An ES-BGK model for diatomic gases with correct relaxation rates for internal energies",
+! European Journal of Mechanics - B/Fluids, 96, pp. 65-77, 2022
+! For implentation, see F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-
+! Krook method including internal degrees of freedom", subitted to Phys. Fluids, August 2023
+
+RotFracSpec=0.0; VibFracSpec=0.0; Xi_vib_DOF=0.0; Xi_VibSpecNew=0.0; betaR=1.0; betaV=1.0
+ERotSpecMean=0.0; ERotTtransSpecMean=0.0; EVibSpecMean=0.0; EVibTtransSpecMean=0.0; ETransRelMean=0.0; CellTempRel=0.0
+
+DO iSpec = 1, nSpecies
+ IF(totalWeightSpec(iSpec).GT.0.) THEN
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN ! molecules
+ ! Mean rotational energy per particle of a species
+ ERotSpecMean(iSpec) = ERotSpec(iSpec)/totalWeightSpec(iSpec)
+ ! Mean rotational energy per particle of a species for the mixture translational temperature, ERot(Ttrans)
+ ERotTtransSpecMean(iSpec) = CellTemp * Xi_RotSpec(iSpec) * BoltzmannConst / 2.
+ ! Calculate number of rotational relaxing molecules
+ RotFracSpec(iSpec) = totalWeightSpec(iSpec)*(rotrelaxfreqSpec(iSpec)/relaxfreq)*(1.-EXP(-relaxfreq*dtCell))
+
+ IF(BGKDoVibRelaxation) THEN
+ ! Mean vibrational energy per particle of a species
+ EVibSpecMean(iSpec) = EVibSpec(iSpec)/totalWeightSpec(iSpec)
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN ! polyatomic
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ ! Loop over all vibrational DOF
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ ! Mean vibrational energy per particle of a species for the mixture translational temperature, EVib(Ttrans)
+ EVibTtransSpecMean(iSpec) = EVibTtransSpecMean(iSpec) + BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) &
+ / (EXP(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/CellTemp) - 1.)
+ END DO
+ ELSE ! diatomic
+ ! Mean vibrational energy per particle of a species for the mixture translational temperature, EVib(Ttrans)
+ EVibTtransSpecMean(iSpec) = BoltzmannConst * SpecDSMC(iSpec)%CharaTVib / (EXP(SpecDSMC(iSpec)%CharaTVib/CellTemp) - 1.)
+ END IF
+ ! Calculate number of vibrational relaxing molecules
+ VibFracSpec(iSpec) = totalWeightSpec(iSpec)*(vibrelaxfreqSpec(iSpec)/relaxfreq)*(1.-EXP(-relaxfreq*dtCell))
+ END IF
+
+ ! Mean translational energy per particle to satisfy the Landau-Teller equation
+ ETransRelMean = ETransRelMean + (3./2. * BoltzmannConst * CellTemp - (rotrelaxfreqSpec(iSpec)/relaxfreq) * &
+ (ERotTtransSpecMean(iSpec)-ERotSpecMean(iSpec))) * totalWeightSpec(iSpec)/totalWeight
+ IF (BGKDoVibRelaxation) THEN
+ ETransRelMean = ETransRelMean - (vibrelaxfreqSpec(iSpec)/relaxfreq)*(EVibTtransSpecMean(iSpec)-EVibSpecMean(iSpec)) * &
+ totalWeightSpec(iSpec)/totalWeight
+ END IF
+ ELSE ! atomic
+ ! Mean translational energy per particle to satisfy the Landau-Teller equation
+ ETransRelMean = ETransRelMean + 3./2. * BoltzmannConst * CellTemp * totalWeightSpec(iSpec)/totalWeight
+ END IF
+ END IF
+END DO
+
+! Calculation of the cell temperature with ETransRelMean to satisfy the Landau-Teller equation
+IF (ETransRelMean.GT.0.0) THEN
+ CellTempRel = 2. * ETransRelMean / (3. * BoltzmannConst)
+ELSE
+ CellTempRel = CellTemp
+END IF
+
+! Calculation of equilibrium temperature for relaxation and energy conservation
+TEqui_Old = 0.0
+TEquiNum = 3.*(totalWeight - totalWeight2/totalWeight)*CellTemp
+TEquiDenom = 3.*(totalWeight - totalWeight2/totalWeight)
+! Sum up over all species
+DO iSpec = 1, nSpecies
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ TEquiNum = TEquiNum + Xi_RotSpec(iSpec)*RotFracSpec(iSpec)*TRotSpec(iSpec)
+ TEquiDenom = TEquiDenom + Xi_RotSpec(iSpec)*RotFracSpec(iSpec)
+ IF(BGKDoVibRelaxation) THEN
+ TEquiNum = TEquiNum + Xi_VibSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
+ TEquiDenom = TEquiDenom + Xi_VibSpec(iSpec)*VibFracSpec(iSpec)
+ END IF
+ END IF
+END DO
+TEqui = TEquiNum/TEquiDenom
+
+i=0
+! Solving of equation system until accuracy eps_prec is reached
+outerLoop: DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
+ i = i + 1
+ DO iSpec = 1, nSpecies
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ ! if difference small: equilibrium, no beta
+ IF (ABS(TRotSpec(iSpec)-TEqui).GT.1E-3) THEN
+ betaR(iSpec) = (TRotSpec(iSpec)-CellTemp)/(TRotSpec(iSpec)-TEqui)
+ IF (betaR(iSpec).LT.0.0) THEN
+ betaR(iSpec) = 1.
+ END IF
+ ! new calculation of number of rotational relaxing molecules with betaR
+ RotFracSpec(iSpec) = totalWeightSpec(iSpec)*(rotrelaxfreqSpec(iSpec)/relaxfreq)*(1.-EXP(-relaxfreq*dtCell))*betaR(iSpec)
+ END IF
+ IF(BGKDoVibRelaxation) THEN
+ ! if difference small: equilibrium, no beta
+ IF (ABS(TVibSpec(iSpec)-TEqui).GT.1E-3) THEN
+ betaV(iSpec) = (TVibSpec(iSpec)-CellTemp)/(TVibSpec(iSpec)-TEqui)
+ IF (betaV(iSpec).LT.0.0) THEN
+ betaV(iSpec) = 1.
+ END IF
+ ! new calculation of number of vibrational relaxing molecules
+ VibFracSpec(iSpec) = totalWeightSpec(iSpec)*(vibrelaxfreqSpec(iSpec)/relaxfreq)*(1.-EXP(-relaxfreq*dtCell))*betaV(iSpec)
+ END IF
+
+ ! new calculation of the vibrational degrees of freedom per species
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ ! Loop over all vibrational degrees of freedom to calculate them using TEqui
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg)) THEN
+ IF(exparg.gt.0.) THEN ! positive overflow: exp -> inf
+ Xi_vib_DOF(iSpec,iDOF) = 2.*exparg/(EXP(exparg)-1.)
+ ELSE ! negative overflow: exp -> 0
+ Xi_vib_DOF(iSpec,iDOF) = 2.*exparg/(-1.)
+ END IF ! exparg.gt.0.
+ ELSE
+ Xi_vib_DOF(iSpec,iDOF) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END DO
+ Xi_VibSpecNew(iSpec) = SUM(Xi_vib_DOF(iSpec,1:PolyatomMolDSMC(iPolyatMole)%VibDOF))
+ ELSE ! diatomic
+ exparg = SpecDSMC(iSpec)%CharaTVib/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg)) THEN
+ Xi_VibSpecNew(iSpec) = 2.*SpecDSMC(iSpec)%CharaTVib/TEqui/(EXP(exparg)-1.)
+ ELSE
+ Xi_VibSpecNew(iSpec) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END IF
+ END IF
+ END IF
+ END DO
+ TEqui_Old = TEqui
+ TEqui_Old2 = TEqui
+ ! new calculation of equilibrium temperature with new RotFracSpec, new VibFracSpec, new VibDOF(TEqui) in denominator
+ TEquiNum = 3.*(totalWeight - totalWeight2/totalWeight)*CellTemp
+ TEquiDenom = 3.*(totalWeight - totalWeight2/totalWeight)
+ ! Sum up over all species
+ DO iSpec = 1, nSpecies
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ TEquiNum = TEquiNum + Xi_RotSpec(iSpec)*RotFracSpec(iSpec)*TRotSpec(iSpec)
+ TEquiDenom = TEquiDenom + Xi_RotSpec(iSpec)*RotFracSpec(iSpec)
+ IF(BGKDoVibRelaxation) THEN
+ TEquiNum = TEquiNum + Xi_VibSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
+ TEquiDenom = TEquiDenom + Xi_VibSpecNew(iSpec)*VibFracSpec(iSpec)
+ END IF
+ END IF
+ END DO
+ TEqui = TEquiNum/TEquiDenom
+ IF(BGKDoVibRelaxation) THEN
+ j=0
+ ! accuracy eps_prec not reached yet
+ innerLoop: DO WHILE ( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
+ j=j+1
+ ! mean value of old and new equilibrium temperature
+ TEqui = (TEqui + TEqui_Old2) * 0.5
+ DO iSpec = 1, nSpecies
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ ! new calculation of the vibrational degrees of freedom per species
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ ! Loop over all vibrational degrees of freedom to calculate them using TEqui
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg)) THEN
+ IF(exparg.gt.0.) THEN ! positive overflow: exp -> inf
+ Xi_vib_DOF(iSpec,iDOF) = 2.*exparg/(EXP(exparg)-1.)
+ ELSE ! negative overflow: exp -> 0
+ Xi_vib_DOF(iSpec,iDOF) = 2.*exparg/(-1.)
+ END IF ! exparg.gt.0.
+ ELSE
+ Xi_vib_DOF(iSpec,iDOF) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END DO
+ Xi_VibSpecNew(iSpec) = SUM(Xi_vib_DOF(iSpec,1:PolyatomMolDSMC(iPolyatMole)%VibDOF))
+ ELSE ! diatomic
+ exparg = SpecDSMC(iSpec)%CharaTVib/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg)) THEN
+ Xi_VibSpecNew(iSpec) = 2.*SpecDSMC(iSpec)%CharaTVib/TEqui/(EXP(exparg)-1.)
+ ELSE
+ Xi_VibSpecNew(iSpec) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END IF
+ END IF
+ END DO
+ TEqui_Old2 = TEqui
+ ! new calculation of equilibrium temperature with new RotFracSpec, new VibFracSpec, new VibDOF(TEqui) in denominator
+ TEquiNum = 3.*(totalWeight - totalWeight2/totalWeight)*CellTemp
+ TEquiDenom = 3.*(totalWeight - totalWeight2/totalWeight)
+ ! Sum up over all species
+ DO iSpec = 1, nSpecies
+ IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ TEquiNum = TEquiNum + Xi_RotSpec(iSpec)*RotFracSpec(iSpec)*TRotSpec(iSpec) + &
+ Xi_VibSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
+ TEquiDenom = TEquiDenom + Xi_RotSpec(iSpec)*RotFracSpec(iSpec) + Xi_VibSpecNew(iSpec)*VibFracSpec(iSpec)
+ END IF
+ END DO
+ TEqui = TEquiNum/TEquiDenom
+ IF (j.EQ.30) EXIT innerLoop
+ END DO innerLoop
+ END IF
+ IF (i.EQ.30) EXIT outerLoop
+END DO outerLoop
+
+END SUBROUTINE CalcTRelax
+
+
+SUBROUTINE DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, nRelax, nRotRelax, nVibRelax, &
+ RotRelaxWeightSpec, VibRelaxWeightSpec, iPartIndx_NodeRelax, iPartIndx_NodeRelaxTemp, iPartIndx_NodeRelaxRot, &
+ iPartIndx_NodeRelaxVib, vBulk, OldEnRot, OldEn, rotrelaxfreqSpec, vibrelaxfreqSpec, betaR, betaV)
!===================================================================================================================================
!> Determine the number of particles undergoing a relaxation (including vibration and rotation)
!===================================================================================================================================
@@ -707,52 +1034,71 @@ SUBROUTINE DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, RotExpSp
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
INTEGER, INTENT(IN) :: nPart, iPartIndx_Node(nPart)
-REAL, INTENT(IN) :: relaxfreq, dtCell, RotExpSpec(nSpecies), VibExpSpec(nSpecies)
+REAL, INTENT(IN) :: relaxfreq, dtCell, rotrelaxfreqSpec(nSpecies), vibrelaxfreqSpec(nSpecies)
+REAL, INTENT(IN) :: betaR(nSpecies), betaV(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
-INTEGER, INTENT(OUT) :: nRelax, iPartIndx_NodeRelax(nPart), iPartIndx_NodeRelaxTemp(nPart)
-INTEGER, INTENT(OUT) :: iPartIndx_NodeRelaxRot(nPart), iPartIndx_NodeRelaxVib(nPart)
-INTEGER, INTENT(OUT) :: nRotRelax, nVibRelax, nRotRelaxSpec(nSpecies), nVibRelaxSpec(nSpecies)
-REAL, INTENT(OUT) :: vBulk(3), OldEnRot
+INTEGER, INTENT(OUT) :: iPartIndx_NodeRelax(:), iPartIndx_NodeRelaxTemp(:)
+INTEGER, INTENT(OUT) :: iPartIndx_NodeRelaxRot(:), iPartIndx_NodeRelaxVib(:)
+INTEGER, INTENT(OUT) :: nRelax, nRotRelax, nVibRelax
+REAL, INTENT(OUT) :: vBulk(3), OldEnRot, RotRelaxWeightSpec(nSpecies), VibRelaxWeightSpec(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT-OUTPUT VARIABLES
REAL, INTENT(INOUT) :: OldEn
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iPart, nNotRelax, iSpec, iLoop
-REAL :: ProbAddPartTrans, iRan, partWeight
+INTEGER :: iPart, iSpec, iLoop, nNotRelax
+REAL :: ProbAddPartTrans, iRan, partWeight, ProbAddPartRot(nSpecies), ProbAddPartVib(nSpecies)
!===================================================================================================================================
-nVibRelaxSpec =0; nRotRelaxSpec =0; nRelax=0; nNotRelax=0; vBulk=0.0; nRotRelax=0; nVibRelax=0; OldEnRot=0.0
+VibRelaxWeightSpec=0.0; RotRelaxWeightSpec=0.0; nRelax=0; nNotRelax=0; vBulk=0.0; nRotRelax=0; nVibRelax=0; OldEnRot=0.0
+
+! Calculate probability of relaxation of a particle towards the target distribution function
ProbAddPartTrans = 1.-EXP(-relaxfreq*dtCell)
+! Calculate probabilities of relaxation of a particle in the rotation and vibration
+! See F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method
+! including internal degrees of freedom", subitted to Phys. Fluids, August 2023
+ProbAddPartRot(:) = ProbAddPartTrans * rotrelaxfreqSpec(:)/relaxfreq*betaR(:)
+ProbAddPartVib(:) = ProbAddPartTrans * vibrelaxfreqSpec(:)/relaxfreq*betaV(:)
+
+! Loop over all simulation particles
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
CALL RANDOM_NUMBER(iRan)
+ ! Count particles that are undergoing a relaxation
IF (ProbAddPartTrans.GT.iRan) THEN
nRelax = nRelax + 1
iPartIndx_NodeRelax(nRelax) = iPart
+ ! Count particles that are not undergoing a relaxation
ELSE
nNotRelax = nNotRelax + 1
iPartIndx_NodeRelaxTemp(nNotRelax) = iPart
+ ! Sum up velocities of non-relaxing particles for bulk velocity
vBulk(1:3) = vBulk(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight
END IF
+
+ ! For molecules: relaxation of inner DOF
IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- !Rotation
+ ! Rotation
CALL RANDOM_NUMBER(iRan)
- IF ((1.-RotExpSpec(iSpec)).GT.iRan) THEN
+ ! Count particles that are undergoing a relaxation, in total and per species
+ IF (ProbAddPartRot(iSpec).GT.iRan) THEN
nRotRelax = nRotRelax + 1
- nRotRelaxSpec(iSpec) = nRotRelaxSpec(iSpec) + 1
+ RotRelaxWeightSpec(iSpec) = RotRelaxWeightSpec(iSpec) + partWeight
iPartIndx_NodeRelaxRot(nRotRelax) = iPart
+ ! Sum up total rotational energy
OldEnRot = OldEnRot + PartStateIntEn(2,iPart) * partWeight
END IF
! Vibration
IF(BGKDoVibRelaxation) THEN
CALL RANDOM_NUMBER(iRan)
- IF ((1.-VibExpSpec(iSpec)).GT.iRan) THEN
+ ! Count particles that are undergoing a relaxation, in total and per species
+ IF (ProbAddPartVib(iSpec).GT.iRan) THEN
nVibRelax = nVibRelax + 1
- nVibRelaxSpec(iSpec) = nVibRelaxSpec(iSpec) + 1
+ VibRelaxWeightSpec(iSpec) = VibRelaxWeightSpec(iSpec) + partWeight
iPartIndx_NodeRelaxVib(nVibRelax) = iPart
+ ! Sum up total vibrational energy of all relaxing particles, considering zero-point energy, and add to translational energy
OldEn = OldEn + (PartStateIntEn(1,iPartIndx_NodeRelaxVib(nVibRelax)) - SpecDSMC(iSpec)%EZeroPoint) * partWeight
END IF
END IF
@@ -761,14 +1107,15 @@ SUBROUTINE DetermineRelaxPart(nPart, iPartIndx_Node, relaxfreq, dtCell, RotExpSp
END SUBROUTINE DetermineRelaxPart
-SUBROUTINE RelaxInnerEnergy(nPart, nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib, iPartIndx_NodeRelaxRot, nXiVibDOF, Xi_vib_DOF, Xi_VibSpec, &
- Xi_RotSpec , TEqui, VibEnergyDOF, NewEnVib, NewEnRot)
+
+SUBROUTINE RelaxInnerEnergy(nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib, iPartIndx_NodeRelaxRot, nXiVibDOF, Xi_vib_DOF, &
+ Xi_VibSpec, Xi_RotSpec, VibEnergyDOF, TEqui, NewEnVib, NewEnRot)
!===================================================================================================================================
!> Determine the new rotational and vibrational energy of relaxing particles
!===================================================================================================================================
! MODULES
USE MOD_Particle_Vars ,ONLY: PartSpecies, nSpecies
-USE MOD_DSMC_Vars ,ONLY: SpecDSMC, PartStateIntEn, PolyatomMolDSMC
+USE MOD_DSMC_Vars ,ONLY: SpecDSMC, PartStateIntEn, PolyatomMolDSMC, DSMC
USE MOD_BGK_Vars ,ONLY: BGKDoVibRelaxation
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
@@ -776,10 +1123,11 @@ SUBROUTINE RelaxInnerEnergy(nPart, nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib,
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER, INTENT(IN) :: nPart,nXiVibDOF
-INTEGER, INTENT(IN) :: nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib(nPart), iPartIndx_NodeRelaxRot(nPart)
-REAL, INTENT(IN) :: Xi_vib_DOF(nXiVibDOF), TEqui, Xi_VibSpec(nSpecies), Xi_RotSpec(nSpecies)
-REAL, INTENT(INOUT) :: NewEnVib, NewEnRot
+INTEGER, INTENT(IN) :: nXiVibDOF
+INTEGER, INTENT(IN) :: nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib(nVibRelax), iPartIndx_NodeRelaxRot(nRotRelax)
+REAL, INTENT(IN) :: Xi_vib_DOF(DSMC%NumPolyatomMolecs,nXiVibDOF), Xi_VibSpec(nSpecies), Xi_RotSpec(nSpecies)
+REAL, INTENT(IN) :: TEqui
+REAL, INTENT(INOUT) :: NewEnVib(nSpecies), NewEnRot(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
REAL, INTENT(OUT) :: VibEnergyDOF(nVibRelax,nXiVibDOF)
@@ -788,41 +1136,53 @@ SUBROUTINE RelaxInnerEnergy(nPart, nVibRelax, nRotRelax, iPartIndx_NodeRelaxVib,
INTEGER :: iLoop, iPart, iDOF, iPolyatMole, iSpec
REAL :: partWeight, iRan
!===================================================================================================================================
-! VIB Relaxation
NewEnVib = 0.0; NewEnRot=0.0
IF(BGKDoVibRelaxation) THEN
+ ! Loop over all particles undergoing a relaxation in the vibration
DO iLoop = 1, nVibRelax
iPart = iPartIndx_NodeRelaxVib(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
+ ! polyatomic, more than one vibrational DOF
IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
- iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
- PartStateIntEn(1,iPart) = 0.0
- DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
- CALL RANDOM_NUMBER(iRan)
- VibEnergyDOF(iLoop,iDOF) = - LOG(iRan)*Xi_vib_DOF(iDOF)/2.*TEqui*BoltzmannConst
- PartStateIntEn(1,iPart) = PartStateIntEn(1,iPart)+VibEnergyDOF(iLoop,iDOF)
- END DO
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ PartStateIntEn(1,iPart) = 0.0
+ ! Sum up the new vibrational energy over all DOFs, see M. Pfeiffer et. al., "Extension of Particle-based BGK Models to
+ ! Polyatomic Species in Hypersonic Flow around a Flat-faced Cylinder", AIP Conference Proceedings 2132, 100001 (2019)
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ CALL RANDOM_NUMBER(iRan)
+ VibEnergyDOF(iLoop,iDOF) = - LOG(iRan)*Xi_vib_DOF(iPolyatMole,iDOF)/2.*TEqui*BoltzmannConst
+ PartStateIntEn(1,iPart) = PartStateIntEn(1,iPart)+VibEnergyDOF(iLoop,iDOF)
+ END DO
+ ! ELSE: diatomic, only one vibrational DOF, calculate new vibrational energy according to M. Pfeiffer, "Extending the particle
+ ! ellipsoidal statistical Bhatnagar-Gross-Krook method to diatomic molecules including quantized vibrational energies",
+ ! Phys. Fluids 30, 116103 (2018)
ELSE
CALL RANDOM_NUMBER(iRan)
PartStateIntEn( 1,iPart) = -LOG(iRan)*Xi_VibSpec(iSpec)/2.*TEqui*BoltzmannConst
END IF
- NewEnVib = NewEnVib + PartStateIntEn(1,iPart) * partWeight
+ ! Sum up new vibrational energy per species
+ NewEnVib(iSpec) = NewEnVib(iSpec) + PartStateIntEn(1,iPart) * partWeight
END DO
END IF
-! ROT Relaxation
+! Loop over all particles undergoing a relaxation in the rotation
DO iLoop = 1, nRotRelax
iPart = iPartIndx_NodeRelaxRot(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
CALL RANDOM_NUMBER(iRan)
+ ! Calculate new rotational energy according to M. Pfeiffer et. al., "Extension of Particle-based BGK Models to Polyatomic Species
+ ! in Hypersonic Flow around a Flat-faced Cylinder", AIP Conference Proceedings 2132, 100001 (2019)
PartStateIntEn( 2,iPart) = -Xi_RotSpec(iSpec) / 2. * BoltzmannConst*TEqui*LOG(iRan)
- NewEnRot = NewEnRot + PartStateIntEn( 2,iPart) * partWeight
+ ! Sum up new rotational energy per species
+ NewEnRot(iSpec) = NewEnRot(iSpec) + PartStateIntEn( 2,iPart) * partWeight
END DO
END SUBROUTINE RelaxInnerEnergy
-SUBROUTINE SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij, u2i, vBulkAll, CellTemp, vBulk)
+
+SUBROUTINE SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij, u2i, vBulkAll, CellTempRel, CellTemp, vBulk, &
+ MassIC_Mixture)
!===================================================================================================================================
!> Sample new particle velocities from the target distribution function, depending on the chosen model
!===================================================================================================================================
@@ -831,12 +1191,13 @@ SUBROUTINE SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij,
USE MOD_BGK_Vars ,ONLY: BGKCollModel, ESBGKModel
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
+USE MOD_Globals ,ONLY: abort
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
INTEGER, INTENT(IN) :: nRelax, iPartIndx_NodeRelax(:)
-REAL, INTENT(IN) :: Prandtl, u2, u0ij(3,3), u2i(3), vBulkAll(3), CellTemp
+REAL, INTENT(IN) :: Prandtl, u2, u0ij(3,3), u2i(3), vBulkAll(3), CellTempRel, CellTemp, MassIC_Mixture
REAL, INTENT(INOUT) :: vBulk(3)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
@@ -845,92 +1206,115 @@ SUBROUTINE SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij,
INTEGER :: iPart, fillMa1, fillMa2, INFO, iLoop, iSpec
REAL :: iRanPart(3, nRelax), A(3,3), KronDelta, SMat(3,3), W(3), Work(100), tempVelo(3), partWeight
!===================================================================================================================================
+! According to M. Pfeiffer, "Particle-based fluid dynamics: Comparison of different Bhatnagar-Gross-Krook models and the direct
+! simulation Monte Carlo method for hypersonic flows", Phys. Fluids 30, 106106 (2018) and F. Hild, M. Pfeiffer, "Multi-species
+! modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method including internal degrees of freedom",
+! subitted to Phys. Fluids, August 2023
IF (nRelax.GT.0) THEN
SELECT CASE(BGKCollModel)
- CASE (1) ! Ellipsoidal Statistical
+ CASE (1) ! Ellipsoidal Statistical BGK
IF (ESBGKModel.EQ.1) THEN
- !! Approximated Solution
- DO fillMa1 =1, 3
- DO fillMa2 =fillMa1, 3
+ ! Approximated solution
+ DO fillMa1 = 1, 3
+ DO fillMa2 = fillMa1, 3
IF (fillMa1.EQ.fillMa2) THEN
KronDelta = 1.0
ELSE
KronDelta = 0.0
END IF
- SMat(fillMa1, fillMa2)= KronDelta - (1.-Prandtl)/(2.*Prandtl) &
+ ! Fill symmetric transformation matrix SMat with anisotopic matrix A = SS
+ SMat(fillMa1, fillMa2) = KronDelta - (1.-Prandtl)/(2.*Prandtl) &
*(3./u2*u0ij(fillMa1, fillMa2)-KronDelta)
END DO
END DO
SMat(2,1)=SMat(1,2)
SMat(3,1)=SMat(1,3)
SMat(3,2)=SMat(2,3)
+ ! Generate random normals for the sampling of new velocities of all relaxing particles
CALL BGK_BuildTransGaussNums(nRelax, iRanPart)
ELSE
- !! Exact Solution
- DO fillMa1 =1, 3
- DO fillMa2 =fillMa1, 3
+ DO fillMa1 = 1, 3
+ DO fillMa2 = fillMa1, 3
IF (fillMa1.EQ.fillMa2) THEN
KronDelta = 1.0
ELSE
KronDelta = 0.0
END IF
- A(fillMa1, fillMa2) = KronDelta - (1.-Prandtl)/Prandtl*(3.*u0ij(fillMa1, fillMa2)/u2 - KronDelta)
+ ! Fill anisotopic matrix A
+ A(fillMa1, fillMa2) = KronDelta*CellTempRel*BoltzmannConst/MassIC_Mixture - (1.-Prandtl)/Prandtl * &
+ (CellTempRel/CellTemp*u0ij(fillMa1, fillMa2) - KronDelta*CellTempRel*BoltzmannConst/MassIC_Mixture)
END DO
END DO
IF (ESBGKModel.EQ.2) THEN
+ ! Exact solution
+ ! Compute eigenvalues and eigenvectors of matrix A --> output: W is the array that contains the eigenvalues, A then contains
+ ! the orthonormal eigenvectors of anisotropic matrix A
CALL DSYEV('V','U',3,A,3,W,Work,100,INFO)
SMat = 0.0
- IF (W(1).LT.0.0) THEN
- W(1) = 0.0
- IF (W(2).LT.0) W(2) = 0.0
- END IF
- IF (W(3).LT.0) THEN
- W(3) = 0.0
- DO fillMa1 =1, 3
- DO fillMa2 =fillMa1, 3
- IF (fillMa1.EQ.fillMa2) THEN
- KronDelta = 1.0
- ELSE
- KronDelta = 0.0
- END IF
- SMat(fillMa1, fillMa2)= KronDelta - (1.-Prandtl)/(2.*Prandtl) &
- *(3./u2*u0ij(fillMa1, fillMa2)-KronDelta)
- END DO
- END DO
- SMat(2,1)=SMat(1,2)
- SMat(3,1)=SMat(1,3)
- SMat(3,2)=SMat(2,3)
+ IF (W(3).LT.0.0) THEN
+ ! Due to ascending order of eigenvalues, all three eigenvalues are lower than zero here
+ ! Fallback to Maxwell BGK
+ SMat(1,1) = SQRT(BoltzmannConst*CellTempRel/MassIC_Mixture)
+ SMat(2,2) = SQRT(BoltzmannConst*CellTempRel/MassIC_Mixture)
+ SMat(3,3) = SQRT(BoltzmannConst*CellTempRel/MassIC_Mixture)
ELSE
+ ! At least W(3) is not negative
+ ! Set negative eigenvalues to zero to get positive semidefinite matrix
+ IF (W(1).LT.0.0) THEN
+ W(1) = 0.0
+ IF (W(2).LT.0.0) W(2) = 0.0
+ END IF
+ ! SMat with square roots of the eigenvalues as diagonal elements
SMat(1,1) = SQRT(W(1))
SMat(2,2) = SQRT(W(2))
SMat(3,3) = SQRT(W(3))
+ ! Diagonalisation of anisotropic matrix, SMat is square root of anisotropic matrix
SMat = MATMUL(A, SMat)
SMat = MATMUL(SMat, TRANSPOSE(A))
END IF
+ ! Generate random normals for the sampling of new velocities of all relaxing particles
CALL BGK_BuildTransGaussNums(nRelax, iRanPart)
ELSE IF (ESBGKModel.EQ.3) THEN
+ ! Metropolis-Hastings
A(2,1)=A(1,2)
A(3,1)=A(1,3)
A(3,2)=A(2,3)
- CALL MetropolisES(nRelax, iRanPart, A)
+ CALL MetropolisES(nRelax, iRanPart, A*MassIC_Mixture, CellTempRel)
END IF
END IF
- CASE (2) ! Shakov
-! CALL MetropolisShakhov(nRelax, iRanPart, u2/3., u2i, Prandtl)
+
+ CASE (2) ! Shakov BGK
+ ! Acceptance-rejection method
CALL ARShakhov(nRelax, iRanPart, u2/3., u2i, Prandtl)
+
CASE (3) ! Standard BGK (Maxwell target distribution)
+ ! Generate random normals for the sampling of new velocities of all relaxing particles
CALL BGK_BuildTransGaussNums(nRelax, iRanPart)
END SELECT
+
+ ! Loop over all particles undergoing a relaxation towards the target distribution function
DO iLoop = 1, nRelax
iPart = iPartIndx_NodeRelax(iLoop)
iSpec = PartSpecies(iPart)
- IF ((BGKCollModel.EQ.1).AND.(ESBGKModel.NE.3)) THEN
- tempVelo(1:3) = SQRT(BoltzmannConst*CellTemp/Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
+ ! Calculation of new velocities of all particles
+ IF ((BGKCollModel.EQ.1).AND.(ESBGKModel.EQ.1)) THEN
+ ! Transformation of normalized thermal velocity vector tempVelo (sampled from a Maxwellian distribution) to a thermal velocity
+ ! vector sampled from the ESBGK target distribution function (anisotropic Gaussian distribution)
+ tempVelo(1:3) = SQRT(BoltzmannConst*CellTempRel/Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
PartState(4:6,iPart) = vBulkAll(1:3) + MATMUL(SMat,tempVelo)
+ ELSE IF ((BGKCollModel.EQ.1).AND.(ESBGKModel.EQ.2)) THEN
+ tempVelo(1:3) = SQRT(MassIC_Mixture/Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
+ PartState(4:6,iPart) = vBulkAll(1:3) + MATMUL(SMat,tempVelo)
+ ELSE IF ((BGKCollModel.EQ.1).AND.(ESBGKModel.EQ.3)) THEN
+ ! New thermal velocity (in x,y,z) of particle with mass scaling multiplied by normal distributed random vector
+ PartState(4:6,iPart) = vBulkAll(1:3) + SQRT(1./Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
ELSE
- PartState(4:6,iPart) = vBulkAll(1:3) + SQRT(BoltzmannConst*CellTemp/Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
+ ! New thermal velocity (in x,y,z) of particle is sqrt(k_B*T/m) multiplied by normal distributed random vector
+ PartState(4:6,iPart) = vBulkAll(1:3) + SQRT(BoltzmannConst*CellTempRel/Species(iSpec)%MassIC)*iRanPart(1:3,iLoop)
END IF
partWeight = GetParticleWeight(iPart)
+ ! Sum up new velocities of relaxing particles for bulk velocity, velocities of non-relaxing particles already calculated in
+ ! subroutine DetermineRelaxPart
vBulk(1:3) = vBulk(1:3) + PartState(4:6,iPart)*Species(iSpec)%MassIC*partWeight
END DO
END IF ! nRelax.GT.0
@@ -938,7 +1322,8 @@ SUBROUTINE SampleFromTargetDistr(nRelax, iPartIndx_NodeRelax, Prandtl, u2, u0ij,
END SUBROUTINE SampleFromTargetDistr
-SUBROUTINE EnergyConsVib(nPart, nVibRelax, nVibRelaxSpec, iPartIndx_NodeRelaxVib, NewEnVib, OldEn, nXiVibDOF, Xi_VibSpec, VibEnergyDOF, TEqui)
+SUBROUTINE EnergyConsVib(nPart, totalWeight, nVibRelax, VibRelaxWeightSpec, iPartIndx_NodeRelaxVib, NewEnVib, OldEn, nXiVibDOF, &
+ VibEnergyDOF, Xi_VibSpec, TEqui)
!===================================================================================================================================
!> Routine to ensure energy conservation when including vibrational degrees of freedom (continuous and quantized)
!===================================================================================================================================
@@ -952,93 +1337,132 @@ SUBROUTINE EnergyConsVib(nPart, nVibRelax, nVibRelaxSpec, iPartIndx_NodeRelaxVib
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER, INTENT(IN) :: nPart,nXiVibDOF
-INTEGER, INTENT(IN) :: nVibRelax, iPartIndx_NodeRelaxVib(nPart), nVibRelaxSpec(nSpecies)
-REAL, INTENT(IN) :: NewEnVib, VibEnergyDOF(nVibRelax,nXiVibDOF), Xi_VibSpec(nSpecies), TEqui
+INTEGER, INTENT(IN) :: nPart, nXiVibDOF
+INTEGER, INTENT(IN) :: nVibRelax, iPartIndx_NodeRelaxVib(nPart)
+REAL, INTENT(IN) :: VibRelaxWeightSpec(nSpecies), Xi_VibSpec(nSpecies), totalWeight
+REAL, INTENT(IN) :: NewEnVib(nSpecies), VibEnergyDOF(nVibRelax,nXiVibDOF), TEqui!, EVibTtransSpecMean(nSpecies)
REAL, INTENT(INOUT) :: OldEn
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iPart, iLoop, iDOF, iSpec, iQuant, iQuaMax, iPolyatMole
-REAL :: alpha, partWeight, betaV, iRan, MaxColQua, Xi_VibTotal
+REAL :: Xi_VibTotal, alpha(nSpecies), partWeight, betaV, iRan, MaxColQua
!===================================================================================================================================
+! According to F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook
+! method including internal degrees of freedom", subitted to Phys. Fluids, August 2023
IF(BGKDoVibRelaxation) THEN
- IF ((NewEnVib.GT.0.0).AND.(nVibRelax.GT.0)) THEN
+ ! Vibrational energy is positive for at least one species + there are vibrational relaxations
+ IF (ANY(NewEnVib.GT.0.0).AND.(nVibRelax.GT.0)) THEN
+ Xi_VibTotal = 0.0
+ DO iSpec = 1, nSpecies
+ ! Sum of relaxing vibrational degrees of freedom
+ Xi_VibTotal = Xi_VibTotal + Xi_VibSpec(iSpec)*VibRelaxWeightSpec(iSpec)
+ END DO
+ ! Calculate scaling factor alpha per species
+ ! EVibTtransSpecMean(iSpec)*VibRelaxWeightSpec(iSpec) is energy that should be in vibration
+ DO iSpec = 1, nSpecies
+ IF (NewEnVib(iSpec).GT.0.0) THEN
+ alpha(iSpec) = OldEn/NewEnVib(iSpec)*(Xi_VibSpec(iSpec)*VibRelaxWeightSpec(iSpec)/(3.*(totalWeight-1.)+Xi_VibTotal))
+ ELSE
+ alpha(iSpec) = 0.
+ END IF
+ END DO
+ ! Quantized vibrational energy
IF (BGKUseQuantVibEn) THEN
- alpha = OldEn/NewEnVib*(Xi_VibSpec(1)*nVibRelax/(3.*(nPart-1.)+Xi_VibSpec(1)*nVibRelax))
DO iLoop = 1, nVibRelax
iPart = iPartIndx_NodeRelaxVib(iLoop)
partWeight = GetParticleWeight(iPart)
iSpec = PartSpecies(iPart)
+ ! Polyatomic molecules
IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
PartStateIntEn(1,iPart) = 0.0
iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ ! Loop over all vibrational DOF
DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
- betaV = alpha*VibEnergyDOF(iLoop,iDOF)/(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst)
+ ! Energy per vibrational mode alpha*VibEnergyDOF is reformulated to a quantum number iQuant
+ betaV = alpha(iSpec)*VibEnergyDOF(iLoop,iDOF)/(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst)
CALL RANDOM_NUMBER(iRan)
iQuant = INT(betaV+iRan)
+ ! Check maximum vibrational quantum number
IF(iQuant.GT.PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(iDOF)) iQuant=PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(iDOF)
+ ! Remaining energy negative, new quantum number needs to be calculated
IF ((OldEn - iQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst*partWeight).LT.0.0) THEN
+ ! Maximum quantum number
MaxColQua = OldEn/(BoltzmannConst*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*partWeight)
+ ! OldEn < k_B*CharaTVibDOF --> iQuant < 1
IF (INT(MaxColQua).EQ.0) THEN
iQuant = 0
ELSE
CALL RANDOM_NUMBER(iRan)
+ ! Calculation of new iQuant
iQuant = INT(-LOG(iRan)*TEqui/PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF))
+ ! Determine maximum quantum number
iQuaMax = MIN(INT(MaxColQua)+1, PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(iDOF))
+ ! Calculation of new iQuant as long as iQuant > maximum quantum number
DO WHILE (iQuant.GE.iQuaMax)
CALL RANDOM_NUMBER(iRan)
iQuant = INT(-LOG(iRan)*TEqui/PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF))
END DO
END IF
END IF
+ ! Sum up the vibrational energy over all vibrational DOF
PartStateIntEn( 1,iPart) = PartStateIntEn( 1,iPart) &
+ iQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst
VibQuantsPar(iPart)%Quants(iDOF) = iQuant
+ ! Remaining OldEn for remaining particles
OldEn = OldEn - iQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)*BoltzmannConst*partWeight
END DO
- PartStateIntEn( 1,iPart) = PartStateIntEn( 1,iPart) &
- + SpecDSMC(iSpec)%EZeroPoint
+ ! Add zero-point energy
+ PartStateIntEn( 1,iPart) = PartStateIntEn( 1,iPart) + SpecDSMC(iSpec)%EZeroPoint
ELSE ! Diatomic molecules
- betaV = alpha*PartStateIntEn( 1,iPart)/(SpecDSMC(iSpec)%CharaTVib*BoltzmannConst)
+ ! Vibrational energy is reformulated to a quantum number iQuant
+ betaV = alpha(iSpec)*PartStateIntEn( 1,iPart)/(SpecDSMC(iSpec)%CharaTVib*BoltzmannConst)
CALL RANDOM_NUMBER(iRan)
iQuant = INT(betaV+iRan)
+ ! Check maximum vibrational quantum number
IF (iQuant.GT.SpecDSMC(iSpec)%MaxVibQuant) iQuant = SpecDSMC(iSpec)%MaxVibQuant
PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpec)%CharaTVib*BoltzmannConst
+ ! Remaining energy negative, new quantum number needs to be calculated
IF ((OldEn - (PartStateIntEn( 1,iPart) - SpecDSMC(iSpec)%EZeroPoint)*partWeight).LT.0.0) THEN
+ ! Maximum quantum number
MaxColQua = OldEn/(BoltzmannConst*SpecDSMC(iSpec)%CharaTVib*partWeight)
+ ! OldEn < k_B*CharaTVib --> iQuant < 1
IF (INT(MaxColQua).EQ.0) THEN
iQuant = 0
ELSE
CALL RANDOM_NUMBER(iRan)
+ ! Calculation of new iQuant
iQuant = INT(-LOG(iRan)*TEqui/SpecDSMC(iSpec)%CharaTVib)
+ ! Determine maximum quantum number
iQuaMax = MIN(INT(MaxColQua)+1, SpecDSMC(iSpec)%MaxVibQuant)
+ ! Calculation of new iQuant as long as iQuant > maximum quantum number
DO WHILE (iQuant.GE.iQuaMax)
CALL RANDOM_NUMBER(iRan)
iQuant = INT(-LOG(iRan)*TEqui/SpecDSMC(iSpec)%CharaTVib)
END DO
END IF
+ ! Calculate vibrational energy including zero-point energy
PartStateIntEn( 1,iPart) = (iQuant + DSMC%GammaQuant)*SpecDSMC(iSpec)%CharaTVib*BoltzmannConst
END IF
+ ! Remaining OldEn for remaining particles
OldEn = OldEn - (PartStateIntEn( 1,iPart) - SpecDSMC(iSpec)%EZeroPoint)*partWeight
- END IF ! SpecDSMC(1)%PolyatomicMol
+ END IF
END DO
ELSE ! Continuous treatment of vibrational energy
- Xi_VibTotal = 0.0
- DO iSpec = 1, nSpecies
- Xi_VibTotal = Xi_VibTotal + Xi_VibSpec(iSpec)*nVibRelaxSpec(iSpec)
- END DO
- alpha = OldEn/NewEnVib*(Xi_VibTotal/(3.*(nPart-1.)+Xi_VibTotal))
DO iLoop = 1, nVibRelax
iPart = iPartIndx_NodeRelaxVib(iLoop)
iSpec = PartSpecies(iPart)
partWeight = GetParticleWeight(iPart)
- PartStateIntEn( 1,iPart) = alpha*PartStateIntEn( 1,iPart) + SpecDSMC(iSpec)%EZeroPoint
+ ! Scaling of vibrational energy with factor alpha + zero-point energy
+ PartStateIntEn( 1,iPart) = alpha(iSpec)*PartStateIntEn( 1,iPart) + SpecDSMC(iSpec)%EZeroPoint
+ ! Remaining OldEn for remaining particles
OldEn = OldEn - (PartStateIntEn( 1,iPart) - SpecDSMC(iSpec)%EZeroPoint)*partWeight
END DO
END IF ! BGKUseQuantVibEn
- ELSE IF (nVibRelax.GT.0) THEN ! Relaxation towards the vibrational ground-state (new state is simply the zero-point energy)
+ ! NewEnVib = 0 for all species, relaxation towards the vibrational ground-state (new state is simply the zero-point energy)
+ ELSE IF (nVibRelax.GT.0) THEN
+ ! Set zero-point energy as vibrational energy for all particles with vibrational relaxation
DO iLoop = 1, nVibRelax
iPart = iPartIndx_NodeRelaxVib(iLoop)
iSpec = PartSpecies(iPart)
@@ -1049,204 +1473,81 @@ SUBROUTINE EnergyConsVib(nPart, nVibRelax, nVibRelaxSpec, iPartIndx_NodeRelaxVib
END SUBROUTINE EnergyConsVib
-#ifdef WIP
-SUBROUTINE ARGrads13(nPart, iRanPart, Vtherm, HeatVec, PressTens)
-!===================================================================================================================================
-!> description
-!===================================================================================================================================
-! MODULES
-USE Ziggurat
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-INTEGER, INTENT(IN) :: nPart
-REAL, INTENT(IN) :: HeatVec(3), Vtherm, PressTens(3,3)
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: iRanPart(:,:)
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-REAL :: Vheat, V2, iRan, OldProb, Envelope, Envelope2, cMat, KronDelta
-INTEGER :: iPart, fillMa1, fillMa2
-!===================================================================================================================================
-Envelope = MAX(ABS(HeatVec(1)),ABS(HeatVec(2)),ABS(HeatVec(3)))/Vtherm**(3./2.)
-Envelope2 = MAX(ABS(PressTens(1,2)),ABS(PressTens(1,3)),ABS(PressTens(2,3)))/Vtherm
-Envelope = 1.+3.*MAX(Envelope, Envelope2)
-
-DO iPart = 1, nPart
- iRanPart(1,iPart) = rnor()
- iRanPart(2,iPart) = rnor()
- iRanPart(3,iPart) = rnor()
- cMat = 0.0
- DO fillMa1 =1, 3
- DO fillMa2 =1, 3
- IF (fillMa1.EQ.fillMa2) THEN
- KronDelta = 1.0
- ELSE
- KronDelta = 0.0
- END IF
- cMat = cMat + iRanPart(fillMa1,iPart)*iRanPart(fillMa2,iPart)*(PressTens(fillMa1,fillMa2)-KronDelta*Vtherm)
- END DO
- END DO
-! cMat=cMat + iRanPart(1,iPart)*iRanPart(2,iPart)*PressTens(1,2)
-! cMat=cMat + iRanPart(1,iPart)*iRanPart(3,iPart)*PressTens(1,3)
-! cMat=cMat + iRanPart(2,iPart)*iRanPart(3,iPart)*PressTens(2,3)
- V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
- Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + cMat/(2.*Vtherm) + VHeat/(Vtherm**(3./2.))*(V2/5.-1.))
- CALL RANDOM_NUMBER(iRan)
- DO WHILE (Envelope*iRan.GT.OldProb)
- iRanPart(1,iPart) = rnor()
- iRanPart(2,iPart) = rnor()
- iRanPart(3,iPart) = rnor()
- cMat = 0.0
- DO fillMa1 =1, 3
- DO fillMa2 =1, 3
- IF (fillMa1.EQ.fillMa2) THEN
- KronDelta = 1.0
- ELSE
- KronDelta = 0.0
- END IF
- cMat = cMat + iRanPart(fillMa1,iPart)*iRanPart(fillMa2,iPart)*(PressTens(fillMa1,fillMa2)-KronDelta*Vtherm)
- END DO
- END DO
-! cMat=cMat + iRanPart(1,iPart)*iRanPart(2,iPart)*PressTens(1,2)
-! cMat=cMat + iRanPart(1,iPart)*iRanPart(3,iPart)*PressTens(1,3)
-! cMat=cMat + iRanPart(2,iPart)*iRanPart(3,iPart)*PressTens(2,3)
- V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
- Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + cMat/(2.*Vtherm) + VHeat/(Vtherm**(3./2.))*(V2/5.-1.))
- CALL RANDOM_NUMBER(iRan)
- END DO
-END DO
-
-END SUBROUTINE ARGrads13
-SUBROUTINE ARChapEnsk(nPart, iRanPart, Vtherm, HeatVec, PressTens)
+SUBROUTINE MetropolisES(nPart, iRanPart, A, CellTempRel)
!===================================================================================================================================
-!> description
+!> Sampling from ESBGK target distribution function by using a Metropolis-Hastings method
!===================================================================================================================================
! MODULES
USE Ziggurat
+USE MOD_Basis ,ONLY: INV33
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
INTEGER, INTENT(IN) :: nPart
-REAL, INTENT(IN) :: HeatVec(3), Vtherm, PressTens(3,3)
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: iRanPart(:,:)
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-REAL :: Vheat, V2, iRan, OldProb, Envelope, Envelope2, cMat, cPress
-INTEGER :: iPart
-!===================================================================================================================================
-Envelope = MAX(ABS(HeatVec(1)),ABS(HeatVec(2)),ABS(HeatVec(3)))/Vtherm**(3./2.)
-Envelope2 = MAX(ABS(PressTens(1,2)),ABS(PressTens(1,3)),ABS(PressTens(2,3)))/Vtherm
-Envelope = 1.+4.*MAX(Envelope, Envelope2)
-
-DO iPart = 1, nPart
- iRanPart(1,iPart) = rnor()
- iRanPart(2,iPart) = rnor()
- iRanPart(3,iPart) = rnor()
- cMat = 0.0
- cPress = 0.0
- cMat=cMat + iRanPart(1,iPart)*iRanPart(2,iPart)*PressTens(1,2)
- cMat=cMat + iRanPart(1,iPart)*iRanPart(3,iPart)*PressTens(1,3)
- cMat=cMat + iRanPart(2,iPart)*iRanPart(3,iPart)*PressTens(2,3)
- cPress=cPress + (PressTens(1,1)-Vtherm)*(iRanPart(1,iPart)*iRanPart(1,iPart)-iRanPart(3,iPart)*iRanPart(3,iPart))
- cPress=cPress + (PressTens(2,2)-Vtherm)*(iRanPart(2,iPart)*iRanPart(2,iPart)-iRanPart(3,iPart)*iRanPart(3,iPart))
- V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
- Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + cMat/Vtherm + cPress/(2.*Vtherm) + VHeat/(2.*Vtherm**(3./2.))*(V2/5.-1.))
- CALL RANDOM_NUMBER(iRan)
- DO WHILE (Envelope*iRan.GT.OldProb)
- iRanPart(1,iPart) = rnor()
- iRanPart(2,iPart) = rnor()
- iRanPart(3,iPart) = rnor()
- cMat = 0.0
- cPress = 0.0
- cMat=cMat + iRanPart(1,iPart)*iRanPart(2,iPart)*PressTens(1,2)
- cMat=cMat + iRanPart(1,iPart)*iRanPart(3,iPart)*PressTens(1,3)
- cMat=cMat + iRanPart(2,iPart)*iRanPart(3,iPart)*PressTens(2,3)
- cPress=cPress + (PressTens(1,1)-Vtherm)*(iRanPart(1,iPart)*iRanPart(1,iPart)-iRanPart(3,iPart)*iRanPart(3,iPart))
- cPress=cPress + (PressTens(2,2)-Vtherm)*(iRanPart(2,iPart)*iRanPart(2,iPart)-iRanPart(3,iPart)*iRanPart(3,iPart))
- V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
- Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + cMat/Vtherm + cPress/(2.*Vtherm) + VHeat/(2.*Vtherm**(3./2.))*(V2/5.-1.))
- CALL RANDOM_NUMBER(iRan)
- END DO
-END DO
-
-END SUBROUTINE ARChapEnsk
-#endif /*WIP*/
-
-SUBROUTINE MetropolisES(nPart, iRanPart, A)
-!===================================================================================================================================
-!> description
-!===================================================================================================================================
-! MODULES
-USE Ziggurat
-USE MOD_Basis ,ONLY: INV33
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-INTEGER, INTENT(IN) :: nPart
-REAL, INTENT(IN) :: A(3,3)
+REAL, INTENT(IN) :: A(3,3), CellTempRel
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
REAL, INTENT(OUT) :: iRanPart(:,:)
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-REAL :: iRanPartTemp(3), V2, iRan, NewProb, OldProb, NormProb
+REAL :: iRanPartTemp(3), V2, iRan, NewProb, OldProb, NormProb, prefacor
INTEGER :: iLoop, iPart, iRun
LOGICAL :: Changed
REAL :: AC(3), AInvers(3,3), detA
!===================================================================================================================================
-iRanPart(1,1) = rnor()
-iRanPart(2,1) = rnor()
-iRanPart(3,1) = rnor()
-CALL INV33(A,AInvers, detA)
+! Generate normal distributed random vector as start vector for the thermal velocity
+prefacor = SQRT(BoltzmannConst*CellTempRel)
+iRanPart(1,1) = rnor()*prefacor
+iRanPart(2,1) = rnor()*prefacor
+iRanPart(3,1) = rnor()*prefacor
+! Inverse matrix of A
+CALL INV33(A, AInvers, detA)
AC(1:3) = MATMUL(AInvers, iRanPart(1:3,1))
V2 = iRanPart(1,1)*AC(1) + iRanPart(2,1)*AC(2) + iRanPart(3,1)*AC(3)
OldProb = EXP(-0.5*V2)
-!Burn in
-DO iLoop = 1, 35 !50
- iRanPartTemp(1) = rnor()
- iRanPartTemp(2) = rnor()
- iRanPartTemp(3) = rnor()
+! Burn-in phase, 35 initial steps
+DO iLoop = 1, 35
+ ! Generate normal distributed random vector for the thermal velocity
+ iRanPartTemp(1) = rnor()*prefacor
+ iRanPartTemp(2) = rnor()*prefacor
+ iRanPartTemp(3) = rnor()*prefacor
AC(1:3) = MATMUL(AInvers, iRanPartTemp(1:3))
V2 = iRanPartTemp(1)*AC(1) + iRanPartTemp(2)*AC(2) + iRanPartTemp(3)*AC(3)
NewProb = EXP(-0.5*V2)
NormProb = MIN(1.,NewProb/OldProb)
CALL RANDOM_NUMBER(iRan)
+ ! Acceptance of new sample with probability NormProb
IF (NormProb.GT.iRan) THEN
iRanPart(1:3,1) = iRanPartTemp(1:3)
OldProb = NewProb
END IF
END DO
-! All the others
+! Main phase, for all following particles
DO iPart = 2, nPart
+ ! Normal distributed random vector from previous particle
iRanPart(1,iPart) = iRanPart(1,iPart-1)
iRanPart(2,iPart) = iRanPart(2,iPart-1)
iRanPart(3,iPart) = iRanPart(3,iPart-1)
iRun = 0
Changed = .FALSE.
+ ! For acception: velocity should be changed at least once and at least ten steps in the Markov chain should be taken
DO WHILE ((iRun.LT.10).OR.(.NOT.Changed))
iRun = iRun + 1
- iRanPartTemp(1) = rnor()
- iRanPartTemp(2) = rnor()
- iRanPartTemp(3) = rnor()
+ ! Generate normal distributed random vector for the thermal velocity
+ iRanPartTemp(1) = rnor()*prefacor
+ iRanPartTemp(2) = rnor()*prefacor
+ iRanPartTemp(3) = rnor()*prefacor
AC(1:3) = MATMUL(AInvers, iRanPartTemp(1:3))
V2 = iRanPartTemp(1)*AC(1) + iRanPartTemp(2)*AC(2) + iRanPartTemp(3)*AC(3)
NewProb = EXP(-0.5*V2)
NormProb = MIN(1.,NewProb/OldProb)
CALL RANDOM_NUMBER(iRan)
+ ! Acceptance of new sample with probability NormProb, velocity is changed
IF (NormProb.GT.iRan) THEN
- Changed = .TRUE.
+ Changed = .TRUE.
iRanPart(1:3,iPart) = iRanPartTemp(1:3)
OldProb = NewProb
END IF
@@ -1255,9 +1556,10 @@ SUBROUTINE MetropolisES(nPart, iRanPart, A)
END SUBROUTINE MetropolisES
+
SUBROUTINE ARShakhov(nPart, iRanPart, Vtherm, HeatVec, Prandtl)
!===================================================================================================================================
-!> description
+!> Acceptance-rejection method for sampling from the Shakhov distribution function
!===================================================================================================================================
! MODULES
USE Ziggurat
@@ -1275,33 +1577,38 @@ SUBROUTINE ARShakhov(nPart, iRanPart, Vtherm, HeatVec, Prandtl)
REAL :: Vheat, V2, iRan, OldProb, Envelope
INTEGER :: iPart
!===================================================================================================================================
+! Calculate envelope function
Envelope = MAX(ABS(HeatVec(1)),ABS(HeatVec(2)),ABS(HeatVec(3)))/Vtherm**(3./2.)
Envelope = 1.+4.*Envelope
+! Loop over all relaxing particles
DO iPart = 1, nPart
+ ! Generate random normals
iRanPart(1,iPart) = rnor()
iRanPart(2,iPart) = rnor()
iRanPart(3,iPart) = rnor()
V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + (1.-Prandtl)*VHeat/(5.*Vtherm**(3./2.))*(V2/2.-5./2.))
+ OldProb = (1. + (1.-Prandtl)*Vheat/(5.*Vtherm**(3./2.))*(V2/2.-5./2.))
CALL RANDOM_NUMBER(iRan)
+ ! Acception if Envelope*iRan < OldProb
DO WHILE (Envelope*iRan.GT.OldProb)
iRanPart(1,iPart) = rnor()
iRanPart(2,iPart) = rnor()
iRanPart(3,iPart) = rnor()
V2 = iRanPart(1,iPart)*iRanPart(1,iPart) + iRanPart(2,iPart)*iRanPart(2,iPart) + iRanPart(3,iPart)*iRanPart(3,iPart)
Vheat = iRanPart(1,iPart)*HeatVec(1) + iRanPart(2,iPart)*HeatVec(2) + iRanPart(3,iPart)*HeatVec(3)
- OldProb = (1. + (1.-Prandtl)*VHeat/(5.*Vtherm**(3./2.))*(V2/2.-5./2.))
+ OldProb = (1. + (1.-Prandtl)*Vheat/(5.*Vtherm**(3./2.))*(V2/2.-5./2.))
CALL RANDOM_NUMBER(iRan)
END DO
END DO
END SUBROUTINE ARShakhov
+
SUBROUTINE BGK_BuildTransGaussNums(nPart, iRanPart)
!===================================================================================================================================
-!> description
+!> Generate normal distributed random vector for sampling of new velocities of all relaxing particles relaxing
!===================================================================================================================================
! MODULES
USE Ziggurat
@@ -1317,6 +1624,7 @@ SUBROUTINE BGK_BuildTransGaussNums(nPart, iRanPart)
! LOCAL VARIABLES
INTEGER :: iLoop
!===================================================================================================================================
+! Generate three normal distributed random values for all relaxing simulation particles
DO iLoop = 1, nPart
iRanPart(1,iLoop) = rnor()
iRanPart(2,iLoop) = rnor()
@@ -1325,401 +1633,20 @@ SUBROUTINE BGK_BuildTransGaussNums(nPart, iRanPart)
END SUBROUTINE BGK_BuildTransGaussNums
-SUBROUTINE CalcTEqui(nPart, CellTemp, TRot, TVib, Xi_Vib, Xi_Vib_old, RotExp, VibExp, &
- TEqui, rotrelaxfreq, vibrelaxfreq, dtCell, DoVibRelaxIn)
-!===================================================================================================================================
-! Calculation of the vibrational temperature (zero-point search) for polyatomic molecules
-!===================================================================================================================================
-! MODULES
-USE MOD_DSMC_Vars, ONLY: SpecDSMC
-USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp, TRot, TVib, Xi_Vib_old, rotrelaxfreq, vibrelaxfreq, dtCell
-INTEGER, INTENT(IN) :: nPart
-LOGICAL, OPTIONAL, INTENT(IN) :: DoVibRelaxIn
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: Xi_vib, TEqui, RotExp, VibExp
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-REAL :: TEqui_Old, betaR, betaV, RotFrac, VibFrac, TEqui_Old2
-REAL :: eps_prec=1.0E-0
-REAL :: correctFac, correctFacRot, maxexp !, Xi_rel
-LOGICAL :: DoVibRelax
-!===================================================================================================================================
-IF (PRESENT(DoVibRelaxIn)) THEN
- DoVibRelax = DoVibRelaxIn
-ELSE
- DoVibRelax = BGKDoVibRelaxation
-END IF
-maxexp = LOG(HUGE(maxexp))
-! Xi_rel = 2.*(2. - CollInf%omega(1,1))
-! correctFac = 1. + (2.*SpecDSMC(1)%CharaTVib / (CellTemp*(EXP(SpecDSMC(1)%CharaTVib / CellTemp)-1.)))**(2.) &
-! * EXP(SpecDSMC(1)%CharaTVib /CellTemp) / (2.*Xi_rel)
-! correctFacRot = 1. + 2./Xi_rel
-
-correctFac = 1.
-correctFacRot = 1.
-RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
-RotFrac = nPart*(1.-RotExp)
-IF(DoVibRelax) THEN
- VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
- VibFrac = nPart*(1.-VibExp)
-ELSE
- VibExp = 0.0
- VibFrac = 0.0
- Xi_vib = 0.0
-END IF
-TEqui_Old = 0.0
-TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib_old*VibFrac)
-DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
- IF (ABS(TRot-TEqui).LT.1E-3) THEN
- RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
- ELSE
- betaR = ((TRot-CellTemp)/(TRot-TEqui))*rotrelaxfreq*dtCell/correctFacRot
- IF (-betaR.GT.0.0) THEN
- RotExp = 0.
- ELSE IF (betaR.GT.maxexp) THEN
- RotExp = 0.
- ELSE
- RotExp = exp(-betaR)
- END IF
- END IF
- RotFrac = nPart*(1.-RotExp)
- IF(DoVibRelax) THEN
- IF (ABS(TVib-TEqui).LT.1E-3) THEN
- VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
- ELSE
- betaV = ((TVib-CellTemp)/(TVib-TEqui))*vibrelaxfreq*dtCell/correctFac
- IF (-betaV.GT.0.0) THEN
- VibExp = 0.
- ELSE IF (betaV.GT.maxexp) THEN
- VibExp = 0.
- ELSE
- VibExp = exp(-betaV)
- END IF
- END IF
- IF ((SpecDSMC(1)%CharaTVib/TEqui).GT.maxexp) THEN
- Xi_Vib = 0.0
- ELSE
- Xi_vib = 2.*SpecDSMC(1)%CharaTVib/TEqui/(EXP(SpecDSMC(1)%CharaTVib/TEqui)-1.)
- END IF
- VibFrac = nPart*(1.-VibExp)
- END IF
- TEqui_Old = TEqui
- TEqui_Old2 = TEqui
- TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib*VibFrac)
- IF(DoVibRelax) THEN
- DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
- TEqui =(TEqui + TEqui_Old2)*0.5
- IF ((SpecDSMC(1)%CharaTVib/TEqui).GT.maxexp) THEN
- Xi_Vib = 0.0
- ELSE
- Xi_vib = 2.*SpecDSMC(1)%CharaTVib/TEqui/(EXP(SpecDSMC(1)%CharaTVib/TEqui)-1.)
- END IF
- TEqui_Old2 = TEqui
- TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) / (3.*(nPart-1.)+2.*RotFrac+Xi_vib*VibFrac)
- END DO
- END IF
-END DO
-
-END SUBROUTINE CalcTEqui
-
-SUBROUTINE CalcTEquiMulti(nPart, nSpec, CellTemp, TRotSpec, TVibSpec, Xi_VibSpec, Xi_Vib_oldSpec, RotExpSpec, VibExpSpec, &
- TEqui, rotrelaxfreqSpec, vibrelaxfreqSpec, dtCell, DoVibRelaxIn)
-!===================================================================================================================================
-! Calculation of the vibrational temperature (zero-point search) for polyatomic molecules
-!===================================================================================================================================
-! MODULES
-USE MOD_DSMC_Vars, ONLY: SpecDSMC
-USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation
-USE MOD_Particle_Vars, ONLY: nSpecies
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp, TRotSpec(nSpecies), TVibSpec(nSpecies), Xi_Vib_oldSpec(nSpecies)
-REAL, INTENT(IN) :: rotrelaxfreqSpec(nSpecies), vibrelaxfreqSpec(nSpecies), dtCell
-INTEGER, INTENT(IN) :: nPart, nSpec(nSpecies)
-LOGICAL, OPTIONAL, INTENT(IN) :: DoVibRelaxIn
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: Xi_VibSpec(nSpecies), TEqui, RotExpSpec(nSpecies), VibExpSpec(nSpecies)
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-REAL :: TEqui_Old, betaR, betaV, RotFracSpec(nSpecies), VibFracSpec(nSpecies), TEqui_Old2
-REAL :: eps_prec=1.0E-0
-REAL :: correctFac, correctFacRot, exparg, TEquiNumDof !, Xi_rel,
-LOGICAL :: DoVibRelax
-INTEGER :: iSpec
-!===================================================================================================================================
-IF (PRESENT(DoVibRelaxIn)) THEN
- DoVibRelax = DoVibRelaxIn
-ELSE
- DoVibRelax = BGKDoVibRelaxation
-END IF
-! Xi_rel = 2.*(2. - CollInf%omega(1,1))
-! correctFac = 1. + (2.*SpecDSMC(1)%CharaTVib / (CellTemp*(EXP(SpecDSMC(1)%CharaTVib / CellTemp)-1.)))**(2.) &
-! * EXP(SpecDSMC(1)%CharaTVib /CellTemp) / (2.*Xi_rel)
-! correctFacRot = 1. + 2./Xi_rel
-
-correctFac = 1.
-correctFacRot = 1.
-RotFracSpec = 0.0
-VibFracSpec = 0.0
-DO iSpec=1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- RotExpSpec(iSpec) = exp(-rotrelaxfreqSpec(iSpec)*dtCell/correctFacRot)
- RotFracSpec(iSpec) = nSpec(iSpec)*(1.-RotExpSpec(iSpec))
- IF(DoVibRelax) THEN
- VibExpSpec(iSpec) = exp(-vibrelaxfreqSpec(iSpec)*dtCell/correctFac)
- VibFracSpec(iSpec) = nSpec(iSpec)*(1.-VibExpSpec(iSpec))
- ELSE
- VibExpSpec(iSpec) = 0.0
- VibFracSpec(iSpec) = 0.0
- Xi_VibSpec(iSpec) = 0.0
- END IF
- END IF
-END DO
-TEqui_Old = 0.0
-TEqui = 3.*(nPart-1.)*CellTemp
-TEquiNumDof = 3.*(nPart-1.)
-DO iSpec=1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
- TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)
- END IF
-END DO
-TEqui = TEqui / TEquiNumDof
-DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
- DO iSpec = 1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- IF (ABS(TRotSpec(iSpec)-TEqui).LT.1E-3) THEN
- RotExpSpec(iSpec) = exp(-rotrelaxfreqSpec(iSpec)*dtCell/correctFacRot)
- ELSE
- betaR = ((TRotSpec(iSpec)-CellTemp)/(TRotSpec(iSpec)-TEqui))*rotrelaxfreqSpec(iSpec)*dtCell/correctFacRot
- IF (-betaR.GT.0.0) THEN
- RotExpSpec(iSpec) = 0.
- ELSE IF (CHECKEXP(betaR)) THEN
- RotExpSpec(iSpec) = exp(-betaR)
- ELSE
- RotExpSpec(iSpec) = 0.
- END IF
- END IF
- RotFracSpec(iSpec) = nSpec(iSpec)*(1.-RotExpSpec(iSpec))
- IF(DoVibRelax) THEN
- IF (ABS(TVibSpec(iSpec)-TEqui).LT.1E-3) THEN
- VibExpSpec(iSpec) = exp(-vibrelaxfreqSpec(iSpec)*dtCell/correctFac)
- ELSE
- betaV = ((TVibSpec(iSpec)-CellTemp)/(TVibSpec(iSpec)-TEqui))*vibrelaxfreqSpec(iSpec)*dtCell/correctFac
- IF (-betaV.GT.0.0) THEN
- VibExpSpec(iSpec) = 0.
- ELSE IF (CHECKEXP(betaV)) THEN
- VibExpSpec(iSpec) = exp(-betaV)
- ELSE
- VibExpSpec(iSpec) = 0.
- END IF
- END IF
- exparg = SpecDSMC(iSpec)%CharaTVib/TEqui
- IF(CHECKEXP(exparg))THEN
- Xi_VibSpec(iSpec) = 2.*SpecDSMC(iSpec)%CharaTVib/TEqui/(EXP(exparg)-1.)
- ELSE
- Xi_VibSpec(iSpec) = 0.0
- END IF ! CHECKEXP(exparg)
- VibFracSpec(iSpec) = nSpec(iSpec)*(1.-VibExpSpec(iSpec))
- END IF
- END IF
- END DO
- TEqui_Old = TEqui
- TEqui_Old2 = TEqui
-
- TEqui = 3.*(nPart-1.)*CellTemp
- TEquiNumDof = 3.*(nPart-1.)
- DO iSpec=1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
- TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_VibSpec(iSpec)*VibFracSpec(iSpec)
- END IF
- END DO
- TEqui = TEqui / TEquiNumDof
- IF(DoVibRelax) THEN
- DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
- TEqui =(TEqui + TEqui_Old2)*0.5
- DO iSpec=1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- exparg = SpecDSMC(iSpec)%CharaTVib/TEqui
- IF(CHECKEXP(exparg))THEN
- Xi_VibSpec(iSpec) = 2.*SpecDSMC(iSpec)%CharaTVib/TEqui/(EXP(exparg)-1.)
- ELSE
- Xi_VibSpec(iSpec) = 0.0
- END IF ! CHECKEXP(exparg)
- END IF
- END DO
- TEqui_Old2 = TEqui
- TEqui = 3.*(nPart-1.)*CellTemp
- TEquiNumDof = 3.*(nPart-1.)
- DO iSpec=1, nSpecies
- IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- TEqui = TEqui + 2.*RotFracSpec(iSpec)*TRotSpec(iSpec)+Xi_Vib_oldSpec(iSpec)*VibFracSpec(iSpec)*TVibSpec(iSpec)
- TEquiNumDof = TEquiNumDof + 2.*RotFracSpec(iSpec) + Xi_VibSpec(iSpec)*VibFracSpec(iSpec)
- END IF
- END DO
- TEqui = TEqui / TEquiNumDof
- END DO
- END IF
-END DO
-END SUBROUTINE CalcTEquiMulti
-
-
-SUBROUTINE CalcTEquiPoly(nPart, CellTemp, TRot, TVib, nXiVibDOF, Xi_Vib_DOF, Xi_Vib_old, RotExp, VibExp, TEqui, rotrelaxfreq, vibrelaxfreq, &
- dtCell, DoVibRelaxIn)
-!===================================================================================================================================
-! Calculation of the vibrational temperature (zero-point search) for polyatomic molecules
-!===================================================================================================================================
-! MODULES
-USE MOD_DSMC_Vars, ONLY: SpecDSMC, PolyatomMolDSMC
-USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp, TRot, TVib, Xi_Vib_old, rotrelaxfreq, vibrelaxfreq
-INTEGER, INTENT(IN) :: nPart,nXiVibDOF
-REAL, INTENT(IN) :: dtCell
-LOGICAL, OPTIONAL, INTENT(IN) :: DoVibRelaxIn
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-REAL, INTENT(OUT) :: Xi_vib_DOF(nXiVibDOF), TEqui, RotExp, VibExp
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-REAL :: TEqui_Old, betaR, betaV, RotFrac, VibFrac, Xi_Rot, TEqui_Old2, exparg
-REAL :: eps_prec=1.0
-REAL :: correctFac, correctFacRot
-INTEGER :: iDOF, iPolyatMole
-LOGICAL :: DoVibRelax
-!===================================================================================================================================
-IF (PRESENT(DoVibRelaxIn)) THEN
- DoVibRelax = DoVibRelaxIn
-ELSE
- DoVibRelax = BGKDoVibRelaxation
-END IF
-
-Xi_Rot = SpecDSMC(1)%Xi_Rot
-iPolyatMole = SpecDSMC(1)%SpecToPolyArray
-! Xi_rel = 2.*(2. - CollInf%omega(1,1))
-! correctFac = 0.0
-! DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
-! correctFac = correctFac &
-! + (2.*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / (CellTemp &
-! *(EXP(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / CellTemp)-1.)))**(2.) &
-! * EXP(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / CellTemp) / 2.
-! END DO
-! correctFac = 1. + correctFac/Xi_rel
-! correctFacRot = 1. + Xi_Rot/Xi_rel
-
-correctFac = 1.
-correctFacRot = 1.
-RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
-RotFrac = nPart*(1.-RotExp)
-IF(DoVibRelax) THEN
- VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
- VibFrac = nPart*(1.-VibExp)
-ELSE
- VibExp = 0.0
- VibFrac = 0.0
- Xi_vib_DOF = 0.0
-END IF
-TEqui_Old = 0.0
-TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib_old*VibFrac)
-DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
- IF (ABS(TRot-TEqui).LT.1E-3) THEN
- RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
- ELSE
- betaR = ((TRot-CellTemp)/(TRot-TEqui))*rotrelaxfreq*dtCell/correctFacRot
- IF (-betaR.GT.0.0) THEN
- RotExp = 0.
- ELSE IF (CHECKEXP(betaR)) THEN
- RotExp = exp(-betaR)
- ELSE
- RotExp = 0.
- END IF
- END IF
- RotFrac = nPart*(1.-RotExp)
- IF(DoVibRelax) THEN
- IF (ABS(TVib-TEqui).LT.1E-3) THEN
- VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
- ELSE
- betaV = ((TVib-CellTemp)/(TVib-TEqui))*vibrelaxfreq*dtCell/correctFac
- IF (-betaV.GT.0.0) THEN
- VibExp = 0.
- ELSEIF(CHECKEXP(betaV))THEN
- VibExp = exp(-betaV)
- ELSE
- VibExp = 0.
- END IF
- END IF
- DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
- exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
- IF(CHECKEXP(exparg))THEN
- IF(exparg.gt.0.)THEN ! positive overflow: exp -> inf
- Xi_vib_DOF(iDOF) = 2.*exparg/(EXP(exparg)-1.)
- ELSE ! negative overflow: exp -> 0
- Xi_vib_DOF(iDOF) = 2.*exparg/(-1.)
- END IF ! exparg.gt.0.
- ELSE
- Xi_vib_DOF(iDOF) = 0.0
- END IF ! CHECKEXP(exparg)
- END DO
- VibFrac = nPart*(1.-VibExp)
- END IF
- TEqui_Old = TEqui
- TEqui_Old2 = TEqui
- TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) &
- / (3.*(nPart-1.)+2.*RotFrac+SUM(Xi_vib_DOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))*VibFrac)
- IF(DoVibRelax) THEN
- DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
- TEqui =(TEqui + TEqui_Old2)*0.5
- DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
- exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
- IF(CHECKEXP(exparg))THEN
- IF(exparg.gt.0.)THEN ! positive overflow: exp -> inf
- Xi_vib_DOF(iDOF) = 2.*exparg/(EXP(exparg)-1.)
- ELSE ! negative overflow: exp -> 0
- Xi_vib_DOF(iDOF) = 2.*exparg/(-1.)
- END IF ! exparg.gt.0.
- ELSE
- Xi_vib_DOF(iDOF) = 0.0
- END IF ! CHECKEXP(exparg)
- END DO
- TEqui_Old2 = TEqui
- TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) &
- / (3.*(nPart-1.)+2.*RotFrac+SUM(Xi_vib_DOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))*VibFrac)
- END DO
- END IF
-END DO
-
-END SUBROUTINE CalcTEquiPoly
-
-SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Visc, ThermalCond)
+SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Xi_RotSpec, Xi_VibSpec, Visc, ThermalCond)
!===================================================================================================================================
!> Determination of the mixture viscosity and thermal conductivity using collision integrals (derived for the Variable Hard
!> Sphere model). Solving an equation system depending on the number of species.
!===================================================================================================================================
! MODULES
-USE MOD_DSMC_Vars, ONLY : CollInf
+USE MOD_DSMC_Vars, ONLY : CollInf, SpecDSMC
USE MOD_Globals_Vars, ONLY : BoltzmannConst
USE MOD_Particle_Vars, ONLY : Species, nSpecies
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp(nSpecies+1), Xi(nSpecies), dens
+REAL, INTENT(IN) :: CellTemp(nSpecies+1), Xi(nSpecies), dens, Xi_RotSpec(nSpecies), Xi_VibSpec(nSpecies)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
REAL, INTENT(OUT) :: Visc,ThermalCond
@@ -1728,29 +1655,55 @@ SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Visc, ThermalCo
!-----------------------------------------------------------------------------------------------------------------------------------
REAL :: Sigma_11, Sigma_22, B_12(nSpecies,nSpecies), A_12(nSpecies,nSpecies), InteractDiam, cv, DiffCoef(nSpecies, nSpecies)
REAL :: Mass, ViscSpec(nSpecies), ThermalCondSpec(nSpecies), TVHS, omegaVHS, E_12, CellTemptmp
+REAL :: ThermalCondSpec_Vib(nSpecies), ThermalCondSpec_Rot(nSpecies), cv_rot, cv_vib, rhoSpec
+REAL :: Xj_Dij(nSpecies,nSpecies), Xi_Dij_tot
REAL :: ViscMat(nSpecies, nSpecies), RHSSolve(nSpecies), m0, pressure
INTEGER :: iSpec, jSpec, kSpec, IPIV(nSpecies), info_dgesv
!===================================================================================================================================
-ViscSpec = 0.; ThermalCondSpec = 0.; DiffCoef =0.; A_12 = 0.; B_12 = 0.
+ViscSpec = 0.; ThermalCondSpec = 0.; ThermalCondSpec_Vib = 0.; ThermalCondSpec_Rot = 0.; DiffCoef =0.; A_12 = 0.; B_12 = 0.
+Xj_Dij = 0.; cv_rot = 0.; cv_vib = 0.; E_12 = 0.
+! Loop over all species combinations
DO iSpec = 1, nSpecies
+ IF (Xi(iSpec).LE.0.0) CYCLE
+ ! Calculate cv with rotational and vibrational degrees of freedom
+ IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ cv_rot = (Xi_RotSpec(iSpec)*BoltzmannConst)/(2.*Species(iSpec)%MassIC)
+ cv_vib = (Xi_VibSpec(iSpec)*BoltzmannConst)/(2.*Species(iSpec)%MassIC)
+ END IF
DO jSpec = iSpec, nSpecies
+ IF (Xi(jSpec).LE.0.0) CYCLE
+ ! Interaction parameters
InteractDiam = CollInf%dref(iSpec,jSpec)
- Mass = Species(iSpec)%MassIC*Species(jSpec)%MassIC/(Species(iSpec)%MassIC + Species(jSpec)%MassIC)
+ Mass = Species(iSpec)%MassIC*Species(jSpec)%MassIC/(Species(iSpec)%MassIC + Species(jSpec)%MassIC) ! reduced mass
TVHS = CollInf%Tref(iSpec,jSpec)
omegaVHS = CollInf%omega(iSpec,jSpec)
IF (iSpec.EQ.jSpec) THEN
- CellTemptmp = CellTemp(iSpec)
+ CellTemptmp = CellTemp(iSpec) ! Species temperature or cell temperature for nSpec<2 or u2spec=0
ELSE
- CellTemptmp = CellTemp(nSpecies+1)
+ CellTemptmp = CellTemp(nSpecies+1) ! Cell temperature
END IF
- Sigma_22 = CalcSigma_22VHS(CellTemptmp,InteractDiam,Mass,TVHS, omegaVHS)
+ ! Calculation of collision integral Sigma_22
+ CALL CalcSigma_22VHS(CellTemptmp, InteractDiam, Mass, TVHS, omegaVHS, Sigma_22)
IF (iSpec.EQ.jSpec) THEN
- cv= 3./2.*BoltzmannConst/(2.*Mass)
+ cv= 3./2.*BoltzmannConst/(2.*Mass) ! DOF = 3, translational part
+ ! Calculation of the viscosity and thermal conductivity
+ ! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 160
ViscSpec(iSpec) = (5./8.)*(BoltzmannConst*CellTemp(iSpec))/Sigma_22
ThermalCondSpec(iSpec) = (25./16.)*(cv*BoltzmannConst*CellTemp(iSpec))/Sigma_22
- !ThermalCondSpec(iSpec) = (15./4.)*BoltzmannConst/(2.*Mass)*ViscSpec(iSpec)
+ ! Results in the same as ThermalCondSpec(iSpec) = (15./4.)*BoltzmannConst/(2.*Mass)*ViscSpec(iSpec)
+ ! Additional calculation of Sigma_11VHS and the diffusion coefficient for molecular species
+ IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ CALL CalcSigma_11VHS(CellTemp(nSpecies+1), InteractDiam, Mass, TVHS, omegaVHS, Sigma_11)
+ E_12 = BoltzmannConst*CellTemp(nSpecies+1)/(8.*Species(iSpec)%MassIC*Species(jSpec)%MassIC &
+ /(Species(iSpec)%MassIC+Species(jSpec)%MassIC)**2.*Sigma_11)
+ DiffCoef(iSpec,jSpec) = 3.*E_12/(2.*(Species(iSpec)%MassIC+Species(jSpec)%MassIC)*dens)
+ END IF
ELSE
- CALL CalcSigma_11VHS(CellTemp(nSpecies+1),InteractDiam,Mass,TVHS, omegaVHS, Sigma_11)
+ ! Calculation of collision integral Sigma_11
+ CALL CalcSigma_11VHS(CellTemp(nSpecies+1), InteractDiam, Mass, TVHS, omegaVHS, Sigma_11)
+ ! Parameters for calculation of contribution of species to mixture transport coefficients
+ ! Pfeiffer et. al., Physics of Fluids 33, 036106 (2021), "Multi-species modeling in the particle-based ellipsoidal
+ ! statistical Bhatnagar-Gross-Krook method for monatomic gas species"
B_12(iSpec,jSpec) = (5.*GAMMA(4.-omegaVHS)-GAMMA(5.-omegaVHS))/(5.*GAMMA(3.-omegaVHS))
B_12(jSpec,iSpec) = B_12(iSpec,jSpec)
A_12(iSpec,jSpec) = Sigma_22 / (5.*Sigma_11)
@@ -1760,37 +1713,69 @@ SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Visc, ThermalCo
DiffCoef(iSpec,jSpec) = 3.*E_12/(2.*(Species(iSpec)%MassIC+Species(jSpec)%MassIC)*dens)
DiffCoef(jSpec,iSpec) = DiffCoef(iSpec,jSpec)
END IF
+ Xj_Dij(iSpec,jSpec) = Xi(jSpec)/DiffCoef(iSpec,jSpec)
+ Xj_Dij(jSpec,iSpec) = Xj_Dij(iSpec,jSpec)
END DO
+ IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ ! Calculation of thermal conductivity of rotation and vibration for each molecular species
+ ! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 254f
+ ! F. Hild, M. Pfeiffer, "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method
+ ! including internal degrees of freedom", subitted to Phys. Fluids, August 2023
+ Xi_Dij_tot = SUM(Xj_Dij(iSpec,:))
+ rhoSpec = dens * Species(iSpec)%MassIC * Xi(iSpec)
+ ThermalCondSpec_Rot(iSpec) = (rhoSpec*cv_rot/Xi_Dij_tot)
+ ThermalCondSpec_Vib(iSpec) = (rhoSpec*cv_vib/Xi_Dij_tot)
+ END IF
END DO
+! Calculate mixture viscosity by solving a system of linear equations with matrices
+! Pfeiffer et. al., Physics of Fluids 33, 036106 (2021),
+! "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method for monatomic gas species"
+! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 352
ViscMat = 0.0
DO iSpec = 1, nSpecies
+ IF (Xi(iSpec).LE.0.0) THEN
+ ViscMat(iSpec,iSpec) = 1. ! Ensure invertibility of ViscMat
+ CYCLE
+ END IF
DO jSpec = 1, nSpecies
+ IF (Xi(jSpec).LE.0.0) CYCLE
IF (iSpec.EQ.jSpec) THEN
- ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) + Xi(iSpec)/ViscSpec(iSpec)
+ ViscMat(iSpec, jSpec) = Xi(iSpec)/ViscSpec(iSpec)
DO kSpec = 1, nSpecies
- IF(kSpec.EQ.iSpec) CYCLE
+ IF (Xi(kSpec).LE.0.0) CYCLE
+ IF (kSpec.EQ.iSpec) CYCLE
ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) + 3.*Xi(kSpec) / ((Species(iSpec)%MassIC*dens &
- + Species(kSpec)%MassIC*dens)*DiffCoef(iSpec,kSpec))*(2./3.+Species(kSpec)%MassIC/Species(iSpec)%MassIC*A_12(iSpec,kSpec))
+ + Species(kSpec)%MassIC*dens)*DiffCoef(iSpec,kSpec))*(2./3.+Species(kSpec)%MassIC/Species(iSpec)%MassIC*A_12(iSpec,kSpec))
END DO
ELSE
- ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) - Xi(iSpec)*3. / ((Species(iSpec)%MassIC*dens &
+ ViscMat(iSpec, jSpec) = -Xi(iSpec)*3. / ((Species(iSpec)%MassIC*dens &
+ Species(jSpec)%MassIC*dens)*DiffCoef(iSpec,jSpec))*(2./3.-A_12(iSpec,jSpec))
END IF
END DO
- RHSSolve(iSpec) = Xi(iSpec)
END DO
+RHSSolve(:) = Xi(:)
CALL DGESV(nSpecies, 1, ViscMat, nSpecies, IPIV, RHSSolve, nSpecies, info_dgesv)
Visc = SUM(RHSSolve)
+! Calculate mixture thermal conductivity by solving a system of linear equations with matrices
+! Pfeiffer et. al., Physics of Fluids 33, 036106 (2021),
+! "Multi-species modeling in the particle-based ellipsoidal statistical Bhatnagar-Gross-Krook method for monatomic gas species"
+! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 350f
pressure = BoltzmannConst*dens*CellTemp(nSpecies+1)
ViscMat = 0.0
DO iSpec = 1, nSpecies
+ IF (Xi(iSpec).LE.0.0) THEN
+ ViscMat(iSpec,iSpec) = 1. ! Ensure invertibility of ViscMat
+ CYCLE
+ END IF
DO jSpec = 1, nSpecies
+ IF (Xi(jSpec).LE.0.0) CYCLE
IF (iSpec.EQ.jSpec) THEN
- ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) + Xi(iSpec)/ThermalCondSpec(iSpec)
+ ViscMat(iSpec, jSpec) = Xi(iSpec)/ThermalCondSpec(iSpec)
DO kSpec = 1, nSpecies
- IF(kSpec.EQ.iSpec) CYCLE
+ IF (Xi(kSpec).LE.0.0) CYCLE
+ IF (kSpec.EQ.iSpec) CYCLE
m0 = Species(iSpec)%MassIC+Species(kSpec)%MassIC
ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) + CellTemp(nSpecies+1)*Xi(kSpec)/(5.*pressure*DiffCoef(iSpec,kSpec)) &
* (6.*Species(iSpec)%MassIC**2./m0**2.+(5.-4.*B_12(iSpec,kSpec))*Species(kSpec)%MassIC**2./m0**2. &
@@ -1798,62 +1783,68 @@ SUBROUTINE CalcViscosityThermalCondColIntVHS(CellTemp, Xi, dens, Visc, ThermalCo
END DO
ELSE
m0 = Species(iSpec)%MassIC+Species(jSpec)%MassIC
- ViscMat(iSpec, jSpec) = ViscMat(iSpec, jSpec) - Xi(iSpec)*CellTemp(nSpecies+1) &
- *(Species(iSpec)%MassIC*Species(jSpec)%MassIC/m0**2.)/(5.*pressure*DiffCoef(iSpec,jSpec)) &
- *(11.-4.*B_12(iSpec,jSpec)-8.*A_12(iSpec,jSpec))
+ ViscMat(iSpec, jSpec) = -Xi(iSpec)*CellTemp(nSpecies+1) * (Species(iSpec)%MassIC*Species(jSpec)%MassIC/m0**2.) &
+ /(5.*pressure*DiffCoef(iSpec,jSpec)) *(11.-4.*B_12(iSpec,jSpec)-8.*A_12(iSpec,jSpec))
END IF
END DO
- RHSSolve(iSpec) = Xi(iSpec)
END DO
+RHSSolve(:) = Xi(:)
CALL DGESV(nSpecies, 1, ViscMat, nSpecies, IPIV, RHSSolve, nSpecies, info_dgesv)
-ThermalCond = SUM(RHSSolve)
+! Thermal conductivity from translation, rotation and vibration
+ThermalCond = SUM(RHSSolve) + SUM(ThermalCondSpec_Rot) + SUM(ThermalCondSpec_Vib)
END SUBROUTINE CalcViscosityThermalCondColIntVHS
-SUBROUTINE CalcSigma_11VHS(CellTemp,Dref,Mass,Tref, omegaVHS, Sigma_11)
+SUBROUTINE CalcSigma_11VHS(CellTemp, Dref, Mass, Tref, omegaVHS, Sigma_11)
!===================================================================================================================================
!>
!===================================================================================================================================
! MODULES
-USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst
+USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp,Dref,Mass,Tref, omegaVHS
+REAL, INTENT(IN) :: CellTemp, Dref, Mass, Tref, omegaVHS
REAL, INTENT(OUT) :: Sigma_11
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-REAL :: Prefactor
+REAL :: Prefactor
!===================================================================================================================================
+ ! See Stephani et. al., Physics of Fluids 24, 077101 (2012),
+ ! “Consistent treatment of transport properties for five-species air direct simulation Monte Carlo/Navier-Stokes applications”
Prefactor = Pi/2.*Dref*Dref*SQRT(BoltzmannConst/(2.*Pi*Mass))*Tref**omegaVHS*GAMMA(3.-omegaVHS)/GAMMA(2.-omegaVHS)
Sigma_11 = Prefactor*CellTemp**(0.5-omegaVHS)
END SUBROUTINE CalcSigma_11VHS
-REAL FUNCTION CalcSigma_22VHS(CellTemp,Dref,Mass,Tref, omegaVHS)
+
+SUBROUTINE CalcSigma_22VHS(CellTemp, Dref, Mass, Tref, omegaVHS, Sigma_22)
!===================================================================================================================================
!>
!===================================================================================================================================
! MODULES
-USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst
+USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-REAL, INTENT(IN) :: CellTemp,Dref,Mass,Tref, omegaVHS
+REAL, INTENT(IN) :: CellTemp, Dref, Mass, Tref, omegaVHS
+REAL, INTENT(OUT) :: Sigma_22
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-REAL :: Prefactor
+REAL :: Prefactor
!===================================================================================================================================
+ ! See Stephani et. al., Physics of Fluids 24, 077101 (2012),
+ ! “Consistent treatment of transport properties for five-species air direct simulation Monte Carlo/Navier-Stokes applications”
Prefactor = Pi/3.*Dref*Dref*SQRT(BoltzmannConst/(2.*Pi*Mass))*Tref**omegaVHS*GAMMA(4.-omegaVHS)/GAMMA(2.-omegaVHS)
- CalcSigma_22VHS = Prefactor*CellTemp**(0.5-omegaVHS)
+ Sigma_22 = Prefactor*CellTemp**(0.5-omegaVHS)
-END FUNCTION CalcSigma_22VHS
+END SUBROUTINE CalcSigma_22VHS
END MODULE MOD_BGK_CollOperator
diff --git a/src/particles/bgk/bgk_init.f90 b/src/particles/bgk/bgk_init.f90
index 67938a2c6..bedd1c728 100644
--- a/src/particles/bgk/bgk_init.f90
+++ b/src/particles/bgk/bgk_init.f90
@@ -68,7 +68,7 @@ SUBROUTINE DefineParametersBGK()
'cell refinement')
CALL prms%CreateLogicalOption('Particles-BGK-MovingAverage', 'Enable a moving average of variables for the calculation '//&
'of the cell temperature for relaxation frequencies','.FALSE.')
-CALL prms%CreateRealOption( 'Particles-BGK-MovingAverageFac', 'Use the moving average of moments M with '//&
+CALL prms%CreateRealOption( 'Particles-BGK-MovingAverageFac', 'Use the moving average of moments M with '//&
'M^n+1=AverageFac*M+(1-AverageFac)*M^n','0.01')
CALL prms%CreateRealOption( 'Particles-BGK-SplittingDens', 'Octree-refinement will only be performed above this number '//&
'density', '0.0')
@@ -97,6 +97,9 @@ SUBROUTINE InitBGK()
USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree
USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst
USE MOD_Basis ,ONLY: PolynomialDerivativeMatrix
+#if USE_MPI
+USE MOD_Particle_MPI_Vars ,ONLY: DoParticleLatencyHiding
+#endif /*USE_MPI*/
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
@@ -109,7 +112,6 @@ SUBROUTINE InitBGK()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iSpec, iSpec2
-REAL :: delta_ij
LOGICAL :: MoleculePresent
!===================================================================================================================================
LBWRITE(UNIT_stdOut,'(A)') ' INIT BGK Solver...'
@@ -118,49 +120,51 @@ SUBROUTINE InitBGK()
DO iSpec=1, nSpecies
IF ((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) MoleculePresent = .TRUE.
ALLOCATE(SpecBGK(iSpec)%CollFreqPreFactor(nSpecies))
+ ! Calculation of the prefacor of the collision frequency per species
+ ! S. Chapman and T.G. Cowling, "The mathematical Theory of Non-Uniform Gases", Cambridge University Press, 1970, S. 87f
DO iSpec2=1, nSpecies
- IF (iSpec.EQ.iSpec2) THEN
- delta_ij = 1.0
- ELSE
- delta_ij = 0.0
- END IF
- SpecBGK(iSpec)%CollFreqPreFactor(iSpec2)= 4.*(2.-delta_ij)*CollInf%dref(iSpec,iSpec2)**2.0 &
+ SpecBGK(iSpec)%CollFreqPreFactor(iSpec2)= 4.*CollInf%dref(iSpec,iSpec2)**2.0 &
* SQRT(Pi*BoltzmannConst*CollInf%Tref(iSpec,iSpec2)*(Species(iSpec)%MassIC + Species(iSpec2)%MassIC) &
/(2.*(Species(iSpec)%MassIC * Species(iSpec2)%MassIC)))/CollInf%Tref(iSpec,iSpec2)**(-CollInf%omega(iSpec,iSpec2) +0.5)
END DO
END DO
-IF ((nSpecies.GT.1).AND.(ANY(SpecDSMC(:)%PolyatomicMol))) THEN
- CALL abort(__STAMP__,' ERROR Multispec not implemented with polyatomic molecules!')
-END IF
BGKCollModel = GETINT('Particles-BGK-CollModel')
IF ((nSpecies.GT.1).AND.(BGKCollModel.GT.1)) THEN
- CALL abort(__STAMP__,' ERROR Multispec only with ESBGK model!')
+ CALL abort(__STAMP__,'ERROR Multispec only with ESBGK model!')
END IF
BGKMixtureModel = GETINT('Particles-BGK-MixtureModel')
-! ESBGK options
-ESBGKModel = GETINT('Particles-ESBGK-Model') ! 1: Approximative, 2: Exact, 3: MetropolisHastings
+! ESBGK options for sampling: 1: Approximative, 2: Exact, 3: MetropolisHastings
+ESBGKModel = GETINT('Particles-ESBGK-Model')
+
! Coupled BGK with DSMC, use a number density as limit above which BGK is used, and below which DSMC is used
CoupledBGKDSMC = GETLOGICAL('Particles-CoupledBGKDSMC')
IF(CoupledBGKDSMC) THEN
- IF (DoVirtualCellMerge) THEN
- CALL abort(__STAMP__,' Virtual cell merge not implemented for coupled DSMC-BGK simulations!')
+ IF (DoVirtualCellMerge) THEN
+ CALL abort(__STAMP__,'Virtual cell merge not implemented for coupled DSMC-BGK simulations!')
END IF
+#if USE_MPI
+ IF (DoParticleLatencyHiding) THEN
+ CALL abort(__STAMP__,'Particle latency hiding not implemented for coupled DSMC-BGK simulations!')
+ END IF
+#endif /*USE_MPI*/
BGKDSMCSwitchDens = GETREAL('Particles-BGK-DSMC-SwitchDens')
ELSE
IF(RadialWeighting%DoRadialWeighting) RadialWeighting%PerformCloning = .TRUE.
END IF
+
! Octree-based cell refinement, up to a certain number of particles
DoBGKCellAdaptation = GETLOGICAL('Particles-BGK-DoCellAdaptation')
IF(DoBGKCellAdaptation) THEN
BGKMinPartPerCell = GETINT('Particles-BGK-MinPartsPerCell')
IF(.NOT.DSMC%UseOctree) THEN
DSMC%UseOctree = .TRUE.
- IF(NGeo.GT.PP_N) CALL abort(__STAMP__,' Set PP_N to NGeo, otherwise the volume is not computed correctly.')
+ IF(NGeo.GT.PP_N) CALL abort(__STAMP__,'Set PP_N to NGeo, otherwise the volume is not computed correctly.')
CALL DSMC_init_octree()
END IF
END IF
BGKSplittingDens = GETREAL('Particles-BGK-SplittingDens')
+
! Moving Average
BGKMovingAverage = GETLOGICAL('Particles-BGK-MovingAverage')
IF(BGKMovingAverage) THEN
@@ -169,20 +173,16 @@ SUBROUTINE InitBGK()
CALL BGK_init_MovingAverage()
IF(nSpecies.GT.1) CALL abort(__STAMP__,'nSpecies >1 and molecules not implemented for BGK averaging!')
END IF
+
IF(MoleculePresent) THEN
! Vibrational modelling
BGKDoVibRelaxation = GETLOGICAL('Particles-BGK-DoVibRelaxation')
BGKUseQuantVibEn = GETLOGICAL('Particles-BGK-UseQuantVibEn')
- IF ((nSpecies.GT.1).AND.(BGKUseQuantVibEn)) THEN
- CALL abort(&
- __STAMP__&
- ,' ERROR Multispec not implemented for quantized vibrational energy!')
- END IF
END IF
IF(DSMC%CalcQualityFactors) THEN
- ALLOCATE(BGK_QualityFacSamp(1:7,nElems))
- BGK_QualityFacSamp(1:7,1:nElems) = 0.0
+ ALLOCATE(BGK_QualityFacSamp(1:9,nElems))
+ BGK_QualityFacSamp(1:9,1:nElems) = 0.0
END IF
BGKInitDone = .TRUE.
@@ -249,6 +249,7 @@ SUBROUTINE FinalizeBGK()
END SUBROUTINE FinalizeBGK
+
SUBROUTINE DeleteElemNodeAverage()
!----------------------------------------------------------------------------------------------------------------------------------!
! Delete the pointer tree ElemNodeVol
@@ -297,7 +298,7 @@ RECURSIVE SUBROUTINE DeleteNodeAverage(NodeAverage)
INTEGER :: iLoop, nLoop
!===================================================================================================================================
nLoop = 2**Symmetry%Order
-IF(ASSOCIATED(NodeAverage%SubNode)) THEN
+IF(ASSOCIATED(NodeAverage%SubNode)) THEN
DO iLoop = 1, nLoop
CALL DeleteNodeAverage(NodeAverage%SubNode(iLoop))
END DO
diff --git a/src/particles/bgk/bgk_main.f90 b/src/particles/bgk/bgk_main.f90
index 8d640f43c..d856dd6dc 100644
--- a/src/particles/bgk/bgk_main.f90
+++ b/src/particles/bgk/bgk_main.f90
@@ -48,6 +48,7 @@ SUBROUTINE BGK_DSMC_main(stage_opt)
USE MOD_BGK_Vars ,ONLY: BGKMovingAverage,ElemNodeAveraging
USE MOD_BGK_Vars ,ONLY: BGK_MeanRelaxFactor,BGK_MeanRelaxFactorCounter,BGK_MaxRelaxFactor,BGK_QualityFacSamp
USE MOD_BGK_Vars ,ONLY: BGK_MaxRotRelaxFactor, BGK_PrandtlNumber, BGK_ExpectedPrandtlNumber
+USE MOD_BGK_Vars ,ONLY: BGK_Viscosity, BGK_ThermalConductivity
USE MOD_BGK_CollOperator ,ONLY: BGK_CollisionOperator
USE MOD_DSMC ,ONLY: DSMC_main
USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting
@@ -128,10 +129,10 @@ SUBROUTINE BGK_DSMC_main(stage_opt)
IF(DSMC%CalcQualityFactors) THEN
BGK_MeanRelaxFactorCounter = 0; BGK_MeanRelaxFactor = 0.; BGK_MaxRelaxFactor = 0.; BGK_MaxRotRelaxFactor = 0.
- BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.
+ BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.; BGK_Viscosity=0.; BGK_ThermalConductivity=0.
END IF
IF (BGKMovingAverage) THEN
- CALL BGK_CollisionOperator(iPartIndx_Node, nPart, ElemVolume_Shared(CNElemID), ElemNodeAveraging(iElem)%Root%AverageValues(:))
+ CALL BGK_CollisionOperator(iPartIndx_Node, nPart, ElemVolume_Shared(CNElemID), ElemNodeAveraging(iElem)%Root%AverageValues(:))
ELSE
CALL BGK_CollisionOperator(iPartIndx_Node, nPart, ElemVolume_Shared(CNElemID))
END IF
@@ -145,6 +146,8 @@ SUBROUTINE BGK_DSMC_main(stage_opt)
BGK_QualityFacSamp(5,iElem) = BGK_QualityFacSamp(5,iElem) + BGK_MaxRotRelaxFactor
BGK_QualityFacSamp(6,iElem) = BGK_QualityFacSamp(6,iElem) + BGK_PrandtlNumber
BGK_QualityFacSamp(7,iElem) = BGK_QualityFacSamp(7,iElem) + BGK_ExpectedPrandtlNumber
+ BGK_QualityFacSamp(8,iElem) = BGK_QualityFacSamp(8,iElem) + BGK_Viscosity
+ BGK_QualityFacSamp(9,iElem) = BGK_QualityFacSamp(9,iElem) + BGK_ThermalConductivity
END IF
END IF
END IF
@@ -170,6 +173,7 @@ SUBROUTINE BGK_main(stage_opt)
USE MOD_BGK_Vars ,ONLY: DoBGKCellAdaptation, BGKMovingAverage, ElemNodeAveraging
USE MOD_BGK_Vars ,ONLY: BGK_MeanRelaxFactor,BGK_MeanRelaxFactorCounter,BGK_MaxRelaxFactor,BGK_QualityFacSamp
USE MOD_BGK_Vars ,ONLY: BGK_MaxRotRelaxFactor, BGK_PrandtlNumber, BGK_ExpectedPrandtlNumber
+USE MOD_BGK_Vars ,ONLY: BGK_Viscosity, BGK_ThermalConductivity
USE MOD_BGK_CollOperator ,ONLY: BGK_CollisionOperator
USE MOD_DSMC_Analyze ,ONLY: DSMCMacroSampling
USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared
@@ -266,7 +270,7 @@ SUBROUTINE BGK_main(stage_opt)
IF(DSMC%CalcQualityFactors) THEN
BGK_MeanRelaxFactorCounter = 0; BGK_MeanRelaxFactor = 0.; BGK_MaxRelaxFactor = 0.; BGK_MaxRotRelaxFactor = 0.
- BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.
+ BGK_PrandtlNumber=0.; BGK_ExpectedPrandtlNumber=0.; BGK_Viscosity=0.; BGK_ThermalConductivity=0.
END IF
IF (BGKMovingAverage) THEN
@@ -284,6 +288,8 @@ SUBROUTINE BGK_main(stage_opt)
BGK_QualityFacSamp(5,iElem) = BGK_QualityFacSamp(5,iElem) + BGK_MaxRotRelaxFactor
BGK_QualityFacSamp(6,iElem) = BGK_QualityFacSamp(6,iElem) + BGK_PrandtlNumber
BGK_QualityFacSamp(7,iElem) = BGK_QualityFacSamp(7,iElem) + BGK_ExpectedPrandtlNumber
+ BGK_QualityFacSamp(8,iElem) = BGK_QualityFacSamp(8,iElem) + BGK_Viscosity
+ BGK_QualityFacSamp(9,iElem) = BGK_QualityFacSamp(9,iElem) + BGK_ThermalConductivity
END IF
END IF
END DO
diff --git a/src/particles/bgk/bgk_vars.f90 b/src/particles/bgk/bgk_vars.f90
index f2312579e..b1b63a36b 100644
--- a/src/particles/bgk/bgk_vars.f90
+++ b/src/particles/bgk/bgk_vars.f90
@@ -48,6 +48,8 @@ MODULE MOD_BGK_Vars
REAL :: BGK_MaxRotRelaxFactor
REAL :: BGK_PrandtlNumber
REAL :: BGK_ExpectedPrandtlNumber
+REAL :: BGK_Viscosity
+REAL :: BGK_ThermalConductivity
TYPE tElemNodeAveraging
TYPE (tNodeAverage), POINTER :: Root => null()
diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90
index 6cc95575b..a18f209d3 100644
--- a/src/particles/boundary/particle_boundary_condition.f90
+++ b/src/particles/boundary/particle_boundary_condition.f90
@@ -153,14 +153,6 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum,IsIn
!-----------------------------------------------------------------------------------------------------------------------------------
CALL PeriodicBoundary(iPart,SideID,ElemID)
!-----------------------------------------------------------------------------------------------------------------------------------
- CASE(4) ! PartBound%SimpleAnodeBC
- !-----------------------------------------------------------------------------------------------------------------------------------
- CALL abort(__STAMP__,' ERROR: PartBound not associated!. (PartBound%SimpleAnodeBC)')
- !-----------------------------------------------------------------------------------------------------------------------------------
- CASE(5) ! PartBound%SimpleCathodeBC
- !-----------------------------------------------------------------------------------------------------------------------------------
- CALL abort(__STAMP__,' ERROR: PartBound not associated!. (PartBound%SimpleCathodeBC)')
- !-----------------------------------------------------------------------------------------------------------------------------------
CASE(6) ! PartBound%RotPeriodicBC
!-----------------------------------------------------------------------------------------------------------------------------------
CALL RotPeriodicBoundary(iPart,SideID,ElemID)
@@ -176,6 +168,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum,IsIn
END IF ! DoDdielectric
!-----------------------------------------------------------------------------------------------------------------------------------
CASE(7) ! PartBound%RotPeriodicInterPlaneBC
+ !-----------------------------------------------------------------------------------------------------------------------------------
IF(PRESENT(IsInterPlanePart)) THEN
CALL RotPeriodicInterPlaneBoundary(iPart,SideID,ElemID,IsInterplanePart)
ELSE
@@ -185,7 +178,9 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum,IsIn
CASE(10,11) ! PartBound%SymmetryBC
!-----------------------------------------------------------------------------------------------------------------------------------
CALL PerfectReflection(iPart,SideID,n_loc,opt_Symmetry=.TRUE.)
+ !-----------------------------------------------------------------------------------------------------------------------------------
CASE DEFAULT
+ !-----------------------------------------------------------------------------------------------------------------------------------
CALL abort(__STAMP__,' ERROR: PartBound not associated!. (unknown case)')
END SELECT !PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)
END ASSOCIATE
@@ -245,7 +240,7 @@ SUBROUTINE PeriodicBoundary(PartID,SideID,ElemID)
LastPartPos(1:3,PartID) = LastPartPos(1:3,PartID) + TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha
! perform the periodic movement
LastPartPos(1:3,PartID) = LastPartPos(1:3,PartID) + SIGN( GEO%PeriodicVectors(1:3,ABS(PVID)),REAL(PVID))
-! update particle positon after periodic BC
+! update particle position after periodic BC
PartState(1:3,PartID) = LastPartPos(1:3,PartID) + (TrackInfo%lengthPartTrajectory-TrackInfo%alpha)*TrackInfo%PartTrajectory
TrackInfo%lengthPartTrajectory = TrackInfo%lengthPartTrajectory - TrackInfo%alpha
diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90
index a0862f783..2327afbbc 100644
--- a/src/particles/boundary/particle_boundary_init.f90
+++ b/src/particles/boundary/particle_boundary_init.f90
@@ -26,8 +26,9 @@ MODULE MOD_Particle_Boundary_Init
! Private Part ---------------------------------------------------------------------------------------------------------------------
! Public Part ----------------------------------------------------------------------------------------------------------------------
-PUBLIC :: DefineParametersParticleBoundary, InitializeVariablesPartBoundary, FinalizeParticleBoundary
+PUBLIC :: DefineParametersParticleBoundary, InitializeVariablesPartBoundary, InitParticleBoundarySurfSides, FinalizeParticleBoundary
PUBLIC :: InitAdaptiveWallTemp, InitRotPeriodicMapping, InitRotPeriodicInterPlaneMapping
+PUBLIC :: InitPartStateBoundary
!===================================================================================================================================
CONTAINS
@@ -95,6 +96,24 @@ SUBROUTINE DefineParametersParticleBoundary()
CALL prms%CreateRealOption( 'Part-Boundary[$]-ElecACC ' &
, 'Electronic accommodation coefficient of reflective particle boundary [$].' &
, '0.', numberedmulti=.TRUE.)
+CALL prms%CreateLogicalOption( 'Part-Boundary[$]-PhotonSpecularReflection' &
+ , 'Enables a perfect specular reflection for photons (FALSE: diffuse with PhotonEnACC) [$].' &
+ , '.FALSE.', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Boundary[$]-PhotonEnACC' &
+ , 'Energy accommodation coefficient of reflective photon boundary [$].' &
+ , '0.', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Boundary[$]-PhotonSEE-Yield' &
+ , 'Secondary photo-electron yield [$].' &
+ , '0.', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Boundary[$]-PhotonSEE-WorkFunction' &
+ , 'Secondary photo-electron work function [$].' &
+ , '0.', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Boundary[$]-PhotonSEE-MacroParticleFactor' &
+ , 'Secondary photo-electron weighting factor, specific for electrons emitted from the boundary [$].' &
+ , '0.', numberedmulti=.TRUE.)
+CALL prms%CreateIntOption( 'Part-Boundary[$]-PhotonSEE-ElectronSpecies' &
+ , 'Secondary photo-electron species index [$].' &
+ , numberedmulti=.TRUE.)
CALL prms%CreateLogicalOption( 'Part-Boundary[$]-Resample', &
'Sample particle properties from equilibrium distribution after reflection', '.FALSE.'&
, numberedmulti=.TRUE.)
@@ -132,6 +151,7 @@ SUBROUTINE DefineParametersParticleBoundary()
CALL prms%CreateIntOption( 'Part-Boundary[$]-SurfaceModel' &
, 'Defining surface to be treated reactively by defining Model used for particle surface interaction. If any >0 then look in section SurfaceModel.\n'//&
'0: Maxwell scattering\n'//&
+ '4: SEE-E Power-fit model by Goebel & Katz „Fundamentals of Electric Propulsion - Ion and Hall Thrusters“\n'//&
'5: SEE-E and SEE-I (secondary e- emission due to e- or i+ bombardment) by Levko2015 for copper electrodes\n'//&
'6: SEE-E (secondary e- emission due to e- bombardment) by Pagonakis2016 for molybdenum, originally from Harrower1956. Currently not available\n'//&
'7: SEE-I (bombarding electrons are removed, Ar+ on different materials is considered for '//&
@@ -170,9 +190,9 @@ SUBROUTINE InitializeVariablesPartBoundary()
USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge
USE MOD_DSMC_Vars ,ONLY: useDSMC, BGGas
USE MOD_Mesh_Vars ,ONLY: BoundaryName,BoundaryType, nBCs
-USE MOD_Particle_Vars ,ONLY: PDM, nSpecies, PartMeshHasPeriodicBCs, RotRefFrameAxis, SpeciesDatabase, Species
+USE MOD_Particle_Vars ,ONLY: nSpecies, PartMeshHasPeriodicBCs, RotRefFrameAxis, SpeciesDatabase, Species, usevMPF
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
-USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound,DoBoundaryParticleOutputHDF5,PartStateBoundary
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound,DoBoundaryParticleOutputHDF5
USE MOD_Particle_Boundary_Vars ,ONLY: nVarPartStateBoundary
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF
@@ -195,7 +215,7 @@ SUBROUTINE InitializeVariablesPartBoundary()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iPartBound, iBC, iPBC, iSwaps, MaxNbrOfSpeciesSwaps, RotAxis, nRotPeriodicBCs, TempGradDir
-INTEGER :: ALLOCSTAT, dummy_int
+INTEGER :: dummy_int
REAL :: omegaTemp, RotFreq
CHARACTER(32) :: hilf , hilf2
CHARACTER(200) :: tmpString
@@ -208,7 +228,9 @@ SUBROUTINE InitializeVariablesPartBoundary()
nPartBound = GETINT('Part-nBounds') ! get number of particle boundaries
! Read-in number of porous boundaries
nPorousBC = GETINT('Surf-nPorousBC')
-IF ((nPartBound.LE.0).OR.(dummy_int.LT.0)) CALL abort(__STAMP__ ,'ERROR: nPartBound .LE. 0:', nPartBound)
+IF((nPartBound.LE.0).OR.(dummy_int.LT.0)) CALL abort(__STAMP__ ,'ERROR: nPartBound .LE. 0:', nPartBound)
+
+IF(nPartBound.NE.nBCs) CALL abort(__STAMP__ ,'ERROR: Part-nBounds is not equal to the number of BCs read-in from the mesh!')
ALLOCATE(PartBound%SourceBoundName( 1:nPartBound))
PartBound%SourceBoundName = ''
@@ -234,10 +256,26 @@ SUBROUTINE InitializeVariablesPartBoundary()
PartBound%RotACC = -1.
ALLOCATE(PartBound%ElecACC( 1:nPartBound))
PartBound%ElecACC = -1.
+! Photon reflection
+ALLOCATE(PartBound%PhotonSpecularReflection(1:nPartBound))
+PartBound%PhotonSpecularReflection = .FALSE.
+ALLOCATE(PartBound%PhotonEnACC( 1:nPartBound))
+PartBound%PhotonEnACC = 0.0
+! Photon SEE
+ALLOCATE(PartBound%PhotonSEEYield( 1:nPartBound))
+PartBound%PhotonSEEYield = 0.
+ALLOCATE(PartBound%PhotonSEEWorkFunction(1:nPartBound))
+PartBound%PhotonSEEWorkFunction = 0.
+ALLOCATE(PartBound%PhotonSEEMacroParticleFactor(1:nPartBound))
+PartBound%PhotonSEEMacroParticleFactor = 0.
+ALLOCATE(PartBound%PhotonSEEElectronSpecies(1:nPartBound))
+PartBound%PhotonSEEElectronSpecies = 0
ALLOCATE(PartBound%Resample( 1:nPartBound))
PartBound%Resample = .FALSE.
+! Linear wall velocity
ALLOCATE(PartBound%WallVelo( 1:3,1:nPartBound))
PartBound%WallVelo = 0.
+! Rotational wall velocity
ALLOCATE(PartBound%RotVelo( 1:nPartBound))
PartBound%RotVelo = .FALSE.
ALLOCATE(PartBound%RotOmega( 1:3,1:nPartBound))
@@ -336,6 +374,18 @@ SUBROUTINE InitializeVariablesPartBoundary()
PartBound%Resample(iPartBound) = GETLOGICAL('Part-Boundary'//TRIM(hilf)//'-Resample')
PartBound%WallVelo(1:3,iPartBound) = GETREALARRAY('Part-Boundary'//TRIM(hilf)//'-WallVelo',3)
PartBound%RotVelo(iPartBound) = GETLOGICAL('Part-Boundary'//TRIM(hilf)//'-RotVelo')
+ PartBound%PhotonSpecularReflection(iPartBound) = GETLOGICAL('Part-Boundary'//TRIM(hilf)//'-PhotonSpecularReflection')
+ PartBound%PhotonEnACC(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-PhotonEnACC')
+ PartBound%PhotonSEEYield(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-PhotonSEE-Yield')
+ IF(PartBound%PhotonSEEYield(iPartBound).GT.0.) THEN
+ PartBound%PhotonSEEWorkFunction(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-PhotonSEE-WorkFunction')
+ PartBound%PhotonSEEElectronSpecies(iPartBound) = GETINT('Part-Boundary'//TRIM(hilf)//'-PhotonSEE-ElectronSpecies')
+ IF(usevMPF) THEN
+ WRITE(UNIT=hilf2,FMT='(G0)') Species(PartBound%PhotonSEEElectronSpecies(iPartBound))%MacroParticleFactor
+ PartBound%PhotonSEEMacroParticleFactor(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf)//'-PhotonSEE-MacroParticleFactor',&
+ TRIM(hilf2))
+ END IF
+ END IF
IF(PartBound%RotVelo(iPartBound)) THEN
RotFreq = GETREAL('Part-Boundary'//TRIM(hilf)//'-RotFreq')
RotAxis = GETINT('Part-Boundary'//TRIM(hilf)//'-RotAxis')
@@ -435,10 +485,6 @@ SUBROUTINE InitializeVariablesPartBoundary()
CASE('periodic')
PartBound%TargetBoundCond(iPartBound) = PartBound%PeriodicBC
PartMeshHasPeriodicBCs = .TRUE.
- CASE('simple_anode')
- PartBound%TargetBoundCond(iPartBound) = PartBound%SimpleAnodeBC
- CASE('simple_cathode')
- PartBound%TargetBoundCond(iPartBound) = PartBound%SimpleCathodeBC
CASE('symmetric')
#if defined(IMPA) || defined(ROS)
PartMeshHasReflectiveBCs=.TRUE.
@@ -492,14 +538,7 @@ SUBROUTINE InitializeVariablesPartBoundary()
PartBound%AdaptWallTemp = GETLOGICAL('Part-AdaptWallTemp')
! Surface particle output to .h5
-IF(DoBoundaryParticleOutputHDF5)THEN
- ! This array is not de-allocated during load balance as it is only written to .h5 during WriteStateToHDF5()
- IF(.NOT.ALLOCATED(PartStateBoundary))THEN
- ALLOCATE(PartStateBoundary(1:nVarPartStateBoundary,1:PDM%maxParticleNumber), STAT=ALLOCSTAT)
- IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_init.f90: Cannot allocate PartStateBoundary array!')
- PartStateBoundary=0.
- END IF ! .NOT.ALLOCATED(PartStateBoundary)
-END IF
+IF(DoBoundaryParticleOutputHDF5) CALL InitPartStateBoundary()
! Set mapping from field boundary to particle boundary index and vice versa
ALLOCATE(PartBound%MapToPartBC(1:nBCs))
@@ -544,7 +583,7 @@ SUBROUTINE InitializeVariablesPartBoundary()
IF(ANY(PartBound%SurfaceModel.EQ.1)) THEN
! Open the species database
- CALL OpenDataFile(TRIM(SpeciesDatabase),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(TRIM(SpeciesDatabase),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Check if the correct dataset exists
StickingCoefficientExists = .FALSE.
dsetname = TRIM('/Surface-Chemistry/StickingCoefficient')
@@ -564,6 +603,329 @@ SUBROUTINE InitializeVariablesPartBoundary()
END SUBROUTINE InitializeVariablesPartBoundary
+SUBROUTINE InitParticleBoundarySurfSides()
+!===================================================================================================================================
+! Initialize the counters (nComputeNodeSurfSides,nComputeNodeSurfTotalSides,nComputeNodeSurfOutputSides) and
+! mappings (GlobalSide2SurfSide,SurfSide2GlobalSide) of the particle boundary surface sides
+! 1) all procs identify surfaces on the node (plus halo region) for sampling and/or boundary conditions
+! 2) the compute-node leaders communicate the number of surfaces
+!===================================================================================================================================
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,nComputeNodeSurfTotalSides,nComputeNodeSurfOutputSides
+USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide,SurfSide2GlobalSide
+#if USE_MPI
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors
+USE MOD_Particle_Mesh_Vars ,ONLY: nNonUniqueGlobalSides
+USE MOD_MPI_Shared_Vars ,ONLY: myLeaderGroupRank,nLeaderGroupProcs
+USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide_Shared,GlobalSide2SurfSide_Shared_Win
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide_Shared,SurfSide2GlobalSide_Shared_Win
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeInnerBCs
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
+#else
+USE MOD_Particle_Mesh_Vars ,ONLY: nComputeNodeSides
+#endif /*USE_MPI*/
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
+#endif /*USE_LOADBALANCE*/
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT VARIABLES
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iSide,firstSide,lastSide,iSurfSide,GlobalSideID
+INTEGER :: nSurfSidesProc
+INTEGER :: offsetSurfTotalSidesProc
+INTEGER,ALLOCATABLE :: GlobalSide2SurfSideProc(:,:)
+#if USE_MPI
+INTEGER :: offsetSurfSidesProc
+INTEGER :: GlobalElemID,GlobalElemRank
+INTEGER :: sendbuf,recvbuf
+INTEGER :: NbGlobalElemID, NbElemRank, NbLeaderID, nSurfSidesTmp
+INTEGER :: color
+#endif /*USE_MPI*/
+INTEGER :: NbGlobalSideID,PartBoundCondition
+LOGICAL :: BCOnNode,ReflectiveOrOpenBCFound
+!===================================================================================================================================
+
+LBWRITE(UNIT_stdOut,'(A)') ' INIT SURFACE SIDES ...'
+
+! Allocate shared array for surf sides
+#if USE_MPI
+CALL Allocate_Shared((/3,nNonUniqueGlobalSides/),GlobalSide2SurfSide_Shared_Win,GlobalSide2SurfSide_Shared)
+CALL MPI_WIN_LOCK_ALL(0,GlobalSide2SurfSide_Shared_Win,IERROR)
+GlobalSide2SurfSide => GlobalSide2SurfSide_Shared
+#else
+ALLOCATE(GlobalSide2SurfSide(1:3,1:nComputeNodeSides))
+#endif /*USE_MPI*/
+
+! only CN root nullifies
+#if USE_MPI
+IF (myComputeNodeRank.EQ.0) THEN
+#endif /* USE_MPI*/
+ GlobalSide2SurfSide = -1.
+#if USE_MPI
+END IF
+
+CALL BARRIER_AND_SYNC(GlobalSide2SurfSide_Shared_Win,MPI_COMM_SHARED)
+#endif /* USE_MPI*/
+
+! get number of BC-Sides
+#if USE_MPI
+! NO HALO REGION REDUCTION
+firstSide = INT(REAL( myComputeNodeRank )*REAL(nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors))+1
+lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors))
+ALLOCATE(GlobalSide2SurfSideProc(1:3,firstSide:lastSide))
+#else
+firstSide = 1
+lastSide = nComputeNodeSides
+ALLOCATE(GlobalSide2SurfSideProc(1:3,1:nComputeNodeSides))
+#endif /*USE_MPI*/
+
+GlobalSide2SurfSideProc = -1
+nComputeNodeSurfSides = 0
+nSurfSidesProc = 0
+ReflectiveOrOpenBCFound = .FALSE.
+
+! Check every BC side
+DO iSide = firstSide,lastSide
+ ! Ignore non-BC sides
+ IF (SideInfo_Shared(SIDE_BCID,iSide).LE.0) CYCLE
+
+#if USE_MPI
+ ! Ignore sides outside of halo region
+ IF (ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.0) CYCLE
+#endif /*USE_MPI*/
+
+ ! Get the particle boundary condition index
+ PartBoundCondition = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide)))
+
+ ! Check if any process finds an open or reflective BC in the halo region (required for SurfCOMM%UNICATOR below)
+ IF ((PartBoundCondition.EQ.PartBound%OpenBC) .OR. &
+ (PartBoundCondition.EQ.PartBound%ReflectiveBC)) ReflectiveOrOpenBCFound = .TRUE.
+
+ ! Count number of reflective and rotationally periodic BC sides
+ IF ((PartBoundCondition.EQ.PartBound%ReflectiveBC) .OR. &
+ (PartBoundCondition.EQ.PartBound%RotPeriodicBC).OR. &
+ (PartBoundCondition.EQ.PartBound%RotPeriodicInterPlaneBC))THEN
+ nSurfSidesProc = nSurfSidesProc + 1
+ ! Check if element for this side is on the current compute-node
+ ! IF ((SideInfo_Shared(SIDE_ID,iSide).GT.ElemInfo_Shared(ELEM_FIRSTSIDEIND,offsetComputeNodeElem+1)) .AND. &
+ ! (SideInfo_Shared(SIDE_ID,iSide).LE.ElemInfo_Shared(ELEM_LASTSIDEIND ,offsetComputeNodeElem+nComputeNodeElems))) THEN
+ ! IF ((iSide.GE.(ElemInfo_Shared(ELEM_FIRSTSIDEIND,offsetComputeNodeElem+1)+1)) .AND. &
+ ! (iSide.LE.ElemInfo_Shared(ELEM_LASTSIDEIND ,offsetComputeNodeElem+nComputeNodeElems))) THEN
+ ! nComputeNodeSurfSides = nComputeNodeSurfSides + 1
+ ! END IF
+
+ ! TODO: Add another check to determine the surface side in halo_eps from current proc. Node-wide halo can become quite large with
+ ! with 128 procs!
+
+ ! Write local mapping from Side to Surf side. The rank is already correct, the offset must be corrected by the proc offset later
+ GlobalSide2SurfSideProc(SURF_SIDEID,iSide) = nSurfSidesProc
+#if USE_MPI
+ GlobalSide2SurfSideProc(SURF_RANK ,iSide) = ElemInfo_Shared(ELEM_RANK,SideInfo_Shared(SIDE_ELEMID,iSide))
+ ! Get global Elem ID
+ GlobalElemID = SideInfo_Shared(SIDE_ELEMID,iSide)
+ GlobalElemRank = ElemInfo_Shared(ELEM_RANK,GlobalElemID)
+ ! Running on one node, everything belongs to us
+ IF (nLeaderGroupProcs.EQ.1) THEN
+ GlobalSide2SurfSideProc(SURF_LEADER,iSide) = myLeaderGroupRank
+ ELSE
+ ! Find the compute node
+ GlobalSide2SurfSideProc(SURF_LEADER,iSide) = INT(GlobalElemRank/nComputeNodeProcessors)
+ END IF
+#else
+ GlobalSide2SurfSideProc(SURF_RANK ,iSide) = 0
+ GlobalSide2SurfSideProc(SURF_LEADER,iSide) = GlobalSide2SurfSideProc(SURF_RANK,iSide)
+#endif /*USE_MPI*/
+
+#if USE_MPI
+ ! Check if element for this side is on the current compute-node. Alternative version to the check above
+ IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).EQ.myLeaderGroupRank) nComputeNodeSurfSides = nComputeNodeSurfSides + 1
+#endif /*USE_MPI*/
+ END IF ! Reflective side
+END DO
+
+! Find CN global number of total surf sides and write Side to Surf Side mapping into shared array
+#if USE_MPI
+sendbuf = nSurfSidesProc - nComputeNodeSurfSides
+recvbuf = 0
+CALL MPI_EXSCAN(sendbuf,recvbuf,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
+offsetSurfTotalSidesProc = recvbuf
+! last proc knows CN total number of BC elems
+sendbuf = offsetSurfTotalSidesProc + nSurfSidesProc - nComputeNodeSurfSides
+CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
+nComputeNodeSurfTotalSides = sendbuf
+
+! Find CN global number of local surf sides and write Side to Surf Side mapping into shared array
+sendbuf = nComputeNodeSurfSides
+recvbuf = 0
+CALL MPI_EXSCAN(sendbuf,recvbuf,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
+offsetSurfSidesProc = recvbuf
+! last proc knows CN total number of BC elems
+sendbuf = offsetSurfSidesProc + nComputeNodeSurfSides
+CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
+nComputeNodeSurfSides = sendbuf
+nComputeNodeSurfTotalSides = nComputeNodeSurfTotalSides + nComputeNodeSurfSides
+
+! increment SURF_SIDEID by offset
+nSurfSidesTmp = 0
+DO iSide = firstSide,lastSide
+ IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
+
+ ! sort compute-node local sides first
+ IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).EQ.myLeaderGroupRank) THEN
+ nSurfSidesTmp = nSurfSidesTmp + 1
+
+ GlobalSide2SurfSide(: ,iSide) = GlobalSide2SurfSideProc(:,iSide)
+ GlobalSide2SurfSide(SURF_SIDEID,iSide) = nSurfSidesTmp + offsetSurfSidesProc
+ END IF
+END DO
+
+nSurfSidesTmp = 0
+DO iSide = firstSide,lastSide
+ IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
+
+ ! sampling sides in halo region follow at the end
+ IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).NE.myLeaderGroupRank) THEN
+ nSurfSidesTmp = nSurfSidesTmp + 1
+
+ GlobalSide2SurfSide(: ,iSide) = GlobalSide2SurfSideProc(:,iSide)
+ GlobalSide2SurfSide(SURF_SIDEID,iSide) = nSurfSidesTmp + nComputeNodeSurfSides + offsetSurfTotalSidesProc
+ END IF
+END DO
+#else
+offsetSurfTotalSidesProc = 0
+nComputeNodeSurfSides = nSurfSidesProc
+nComputeNodeSurfTotalSides = nSurfSidesProc
+GlobalSide2SurfSide(:,firstSide:lastSide) = GlobalSide2SurfSideProc(:,firstSide:lastSide)
+#endif /*USE_MPI*/
+
+! Build inverse mapping
+IF(nComputeNodeSurfTotalSides.GT.0)THEN
+#if USE_MPI
+ CALL Allocate_Shared((/3,nComputeNodeSurfTotalSides/),SurfSide2GlobalSide_Shared_Win,SurfSide2GlobalSide_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,SurfSide2GlobalSide_Shared_Win,IERROR)
+ SurfSide2GlobalSide => SurfSide2GlobalSide_Shared
+
+ DO iSide = firstSide,lastSide
+ IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
+
+ SurfSide2GlobalSide(: ,GlobalSide2SurfSide(SURF_SIDEID,iSide)) = GlobalSide2SurfSide(:,iSide)
+ SurfSide2GlobalSide(SURF_SIDEID,GlobalSide2SurfSide(SURF_SIDEID,iSide)) = iSide
+ END DO
+
+ CALL BARRIER_AND_SYNC(GlobalSide2SurfSide_Shared_Win,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(SurfSide2GlobalSide_Shared_Win,MPI_COMM_SHARED)
+#else
+ ALLOCATE(SurfSide2GlobalSide(1:1,1:nComputeNodeSurfTotalSides))
+ DO iSide = firstSide,lastSide
+ IF (GlobalSide2SurfSide(SURF_SIDEID,iSide).EQ.-1) CYCLE
+ SurfSide2GlobalSide(SURF_SIDEID,GlobalSide2SurfSide(SURF_SIDEID,iSide)) =iSide
+ END DO
+#endif /*USE_MPI*/
+
+ ! Determine the number of surface output sides (inner BCs are not counted twice and rotationally periodic BCs excluded)
+#if USE_MPI
+ IF (myComputeNodeRank.EQ.0) THEN
+ nComputeNodeInnerBCs = 0
+#endif /*USE_MPI*/
+ nComputeNodeSurfOutputSides = 0
+ DO iSurfSide = 1,nComputeNodeSurfSides
+ GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ ! Check if the surface side has a neighbor (and is therefore an inner BCs)
+ IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
+ ! Abort inner BC + Mortar! (too complex and confusing to implement)
+ ! This test catches large Mortar sides, i.e., SideInfo_Shared(SIDE_NBELEMID,NonUniqueGlobalSideID) gives the 2 or 4
+ ! connecting small Mortar sides. It is assumed that inner BC result in being flagged as a "SurfSide" and therefore are checked
+ ! here.
+ IF(SideInfo_Shared(SIDE_LOCALID,GlobalSideID).EQ.-1)THEN
+ IPWRITE(UNIT_StdOut,'(I12,A,I0)') " NonUniqueGlobalSideID = ",GlobalSideID
+ IPWRITE(UNIT_StdOut,'(I12,A,I0)') " SideInfo_Shared(SIDE_LOCALID,NonUniqueGlobalSideID) = ",&
+ SideInfo_Shared(SIDE_LOCALID,GlobalSideID)
+ IPWRITE(UNIT_StdOut,'(I12,A,I0,A)') " SideInfo_Shared(SIDE_ELEMID,NonUniqueGlobalSideID) = ",&
+ SideInfo_Shared(SIDE_ELEMID,GlobalSideID)," (GlobalElemID)"
+ CALL abort(__STAMP__,'Inner BC + Mortar is not implemented!')
+ END IF
+ ! Only add the side with the smaller index
+ NbGlobalSideID = SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)
+ IF(GlobalSideID.GT.NbGlobalSideID)THEN
+#if USE_MPI
+ !--- switcheroo check 1 of 2: Non-HALO sides
+ ! Only required for sampling on the larger NonUniqueGlobalSideID of the two sides of the inner BC
+ ! Count larger inner BCs as these may have to be sent to a different leader processor
+ NbGlobalElemID = SideInfo_Shared(SIDE_ELEMID,NbGlobalSideID)
+ NbElemRank = ElemInfo_Shared(ELEM_RANK,NbGlobalElemID)
+ NbLeaderID = INT(NbElemRank/nComputeNodeProcessors)
+ IF(NbLeaderID.NE.INT(myRank/nComputeNodeProcessors))THEN
+ nComputeNodeInnerBCs(1) = nComputeNodeInnerBCs(1) + 1
+ END IF
+#endif
+ CYCLE! Skip sides with the larger index
+ END IF
+ END IF
+ ! Skip rotationally periodic boundary sides for the output
+ IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID))).EQ.PartBound%RotPeriodicBC) CYCLE
+ ! Skip intermediate planes BCs for the output
+ IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID))).EQ.PartBound%RotPeriodicInterPlaneBC) CYCLE
+ ! Count the number of output sides
+ nComputeNodeSurfOutputSides = nComputeNodeSurfOutputSides + 1
+ END DO
+#if USE_MPI
+ !--- switcheroo check 2 of 2: HALO sides
+ ! Count number of inner BC in halo region
+ ! Only required for sampling on the larger NonUniqueGlobalSideID of the two sides of the inner BC
+ DO iSurfSide = nComputeNodeSurfSides+1, nComputeNodeSurfTotalSides
+ GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ ! Check if the surface side has a neighbor (and is therefore an inner BCs)
+ IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
+ ! Only add the side with the smaller index
+ IF(GlobalSideID.GT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID))THEN
+ ! Count larger inner BCs as these may have to be sent to a different leader processor
+ nComputeNodeInnerBCs(2) = nComputeNodeInnerBCs(2) + 1
+ END IF
+ END IF
+ END DO ! iSurfSide = nComputeNodeSurfSides+1, nComputeNodeSurfTotalSides
+ END IF
+#endif
+
+ ! free temporary arrays
+ DEALLOCATE(GlobalSide2SurfSideProc)
+END IF ! nComputeNodeSurfTotalSides.GT.0
+
+#if USE_MPI
+! Flag if there is at least one BC side on the node (sides in halo region do also count). MPI_LOR: return the logical or
+CALL MPI_ALLREDUCE(ReflectiveOrOpenBCFound, BCOnNode, 1, MPI_LOGICAL, MPI_LOR, MPI_COMM_SHARED, iError)
+
+! Create a communicator if BCs are on the node
+! Set the control of subset assignment (non-negative integer). Processes with the same color are in the same new communicator.
+! Make sure to include the root
+color = MERGE(1337, MPI_UNDEFINED, MPIRoot.OR.BCOnNode)
+! Create new surface communicator. Pass MPI_INFO_NULL as rank to follow the original ordering
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS, color, MPI_INFO_NULL, SurfCOMM%UNICATOR, iError)
+! Find my rank on the shared communicator, comm size and proc name
+IF(SurfCOMM%UNICATOR.NE.MPI_COMM_NULL)THEN
+ CALL MPI_COMM_RANK(SurfCOMM%UNICATOR, SurfCOMM%MyRank, iError)
+ CALL MPI_COMM_SIZE(SurfCOMM%UNICATOR, SurfCOMM%nProcs, iError)
+ ! inform about size of emission communicator
+ LBWRITE(UNIT_StdOut,'(A,I0,A)') ' Surface sides: Communicator on ', SurfCOMM%nProcs,' procs'
+END IF
+#endif /*USE_MPI*/
+
+LBWRITE(UNIT_stdOut,'(A)') ' INIT SURFACE SIDES DONE!'
+
+END SUBROUTINE InitParticleBoundarySurfSides
+
+
SUBROUTINE InitParticleBoundaryRotPeriodic(nRotPeriodicBCs)
!===================================================================================================================================
!>
@@ -926,6 +1288,31 @@ SUBROUTINE WriteInterPlanePosition()
END SUBROUTINE WriteInterPlanePosition
+!===================================================================================================================================
+!> Check if PartStateBoundary is already allocated (e.g. if this routine is called during load balance) and if not allocate it
+!===================================================================================================================================
+SUBROUTINE InitPartStateBoundary()
+! MODULES
+USE MOD_Globals ,ONLY: abort
+USE MOD_Particle_Boundary_Vars ,ONLY: PartStateBoundary
+USE MOD_Particle_Vars ,ONLY: PDM
+USE MOD_Particle_Boundary_Vars ,ONLY: nVarPartStateBoundary
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: ALLOCSTAT
+!===================================================================================================================================
+! This array is not de-allocated during load balance as it is only written to .h5 during WriteStateToHDF5()
+
+IF(ALLOCATED(PartStateBoundary)) RETURN
+ALLOCATE(PartStateBoundary(1:nVarPartStateBoundary,1:MIN(1000,PDM%maxParticleNumber)), STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_init.f90: Cannot allocate PartStateBoundary array!')
+PartStateBoundary=0.
+END SUBROUTINE InitPartStateBoundary
+
+
!===================================================================================================================================
!> Read mapping for rotational periodicity from mesh file. If it does not yet exist, build the mapping and store in mesh.h5 for
!> faster initialization later on.
@@ -964,7 +1351,7 @@ SUBROUTINE InitRotPeriodicMapping()
DatasetName = 'RotPeriodicMap-v'//TRIM(hilf)
WRITE(UNIT=hilf,FMT='(ES10.4)') ManualTimeStep
DatasetName = TRIM(DatasetName)//'-dt'//TRIM(hilf)
-CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,TRIM(DatasetName),DatasetFound)
CALL CloseDataFile()
@@ -1019,8 +1406,8 @@ END SUBROUTINE InitRotPeriodicMapping
SUBROUTINE BuildParticleBoundaryRotPeriodic(notMappedTotal)
! MODULES
USE MOD_Globals
-USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides,SurfSide2GlobalSide,PartBound
-USE MOD_Particle_Boundary_Vars ,ONLY: RotPeriodicSideMapping, NumRotPeriodicNeigh, SurfSide2RotPeriodicSide
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides,SurfSide2GlobalSide,PartBound,nRotPeriodicSides
+USE MOD_Particle_Boundary_Vars ,ONLY: RotPeriodicSideMapping, NumRotPeriodicNeigh, SurfSide2RotPeriodicSide,MaxNumRotPeriodicNeigh
USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, NodeCoords_Shared, ElemSideNodeID_Shared, ElemInfo_Shared
USE MOD_Mesh_Tools ,ONLY: GetCNElemID, GetGlobalElemID
USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, NodeInfo_Shared, NodeToElemInfo, NodeToElemMapping
@@ -1039,7 +1426,7 @@ SUBROUTINE BuildParticleBoundaryRotPeriodic(notMappedTotal)
USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors
USE MOD_MPI_Shared
#else
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
#endif /*USE_MPI*/
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
@@ -1049,7 +1436,7 @@ SUBROUTINE BuildParticleBoundaryRotPeriodic(notMappedTotal)
INTEGER,INTENT(OUT) :: notMappedTotal
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iSide, jSide, nRotPeriodicSides, SideID,SideID2, MaxNumRotPeriodicNeigh, iNode, iNeigh, jNeigh
+INTEGER :: iSide, jSide, SideID,SideID2, iNode, iNeigh, jNeigh
INTEGER :: NodeID, CNElemID, LocSideID, k, l, m, CNElemID2, LocSideID2, TestElemID, UniqueNodeID
INTEGER :: iElem, jElem, NewNeighNumber, kNeigh
LOGICAL :: mySide, FoundConnection, abortAfterWriteOut
@@ -1063,372 +1450,407 @@ SUBROUTINE BuildParticleBoundaryRotPeriodic(notMappedTotal)
REAL,ALLOCPOINT,DIMENSION(:,:) :: BoundingBox
!===================================================================================================================================
-nRotPeriodicSides = 0
-offsetSide = 0
-abortAfterWriteOut = .FALSE.
+nRotPeriodicSides = 0
+offsetSide = 0
+abortAfterWriteOut = .FALSE.
+notMapped = 0
+MaxNumRotPeriodicNeigh = 0
+
+IF(nComputeNodeSurfTotalSides.GT.0)THEN
-! Surf sides are shared, array calculation can be distributed
+ ! Surf sides are shared, array calculation can be distributed
#if USE_MPI
-CALL Allocate_Shared((/nComputeNodeSurfTotalSides/) , SurfSide2RotPeriodicSide_Shared_Win , SurfSide2RotPeriodicSide_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , SurfSide2RotPeriodicSide_Shared_Win , IERROR)
-CALL Allocate_Shared((/nComputeNodeSurfTotalSides/) , Rot2Glob_temp_Shared_Win , Rot2Glob_temp_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , Rot2Glob_temp_Shared_Win , IERROR)
-SurfSide2RotPeriodicSide => SurfSide2RotPeriodicSide_Shared
-Rot2Glob_temp => Rot2Glob_temp_Shared
-IF (myComputeNodeRank.EQ.0) SurfSide2RotPeriodicSide = -1.
-IF (myComputeNodeRank.EQ.0) Rot2Glob_temp = -1.
-CALL BARRIER_AND_SYNC(SurfSide2RotPeriodicSide_Shared_Win , MPI_COMM_SHARED)
-CALL BARRIER_AND_SYNC(Rot2Glob_temp_Shared_Win , MPI_COMM_SHARED)
-firstSide = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1
-lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))
+ CALL Allocate_Shared((/nComputeNodeSurfTotalSides/) , SurfSide2RotPeriodicSide_Shared_Win , SurfSide2RotPeriodicSide_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , SurfSide2RotPeriodicSide_Shared_Win , IERROR)
+ CALL Allocate_Shared((/nComputeNodeSurfTotalSides/) , Rot2Glob_temp_Shared_Win , Rot2Glob_temp_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , Rot2Glob_temp_Shared_Win , IERROR)
+ SurfSide2RotPeriodicSide => SurfSide2RotPeriodicSide_Shared
+ Rot2Glob_temp => Rot2Glob_temp_Shared
+ IF (myComputeNodeRank.EQ.0) SurfSide2RotPeriodicSide = -1.
+ IF (myComputeNodeRank.EQ.0) Rot2Glob_temp = -1.
+ CALL BARRIER_AND_SYNC(SurfSide2RotPeriodicSide_Shared_Win , MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Rot2Glob_temp_Shared_Win , MPI_COMM_SHARED)
+ firstSide = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1
+ lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))
#else
-firstSide = 1
-lastSide = nSurfTotalSides
-ALLOCATE(SurfSide2RotPeriodicSide(firstSide:lastSide))
-SurfSide2RotPeriodicSide(:) = -1
-ALLOCATE(Rot2Glob_temp(firstSide:lastSide))
+ firstSide = 1
+ lastSide = nGlobalSurfSides
+ ALLOCATE(SurfSide2RotPeriodicSide(firstSide:lastSide))
+ SurfSide2RotPeriodicSide(:) = -1
+ ALLOCATE(Rot2Glob_temp(firstSide:lastSide))
#endif /*USE_MPI*/
-! (1) Count rotational periodic sides and build mapping from SurfSideID -> RotPeriodicSide
+ ! (1) Count rotational periodic sides and build mapping from SurfSideID -> RotPeriodicSide
#if USE_MPI
-! Only when more than 1 core per node
-IF(nComputeNodeProcessors.GT.1)THEN
- ! Loop once and get offset
+ ! Only when more than 1 core per node
+ IF(nComputeNodeProcessors.GT.1)THEN
+ ! Loop once and get offset
+ DO iSide=firstSide, lastSide
+ SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide)
+ IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%RotPeriodicBC) &
+ nRotPeriodicSides = nRotPeriodicSides + 1
+ END DO
+
+ CALL MPI_EXSCAN(nRotPeriodicSides,offsetSide,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
+ nRotPeriodicSides = offsetSide
+ END IF ! nComputeNodeProcessors.GT.1
+#endif /*USE_MPI*/
+
DO iSide=firstSide, lastSide
SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide)
- IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%RotPeriodicBC) &
- nRotPeriodicSides = nRotPeriodicSides + 1
+ IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%RotPeriodicBC) THEN
+ nRotPeriodicSides = nRotPeriodicSides + 1
+ Rot2Glob_temp(nRotPeriodicSides) = SideID
+ SurfSide2RotPeriodicSide(iSide) = nRotPeriodicSides ! Store RotSideID
+ END IF
END DO
-
- CALL MPI_EXSCAN(nRotPeriodicSides,offsetSide,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
- nRotPeriodicSides = offsetSide
-END IF ! nComputeNodeProcessors.GT.1
+#if USE_MPI
+ ! last proc knows CN total number of rot periodic sides
+ CALL MPI_BCAST(nRotPeriodicSides,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
#endif /*USE_MPI*/
-DO iSide=firstSide, lastSide
- SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide)
- IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%RotPeriodicBC) THEN
- nRotPeriodicSides = nRotPeriodicSides + 1
- Rot2Glob_temp(nRotPeriodicSides) = SideID
- SurfSide2RotPeriodicSide(iSide) = nRotPeriodicSides ! Store RotSideID
- END IF
-END DO
-
+ IF(nRotPeriodicSides.GT.0)THEN
#if USE_MPI
-! last proc knows CN total number of rot periodic sides
-CALL MPI_BCAST(nRotPeriodicSides,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
-CALL BARRIER_AND_SYNC(SurfSide2RotPeriodicSide_Shared_Win , MPI_COMM_SHARED)
-CALL BARRIER_AND_SYNC(Rot2Glob_temp_Shared_Win , MPI_COMM_SHARED)
-CALL Allocate_Shared((/nRotPeriodicSides/) , NumRotPeriodicNeigh_Shared_Win , NumRotPeriodicNeigh_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , NumRotPeriodicNeigh_Shared_Win , IERROR)
-NumRotPeriodicNeigh => NumRotPeriodicNeigh_Shared
-CALL Allocate_Shared((/nRotPeriodicSides,NbrOfRotConnections/) , RotPeriodicSideMapping_temp_Shared_Win , RotPeriodicSideMapping_temp_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , RotPeriodicSideMapping_temp_Shared_Win , IERROR)
-RotPeriodicSideMapping_temp => RotPeriodicSideMapping_temp_Shared
-IF (myComputeNodeRank.EQ.0) NumRotPeriodicNeigh = 0
-IF (myComputeNodeRank.EQ.0) RotPeriodicSideMapping_temp = 0
-CALL BARRIER_AND_SYNC(NumRotPeriodicNeigh_Shared_Win , MPI_COMM_SHARED)
-CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_temp_Shared_Win , MPI_COMM_SHARED)
-firstSide = INT(REAL( myComputeNodeRank )*REAL(nRotPeriodicSides)/REAL(nComputeNodeProcessors))+1
-lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nRotPeriodicSides)/REAL(nComputeNodeProcessors))
+ CALL BARRIER_AND_SYNC(SurfSide2RotPeriodicSide_Shared_Win , MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Rot2Glob_temp_Shared_Win , MPI_COMM_SHARED)
+ CALL Allocate_Shared((/nRotPeriodicSides/) , NumRotPeriodicNeigh_Shared_Win , NumRotPeriodicNeigh_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , NumRotPeriodicNeigh_Shared_Win , IERROR)
+ NumRotPeriodicNeigh => NumRotPeriodicNeigh_Shared
+ CALL Allocate_Shared((/nRotPeriodicSides,NbrOfRotConnections/) , RotPeriodicSideMapping_temp_Shared_Win , RotPeriodicSideMapping_temp_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , RotPeriodicSideMapping_temp_Shared_Win , IERROR)
+ RotPeriodicSideMapping_temp => RotPeriodicSideMapping_temp_Shared
+ IF (myComputeNodeRank.EQ.0) NumRotPeriodicNeigh = 0
+ IF (myComputeNodeRank.EQ.0) RotPeriodicSideMapping_temp = 0
+ CALL BARRIER_AND_SYNC(NumRotPeriodicNeigh_Shared_Win , MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_temp_Shared_Win , MPI_COMM_SHARED)
+ firstSide = INT(REAL( myComputeNodeRank )*REAL(nRotPeriodicSides)/REAL(nComputeNodeProcessors))+1
+ lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nRotPeriodicSides)/REAL(nComputeNodeProcessors))
#else
-firstSide = 1
-lastSide = nRotPeriodicSides
-ALLOCATE(NumRotPeriodicNeigh(nRotPeriodicSides))
-NumRotPeriodicNeigh = 0
-! number of potential rotational periodic sides is unknown => allocate mapping array with fixed number of NbrOfRotConnections
-! and reallocate at the end of subroutine
-ALLOCATE(RotPeriodicSideMapping_temp(nRotPeriodicSides,NbrOfRotConnections))
-RotPeriodicSideMapping_temp = 0
+ firstSide = 1
+ lastSide = nRotPeriodicSides
+ ALLOCATE(NumRotPeriodicNeigh(nRotPeriodicSides))
+ NumRotPeriodicNeigh = 0
+ ! number of potential rotational periodic sides is unknown => allocate mapping array with fixed number of NbrOfRotConnections
+ ! and reallocate at the end of subroutine
+ ALLOCATE(RotPeriodicSideMapping_temp(nRotPeriodicSides,NbrOfRotConnections))
+ RotPeriodicSideMapping_temp = 0
#endif /*USE_MPI*/
-notMapped=0
-MaxNumRotPeriodicNeigh = 0
-! Defining rotation matrix
-SELECT CASE(PartBound%RotPeriodicAxis)
- CASE(1) ! x-rotation axis
- k = 1
- l = 2
- m = 3
- CASE(2) ! y-rotation axis
- k = 2
- l = 3
- m = 1
- CASE(3) ! z-rotation axis
- k = 3
- l = 1
- m = 2
-END SELECT
-
-! (2) Build bounding boxes (in 2D reference system) for all nRotPeriodicSides
+ ! Defining rotation matrix
+ SELECT CASE(PartBound%RotPeriodicAxis)
+ CASE(1) ! x-rotation axis
+ k = 1
+ l = 2
+ m = 3
+ CASE(2) ! y-rotation axis
+ k = 2
+ l = 3
+ m = 1
+ CASE(3) ! z-rotation axis
+ k = 3
+ l = 1
+ m = 2
+ END SELECT
+
+ ! (2) Build bounding boxes (in 2D reference system) for all nRotPeriodicSides
#if USE_MPI
-CALL Allocate_Shared((/4,nRotPeriodicSides/) , BoundingBox_Shared_Win , BoundingBox_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , BoundingBox_Shared_Win , IERROR)
-BoundingBox => BoundingBox_Shared
-CALL BARRIER_AND_SYNC(BoundingBox_Shared_Win , MPI_COMM_SHARED)
+ CALL Allocate_Shared((/4,nRotPeriodicSides/) , BoundingBox_Shared_Win , BoundingBox_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , BoundingBox_Shared_Win , IERROR)
+ BoundingBox => BoundingBox_Shared
+ CALL BARRIER_AND_SYNC(BoundingBox_Shared_Win , MPI_COMM_SHARED)
#else
-ALLOCATE(BoundingBox(4,nRotPeriodicSides))
+ ALLOCATE(BoundingBox(4,nRotPeriodicSides))
#endif /*USE_MPI*/
-DO iSide = firstSide, lastSide
-
- ! Get side information
- SideID = Rot2Glob_temp(iSide)
- CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
- LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
-
- ! Loop over all 4 nodes
- DO iNode=1, 4
- NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
- jNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
- jNodeH = jNodeVec(k)
- jNodeR = SQRT(jNodeVec(l)**2+jNodeVec(m)**2)
- IF(iNode.EQ. 1) THEN
- Node2Hmin = jNodeH
- Node2Hmax = jNodeH
- Node2Rmin = jNodeR
- Node2Rmax = jNodeR
- ELSE
- Node2Hmin = MIN(Node2Hmin,jNodeH)
- Node2Hmax = MAX(Node2Hmax,jNodeH)
- Node2Rmin = MIN(Node2Rmin,jNodeR)
- Node2Rmax = MAX(Node2Rmax,jNodeR)
- END IF
- END DO
- ! Add tolerance by increasing the bounding box size by 1 percent of the length in h and r
- dh = Node2Hmax-Node2Hmin
- dr = Node2Rmax-Node2Rmin
- BoundingBox(1,iSide) = Node2Hmin-dh*0.01
- BoundingBox(2,iSide) = Node2Hmax+dh*0.01
- BoundingBox(3,iSide) = Node2Rmin-dr*0.01
- BoundingBox(4,iSide) = Node2Rmax+dr*0.01
-
-END DO ! iSide = firstSide, lastSide
+ DO iSide = firstSide, lastSide
+
+ ! Get side information
+ SideID = Rot2Glob_temp(iSide)
+ CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
+ LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
+
+ ! Loop over all 4 nodes
+ DO iNode=1, 4
+ NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
+ jNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
+ jNodeH = jNodeVec(k)
+ jNodeR = SQRT(jNodeVec(l)**2+jNodeVec(m)**2)
+ IF(iNode.EQ. 1) THEN
+ Node2Hmin = jNodeH
+ Node2Hmax = jNodeH
+ Node2Rmin = jNodeR
+ Node2Rmax = jNodeR
+ ELSE
+ Node2Hmin = MIN(Node2Hmin,jNodeH)
+ Node2Hmax = MAX(Node2Hmax,jNodeH)
+ Node2Rmin = MIN(Node2Rmin,jNodeR)
+ Node2Rmax = MAX(Node2Rmax,jNodeR)
+ END IF
+ END DO
+ ! Add tolerance by increasing the bounding box size by 1 percent of the length in h and r
+ dh = Node2Hmax-Node2Hmin
+ dr = Node2Rmax-Node2Rmin
+ BoundingBox(1,iSide) = Node2Hmin-dh*0.01
+ BoundingBox(2,iSide) = Node2Hmax+dh*0.01
+ BoundingBox(3,iSide) = Node2Rmin-dr*0.01
+ BoundingBox(4,iSide) = Node2Rmax+dr*0.01
+
+ END DO ! iSide = firstSide, lastSide
#if USE_MPI
-CALL BARRIER_AND_SYNC(BoundingBox_Shared_Win , MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(BoundingBox_Shared_Win , MPI_COMM_SHARED)
#endif /*USE_MPI*/
-! (3a) find Side on corresponding BC and build mapping RotPeriodicSide -> SideID2 (and vice versa)
-! counting potential rotational periodic sides (for non-conforming meshes)
-! Use named loops: Loop over the assigned iSides and compare against all nRotPeriodicSides
-iSideLoop: DO iSide = firstSide, lastSide
- SideID = Rot2Glob_temp(iSide)
- CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
- LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
-
- jSideLoop: DO jSide = 1, nRotPeriodicSides
- SideID2 = Rot2Glob_temp(jSide)
- FoundConnection = .FALSE.
-
- ! Check if both sides are on the same boundary, i.e., they cannot be connected
- IF(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)).EQ. &
- PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID2))) CYCLE jSideLoop
-
- ! Check if jSide is assigned to the proc
- mySide = (jSide.GE.firstSide).AND.(jSide.LE.lastSide)
-
- ! Check if the side was added in a previous step
- IF(mySide)THEN
- DO iNeigh = 1, NumRotPeriodicNeigh(jSide)
- IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE jSideLoop
- END DO ! iNeigh = 1, NumRotPeriodicNeigh(jSide)
- END IF ! mySide
-
- ! Loop the 4 nodes of iSide and test against the bounding box of jSide
- iNodeLoop: DO iNode = 1, 4
- NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
- ! Calculate node coordinates in reference system
- iNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
- iNodeH = iNodeVec(k)
- iNodeR = SQRT(iNodeVec(l)**2+iNodeVec(m)**2)
-
- ! Cycle if outside of bounding box of jSide
- IF(BoundingBox(1,jSide).GT.iNodeH) CYCLE iNodeLoop
- IF(BoundingBox(2,jSide).LT.iNodeH) CYCLE iNodeLoop
- IF(BoundingBox(3,jSide).GT.iNodeR) CYCLE iNodeLoop
- IF(BoundingBox(4,jSide).LT.iNodeR) CYCLE iNodeLoop
-
- FoundConnection = .TRUE.
-
- ! Check if the side was added in a previous step
- DO iNeigh = 1, NumRotPeriodicNeigh(iSide)
- IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.SideID2) CYCLE iNodeLoop
- END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
-
- ! Found connection
- NumRotPeriodicNeigh(iSide) = NumRotPeriodicNeigh(iSide) + 1
- IF(NumRotPeriodicNeigh(iSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
- ' ERROR: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
- RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = SideID2
-
- ! Only do vice versa mapping if the processor has been assigned this side
- IF(mySide)THEN
- ! Check if the side was added in a previous step
- DO iNeigh = 1, NumRotPeriodicNeigh(jSide)
- IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE iNodeLoop
- END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
- NumRotPeriodicNeigh(jSide) = NumRotPeriodicNeigh(jSide) + 1
- IF(NumRotPeriodicNeigh(jSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
- ' jSide: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
- RotPeriodicSideMapping_temp(jSide,NumRotPeriodicNeigh(jSide)) = SideID
- END IF ! mySide
-
- ! Exit loop over nodes when side has been assigned
- EXIT iNodeLoop
-
- END DO iNodeLoop ! iNode = 1, 4
-
- IF(.NOT.FoundConnection) THEN
- ! Double check is needed if bounding box of jSide is within the original side (iSide) -> check whether jSide is within
- ! bounding box of iSide. Need to get the NodeIDs of jSide (= SideID2).
- CNElemID2 = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID2))
- LocSideID2 = SideInfo_Shared(SIDE_LOCALID,SideID2)
-
- ! Loop the 4 nodes of jSide and test against the bounding box of iSide
- jNodeLoop: DO iNode = 1, 4
- NodeID = ElemSideNodeID_Shared(iNode,LocSideID2,CNElemID2) + 1
- ! Calculate node coordinates in reference system
- iNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
- iNodeH = iNodeVec(k)
- iNodeR = SQRT(iNodeVec(l)**2+iNodeVec(m)**2)
-
- ! Cycle if outside of bounding box of iSide
- IF(BoundingBox(1,iSide).GT.iNodeH) CYCLE jNodeLoop
- IF(BoundingBox(2,iSide).LT.iNodeH) CYCLE jNodeLoop
- IF(BoundingBox(3,iSide).GT.iNodeR) CYCLE jNodeLoop
- IF(BoundingBox(4,iSide).LT.iNodeR) CYCLE jNodeLoop
+ ! (3a) find Side on corresponding BC and build mapping RotPeriodicSide -> SideID2 (and vice versa)
+ ! counting potential rotational periodic sides (for non-conforming meshes)
+ ! Use named loops: Loop over the assigned iSides and compare against all nRotPeriodicSides
+ iSideLoop: DO iSide = firstSide, lastSide
+ SideID = Rot2Glob_temp(iSide)
+ CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
+ LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
- ! Check if the side was added in a previous step
- DO iNeigh = 1, NumRotPeriodicNeigh(iSide)
- IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.SideID2) CYCLE jNodeLoop
- END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
+ jSideLoop: DO jSide = 1, nRotPeriodicSides
+ SideID2 = Rot2Glob_temp(jSide)
+ FoundConnection = .FALSE.
- ! Found connection
- NumRotPeriodicNeigh(iSide) = NumRotPeriodicNeigh(iSide) + 1
- IF(NumRotPeriodicNeigh(iSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
- ' ERROR: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
- RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = SideID2
+ ! Check if both sides are on the same boundary, i.e., they cannot be connected
+ IF(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)).EQ. &
+ PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID2))) CYCLE jSideLoop
+
+ ! Check if jSide is assigned to the proc
+ mySide = (jSide.GE.firstSide).AND.(jSide.LE.lastSide)
- ! Only do vice versa mapping if the processor has been assigned this side
+ ! Check if the side was added in a previous step
IF(mySide)THEN
- ! Check if the side was added in a previous step
DO iNeigh = 1, NumRotPeriodicNeigh(jSide)
- IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE jNodeLoop
- END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
- NumRotPeriodicNeigh(jSide) = NumRotPeriodicNeigh(jSide) + 1
- IF(NumRotPeriodicNeigh(jSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
- ' jSide: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
- RotPeriodicSideMapping_temp(jSide,NumRotPeriodicNeigh(jSide)) = SideID
+ IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE jSideLoop
+ END DO ! iNeigh = 1, NumRotPeriodicNeigh(jSide)
END IF ! mySide
- ! Exit loop over nodes when side has been assigned
- EXIT jNodeLoop
+ ! Loop the 4 nodes of iSide and test against the bounding box of jSide
+ iNodeLoop: DO iNode = 1, 4
+ NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
+ ! Calculate node coordinates in reference system
+ iNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
+ iNodeH = iNodeVec(k)
+ iNodeR = SQRT(iNodeVec(l)**2+iNodeVec(m)**2)
- END DO jNodeLoop ! iNode = 1, 4
- END IF ! .NOT.FoundConnection
+ ! Cycle if outside of bounding box of jSide
+ IF(BoundingBox(1,jSide).GT.iNodeH) CYCLE iNodeLoop
+ IF(BoundingBox(2,jSide).LT.iNodeH) CYCLE iNodeLoop
+ IF(BoundingBox(3,jSide).GT.iNodeR) CYCLE iNodeLoop
+ IF(BoundingBox(4,jSide).LT.iNodeR) CYCLE iNodeLoop
- END DO jSideLoop ! jSide = 1, nRotPeriodicSides
+ FoundConnection = .TRUE.
- ! Check if iSide could not be mapped to any other side
- IF(NumRotPeriodicNeigh(iSide).EQ.0) THEN
- IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).EQ.3) THEN
- ! Found side on element that is a neighbor element in rot halo region (they have halo flag 3)
- ! If a particle ends up there, an abort is in place RotPeriodicBoundary routine, as RotPeriodicSideMapping will get an -1 later
- NumRotPeriodicNeigh(iSide) = 1
- RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = 0
- END IF
- END IF ! NumRotPeriodicNeigh(iSide).EQ.0
-
-END DO iSideLoop ! iSide = firstSide, lastSide
-
-! (3b) Addition of neighbour elements for each node of a mapped side (especially a problem for tetrahedron-based meshes)
-DO iSide = firstSide, lastSide
- NewNeighNumber = NumRotPeriodicNeigh(iSide)
- DO iNeigh=1, NumRotPeriodicNeigh(iSide)
- IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.0) CYCLE
- SideID = RotPeriodicSideMapping_temp(iSide,iNeigh)
- CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
- LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
- ! Loop over the nodes of the neighbour side
- kNodeLoop: DO iNode = 1, 4
- NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
- UniqueNodeID = NodeInfo_Shared(NodeID)
- ElemLoop: DO iElem = NodeToElemMapping(1,UniqueNodeID) + 1, NodeToElemMapping(1,UniqueNodeID) + NodeToElemMapping(2,UniqueNodeID)
- TestElemID = NodeToElemInfo(iElem)
- ! Check if its the same element
- IF(CNElemID.EQ.TestElemID) CYCLE ElemLoop
- ! Check if element is already in the list of the OLD neighbours
- NeighLoop: DO jNeigh=1, NumRotPeriodicNeigh(iSide)
- ! Skip yourself
- IF(iNeigh.EQ.jNeigh) CYCLE NeighLoop
- CNElemID2 = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,RotPeriodicSideMapping_temp(iSide,jNeigh)))
- IF(CNElemID2.EQ.TestElemID) CYCLE ElemLoop
- END DO NeighLoop
- ! Check if element is already in the list of the NEW neighbours
- NewNeighLoop: DO kNeigh = NumRotPeriodicNeigh(iSide),NewNeighNumber
- jElem = ABS(RotPeriodicSideMapping_temp(iSide,kNeigh))
- IF(jElem.EQ.GetGlobalElemID(TestElemID)) CYCLE ElemLoop
- END DO NewNeighLoop
- ! Add element to the neighbour list
- NewNeighNumber = NewNeighNumber + 1
- IF(NewNeighNumber.GT.NbrOfRotConnections) CALL abort(__STAMP__,&
- ' NewNeighNumber: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
- ! Storing the global element ID with a negative sign in the side mapping array, treated during step (5)
- RotPeriodicSideMapping_temp(iSide,NewNeighNumber) = -GetGlobalElemID(TestElemID)
- END DO ElemLoop
- END DO kNodeLoop
- END DO
- NumRotPeriodicNeigh(iSide) = NewNeighNumber
- ! Check if iSide still could not be mapped to any other side.
- IF(NumRotPeriodicNeigh(iSide).EQ.0) THEN
- SideID = Rot2Glob_temp(iSide)
- IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).NE.3) THEN
- ! Count number of sides that could not be mapped (warning output + info in h5 file when CalcMeshInfo=T)
- ! This is acceptable when the halo region (ELEM_HALOFLAG = 2) of the node merely reaches the rotational BC but does not extend any further.
- notMapped = notMapped + 1
- IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).EQ.1) abortAfterWriteOut = .TRUE.
- END IF
- END IF
-END DO
+ ! Check if the side was added in a previous step
+ DO iNeigh = 1, NumRotPeriodicNeigh(iSide)
+ IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.SideID2) CYCLE iNodeLoop
+ END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
+
+ ! Found connection
+ NumRotPeriodicNeigh(iSide) = NumRotPeriodicNeigh(iSide) + 1
+ IF(NumRotPeriodicNeigh(iSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
+ ' ERROR: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
+ RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = SideID2
+
+ ! Only do vice versa mapping if the processor has been assigned this side
+ IF(mySide)THEN
+ ! Check if the side was added in a previous step
+ DO iNeigh = 1, NumRotPeriodicNeigh(jSide)
+ IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE iNodeLoop
+ END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
+ NumRotPeriodicNeigh(jSide) = NumRotPeriodicNeigh(jSide) + 1
+ IF(NumRotPeriodicNeigh(jSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
+ ' jSide: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
+ RotPeriodicSideMapping_temp(jSide,NumRotPeriodicNeigh(jSide)) = SideID
+ END IF ! mySide
+
+ ! Exit loop over nodes when side has been assigned
+ EXIT iNodeLoop
+
+ END DO iNodeLoop ! iNode = 1, 4
+
+ IF(.NOT.FoundConnection) THEN
+ ! Double check is needed if bounding box of jSide is within the original side (iSide) -> check whether jSide is within
+ ! bounding box of iSide. Need to get the NodeIDs of jSide (= SideID2).
+ CNElemID2 = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID2))
+ LocSideID2 = SideInfo_Shared(SIDE_LOCALID,SideID2)
+
+ ! Loop the 4 nodes of jSide and test against the bounding box of iSide
+ jNodeLoop: DO iNode = 1, 4
+ NodeID = ElemSideNodeID_Shared(iNode,LocSideID2,CNElemID2) + 1
+ ! Calculate node coordinates in reference system
+ iNodeVec(1:3) = NodeCoords_Shared(1:3,NodeID)
+ iNodeH = iNodeVec(k)
+ iNodeR = SQRT(iNodeVec(l)**2+iNodeVec(m)**2)
+
+ ! Cycle if outside of bounding box of iSide
+ IF(BoundingBox(1,iSide).GT.iNodeH) CYCLE jNodeLoop
+ IF(BoundingBox(2,iSide).LT.iNodeH) CYCLE jNodeLoop
+ IF(BoundingBox(3,iSide).GT.iNodeR) CYCLE jNodeLoop
+ IF(BoundingBox(4,iSide).LT.iNodeR) CYCLE jNodeLoop
+
+ ! Check if the side was added in a previous step
+ DO iNeigh = 1, NumRotPeriodicNeigh(iSide)
+ IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.SideID2) CYCLE jNodeLoop
+ END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
+
+ ! Found connection
+ NumRotPeriodicNeigh(iSide) = NumRotPeriodicNeigh(iSide) + 1
+ IF(NumRotPeriodicNeigh(iSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
+ ' ERROR: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
+ RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = SideID2
+
+ ! Only do vice versa mapping if the processor has been assigned this side
+ IF(mySide)THEN
+ ! Check if the side was added in a previous step
+ DO iNeigh = 1, NumRotPeriodicNeigh(jSide)
+ IF(RotPeriodicSideMapping_temp(jSide,iNeigh).EQ.SideID) CYCLE jNodeLoop
+ END DO ! iNeigh = 1, NumRotPeriodicNeigh(iSide)
+ NumRotPeriodicNeigh(jSide) = NumRotPeriodicNeigh(jSide) + 1
+ IF(NumRotPeriodicNeigh(jSide).GT.NbrOfRotConnections) CALL abort(__STAMP__,&
+ ' jSide: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
+ RotPeriodicSideMapping_temp(jSide,NumRotPeriodicNeigh(jSide)) = SideID
+ END IF ! mySide
+
+ ! Exit loop over nodes when side has been assigned
+ EXIT jNodeLoop
+
+ END DO jNodeLoop ! iNode = 1, 4
+ END IF ! .NOT.FoundConnection
+
+ END DO jSideLoop ! jSide = 1, nRotPeriodicSides
+
+ ! Check if iSide could not be mapped to any other side
+ IF(NumRotPeriodicNeigh(iSide).EQ.0) THEN
+ IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).EQ.3) THEN
+ ! Found side on element that is a neighbor element in rot halo region (they have halo flag 3)
+ ! If a particle ends up there, an abort is in place RotPeriodicBoundary routine, as RotPeriodicSideMapping will get an -1 later
+ NumRotPeriodicNeigh(iSide) = 1
+ RotPeriodicSideMapping_temp(iSide,NumRotPeriodicNeigh(iSide)) = 0
+ END IF
+ END IF ! NumRotPeriodicNeigh(iSide).EQ.0
+
+ END DO iSideLoop ! iSide = firstSide, lastSide
+
+ ! (3b) Addition of neighbour elements for each node of a mapped side (especially a problem for tetrahedron-based meshes)
+ DO iSide = firstSide, lastSide
+ NewNeighNumber = NumRotPeriodicNeigh(iSide)
+ DO iNeigh=1, NumRotPeriodicNeigh(iSide)
+ IF(RotPeriodicSideMapping_temp(iSide,iNeigh).EQ.0) CYCLE
+ SideID = RotPeriodicSideMapping_temp(iSide,iNeigh)
+ CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID))
+ LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
+ ! Loop over the nodes of the neighbour side
+ kNodeLoop: DO iNode = 1, 4
+ NodeID = ElemSideNodeID_Shared(iNode,LocSideID,CNElemID) + 1
+ UniqueNodeID = NodeInfo_Shared(NodeID)
+ ElemLoop: DO iElem = NodeToElemMapping(1,UniqueNodeID) + 1, NodeToElemMapping(1,UniqueNodeID) + NodeToElemMapping(2,UniqueNodeID)
+ TestElemID = NodeToElemInfo(iElem)
+ ! Check if its the same element
+ IF(CNElemID.EQ.TestElemID) CYCLE ElemLoop
+ ! Check if element is already in the list of the OLD neighbours
+ NeighLoop: DO jNeigh=1, NumRotPeriodicNeigh(iSide)
+ ! Skip yourself
+ IF(iNeigh.EQ.jNeigh) CYCLE NeighLoop
+ CNElemID2 = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,RotPeriodicSideMapping_temp(iSide,jNeigh)))
+ IF(CNElemID2.EQ.TestElemID) CYCLE ElemLoop
+ END DO NeighLoop
+ ! Check if element is already in the list of the NEW neighbours
+ NewNeighLoop: DO kNeigh = NumRotPeriodicNeigh(iSide),NewNeighNumber
+ jElem = ABS(RotPeriodicSideMapping_temp(iSide,kNeigh))
+ IF(jElem.EQ.GetGlobalElemID(TestElemID)) CYCLE ElemLoop
+ END DO NewNeighLoop
+ ! Add element to the neighbour list
+ NewNeighNumber = NewNeighNumber + 1
+ IF(NewNeighNumber.GT.NbrOfRotConnections) CALL abort(__STAMP__,&
+ ' NewNeighNumber: Number of rotational periodic side exceed fixed number of ',IntInfoOpt=NbrOfRotConnections)
+ ! Storing the global element ID with a negative sign in the side mapping array, treated during step (5)
+ RotPeriodicSideMapping_temp(iSide,NewNeighNumber) = -GetGlobalElemID(TestElemID)
+ END DO ElemLoop
+ END DO kNodeLoop
+ END DO
+ NumRotPeriodicNeigh(iSide) = NewNeighNumber
+ ! Check if iSide still could not be mapped to any other side.
+ IF(NumRotPeriodicNeigh(iSide).EQ.0) THEN
+ SideID = Rot2Glob_temp(iSide)
+ IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).NE.3) THEN
+ ! Count number of sides that could not be mapped (warning output + info in h5 file when CalcMeshInfo=T)
+ ! This is acceptable when the halo region (ELEM_HALOFLAG = 2) of the node merely reaches the rotational BC but does not extend any further.
+ notMapped = notMapped + 1
+ IF(ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,SideID)).EQ.1) abortAfterWriteOut = .TRUE.
+ END IF
+ END IF
+ END DO
-! (4) reallocate array due to number of potential rotational periodic sides
+ ! (4) reallocate array due to number of potential rotational periodic sides
#if USE_MPI
-CALL BARRIER_AND_SYNC(NumRotPeriodicNeigh_Shared_Win, MPI_COMM_SHARED)
-CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_temp_Shared_Win, MPI_COMM_SHARED)
-! The allreduce is only required when a global array for writing to .h5 is to be used
-!CALL MPI_ALLREDUCE(MAXVAL(NumRotPeriodicNeigh) , MaxNumRotPeriodicNeigh , 1 , MPI_INTEGER , MPI_MAX , MPI_COMM_WORLD , iError)
+ CALL BARRIER_AND_SYNC(NumRotPeriodicNeigh_Shared_Win, MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_temp_Shared_Win, MPI_COMM_SHARED)
+ ! The allreduce is only required when a global array for writing to .h5 is to be used
+ !CALL MPI_ALLREDUCE(MAXVAL(NumRotPeriodicNeigh) , MaxNumRotPeriodicNeigh , 1 , MPI_INTEGER , MPI_MAX , MPI_COMM_PICLAS , iError)
#endif /*USE_MPI*/
-MaxNumRotPeriodicNeigh = MAXVAL(NumRotPeriodicNeigh)
+ MaxNumRotPeriodicNeigh = MAXVAL(NumRotPeriodicNeigh)
+ IF(MaxNumRotPeriodicNeigh.GT.0)THEN
#if USE_MPI
-CALL Allocate_Shared((/nRotPeriodicSides,MaxNumRotPeriodicNeigh/) , RotPeriodicSideMapping_Shared_Win , RotPeriodicSideMapping_Shared)
-CALL MPI_WIN_LOCK_ALL(0 , RotPeriodicSideMapping_Shared_Win , IERROR)
-RotPeriodicSideMapping => RotPeriodicSideMapping_Shared
-IF (myComputeNodeRank.EQ.0) RotPeriodicSideMapping = -1
-CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_Shared_Win , MPI_COMM_SHARED)
+ CALL Allocate_Shared((/nRotPeriodicSides,MaxNumRotPeriodicNeigh/) , RotPeriodicSideMapping_Shared_Win , RotPeriodicSideMapping_Shared)
+ CALL MPI_WIN_LOCK_ALL(0 , RotPeriodicSideMapping_Shared_Win , IERROR)
+ RotPeriodicSideMapping => RotPeriodicSideMapping_Shared
+ IF (myComputeNodeRank.EQ.0) RotPeriodicSideMapping = -1
+ CALL BARRIER_AND_SYNC(RotPeriodicSideMapping_Shared_Win , MPI_COMM_SHARED)
#else
-ALLOCATE(RotPeriodicSideMapping(nRotPeriodicSides,MaxNumRotPeriodicNeigh))
-RotPeriodicSideMapping = -1
+ ALLOCATE(RotPeriodicSideMapping(nRotPeriodicSides,MaxNumRotPeriodicNeigh))
+ RotPeriodicSideMapping = -1
#endif /*USE_MPI*/
-! (5) store the side to element mapping in the final array, make sure to convert the negative ElemIDs
-! (stored directly in the temporary array during 3b)
-DO iSide=1, nRotPeriodicSides
- DO iNeigh=1, MaxNumRotPeriodicNeigh
- SideID = RotPeriodicSideMapping_temp(iSide,iNeigh)
- IF(SideID.GT.0) THEN
- ! Sides added during (3a), get the global element ID for these neighbours
- GlobalElemID = SideInfo_Shared(SIDE_ELEMID,SideID)
- RotPeriodicSideMapping(iSide,iNeigh) = GlobalElemID
- ELSE IF(SideID.LT.0) THEN
- ! Global elements added during (3b) directly with a negative sign
- RotPeriodicSideMapping(iSide,iNeigh) = ABS(SideID)
- END IF
- END DO
-END DO
+ ! (5) store the side to element mapping in the final array, make sure to convert the negative ElemIDs
+ ! (stored directly in the temporary array during 3b)
+ DO iSide=1, nRotPeriodicSides
+ DO iNeigh=1, MaxNumRotPeriodicNeigh
+ SideID = RotPeriodicSideMapping_temp(iSide,iNeigh)
+ IF(SideID.GT.0) THEN
+ ! Sides added during (3a), get the global element ID for these neighbours
+ GlobalElemID = SideInfo_Shared(SIDE_ELEMID,SideID)
+ RotPeriodicSideMapping(iSide,iNeigh) = GlobalElemID
+ ELSE IF(SideID.LT.0) THEN
+ ! Global elements added during (3b) directly with a negative sign
+ RotPeriodicSideMapping(iSide,iNeigh) = ABS(SideID)
+ END IF
+ END DO
+ END DO
+ END IF ! MaxNumRotPeriodicNeigh.GT.0
+
+ ! Deallocate temporary arrays
+#if USE_MPI
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+ CALL UNLOCK_AND_FREE(RotPeriodicSideMapping_temp_Shared_Win)
+ ADEALLOCATE(RotPeriodicSideMapping_temp_Shared)
+ ADEALLOCATE(RotPeriodicSideMapping_temp)
+ CALL UNLOCK_AND_FREE(BoundingBox_Shared_Win)
+ ADEALLOCATE(BoundingBox_Shared)
+ ADEALLOCATE(BoundingBox)
+#else
+ DEALLOCATE(RotPeriodicSideMapping_temp)
+ DEALLOCATE(BoundingBox)
+#endif /*USE_MPI*/
+
+ END IF ! nRotPeriodicSides.GT.0
+
+#if USE_MPI
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+ CALL UNLOCK_AND_FREE(Rot2Glob_temp_Shared_Win)
+ ADEALLOCATE(Rot2Glob_temp_Shared)
+ ADEALLOCATE(Rot2Glob_temp)
+#else
+ DEALLOCATE(Rot2Glob_temp)
+#endif /*USE_MPI*/
+END IF ! nComputeNodeSurfTotalSides.GT.0
+
+! Sanity check
#if USE_MPI
-CALL MPI_ALLREDUCE(notMapped , notMappedTotal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_WORLD , IERROR)
+CALL MPI_ALLREDUCE(notMapped , notMappedTotal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_PICLAS , IERROR)
#else
notMappedTotal = notMapped
#endif /*USE_MPI*/
@@ -1444,22 +1866,7 @@ SUBROUTINE BuildParticleBoundaryRotPeriodic(notMappedTotal)
IF(abortAfterWriteOut) CALL abort(__STAMP__,' ERROR: At least one rot periodic side on the local compute-node did not find a corresponding side.')
END IF ! notMappedTotal.GT.0
-#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-CALL UNLOCK_AND_FREE(Rot2Glob_temp_Shared_Win)
-ADEALLOCATE(Rot2Glob_temp_Shared)
-ADEALLOCATE(Rot2Glob_temp)
-CALL UNLOCK_AND_FREE(RotPeriodicSideMapping_temp_Shared_Win)
-ADEALLOCATE(RotPeriodicSideMapping_temp_Shared)
-ADEALLOCATE(RotPeriodicSideMapping_temp)
-CALL UNLOCK_AND_FREE(BoundingBox_Shared_Win)
-ADEALLOCATE(BoundingBox_Shared)
-ADEALLOCATE(BoundingBox)
-#else
-DEALLOCATE(Rot2Glob_temp)
-DEALLOCATE(RotPeriodicSideMapping_temp)
-DEALLOCATE(BoundingBox)
-#endif /*USE_MPI*/
+
END SUBROUTINE BuildParticleBoundaryRotPeriodic
@@ -1480,7 +1887,7 @@ SUBROUTINE InitRotPeriodicInterPlaneMapping()
!USE MOD_MPI_Shared
USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides
#else
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
#endif /*USE_MPI*/
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -1507,7 +1914,7 @@ SUBROUTINE InitRotPeriodicInterPlaneMapping()
lastSide = nComputeNodeSurfTotalSides ! INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))
#else
firstSide = 1
-lastSide = nSurfTotalSides
+lastSide = nGlobalSurfSides
#endif /*USE_MPI*/
! First loop: calculating the number of sides per inter plane and finds the maximum number
iBCLoop1: DO iPartBound=1,nPartBound
@@ -1737,6 +2144,12 @@ SUBROUTINE FinalizeParticleBoundary()
SDEALLOCATE(PartBound%Resample)
SDEALLOCATE(PartBound%WallVelo)
SDEALLOCATE(PartBound%RotVelo)
+SDEALLOCATE(PartBound%PhotonEnACC)
+SDEALLOCATE(PartBound%PhotonSEEYield)
+SDEALLOCATE(PartBound%PhotonSEEWorkFunction)
+SDEALLOCATE(PartBound%PhotonSEEMacroParticleFactor)
+SDEALLOCATE(PartBound%PhotonSEEElectronSpecies)
+SDEALLOCATE(PartBound%PhotonSpecularReflection)
SDEALLOCATE(PartBound%RotOmega)
SDEALLOCATE(PartBound%NormalizedRadiusDir)
SDEALLOCATE(PartBound%RotAxisPosition)
@@ -1757,17 +2170,30 @@ SUBROUTINE FinalizeParticleBoundary()
SDEALLOCATE(PartBound%BoundaryParticleOutputHDF5)
SDEALLOCATE(PartBound%RadiativeEmissivity)
+! Mapping arrays are allocated even if the node does not have sampling surfaces
+#if USE_MPI
+IF(SurfCOMM%UNICATOR.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(SurfCOMM%UNICATOR,iERROR)
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+CALL UNLOCK_AND_FREE(GlobalSide2SurfSide_Shared_Win)
+IF(nComputeNodeSurfTotalSides.GT.0) CALL UNLOCK_AND_FREE(SurfSide2GlobalSide_Shared_Win)
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+ADEALLOCATE(GlobalSide2SurfSide_Shared)
+ADEALLOCATE(SurfSide2GlobalSide_Shared)
+#endif /*USE_MPI*/
+ADEALLOCATE(GlobalSide2SurfSide)
+ADEALLOCATE(SurfSide2GlobalSide)
+
! Rotational periodic boundary condition
-IF(PartBound%UseRotPeriodicBC)THEN
+IF(PartBound%UseRotPeriodicBC.AND.nComputeNodeSurfTotalSides.GT.0)THEN
#if USE_MPI
CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
CALL UNLOCK_AND_FREE(SurfSide2RotPeriodicSide_Shared_Win)
- CALL UNLOCK_AND_FREE(NumRotPeriodicNeigh_Shared_Win)
+ IF(nRotPeriodicSides .GT.0) CALL UNLOCK_AND_FREE(NumRotPeriodicNeigh_Shared_Win)
+ IF(MaxNumRotPeriodicNeigh.GT.0) CALL UNLOCK_AND_FREE(RotPeriodicSideMapping_Shared_Win)
ADEALLOCATE(SurfSide2RotPeriodicSide_Shared)
ADEALLOCATE(SurfSide2RotPeriodicSide)
ADEALLOCATE(NumRotPeriodicNeigh_Shared)
ADEALLOCATE(NumRotPeriodicNeigh)
- CALL UNLOCK_AND_FREE(RotPeriodicSideMapping_Shared_Win)
ADEALLOCATE(RotPeriodicSideMapping_Shared)
ADEALLOCATE(RotPeriodicSideMapping)
ADEALLOCATE(InterPlaneSideMapping)
diff --git a/src/particles/boundary/particle_boundary_sampling.f90 b/src/particles/boundary/particle_boundary_sampling.f90
index 6a3142239..b7b17df76 100644
--- a/src/particles/boundary/particle_boundary_sampling.f90
+++ b/src/particles/boundary/particle_boundary_sampling.f90
@@ -76,12 +76,12 @@ SUBROUTINE InitParticleBoundarySampling()
USE MOD_Basis ,ONLY: LegendreGaussNodesAndWeights
USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_CalcSymmetryArea, DSMC_1D_CalcSymmetryArea
USE MOD_Mesh_Vars ,ONLY: NGeo,nBCs,BoundaryName
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,dXiEQ_SurfSample,PartBound,XiEQ_SurfSample
USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,nComputeNodeSurfTotalSides,nComputeNodeSurfOutputSides
USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides
-USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide,SurfSide2GlobalSide
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_Particle_Boundary_Vars ,ONLY: CalcSurfaceImpact
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSideArea,SurfSampSize,SurfOutputSize,SurfSpecOutputSize
@@ -102,16 +102,10 @@ SUBROUTINE InitParticleBoundarySampling()
USE MOD_Particle_Vars ,ONLY: Symmetry
USE MOD_ReadInTools ,ONLY: GETINT,GETLOGICAL,GETINTARRAY
#if USE_MPI
-USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared
USE MOD_MPI_Shared
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF,mySurfRank
USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors
-USE MOD_Particle_Mesh_Vars ,ONLY: nNonUniqueGlobalSides
-!USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeElem,nComputeNodeElems
-USE MOD_MPI_Shared_Vars ,ONLY: myLeaderGroupRank,nLeaderGroupProcs
-USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide_Shared,GlobalSide2SurfSide_Shared_Win
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide_Shared,SurfSide2GlobalSide_Shared_Win
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSideArea_Shared,SurfSideArea_Shared_Win
USE MOD_Particle_Boundary_Vars ,ONLY: SampWallState_Shared,SampWallState_Shared_Win
USE MOD_Particle_Boundary_Vars ,ONLY: SampWallPumpCapacity_Shared,SampWallPumpCapacity_Shared_Win
@@ -120,11 +114,10 @@ SUBROUTINE InitParticleBoundarySampling()
USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactAngle_Shared,SampWallImpactAngle_Shared_Win
USE MOD_Particle_Boundary_Vars ,ONLY: SampWallImpactNumber_Shared,SampWallImpactNumber_Shared_Win
USE MOD_Particle_MPI_Boundary_Sampling,ONLY: InitSurfCommunication
-USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeInnerBCs
#else
USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank
USE MOD_Particle_Mesh_Vars ,ONLY: nComputeNodeSides
-USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalOutputSides
#endif /*USE_MPI*/
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
@@ -138,12 +131,7 @@ SUBROUTINE InitParticleBoundarySampling()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iBC
-INTEGER :: iSide,firstSide,lastSide,iSurfSide,GlobalSideID
-INTEGER :: nSurfSidesProc
-INTEGER :: offsetSurfTotalSidesProc
-INTEGER,ALLOCATABLE :: GlobalSide2SurfSideProc(:,:)
-!INTEGER,ALLOCATABLE :: SurfSide2GlobalSideProc(:,:)
-CHARACTER(20) :: hilf
+INTEGER :: iSide,firstSide,lastSide
CHARACTER(LEN=255),ALLOCATABLE :: BCName(:)
! surface area
INTEGER :: SideID,ElemID,CNElemID,LocSideID
@@ -153,271 +141,18 @@ SUBROUTINE InitParticleBoundarySampling()
REAL,DIMENSION(2,3) :: gradXiEta3D
REAL,DIMENSION(:),ALLOCATABLE :: Xi_NGeo,wGP_NGeo
REAL :: XiOut(1:2),E,F,G,D,tmp1,tmpI2,tmpJ2
-REAL :: xNod, zNod, yNod, Vector1(3), Vector2(3), nx, ny, nz
-#if USE_MPI
-INTEGER :: offsetSurfSidesProc
-INTEGER :: GlobalElemID,GlobalElemRank
-INTEGER :: sendbuf,recvbuf
-INTEGER :: NbGlobalElemID, NbElemRank, NbLeaderID, nSurfSidesTmp
-#endif /*USE_MPI*/
-INTEGER :: NbGlobalSideID
+REAL :: xNod(3), Vector1(3), Vector2(3), nx, ny, nz
+LOGICAL :: UseBezierControlPointsForArea
!===================================================================================================================================
! Get input parameters
LBWRITE(UNIT_stdOut,'(A)') ' INIT SURFACE SAMPLING ...'
-WRITE(UNIT=hilf,FMT='(I0)') NGeo
-nSurfSample = GETINT('DSMC-nSurfSample',TRIM(hilf))
-
-IF((nSurfSample.GT.1).AND.(TrackingMethod.EQ.TRIATRACKING)) &
- CALL abort(__STAMP__,'nSurfSample cannot be >1 if TrackingMethod = triatracking')
-
! Sampling of impact energy for each species (trans, rot, vib), impact vector (x,y,z) and angle
CalcSurfaceImpact = GETLOGICAL('CalcSurfaceImpact')
-! Allocate shared array for surf sides
-#if USE_MPI
-CALL Allocate_Shared((/3,nNonUniqueGlobalSides/),GlobalSide2SurfSide_Shared_Win,GlobalSide2SurfSide_Shared)
-CALL MPI_WIN_LOCK_ALL(0,GlobalSide2SurfSide_Shared_Win,IERROR)
-GlobalSide2SurfSide => GlobalSide2SurfSide_Shared
-#else
-ALLOCATE(GlobalSide2SurfSide(1:3,1:nComputeNodeSides))
-#endif /*USE_MPI*/
-
-! only CN root nullifies
-#if USE_MPI
-IF (myComputeNodeRank.EQ.0) THEN
-#endif /* USE_MPI*/
- GlobalSide2SurfSide = -1.
-#if USE_MPI
-END IF
-
-CALL BARRIER_AND_SYNC(GlobalSide2SurfSide_Shared_Win,MPI_COMM_SHARED)
-#endif /* USE_MPI*/
-
-! get number of BC-Sides
-#if USE_MPI
-! NO HALO REGION REDUCTION
-firstSide = INT(REAL( myComputeNodeRank )*REAL(nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors))+1
-lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors))
-ALLOCATE(GlobalSide2SurfSideProc(1:3,firstSide:lastSide))
- !,SurfSide2GlobalSideProc(1:3,1 :INT(nNonUniqueGlobalSides/REAL(nComputeNodeProcessors))))
-#else
-firstSide = 1
-lastSide = nComputeNodeSides
-ALLOCATE(GlobalSide2SurfSideProc(1:3,1:nComputeNodeSides))
- !,SurfSide2GlobalSideProc(1:3,1:nComputeNodeSides))
-#endif /*USE_MPI*/
-
-GlobalSide2SurfSideProc = -1
-!SurfSide2GlobalSideProc = -1
-nComputeNodeSurfSides = 0
-nSurfSidesProc = 0
-
-! check every BC side
-DO iSide = firstSide,lastSide
- ! ignore non-BC sides
- IF (SideInfo_Shared(SIDE_BCID,iSide).LE.0) CYCLE
-
-#if USE_MPI
- ! ignore sides outside of halo region
- IF (ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.0) CYCLE
-#endif /*USE_MPI*/
-
- ! count number of reflective and rotationally periodic BC sides
- IF ((PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%ReflectiveBC) .OR. &
- (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%RotPeriodicBC).OR. &
- (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%RotPeriodicInterPlaneBC))THEN
- nSurfSidesProc = nSurfSidesProc + 1
- ! check if element for this side is on the current compute-node
- ! IF ((SideInfo_Shared(SIDE_ID,iSide).GT.ElemInfo_Shared(ELEM_FIRSTSIDEIND,offsetComputeNodeElem+1)) .AND. &
- ! (SideInfo_Shared(SIDE_ID,iSide).LE.ElemInfo_Shared(ELEM_LASTSIDEIND ,offsetComputeNodeElem+nComputeNodeElems))) THEN
-! IF ((iSide.GE.(ElemInfo_Shared(ELEM_FIRSTSIDEIND,offsetComputeNodeElem+1)+1)) .AND. &
-! (iSide.LE.ElemInfo_Shared(ELEM_LASTSIDEIND ,offsetComputeNodeElem+nComputeNodeElems))) THEN
-! nComputeNodeSurfSides = nComputeNodeSurfSides + 1
-! END IF
-
- ! TODO: Add another check to determine the surface side in halo_eps from current proc. Node-wide halo can become quite large with
- ! with 128 procs!
-
- ! Write local mapping from Side to Surf side. The rank is already correct, the offset must be corrected by the proc offset later
- GlobalSide2SurfSideProc(SURF_SIDEID,iSide) = nSurfSidesProc
-#if USE_MPI
- GlobalSide2SurfSideProc(SURF_RANK ,iSide) = ElemInfo_Shared(ELEM_RANK,SideInfo_Shared(SIDE_ELEMID,iSide))
- ! get global Elem ID
- GlobalElemID = SideInfo_Shared(SIDE_ELEMID,iSide)
- GlobalElemRank = ElemInfo_Shared(ELEM_RANK,GlobalElemID)
- ! running on one node, everything belongs to us
- IF (nLeaderGroupProcs.EQ.1) THEN
- GlobalSide2SurfSideProc(SURF_LEADER,iSide) = myLeaderGroupRank
- ELSE
- ! find the compute node
- GlobalSide2SurfSideProc(SURF_LEADER,iSide) = INT(GlobalElemRank/nComputeNodeProcessors)
- END IF
-#else
- GlobalSide2SurfSideProc(SURF_RANK ,iSide) = 0
- GlobalSide2SurfSideProc(SURF_LEADER,iSide) = GlobalSide2SurfSideProc(SURF_RANK,iSide)
-#endif /*USE_MPI*/
-
-#if USE_MPI
- ! check if element for this side is on the current compute-node. Alternative version to the check above
- IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).EQ.myLeaderGroupRank) THEN
-#endif /*USE_MPI*/
- nComputeNodeSurfSides = nComputeNodeSurfSides + 1
-#if USE_MPI
- END IF
-#endif /*USE_MPI*/
- END IF ! reflective side
-END DO
-
-! Find CN global number of total surf sides and write Side to Surf Side mapping into shared array
-#if USE_MPI
-sendbuf = nSurfSidesProc - nComputeNodeSurfSides
-recvbuf = 0
-CALL MPI_EXSCAN(sendbuf,recvbuf,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
-offsetSurfTotalSidesProc = recvbuf
-! last proc knows CN total number of BC elems
-sendbuf = offsetSurfTotalSidesProc + nSurfSidesProc - nComputeNodeSurfSides
-CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
-nComputeNodeSurfTotalSides = sendbuf
-
-! Find CN global number of local surf sides and write Side to Surf Side mapping into shared array
-sendbuf = nComputeNodeSurfSides
-recvbuf = 0
-CALL MPI_EXSCAN(sendbuf,recvbuf,1,MPI_INTEGER,MPI_SUM,MPI_COMM_SHARED,iError)
-offsetSurfSidesProc = recvbuf
-! last proc knows CN total number of BC elems
-sendbuf = offsetSurfSidesProc + nComputeNodeSurfSides
-CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nComputeNodeProcessors-1,MPI_COMM_SHARED,iError)
-nComputeNodeSurfSides = sendbuf
-nComputeNodeSurfTotalSides = nComputeNodeSurfTotalSides + nComputeNodeSurfSides
-
-! increment SURF_SIDEID by offset
-nSurfSidesTmp = 0
-DO iSide = firstSide,lastSide
- IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
-
- ! sort compute-node local sides first
- IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).EQ.myLeaderGroupRank) THEN
- nSurfSidesTmp = nSurfSidesTmp + 1
-
- GlobalSide2SurfSide(: ,iSide) = GlobalSide2SurfSideProc(:,iSide)
- GlobalSide2SurfSide(SURF_SIDEID,iSide) = nSurfSidesTmp + offsetSurfSidesProc
- END IF
-END DO
-
-nSurfSidesTmp = 0
-DO iSide = firstSide,lastSide
- IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
-
- ! sampling sides in halo region follow at the end
- IF (GlobalSide2SurfSideProc(SURF_LEADER,iSide).NE.myLeaderGroupRank) THEN
- nSurfSidesTmp = nSurfSidesTmp + 1
-
- GlobalSide2SurfSide(: ,iSide) = GlobalSide2SurfSideProc(:,iSide)
- GlobalSide2SurfSide(SURF_SIDEID,iSide) = nSurfSidesTmp + nComputeNodeSurfSides + offsetSurfTotalSidesProc
- END IF
-END DO
-#else
-offsetSurfTotalSidesProc = 0
-nComputeNodeSurfTotalSides = nSurfSidesProc
-GlobalSide2SurfSide(:,firstSide:lastSide) = GlobalSide2SurfSideProc(:,firstSide:lastSide)
-#endif /*USE_MPI*/
-
-! Build inverse mapping
-#if USE_MPI
-CALL Allocate_Shared((/3,nComputeNodeSurfTotalSides/),SurfSide2GlobalSide_Shared_Win,SurfSide2GlobalSide_Shared)
-CALL MPI_WIN_LOCK_ALL(0,SurfSide2GlobalSide_Shared_Win,IERROR)
-SurfSide2GlobalSide => SurfSide2GlobalSide_Shared
-
-DO iSide = firstSide,lastSide
- IF (GlobalSide2SurfSideProc(SURF_SIDEID,iSide).EQ.-1) CYCLE
-
- SurfSide2GlobalSide(: ,GlobalSide2SurfSide(SURF_SIDEID,iSide)) = GlobalSide2SurfSide(:,iSide)
- SurfSide2GlobalSide(SURF_SIDEID,GlobalSide2SurfSide(SURF_SIDEID,iSide)) = iSide
-END DO
-
-CALL BARRIER_AND_SYNC(GlobalSide2SurfSide_Shared_Win,MPI_COMM_SHARED)
-CALL BARRIER_AND_SYNC(SurfSide2GlobalSide_Shared_Win,MPI_COMM_SHARED)
-#else
-ALLOCATE(SurfSide2GlobalSide(1:1,1:nComputeNodeSurfTotalSides))
-!SurfSide2GlobalSide = SurfSide2GlobalSideProc(:,1:nComputeNodeSurfTotalSides)
-DO iSide = firstSide,lastSide
- IF (GlobalSide2SurfSide(SURF_SIDEID,iSide).EQ.-1) CYCLE
- SurfSide2GlobalSide(SURF_SIDEID,GlobalSide2SurfSide(SURF_SIDEID,iSide)) =iSide
-END DO
-#endif /*USE_MPI*/
-
-! Determine the number of surface output sides (inner BCs are not counted twice and rotationally periodic BCs excluded)
-#if USE_MPI
-IF (myComputeNodeRank.EQ.0) THEN
- nComputeNodeInnerBCs = 0
-#endif /*USE_MPI*/
- nComputeNodeSurfOutputSides = 0
- DO iSurfSide = 1,nComputeNodeSurfSides
- GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
- ! Check if the surface side has a neighbor (and is therefore an inner BCs)
- IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
- ! Abort inner BC + Mortar! (too complex and confusing to implement)
- ! This test catches large Mortar sides, i.e., SideInfo_Shared(SIDE_NBELEMID,NonUniqueGlobalSideID) gives the 2 or 4
- ! connecting small Mortar sides. It is assumed that inner BC result in being flagged as a "SurfSide" and therefore are checked
- ! here.
- IF(SideInfo_Shared(SIDE_LOCALID,GlobalSideID).EQ.-1)THEN
- IPWRITE(UNIT_StdOut,'(I12,A,I0)') " NonUniqueGlobalSideID = ",GlobalSideID
- IPWRITE(UNIT_StdOut,'(I12,A,I0)') " SideInfo_Shared(SIDE_LOCALID,NonUniqueGlobalSideID) = ",&
- SideInfo_Shared(SIDE_LOCALID,GlobalSideID)
- IPWRITE(UNIT_StdOut,'(I12,A,I0,A)') " SideInfo_Shared(SIDE_ELEMID,NonUniqueGlobalSideID) = ",&
- SideInfo_Shared(SIDE_ELEMID,GlobalSideID)," (GlobalElemID)"
- CALL abort(__STAMP__,'Inner BC + Mortar is not implemented!')
- END IF
- ! Only add the side with the smaller index
- NbGlobalSideID = SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)
- IF(GlobalSideID.GT.NbGlobalSideID)THEN
-#if USE_MPI
- !--- switcheroo check 1 of 2: Non-HALO sides
- ! Only required for sampling on the larger NonUniqueGlobalSideID of the two sides of the inner BC
- ! Count larger inner BCs as these may have to be sent to a different leader processor
- NbGlobalElemID = SideInfo_Shared(SIDE_ELEMID,NbGlobalSideID)
- NbElemRank = ElemInfo_Shared(ELEM_RANK,NbGlobalElemID)
- NbLeaderID = INT(NbElemRank/nComputeNodeProcessors)
- IF(NbLeaderID.NE.INT(myRank/nComputeNodeProcessors))THEN
- nComputeNodeInnerBCs(1) = nComputeNodeInnerBCs(1) + 1
- END IF
-#endif
- CYCLE! Skip sides with the larger index
- END IF
- END IF
- ! Skip rotationally periodic boundary sides for the output
- IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID))).EQ.PartBound%RotPeriodicBC) CYCLE
- ! Skip intermediate planes BCs for the output
- IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID))).EQ.PartBound%RotPeriodicInterPlaneBC) CYCLE
- ! Count the number of output sides
- nComputeNodeSurfOutputSides = nComputeNodeSurfOutputSides + 1
- END DO
-#if USE_MPI
- !--- switcheroo check 2 of 2: HALO sides
- ! Count number of inner BC in halo region
- ! Only required for sampling on the larger NonUniqueGlobalSideID of the two sides of the inner BC
- DO iSurfSide = nComputeNodeSurfSides+1, nComputeNodeSurfTotalSides
- GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
- ! Check if the surface side has a neighbor (and is therefore an inner BCs)
- IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
- ! Only add the side with the smaller index
- IF(GlobalSideID.GT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID))THEN
- ! Count larger inner BCs as these may have to be sent to a different leader processor
- nComputeNodeInnerBCs(2) = nComputeNodeInnerBCs(2) + 1
- END IF
- END IF
- END DO ! iSurfSide = nComputeNodeSurfSides+1, nComputeNodeSurfTotalSides
-END IF
-#endif
-
-! free temporary arrays
-DEALLOCATE(GlobalSide2SurfSideProc)
-!DEALLOCATE(SurfSide2GlobalSideProc)
-
-! flag if there is at least one surf side on the node (sides in halo region do also count)
-SurfOnNode = MERGE(.TRUE.,.FALSE.,nComputeNodeSurfTotalSides.GT.0)
+! Flag if there is at least one surf side on the node (sides in halo region do also count)
+SurfTotalSideOnNode = MERGE(.TRUE.,.FALSE.,nComputeNodeSurfTotalSides.GT.0)
!> Setting the number of sampling (SurfSampSize -> SampWallState) and output (SurfOutputSize -> MacroSurfaceVal) variables
!> Optional sampling variables require an additional SampWallIndex (SWI)
@@ -449,19 +184,17 @@ SUBROUTINE InitParticleBoundarySampling()
!> Leader communication
#if USE_MPI
-IF (myComputeNodeRank.EQ.0) THEN
- CALL InitSurfCommunication()
-END IF
-! The leaders are synchronized at this point, but behind the other procs. nSurfTotalSides is only required when compiled without
+IF (myComputeNodeRank.EQ.0) CALL InitSurfCommunication()
+! The leaders are synchronized at this point, but behind the other procs. nGlobalSurfSides is only required when compiled without
! MPI, so perform latency hiding by postponing synchronization
#else
-mySurfRank = 0
-nSurfTotalSides = nComputeNodeSurfTotalSides
-nOutputSides = nComputeNodeSurfOutputSides
+mySurfRank = 0
+nGlobalSurfSides = nComputeNodeSurfTotalSides
+nGlobalOutputSides = nComputeNodeSurfOutputSides
#endif /* USE_MPI */
! surface sampling array do not need to be allocated if there are no sides within halo_eps range
-IF(.NOT.SurfOnNode) RETURN
+IF(.NOT.SurfTotalSideOnNode) RETURN
!> Allocate the output container
ALLOCATE(MacroSurfaceVal(1:SurfOutputSize , 1:nSurfSample , 1:nSurfSample , nComputeNodeSurfOutputSides))
@@ -581,7 +314,7 @@ SUBROUTINE InitParticleBoundarySampling()
ALLOCATE(SurfSideArea(1:nSurfSample,1:nSurfSample,1:nComputeNodeSurfTotalSides))
firstSide = 1
-lastSide = nSurfTotalSides
+lastSide = nGlobalSurfSides
#endif /*USE_MPI*/
#if USE_MPI
@@ -612,24 +345,27 @@ SUBROUTINE InitParticleBoundarySampling()
! get global SideID. This contains only nonUniqueSide, no special mortar treatment required
SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide)
+ UseBezierControlPointsForArea = .FALSE.
+
IF (TrackingMethod.EQ.TRIATRACKING) THEN
ElemID = SideInfo_Shared(SIDE_ELEMID ,SideID)
CNElemID = GetCNElemID(ElemID)
LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
- area = 0.
- xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1)
- yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1)
- zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1)
+ IF((Symmetry%Order.NE.3).AND.nSurfSample.GT.1) CALL abort(__STAMP__,'nSurfSample>1 not implemented for this symmetry!')
+
IF(Symmetry%Order.EQ.3) THEN
+ ! Check if triangles are used for the calculation of the surface area or not
+ IF(nSurfSample.GT.1)THEN
+ ! Do not use triangles
+ UseBezierControlPointsForArea = .TRUE.
+ ELSE
+ xNod(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1)
+ area = 0.
DO TriNum = 1,2
Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
- Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,LocSideID,CNElemID)+1) - xNod
- Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,LocSideID,CNElemID)+1) - yNod
- Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,LocSideID,CNElemID)+1) - zNod
- Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,LocSideID,CNElemID)+1) - xNod
- Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,LocSideID,CNElemID)+1) - yNod
- Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,LocSideID,CNElemID)+1) - zNod
+ Vector1(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(Node1,LocSideID,CNElemID)+1) - xNod(1:3)
+ Vector2(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(Node2,LocSideID,CNElemID)+1) - xNod(1:3)
nx = - Vector1(2) * Vector2(3) + Vector1(3) * Vector2(2) !NV (inwards)
ny = - Vector1(3) * Vector2(1) + Vector1(1) * Vector2(3)
nz = - Vector1(1) * Vector2(2) + Vector1(2) * Vector2(1)
@@ -637,13 +373,18 @@ SUBROUTINE InitParticleBoundarySampling()
area = area + nVal/2.
END DO
SurfSideArea(1,1,iSide) = area
+ END IF ! nSurfSample.GT.1
ELSE IF(Symmetry%Order.EQ.2) THEN
SurfSideArea(1,1,iSide) = DSMC_2D_CalcSymmetryArea(LocSideID, CNElemID)
ELSE IF(Symmetry%Order.EQ.1) THEN
SurfSideArea(1,1,iSide) = DSMC_1D_CalcSymmetryArea(LocSideID, CNElemID)
END IF
ELSE ! TrackingMethod.NE.TRIATRACKING
- ! call here stephens algorithm to compute area
+ UseBezierControlPointsForArea = .TRUE.
+ END IF ! TrackingMethod.EQ.TRIATRACKIN
+
+ ! Instead of triangles use Bezier control points (curved or triangle tracking with nSurfSample>1)
+ IF(UseBezierControlPointsForArea)THEN
DO jSample=1,nSurfSample
DO iSample=1,nSurfSample
area=0.
@@ -666,7 +407,8 @@ SUBROUTINE InitParticleBoundarySampling()
SurfSideArea(iSample,jSample,iSide) = area
END DO ! iSample=1,nSurfSample
END DO ! jSample=1,nSurfSample
- END IF
+ END IF ! UseBezierControlPointsForArea
+
END DO ! iSide = firstSide,lastSide
#if USE_MPI
@@ -696,12 +438,12 @@ SUBROUTINE InitParticleBoundarySampling()
#if USE_MPI
! Delayed synchronization
-CALL MPI_BCAST(nSurfTotalSides,1,MPI_INTEGER,0,MPI_COMM_SHARED,iError)
+CALL MPI_BCAST(nGlobalSurfSides,1,MPI_INTEGER,0,MPI_COMM_SHARED,iError)
CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
IF (mySurfRank.EQ.0) THEN
#endif
- LBWRITE(UNIT_StdOut,'(A,I8)') ' | Number of sampling sides: ' , nSurfTotalSides
+ LBWRITE(UNIT_StdOut,'(A,I8)') ' | Number of sampling sides: ' , nGlobalSurfSides
LBWRITE(UNIT_StdOut,'(A,ES10.4E2)') ' | Surface-Area: ', Area
LBWRITE(UNIT_stdOut,'(A)') ' INIT SURFACE SAMPLING DONE'
#if USE_MPI
@@ -720,7 +462,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt)
USE MOD_Globals_Vars ,ONLY: StefanBoltzmannConst
USE MOD_DSMC_Vars ,ONLY: DSMC
USE MOD_Mesh_Vars ,ONLY: MeshFile
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide, PartBound
@@ -791,7 +533,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt)
IF(ALMOSTZERO(TimeSample)) RETURN
-IF(.NOT.SurfOnNode) RETURN
+IF(.NOT.SurfTotalSideOnNode) RETURN
#if USE_MPI
CALL ExchangeSurfData()
@@ -825,6 +567,7 @@ SUBROUTINE CalcSurfaceValues(during_dt_opt)
IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
IF(GlobalSideID.LT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) THEN
SurfSideNb = GlobalSide2SurfSide(SURF_SIDEID,SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID))
+ ! Add your contribution to my inner BC
SampWallState(:,:,:,iSurfSide) = SampWallState(:,:,:,iSurfSide) + SampWallState(:,:,:,SurfSideNb)
ELSE
CYCLE
@@ -982,14 +725,14 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime)
USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample,CalcSurfaceImpact
-USE MOD_Particle_Boundary_Vars ,ONLY: nOutputSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalOutputSides
USE MOD_Particle_boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide
USE MOD_Particle_Boundary_Vars ,ONLY: nSurfBC,SurfBCName, PartBound
USE MOD_Particle_Boundary_Vars ,ONLY: SurfOutputSize,SurfSpecOutputSize
USE MOD_Particle_Boundary_Vars ,ONLY: MacroSurfaceVal,MacroSurfaceSpecVal
USE MOD_Particle_Vars ,ONLY: nSpecies
#if USE_MPI
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF
#endif
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -1017,7 +760,7 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime)
CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR)
! Return if no sampling sides
-IF (nSurfTotalSides .EQ.0) RETURN
+IF (nGlobalSurfSides .EQ.0) RETURN
#endif /*USE_MPI*/
IF (mySurfRank.EQ.0) THEN
@@ -1110,10 +853,11 @@ SUBROUTINE WriteSurfSampleToHDF5(MeshFileName,OutputTime)
nVarCount=0
WRITE(H5_Name,'(A)') 'SurfaceData'
+! WARNING: Only the sampling leaders write the data to .h5
ASSOCIATE (&
nVar2D_Total => INT(nVar2D_Total,IK) , &
nSurfSample => INT(nSurfSample,IK) , &
- nGlobalSides => INT(nOutputSides,IK) , &
+ nGlobalSides => INT(nGlobalOutputSides,IK) , &
nLocalSides => INT(nComputeNodeSurfOutputSides,IK) , &
offsetSurfSide => INT(offsetComputeNodeSurfOutputSide,IK) , &
SurfOutputSize => INT(SurfOutputSize,IK) , &
@@ -1175,10 +919,10 @@ SUBROUTINE FinalizeParticleBoundarySampling()
! MODULES !
!----------------------------------------------------------------------------------------------------------------------------------!
USE MOD_Globals
-USE MOD_DSMC_Vars ,ONLY: DSMC
+!USE MOD_DSMC_Vars ,ONLY: DSMC
USE MOD_Particle_Boundary_Vars
-USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues
-USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
+!USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues
+USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
#if USE_MPI
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF
USE MOD_MPI_Shared
@@ -1195,26 +939,14 @@ SUBROUTINE FinalizeParticleBoundarySampling()
!===================================================================================================================================
! Return if nothing was allocated
-IF (.NOT.WriteMacroSurfaceValues.AND..NOT.DSMC%CalcSurfaceVal.AND..NOT.(ANY(PartBound%Reactive)).AND..NOT.(nPorousBC.GT.0).AND..NOT.PartBound%UseRotPeriodicBC) RETURN
-
-! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
-#if USE_MPI
-! Mapping arrays are allocated even if the node does not have sampling surfaces
-CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-CALL UNLOCK_AND_FREE(GlobalSide2SurfSide_Shared_Win)
-CALL UNLOCK_AND_FREE(SurfSide2GlobalSide_Shared_Win)
-CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-ADEALLOCATE(GlobalSide2SurfSide_Shared)
-ADEALLOCATE(SurfSide2GlobalSide_Shared)
-#endif /*USE_MPI*/
+!IF (.NOT.WriteMacroSurfaceValues.AND..NOT.DSMC%CalcSurfaceVal.AND..NOT.(ANY(PartBound%Reactive))) RETURN
! Return if no sampling surfaces on node
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
#if USE_MPI
CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-
CALL UNLOCK_AND_FREE(SampWallState_Shared_Win)
CALL UNLOCK_AND_FREE(SurfSideArea_Shared_Win)
IF(nPorousBC.GT.0) CALL UNLOCK_AND_FREE(SampWallPumpCapacity_Shared_Win)
diff --git a/src/particles/boundary/particle_boundary_tools.f90 b/src/particles/boundary/particle_boundary_tools.f90
index 660189877..27da492c2 100644
--- a/src/particles/boundary/particle_boundary_tools.f90
+++ b/src/particles/boundary/particle_boundary_tools.f90
@@ -26,7 +26,6 @@ MODULE MOD_Particle_Boundary_Tools
! Private Part ---------------------------------------------------------------------------------------------------------------------
! Public Part ----------------------------------------------------------------------------------------------------------------------
PUBLIC :: CalcWallSample
-PUBLIC :: SampleImpactProperties
PUBLIC :: StoreBoundaryParticleProperties
PUBLIC :: GetRadialDistance2D
!===================================================================================================================================
@@ -221,7 +220,7 @@ SUBROUTINE SampleImpactProperties(SurfSideID,SpecID,MPF,ETrans,EVib,ERot,EElec,P
END SUBROUTINE SampleImpactProperties
-SUBROUTINE StoreBoundaryParticleProperties(iPart,SpecID,PartPos,PartTrajectory,SurfaceNormal,iPartBound,mode,MPF_optIN)
+SUBROUTINE StoreBoundaryParticleProperties(iPart,SpecID,PartPos,PartTrajectory,SurfaceNormal,iPartBound,mode,MPF_optIN,Velo_optIN)
!----------------------------------------------------------------------------------------------------------------------------------!
! Save particle position, velocity and species to PartDataBoundary container for writing to .h5 later
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -244,6 +243,7 @@ SUBROUTINE StoreBoundaryParticleProperties(iPart,SpecID,PartPos,PartTrajectory,S
INTEGER,INTENT(IN) :: mode ! 1: particle impacts on BC (species is stored as positive value)
! 2: particles is emitted from the BC into the simulation domain (species is stored as negative value)
REAL,INTENT(IN),OPTIONAL :: MPF_optIN ! Supply the MPF in special cases
+REAL,INTENT(IN),OPTIONAL :: Velo_optIN(1:3) ! Supply the velocity in special cases
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL :: MPF
@@ -291,7 +291,11 @@ SUBROUTINE StoreBoundaryParticleProperties(iPart,SpecID,PartPos,PartTrajectory,S
END IF
PartStateBoundary(1:3,iMax) = PartPos
- PartStateBoundary(4:6,iMax) = PartState(4:6,iPart)
+ IF(PRESENT(Velo_optIN))THEN
+ PartStateBoundary(4:6,iMax) = Velo_optIN
+ ELSE
+ PartStateBoundary(4:6,iMax) = PartState(4:6,iPart)
+ END IF ! PRESENT(Velo_optIN)
! Mode 1: store normal species ID, mode 2: store negative species ID (special analysis of emitted particles in/from volume/surface)
IF(mode.EQ.1)THEN
PartStateBoundary(7 ,iMax) = REAL(SpecID)
diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90
index d799fb292..be50982e1 100644
--- a/src/particles/boundary/particle_boundary_vars.f90
+++ b/src/particles/boundary/particle_boundary_vars.f90
@@ -17,6 +17,7 @@ MODULE MOD_Particle_Boundary_Vars
!===================================================================================================================================
! MODULES
#if USE_MPI
+USE MOD_Globals
USE mpi
#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
@@ -24,7 +25,7 @@ MODULE MOD_Particle_Boundary_Vars
PUBLIC
SAVE
-LOGICAL :: SurfOnNode
+LOGICAL :: SurfTotalSideOnNode
INTEGER :: SurfSampSize !> Energy + Force + nSpecies
INTEGER :: SurfOutputSize !> Energy + Force + nSpecies
INTEGER :: SurfSpecOutputSize !> Energy + Force + nSpecies
@@ -32,11 +33,11 @@ MODULE MOD_Particle_Boundary_Vars
REAL,ALLOCPOINT,DIMENSION(:,:,:) :: BoundaryWallTemp !> Wall Temperature for Adaptive Case
! ====================================================================
! Mesh info
-INTEGER :: nSurfTotalSides
-INTEGER :: nOutputSides
+INTEGER :: nGlobalSurfSides
+INTEGER :: nGlobalOutputSides
INTEGER :: nComputeNodeSurfSides !> Number of surface sampling sides on compute node
-INTEGER :: nComputeNodeSurfOutputSides !> Number of output surface sampling sides on compute node (inner BCs only counted once)
+INTEGER :: nComputeNodeSurfOutputSides !> Number of output surface sampling sides on compute node (inner BCs only counted once and rotationally periodic BCs excluded)
INTEGER :: nComputeNodeSurfTotalSides !> Number of surface sampling sides on compute node (including halo region)
INTEGER :: offsetComputeNodeSurfSide !> elem offset of compute-node root
INTEGER :: offsetComputeNodeSurfOutputSide !> elem offset of compute-node root
@@ -124,6 +125,8 @@ MODULE MOD_Particle_Boundary_Vars
! ====================================================================
! Rotational periodic sides
+INTEGER :: nRotPeriodicSides ! Number of rotational periodic sides on a compute node
+INTEGER :: MaxNumRotPeriodicNeigh ! Maximum number of rotationally periodic neighbours
INTEGER,ALLOCPOINT,DIMENSION(:) :: NumRotPeriodicNeigh ! Number of adjacent Neigbours sites in rotational periodic BC
INTEGER,ALLOCPOINT,DIMENSION(:,:) :: RotPeriodicSideMapping ! Mapping between rotational periodic sides.
INTEGER,ALLOCPOINT,DIMENSION(:) :: SurfSide2RotPeriodicSide ! Mapping between surf side and periodic sides.
@@ -155,70 +158,23 @@ MODULE MOD_Particle_Boundary_Vars
REAL,ALLOCATABLE :: XiEQ_SurfSample(:) ! position of XiEQ_SurfSample
REAL :: dXiEQ_SurfSample ! deltaXi in [-1,1]
INTEGER :: OffSetSurfSide ! offset of local surf side
-INTEGER :: OffSetInnerSurfSide ! offset of local inner surf side
INTEGER :: nSurfBC ! number of surface side BCs
CHARACTER(LEN=255),ALLOCATABLE :: SurfBCName(:) ! names of belonging surface BC
#if USE_MPI
-INTEGER,ALLOCATABLE :: OffSetSurfSideMPI(:) ! integer offset for particle boundary sampling
-INTEGER,ALLOCATABLE :: OffSetInnerSurfSideMPI(:) ! integer offset for particle boundary sampling (innerBC)
INTEGER :: nComputeNodeInnerBCs(2) ! Number of inner BCs with a larger global side ID on node
#endif /*USE_MPI*/
#if USE_MPI
-TYPE tSurfaceSendList
- INTEGER :: NativeProcID
- INTEGER,ALLOCATABLE :: SendList(:) ! list containing surfsideid of sides to send to proc
- INTEGER,ALLOCATABLE :: RecvList(:) ! list containing surfsideid of sides to recv from proc
-
- INTEGER,ALLOCATABLE :: SurfDistSendList(:) ! list containing surfsideid of sides to send to proc
- INTEGER,ALLOCATABLE :: SurfDistRecvList(:) ! list containing surfsideid of sides to recv from proc
- INTEGER,ALLOCATABLE :: H2OSendList(:) ! list containing surfsideid of sides to send to proc
- INTEGER,ALLOCATABLE :: H2ORecvList(:) ! list containing surfsideid of sides to recv from proc
- INTEGER,ALLOCATABLE :: O2HSendList(:) ! list containing surfsideid of sides to send to proc
- INTEGER,ALLOCATABLE :: O2HRecvList(:) ! list containing surfsideid of sides to recv from proc
-
+TYPE tMPIGROUP
+ INTEGER :: UNICATOR=MPI_COMM_NULL !< MPI communicator for surface sides (including sides inside the halo region)
+ INTEGER :: nProcs !< number of MPI processes for particles
+ INTEGER :: MyRank !< MyRank within communicator
END TYPE
+TYPE (tMPIGROUP) :: SurfCOMM
#endif /*USE_MPI*/
-
-TYPE tSurfaceCOMM
- LOGICAL :: MPIRoot ! if root of mpi communicator
- INTEGER :: MyRank ! local rank in new group
- INTEGER :: nProcs ! number of processes
- LOGICAL :: MPIOutputRoot ! if root of mpi communicator
- INTEGER :: MyOutputRank ! local rank in new group
- INTEGER :: nOutputProcs ! number of output processes
-#if USE_MPI
- LOGICAL :: InnerBCs ! are there InnerSides with reflective properties
- INTEGER :: COMM=MPI_COMM_NULL ! communicator
- INTEGER :: nMPINeighbors ! number of processes to communicate with
- TYPE(tSurfaceSendList),ALLOCATABLE :: MPINeighbor(:) ! list containing all mpi neighbors
- INTEGER :: OutputCOMM=MPI_COMM_NULL ! communicator for output
-#endif /*USE_MPI*/
-END TYPE
-TYPE (tSurfaceCOMM) :: SurfCOMM
-
-TYPE tSurfaceMesh
- INTEGER :: SampSize ! integer of sampsize
- INTEGER :: ReactiveSampSize ! additional sample size on the surface due to use of
- ! reactive surface modelling (reactions, liquid, etc.)
- LOGICAL :: SurfOnProc ! flag if reflective boundary condition is on proc
- INTEGER :: nSides ! Number of Sides on Surface (reflective)
- INTEGER :: nBCSides ! Number of OuterSides with Surface (reflective) properties
- INTEGER :: nInnerSides ! Number of InnerSides with Surface (reflective) properties
- INTEGER :: nOutputSides ! Number of surfaces that are assigned to an MPI rank for
- ! surface sampling (MacroSurfaceVal and MacroSurfaceSpecVal)
- ! and output to .h5 (SurfData) purposes:
- ! nOutputSides = bcsides + maser_innersides
- !INTEGER :: nTotalSides ! Number of Sides on Surface incl. HALO sides
- INTEGER :: nGlobalSides ! Global number of Sides on Surfaces (reflective)
- INTEGER,ALLOCATABLE :: SideIDToSurfID(:) ! Mapping of side ID to surface side ID (reflective)
- REAL, ALLOCATABLE :: SurfaceArea(:,:,:) ! Area of Surface
- INTEGER,ALLOCATABLE :: SurfIDToSideID(:) ! Mapping of surface side ID (reflective) to side ID
- INTEGER,ALLOCATABLE :: innerBCSideToHaloMap(:) ! map of inner BC ID on slave side to corresp. HaloSide
-END TYPE
-
-TYPE (tSurfaceMesh) :: SurfMesh
-
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Porous BC
+!-----------------------------------------------------------------------------------------------------------------------------------
INTEGER :: nPorousSides ! Number of porous sides per compute node
INTEGER,ALLOCPOINT :: MapSurfSideToPorousSide_Shared(:) ! Mapping of surface side to porous side
INTEGER,ALLOCPOINT :: PorousBCInfo_Shared(:,:) ! Info and mappings for porous BCs [1:3,1:nPorousSides]
@@ -244,13 +200,13 @@ MODULE MOD_Particle_Boundary_Vars
! REAL variable since the particle weight is used
! 1: Impinging particles
! 2: Deleted particles
-
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Particle Boundary
+!-----------------------------------------------------------------------------------------------------------------------------------
TYPE tPartBoundary
INTEGER :: OpenBC = 1 ! = 1 (s.u.) Boundary Condition Integer Definition
INTEGER :: ReflectiveBC = 2 ! = 2 (s.u.) Boundary Condition Integer Definition
INTEGER :: PeriodicBC = 3 ! = 3 (s.u.) Boundary Condition Integer Definition
- INTEGER :: SimpleAnodeBC = 4 ! = 4 (s.u.) Boundary Condition Integer Definition
- INTEGER :: SimpleCathodeBC = 5 ! = 5 (s.u.) Boundary Condition Integer Definition
INTEGER :: RotPeriodicBC = 6 ! = 6 (s.u.) Boundary Condition Integer Definition
INTEGER :: RotPeriodicInterPlaneBC = 7 ! = 7 (s.u.) Boundary Condition Integer Definition
INTEGER :: SymmetryBC = 10 ! = 10 (s.u.) Boundary Condition Integer Definition
@@ -274,6 +230,12 @@ MODULE MOD_Particle_Boundary_Vars
INTEGER , ALLOCATABLE :: TempGradDir(:)
! Linear and rotational wall velocity
REAL , ALLOCATABLE :: WallVelo(:,:)
+ REAL , ALLOCATABLE :: PhotonEnACC(:)
+ REAL , ALLOCATABLE :: PhotonSEEYield(:)
+ REAL , ALLOCATABLE :: PhotonSEEWorkFunction(:)
+ REAL , ALLOCATABLE :: PhotonSEEMacroParticleFactor(:)
+ INTEGER , ALLOCATABLE :: PhotonSEEElectronSpecies(:)
+ LOGICAL , ALLOCATABLE :: PhotonSpecularReflection(:)
LOGICAL , ALLOCATABLE :: RotVelo(:) ! Flag for rotating walls
REAL , ALLOCATABLE :: RotOmega(:,:) ! Angular velocity
! Species swap BCs
@@ -312,7 +274,7 @@ MODULE MOD_Particle_Boundary_Vars
INTEGER , ALLOCATABLE :: AssociatedPlane(:) ! Link between both coressponding intermediate planes
INTEGER , ALLOCATABLE :: nSidesOnInterPlane(:) ! Number of Sides on intermediate plane
REAL , ALLOCATABLE :: NormalizedRadiusDir(:,:) ! Normalized vector in radius direction that is used to
- ! calculate a random position on same radius within the
+ ! calculate a random position on same radius within the
! rot periodic segment
REAL , ALLOCATABLE :: RotAxisPosition(:) ! Position of inter plane at rotation axis
REAL , ALLOCATABLE :: AngleRatioOfInterPlanes(:) ! Ratio of rotation angles for the intermediate planes
@@ -324,13 +286,11 @@ MODULE MOD_Particle_Boundary_Vars
INTEGER :: nPartBound ! number of particle boundaries
TYPE(tPartBoundary) :: PartBound ! Boundary Data for Particles
-
+!-----------------------------------------------------------------------------------------------------------------------------------
! Boundary particle output
-LOGICAL :: DoBoundaryParticleOutputHDF5 ! Flag set automatically if particles crossing specific
-! ! boundaries are to be saved to .h5 (position of intersection,
-! ! velocity, species, internal energies)
-REAL, ALLOCATABLE :: PartStateBoundary(:,:) ! (1:11,1:NParts) 1st index: x,y,z,vx,vy,vz,SpecID,Ekin,MPF,time,impact angle,
-! ! BCindex
+LOGICAL :: DoBoundaryParticleOutputHDF5 ! Flag set automatically if particles crossing specific boundaries are to be saved to .h5 (position of intersection, velocity, species, internal energies)
+LOGICAL :: DoBoundaryParticleOutputRay ! User-defined flag to output surface SEE or volume ionization emission particles to .h5 based on the ray tracing model
+REAL, ALLOCATABLE :: PartStateBoundary(:,:) ! (1:11,1:NParts) 1st index: x,y,z,vx,vy,vz,SpecID,Ekin,MPF,time,impact angle, BCindex
! ! 2nd index: 1 to number of boundary-crossed particles
INTEGER, PARAMETER :: nVarPartStateBoundary=11
INTEGER :: PartStateBoundaryVecLength ! Number of boundary-crossed particles
diff --git a/src/particles/dsmc/dsmc_ambipolardiff.f90 b/src/particles/dsmc/dsmc_ambipolardiff.f90
index bc0bd4754..0d1201a72 100644
--- a/src/particles/dsmc/dsmc_ambipolardiff.f90
+++ b/src/particles/dsmc/dsmc_ambipolardiff.f90
@@ -80,7 +80,7 @@ SUBROUTINE AD_SetInitElectronVelo(FractNbr,iInit,NbrOfParticle)
USE MOD_Particle_Vars
USE MOD_Globals_Vars ,ONLY: BoltzmannConst
USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn
-USE MOD_part_tools ,ONLY: BuildTransGaussNums
+USE MOD_part_tools ,ONLY: BuildTransGaussNums, GetNextFreePosition
USE MOD_DSMC_Vars ,ONLY: DSMC, AmbipolElecVelo
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -117,33 +117,27 @@ SUBROUTINE AD_SetInitElectronVelo(FractNbr,iInit,NbrOfParticle)
SELECT CASE(TRIM(velocityDistribution))
CASE('constant')
DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr.GT.0) THEN
- IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
- ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
- AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloVecIC(1:3) * VeloIC
- END IF
+ PositionNbr = GetNextFreePosition(i)
+ IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
+ ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
+ AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloVecIC(1:3) * VeloIC
END DO
CASE('maxwell_lpn')
DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr.GT.0) THEN
- CALL CalcVelocity_maxwell_lpn(DSMC%AmbiDiffElecSpec, Vec3D, Temperature=Species(FractNbr)%Init(iInit)%MWTemperatureIC)
- IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
- ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
- AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloIC *VeloVecIC(1:3) + Vec3D(1:3)
- END IF
+ PositionNbr = GetNextFreePosition(i)
+ CALL CalcVelocity_maxwell_lpn(DSMC%AmbiDiffElecSpec, Vec3D, Temperature=Species(FractNbr)%Init(iInit)%MWTemperatureIC)
+ IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
+ ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
+ AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloIC *VeloVecIC(1:3) + Vec3D(1:3)
END DO
CASE('maxwell')
CALL BuildTransGaussNums(NbrOfParticle, iRanPart)
maxwellfac = SQRT(BoltzmannConst*Species(FractNbr)%Init(iInit)%MWTemperatureIC/Species(DSMC%AmbiDiffElecSpec)%MassIC)
DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr.GT.0) THEN
- IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
- ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
- AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloIC *VeloVecIC(1:3) + iRanPart(1:3,i)*maxwellfac
- END IF
+ PositionNbr = GetNextFreePosition(i)
+ IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
+ ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
+ AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = VeloIC *VeloVecIC(1:3) + iRanPart(1:3,i)*maxwellfac
END DO
CASE DEFAULT
CALL abort(&
@@ -166,6 +160,7 @@ SUBROUTINE AD_SetSFElectronVelo(iSpec,iSFIon,iSample,jSample,iSide,BCSideID,Side
USE MOD_Particle_Surfaces, ONLY : CalcNormAndTangBezier
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMapElemToSample, AdaptBCMacroVal
USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, AmbipolElecVelo, DSMC
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -256,31 +251,29 @@ SUBROUTINE AD_SetSFElectronVelo(iSpec,iSFIon,iSample,jSample,iSide,BCSideID,Side
iPart = 0
DO i = NbrOfParticle-PartIns+1,NbrOfParticle
iPart = iPart + 1
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5)
- IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
- vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
- vec_t1(1:3) = 0. !dummy
- vec_t2(1:3) = 0. !dummy
- ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
- ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
- CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID )
- vec_nIn(1:3) = -vec_nIn(1:3)
- vec_t1(1:3) = 0. !dummy
- vec_t2(1:3) = 0. !dummy
- ELSE
- vec_nIn(1:3) = VeloVecIC(1:3)
- END IF !VeloIsNormal
- ! Build complete velo-vector
- Vec3D(1:3) = vec_nIn(1:3) * Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIC
- ! PartState(4:6,PositionNbr) = Vec3D(1:3)
- IF (PositionNbr.GT.0) THEN
- IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
- ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
- AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3)
- END IF
- END IF !PositionNbr .NE. 0
+ PositionNbr = GetNextFreePosition(i)
+ ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5)
+ IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
+ vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
+ vec_t1(1:3) = 0. !dummy
+ vec_t2(1:3) = 0. !dummy
+ ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
+ ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
+ CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID )
+ vec_nIn(1:3) = -vec_nIn(1:3)
+ vec_t1(1:3) = 0. !dummy
+ vec_t2(1:3) = 0. !dummy
+ ELSE
+ vec_nIn(1:3) = VeloVecIC(1:3)
+ END IF !VeloIsNormal
+ ! Build complete velo-vector
+ Vec3D(1:3) = vec_nIn(1:3) * Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIC
+ ! PartState(4:6,PositionNbr) = Vec3D(1:3)
+ IF (PositionNbr.GT.0) THEN
+ IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
+ ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
+ AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3)
+ END IF
END DO !i = ...NbrOfParticle
CASE('maxwell','maxwell_lpn')
!-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2]
@@ -306,151 +299,145 @@ SUBROUTINE AD_SetSFElectronVelo(iSpec,iSFIon,iSample,jSample,iSide,BCSideID,Side
iPart = 0
DO i = NbrOfParticle-PartIns+1,NbrOfParticle
iPart = iPart + 1
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5)
- IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
- vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
- vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3)
- vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3)
- ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
- ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
- ! ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
- CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
- ,xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID )
- vec_nIn(1:3) = -vec_nIn(1:3)
- END IF !VeloIsNormal
- !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times!
- SELECT CASE(envelope)
- CASE(0)
- CALL RANDOM_NUMBER(RandVal1)
- zstar = -SQRT(-LOG(RandVal1))
- CASE(1)
- DO
- CALL RANDOM_NUMBER(RandVal2)
- zstar = -SQRT(a*a-LOG(RandVal2(1)))
- IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN
+ PositionNbr = GetNextFreePosition(i)
+ !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5)
+ IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
+ vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
+ vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3)
+ vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3)
+ ELSE IF (Species(DSMC%AmbiDiffElecSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
+ ! CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
+ ! ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
+ CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
+ ,xi=particle_xis(2*(iPart-1)+1),eta=particle_xis(2*(iPart-1)+2),SideID=SideID )
+ vec_nIn(1:3) = -vec_nIn(1:3)
+ END IF !VeloIsNormal
+ !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times!
+ SELECT CASE(envelope)
+ CASE(0)
+ CALL RANDOM_NUMBER(RandVal1)
+ zstar = -SQRT(-LOG(RandVal1))
+ CASE(1)
+ DO
+ CALL RANDOM_NUMBER(RandVal2)
+ zstar = -SQRT(a*a-LOG(RandVal2(1)))
+ IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN
+ EXIT
+ END IF
+ END DO
+ CASE(2)
+ z = 0.5*(a-SQRT(a*a+2.))
+ beta = a-(1.0-a)*(a-z)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN
+ zstar=-SQRT(beta*beta-LOG(RandVal3(2)))
+ IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN
EXIT
END IF
- END DO
- CASE(2)
- z = 0.5*(a-SQRT(a*a+2.))
- beta = a-(1.0-a)*(a-z)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN
- zstar=-SQRT(beta*beta-LOG(RandVal3(2)))
- IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN
- EXIT
- END IF
- ELSE
- zstar=beta+(a-beta)*RandVal3(2)
- IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN
- EXIT
- END IF
+ ELSE
+ zstar=beta+(a-beta)*RandVal3(2)
+ IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN
+ EXIT
END IF
- END DO
- CASE(3)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- u = RandVal3(1)
- IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
+ END IF
+ END DO
+ CASE(3)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ u = RandVal3(1)
+ IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
! IF (.NOT.DoZigguratSampling) THEN !polar method
- IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
- RandN = RandN_save
- RandN_in_Mem=.FALSE.
- ELSE
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_in_Mem=.TRUE.
- END IF
+ IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
+ RandN = RandN_save
+ RandN_in_Mem=.FALSE.
+ ELSE
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_in_Mem=.TRUE.
+ END IF
! ELSE !ziggurat method
! RandN=rnor()
! END IF
- zstar = -1./SQRT(2.)*ABS(RandN)
- EXIT
- ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
- zstar = -SQRT(-LOG(RandVal3(2)))
+ zstar = -1./SQRT(2.)*ABS(RandN)
+ EXIT
+ ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
+ zstar = -SQRT(-LOG(RandVal3(2)))
+ EXIT
+ ELSE
+ zstar = (1.0-SQRT(RandVal3(2)))*a
+ IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN
EXIT
- ELSE
- zstar = (1.0-SQRT(RandVal3(2)))*a
- IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN
- EXIT
- END IF
END IF
- END DO
- CASE(4)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN
- zstar=-SQRT(-LOG(RandVal3(2)))
- ELSE
+ END IF
+ END DO
+ CASE(4)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN
+ zstar=-SQRT(-LOG(RandVal3(2)))
+ ELSE
! IF (.NOT.DoZigguratSampling) THEN !polar method
- IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
- RandN = RandN_save
- RandN_in_Mem=.FALSE.
- ELSE
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_in_Mem=.TRUE.
- END IF
+ IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
+ RandN = RandN_save
+ RandN_in_Mem=.FALSE.
+ ELSE
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_in_Mem=.TRUE.
+ END IF
! ELSE !ziggurat method
! RandN=rnor()
! END IF
- zstar = 1./SQRT(2.)*RandN
- END IF
- IF ( (a-zstar)/a .GT. RandVal3(3)) THEN
- EXIT
- END IF
- END DO
- CASE DEFAULT
- CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!')
- END SELECT
- !-- 2.: sample normal directions and build complete velo-vector
- Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC)*(a-zstar)
+ zstar = 1./SQRT(2.)*RandN
+ END IF
+ IF ( (a-zstar)/a .GT. RandVal3(3)) THEN
+ EXIT
+ END IF
+ END DO
+ CASE DEFAULT
+ CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!')
+ END SELECT
+ !-- 2.: sample normal directions and build complete velo-vector
+ Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC)*(a-zstar)
! IF (.NOT.DoZigguratSampling) THEN !polar method
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
! ELSE !ziggurat method
! Velo1=rnor()
! Velo2=rnor()
! END IF
- Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) )
- Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) )
- IF (PositionNbr.GT.0) THEN
- IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
- ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
- AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3)
- END IF
- ELSE !PositionNbr .EQ. 0
- CALL abort(__STAMP__,'PositionNbr .EQ. 0!')
- END IF !PositionNbr .NE. 0
+ Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) )
+ Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(DSMC%AmbiDiffElecSpec)%MassIC) )
+ IF (ALLOCATED(AmbipolElecVelo(PositionNbr)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo)
+ ALLOCATE(AmbipolElecVelo(PositionNbr)%ElecVelo(3))
+ AmbipolElecVelo(PositionNbr)%ElecVelo(1:3) = Vec3D(1:3)
END DO !i = ...NbrOfParticle
CASE DEFAULT
CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong velocity distribution!')
END SELECT
-
+
END SUBROUTINE AD_SetSFElectronVelo
@@ -459,12 +446,13 @@ SUBROUTINE AD_InsertParticles(iPartIndx_Node, nPart, iPartIndx_NodeTotalAmbi, To
!> Creating electrons for each actual ion simulation particle, using the stored velocity vector for the electron
!===================================================================================================================================
! MODULES
-USE MOD_Globals
+USE MOD_Globals
USE MOD_DSMC_Vars ,ONLY: BGGas, CollisMode, DSMC, PartStateIntEn, AmbipolElecVelo, RadialWeighting
USE MOD_DSMC_Vars ,ONLY: DSMCSumOfFormedParticles, newAmbiParts, iPartIndx_NodeNewAmbi
USE MOD_PARTICLE_Vars ,ONLY: PDM, PartSpecies, PartState, PEM, Species, PartMPF, Symmetry, usevMPF
USE MOD_PARTICLE_Vars ,ONLY: UseVarTimeStep, PartTimeStep
USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -506,12 +494,7 @@ SUBROUTINE AD_InsertParticles(iPartIndx_Node, nPart, iPartIndx_NodeTotalAmbi, To
DO iLoop = 1, nNewElectrons
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- PositionNbr = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (PositionNbr.EQ.0) THEN
- CALL Abort(&
-__STAMP__&
-,'ERROR in Ambipolar Diffusion: MaxParticleNumber too small!')
- END IF
+ PositionNbr = GetNextFreePosition()
InsideFlag=.FALSE.
iElem = PEM%GlobalElemID(iPartIndx_Node(1))
DO WHILE(.NOT.InsideFlag)
@@ -524,7 +507,8 @@ SUBROUTINE AD_InsertParticles(iPartIndx_Node, nPart, iPartIndx_NodeTotalAmbi, To
PartState(1:3,PositionNbr) = RandomPos(1:3)
PartSpecies(PositionNbr) = DSMC%AmbiDiffElecSpec
PEM%GlobalElemID(PositionNbr) = iElem
- PDM%ParticleInside(PositionNbr) = .true.
+ PDM%ParticleInside(PositionNbr) = .TRUE.
+ PDM%isNewPart(PositionNbr) = .TRUE.
PartState(4:6,PositionNbr) = AmbipolElecVelo(IonIndX(iLoop))%ElecVelo(1:3)
DEALLOCATE(AmbipolElecVelo(IonIndX(iLoop))%ElecVelo)
IF ((CollisMode.EQ.2).OR.(CollisMode.EQ.3)) THEN
@@ -633,7 +617,7 @@ SUBROUTINE AD_DeleteParticles(iPartIndx_Node, nPart_opt)
DO iLoop = 1, nElectron
IF (ALLOCATED(AmbipolElecVelo(IonIndX(iLoop))%ElecVelo)) DEALLOCATE(AmbipolElecVelo(IonIndX(iLoop))%ElecVelo)
ALLOCATE(AmbipolElecVelo(IonIndX(iLoop))%ElecVelo(3))
- AmbipolElecVelo(IonIndX(iLoop))%ElecVelo(1:3) = PartState(4:6,ElecIndx(iLoop))
+ AmbipolElecVelo(IonIndX(iLoop))%ElecVelo(1:3) = PartState(4:6,ElecIndx(iLoop))
PDM%ParticleInside(ElecIndx(iLoop)) = .FALSE.
END DO
diff --git a/src/particles/dsmc/dsmc_analyze.f90 b/src/particles/dsmc/dsmc_analyze.f90
index 9be9fc49e..912aeeaf0 100644
--- a/src/particles/dsmc/dsmc_analyze.f90
+++ b/src/particles/dsmc/dsmc_analyze.f90
@@ -722,16 +722,20 @@ SUBROUTINE DSMC_output_calc(nVar,nVar_quality,nVarloc,DSMC_MacroVal)
DSMC_MacroVal(nVarCount+2,iElem) = BGK_QualityFacSamp(6,iElem) / BGK_QualityFacSamp(2,iElem)
! Mean expected Prandtl number
DSMC_MacroVal(nVarCount+3,iElem) = BGK_QualityFacSamp(7,iElem) / BGK_QualityFacSamp(2,iElem)
+ ! Mean viscosity
+ DSMC_MacroVal(nVarCount+4,iElem) = BGK_QualityFacSamp(8,iElem) / BGK_QualityFacSamp(2,iElem)
+ ! Mean thermal conductivity
+ DSMC_MacroVal(nVarCount+5,iElem) = BGK_QualityFacSamp(9,iElem) / BGK_QualityFacSamp(2,iElem)
END IF
IF(BGK_QualityFacSamp(4,iElem).GT.0) THEN
! Max relaxation factor (maximal value of all octree subcells)
- DSMC_MacroVal(nVarCount+4,iElem) = BGK_QualityFacSamp(3,iElem) / BGK_QualityFacSamp(4,iElem)
+ DSMC_MacroVal(nVarCount+6,iElem) = BGK_QualityFacSamp(3,iElem) / BGK_QualityFacSamp(4,iElem)
! Max rotational relaxation factor
- DSMC_MacroVal(nVarCount+5,iElem) = BGK_QualityFacSamp(5,iElem) / BGK_QualityFacSamp(4,iElem)
+ DSMC_MacroVal(nVarCount+7,iElem) = BGK_QualityFacSamp(5,iElem) / BGK_QualityFacSamp(4,iElem)
END IF
! Ratio between BGK and DSMC usage per cell
- DSMC_MacroVal(nVarCount+6,iElem) = BGK_QualityFacSamp(4,iElem) / iter_loc
- nVarCount = nVarCount + 6
+ DSMC_MacroVal(nVarCount+8,iElem) = BGK_QualityFacSamp(4,iElem) / iter_loc
+ nVarCount = nVarCount + 8
END IF
! variable rotation and vibration relaxation
IF(Collismode.GT.1) THEN
@@ -771,7 +775,7 @@ SUBROUTINE DSMC_output_calc(nVar,nVar_quality,nVarloc,DSMC_MacroVal)
IF (DoVirtualCellMerge) THEN
DO iElem = 1, nElems
IF (VirtMergedCells(iElem)%isMerged) THEN
- DSMC_MacroVal(:,iElem) = DSMC_MacroVal(:,VirtMergedCells(iElem)%MasterCell-offSetElem)
+ DSMC_MacroVal(:,iElem) = DSMC_MacroVal(:,VirtMergedCells(iElem)%MasterCell-offSetElem)
END IF
END DO
END IF
@@ -781,13 +785,13 @@ END SUBROUTINE DSMC_output_calc
SUBROUTINE CalcMacroElecExcitation(MacroElecExcitation)
!===================================================================================================================================
-!>
+!> Calculation of the excitation rate [1/s] based on the sum of excitation events (sum of particle weights) and the sampling time
!===================================================================================================================================
! MODULES
USE MOD_PreProc
USE MOD_Globals
USE MOD_Mesh_Vars ,ONLY: nElems
-USE MOD_Particle_Vars ,ONLY: WriteMacroSurfaceValues,MacroValSampTime
+USE MOD_Particle_Vars ,ONLY: WriteMacroVolumeValues,WriteMacroSurfaceValues,MacroValSampTime
USE MOD_Particle_Vars ,ONLY: ExcitationSampleData,ExcitationLevelCounter
USE MOD_Restart_Vars ,ONLY: RestartTime
USE MOD_TimeDisc_Vars ,ONLY: TEnd
@@ -802,15 +806,17 @@ SUBROUTINE CalcMacroElecExcitation(MacroElecExcitation)
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-! INTEGER ::
+! INTEGER ::
REAL :: TimeSample
!===================================================================================================================================
-! Determine the sampling time for the calculation of the rate (TODO: SAME AS IN CalcSurfaceValues)
-IF (WriteMacroSurfaceValues) THEN
+! Determine the sampling time for the calculation of the rate
+IF (WriteMacroVolumeValues) THEN
! Elapsed time since last sampling (variable dt's possible!)
TimeSample = Time - MacroValSampTime
- MacroValSampTime = Time
+ ! Set MacroValSampTime to the current time for the next output, BUT only if it is not used in CalcSurfaceValues, otherwise CalcSurfaceValues will be skipped
+ ! TODO: Have a global calculation of the sample time before the output regardless of surface and/or volume output
+ IF(.NOT.WriteMacroSurfaceValues) MacroValSampTime = Time
ELSE IF (RestartTime.GT.(1-DSMC%TimeFracSamp)*TEnd) THEN
! Sampling at the end of the simulation: When a restart is performed and the sampling starts immediately, determine the correct sampling time
! (e.g. sampling is set to 20% of tend = 1s, and restart is performed at 0.9s, sample time = 0.1s)
@@ -820,7 +826,7 @@ SUBROUTINE CalcMacroElecExcitation(MacroElecExcitation)
TimeSample = (Time-(1-DSMC%TimeFracSamp)*TEnd)
END IF
-! Rate
+! Rate
MacroElecExcitation = ExcitationSampleData / TimeSample
END SUBROUTINE CalcMacroElecExcitation
@@ -852,7 +858,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
CHARACTER(LEN=255) :: FileName
-CHARACTER(LEN=255) :: SpecID, LevelID
+CHARACTER(LEN=255) :: SpecID, LevelID, SpecID2
CHARACTER(LEN=255),ALLOCATABLE :: StrVarNames(:)
CHARACTER(LEN=255),ALLOCATABLE :: StrVarNamesElecExci(:)
INTEGER :: nVar,nVar_quality,nVarloc,nVarCount,ALLOCSTAT, iSpec, nVarRelax, nSpecOut, iCase, iLevel
@@ -860,7 +866,8 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
REAL,ALLOCATABLE :: DSMC_MacroVal(:,:), MacroElecExcitation(:,:)
REAL :: StartT,EndT
!===================================================================================================================================
-SWRITE(UNIT_stdOut,'(A)',ADVANCE='NO')' WRITE DSMC TO HDF5 FILE...'
+FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_DSMCState',OutputTime))//'.h5'
+SWRITE(UNIT_stdOut,'(A)',ADVANCE='NO')' WRITE DSMC TO HDF5 FILE ['//TRIM(FileName)//'] ...'
GETTIME(StartT)
IF(nSpecies.EQ.1) THEN
@@ -884,7 +891,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
IF(UseVarTimeStep) nVar_quality = nVar_quality + 1
IF(DoVirtualCellMerge) nVar_quality = nVar_quality + 1
IF(RadialWeighting%PerformCloning) nVar_quality = nVar_quality + 2
- IF(BGKInitDone) nVar_quality = nVar_quality + 6
+ IF(BGKInitDone) nVar_quality = nVar_quality + 8
IF(FPInitDone) nVar_quality = nVar_quality + 5
ELSE
nVar_quality=0
@@ -970,10 +977,12 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
StrVarNames(nVarCount+1) ='BGK_MeanRelaxationFactor'
StrVarNames(nVarCount+2) ='BGK_MeanPrandtlNumber'
StrVarNames(nVarCount+3) ='BGK_ExpectedPrandtlNumber'
- StrVarNames(nVarCount+4) ='BGK_MaxRelaxationFactor'
- StrVarNames(nVarCount+5) ='BGK_MaxRotationRelaxFactor'
- StrVarNames(nVarCount+6) ='BGK_DSMC_Ratio'
- nVarCount=nVarCount+6
+ StrVarNames(nVarCount+4) ='BGK_Viscosity'
+ StrVarNames(nVarCount+5) ='BGK_ThermalConductivity'
+ StrVarNames(nVarCount+6) ='BGK_MaxRelaxationFactor'
+ StrVarNames(nVarCount+7) ='BGK_MaxRotationRelaxFactor'
+ StrVarNames(nVarCount+8) ='BGK_DSMC_Ratio'
+ nVarCount=nVarCount+8
END IF
IF(FPInitDone) THEN
StrVarNames(nVarCount+1) ='FP_MeanRelaxationFactor'
@@ -985,23 +994,26 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
END IF
END IF
+! Sampling of electronic excitation: Construct the variables name based on first and second species as well as the level threshold
IF(SampleElecExcitation) THEN
- ! Number of excitation outputs (currently only electronic -> only species, multiply for additional excitation)
+ ! Number of excitation outputs (currently only electronic)
ALLOCATE(StrVarNamesElecExci(1:ExcitationLevelCounter))
nVarCount = 1
DO iSpec = 1, nSpecies
DO jSpec = iSpec, nSpecies
iCase = CollInf%Coll_Case(iSpec,jSpec)
IF(.NOT.SpecXSec(iCase)%UseElecXSec) CYCLE
- ! Output of the non-election species
+ ! Output of the non-electron species as first and electron species as the second index, in case multiple electron species are defined
IF(SpecDSMC(iSpec)%InterID.EQ.4) THEN
WRITE(SpecID,'(I3.3)') jSpec
+ WRITE(SpecID2,'(I3.3)') iSpec
ELSE
WRITE(SpecID,'(I3.3)') iSpec
+ WRITE(SpecID2,'(I3.3)') jSpec
END IF
DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
WRITE(LevelID,'(F0.2)') SpecXSec(iCase)%ElecLevel(iLevel)%Threshold/ElementaryCharge
- StrVarNamesElecExci(nVarCount)='Spec'//TRIM(SpecID)//'_ExcitationRate_Elec_'//TRIM(LevelID)
+ StrVarNamesElecExci(nVarCount)='Spec'//TRIM(SpecID)//'_Spec'//TRIM(SpecID2)//'_ExcitationRate_Elec_'//TRIM(LevelID)
nVarCount = nVarCount + 1
END DO
END DO
@@ -1009,7 +1021,6 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
END IF
! Generate skeleton for the file with all relevant data on a single proc (MPIRoot)
-FileName=TRIM(TIMESTAMP(TRIM(ProjectName)//'_DSMCState',OutputTime))//'.h5'
IF(MPIRoot) THEN
CALL OpenDataFile(TRIM(FileName),create=.TRUE.,single=.TRUE.,readOnly=.FALSE.)
CALL WriteHDF5Header(TRIM('DSMCState'),File_ID)
@@ -1017,7 +1028,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
CALL WriteAttributeToHDF5(File_ID,'Time',1,RealScalar=OutputTime)
CALL WriteAttributeToHDF5(File_ID,'MeshFile',1,StrScalar=(/TRIM(MeshFileName)/))
CALL WriteAttributeToHDF5(File_ID,'NSpecies',1,IntegerScalar=nSpecies)
- ! Standard variable names
+ ! Standard variable names
CALL WriteAttributeToHDF5(File_ID,'VarNamesAdd',nVar+nVar_quality,StrArray=StrVarNames)
! Additional variable names: electronic excitation rate output
IF(SampleElecExcitation) CALL WriteAttributeToHDF5(File_ID,'VarNamesExci',ExcitationLevelCounter,StrArray=StrVarNamesElecExci)
@@ -1025,11 +1036,11 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
END IF
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
! Open data file for parallel output
-CALL OpenDataFile(FileName,create=.false.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.false.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
ALLOCATE(DSMC_MacroVal(1:nVar+nVar_quality,nElems), STAT=ALLOCSTAT)
IF (ALLOCSTAT.NE.0) THEN
@@ -1037,6 +1048,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
END IF
CALL DSMC_output_calc(nVar,nVar_quality,nVarloc+nVarRelax,DSMC_MacroVal)
+! Calculation of electronic excitation rates
IF(SampleElecExcitation) THEN
ALLOCATE(MacroElecExcitation(1:ExcitationLevelCounter,nElems), STAT=ALLOCSTAT)
IF (ALLOCSTAT.NE.0) THEN
@@ -1057,6 +1069,7 @@ SUBROUTINE WriteDSMCToHDF5(MeshFileName,OutputTime)
nVal =(/nVarX , PP_nElems/) , &
offset =(/0_IK , offsetElem/) , &
collective =.false., RealArray=DSMC_MacroVal(:,:))
+ ! Output of electronic excitation rates in a separate container
IF(SampleElecExcitation) THEN
CALL WriteArrayToHDF5(DataSetName='ExcitationData' , rank=2 , &
nValGlobal =(/nVarExci , nGlobalElems/) , &
@@ -1206,11 +1219,8 @@ SUBROUTINE DSMCMacroSampling()
! LOCAL VARIABLES
INTEGER :: nOutput
!-----------------------------------------------------------------------------------------------------------------------------------
-
-#if (PP_TimeDiscMethod==42)
! Do not perform sampling in the case of a reservoir simulation
IF (DSMC%ReservoirSimu) RETURN
-#endif
! Use user given TimeFracSamp
IF((Time.GE.(1-DSMC%TimeFracSamp)*TEnd).AND.(.NOT.SamplingActive)) THEN
diff --git a/src/particles/dsmc/dsmc_bg_gas.f90 b/src/particles/dsmc/dsmc_bg_gas.f90
index dcbddbd00..a608a202e 100644
--- a/src/particles/dsmc/dsmc_bg_gas.f90
+++ b/src/particles/dsmc/dsmc_bg_gas.f90
@@ -67,7 +67,7 @@ SUBROUTINE BGGas_Initialize()
USE MOD_Globals ,ONLY: abort
USE MOD_DSMC_Vars ,ONLY: BGGas
USE MOD_Mesh_Vars ,ONLY: nElems
-USE MOD_Particle_Vars ,ONLY: PDM, Symmetry, Species, nSpecies, UseVarTimeStep, VarTimeStep
+USE MOD_Particle_Vars ,ONLY: PDM, Species, nSpecies, UseVarTimeStep, VarTimeStep
USE MOD_Restart_Vars ,ONLY: DoMacroscopicRestart, MacroRestartFileName
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -85,7 +85,7 @@ SUBROUTINE BGGas_Initialize()
IF(BGGas%UseDistribution) MacroRestartFileName = GETSTR('Particles-MacroscopicRestart-Filename')
! 1.) Check compatibility with other features and whether required parameters have been read-in
-IF((Symmetry%Order.EQ.2).OR.UseVarTimeStep) THEN
+IF(UseVarTimeStep) THEN
IF(.NOT.VarTimeStep%UseSpeciesSpecific) CALL abort(__STAMP__, &
'ERROR: 2D/Axisymmetric and variable timestep (except species-specific) are not implemented with a background gas yet!')
END IF
@@ -223,6 +223,7 @@ SUBROUTINE BGGas_InsertParticles()
USE MOD_Globals ,ONLY: Abort
USE MOD_DSMC_Vars ,ONLY: BGGas
USE MOD_PARTICLE_Vars ,ONLY: PDM, PartSpecies, PEM
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
#if USE_LOADBALANCE
USE MOD_LoadBalance_Timers ,ONLY: LBStartTime,LBPauseTime
#endif /*USE_LOADBALANCE*/
@@ -255,10 +256,7 @@ SUBROUTINE BGGas_InsertParticles()
END IF
! Get a free particle index
iNewPart = iNewPart + 1
- PositionNbr = PDM%nextFreePosition(iNewPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr.EQ.0) THEN
- CALL Abort(__STAMP__,'ERROR in BGGas: MaxParticleNumber should be increased to account for the BGG particles!')
- END IF
+ PositionNbr = GetNextFreePosition()
! Get the background gas species
iSpec = BGGas_GetSpecies(PEM%LocalElemID(iPart))
! Assign particle properties
@@ -272,9 +270,6 @@ SUBROUTINE BGGas_InsertParticles()
PEM%pNumber(LocalElemID) = PEM%pNumber(LocalElemID) + 1
END IF
END DO
-! Increase the particle vector length and update the linked list
-PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,PositionNbr)
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + iNewPart
#if USE_LOADBALANCE
CALL LBPauseTime(LB_DSMC,tLBStart)
@@ -525,9 +520,12 @@ SUBROUTINE BGGas_DeleteParticles()
! Deletes all background gas particles and updates the particle index list
!===================================================================================================================================
! MODULES
-USE MOD_DSMC_Vars, ONLY : BGGas
-USE MOD_PARTICLE_Vars, ONLY : PDM, PartSpecies
-USE MOD_part_tools, ONLY : UpdateNextFreePosition
+USE MOD_DSMC_Vars ,ONLY: BGGas
+USE MOD_PARTICLE_Vars ,ONLY: PDM, PartSpecies
+USE MOD_part_tools ,ONLY: UpdateNextFreePosition
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBPauseTime
+#endif /*USE_LOADBALANCE*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -537,14 +535,26 @@ SUBROUTINE BGGas_DeleteParticles()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iPart
+#if USE_LOADBALANCE
+REAL :: tLBStart
+#endif /*USE_LOADBALANCE*/
!===================================================================================================================================
+#if USE_LOADBALANCE
+CALL LBStartTime(tLBStart)
+#endif /*USE_LOADBALANCE*/
+
DO iPart = 1, PDM%ParticleVecLength
IF (PDM%ParticleInside(iPart)) THEN
+ ! No Pt_temp=0 necessary, because it is a ghost particle
IF(BGGas%BackgroundSpecies(PartSpecies(iPart))) PDM%ParticleInside(iPart) = .FALSE.
END IF
END DO
BGGas%PairingPartner = 0
+#if USE_LOADBALANCE
+CALL LBPauseTime(LB_DSMC,tLBStart)
+#endif /*USE_LOADBALANCE*/
+
CALL UpdateNextFreePosition()
END SUBROUTINE BGGas_DeleteParticles
@@ -578,11 +588,13 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
USE MOD_part_tools ,ONLY: CalcVelocity_maxwell_particle
USE MOD_MCC_Vars ,ONLY: PhotoIonFirstLine,PhotoIonLastLine,PhotoReacToReac,PhotonEnergies
USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions,SpecPhotonXSecInterpolated,MaxPhotonXSec
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition, IncreaseMaxParticleNumber
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER, INTENT(IN) :: iSpec,iInit,TotalNbrOfReactions
+INTEGER, INTENT(IN) :: iSpec,iInit
+INTEGER, INTENT(INOUT) :: TotalNbrOfReactions
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -692,8 +704,9 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
!> 2.) Delete left-over inserted particles
IF(TotalNbrOfReactions.GT.NbrOfParticle) THEN
DO iPart = NbrOfParticle+1,TotalNbrOfReactions
- PDM%ParticleInside(PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)) = .FALSE.
+ PDM%ParticleInside(GetNextFreePosition(iPart)) = .FALSE.
END DO
+ TotalNbrOfReactions = NbrOfParticle
ELSE IF(TotalNbrOfReactions.LT.NbrOfParticle) THEN
CALL Abort(__STAMP__,'PhotoIonization: Something is wrong, trying to perform more reactions than anticipated!')
END IF
@@ -709,14 +722,14 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
DO iPart = 1, NbrOfParticle
! Loop over the particles with a set position (from SetParticlePosition)
- ParticleIndex = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
+ ParticleIndex = GetNextFreePosition(iPart)
IF (DSMC%DoAmbipolarDiff) THEN
newAmbiParts = newAmbiParts + 1
iPartIndx_NodeNewAmbi(newAmbiParts) = ParticleIndex
END IF
iNewPart = iNewPart + 1
! Get a new index for the second product
- NewParticleIndex = PDM%nextFreePosition(iNewPart+PDM%CurrentNextFreePosition+NbrOfParticle)
+ NewParticleIndex = GetNextFreePosition(iNewPart+NbrOfParticle)
IF (NewParticleIndex.EQ.0) THEN
CALL Abort(__STAMP__,'ERROR in PhotoIonization: MaxParticleNumber should be increased!')
END IF
@@ -774,17 +787,30 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
IF(DSMC%ElectronicModel.GT.0) PartStateIntEn(3,ParticleIndex) = 0.
END DO
+
! Add the particles initialized through the emission and the background particles
-PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle + iNewPart
! Update the current next free position
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + iNewPart
+IF(iNewPart+NbrOfParticle.GT.0) THEN
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle + iNewPart
+ PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0))
+END IF
+#ifdef CODE_ANALYZE
+IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+END DO
+#endif
-IF(PDM%ParticleVecLength.GT.PDM%MaxParticleNumber) CALL Abort(__STAMP__&
- ,'ERROR in PhotoIonization: ParticleVecLength greater than MaxParticleNumber! Increase the MaxParticleNumber to at least: ' &
- , IntInfoOpt=PDM%ParticleVecLength)
!> 4.) Perform the reaction, distribute the collision energy (including photon energy) and emit electrons perpendicular
!> to the photon's path
+ASSOCIATE(b1 => Species(iSpec)%Init(iInit)%NormalVector1IC(1:3) ,&
+ b2 => Species(iSpec)%Init(iInit)%NormalVector2IC(1:3) ,&
+ normal => Species(iSpec)%Init(iInit)%NormalIC ,&
+ PartBCIndex => Species(iSpec)%Init(iInit)%PartBCIndex)
IF(NbrOfPhotonXsecReactions.GT.0)THEN
DO iPart = 1, SUM(NumPhotoIonization(:))
! Loop over all randomized lines (found above)
@@ -797,10 +823,9 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
DO iPhotoReac = 1, NbrOfPhotonXsecReactions
IF(PhotonEnergies(iLine,1+iPhotoReac).GT.0)THEN
! Reduce cross-section by one
- !IPWRITE(UNIT_StdOut,'(I6,3(A,I3))') " calling iLine =",iLine," iPhotoReac =",iPhotoReac," iReac =",PhotoReacToReac(iPhotoReac)
PhotonEnergies(iLine,1+iPhotoReac) = PhotonEnergies(iLine,1+iPhotoReac) - 1
iPair = iPair + 1
- CALL PhotoIonization_InsertProducts(iPair, PhotoReacToReac(iPhotoReac), iInit, iSpec, iLineOpt=iLine)
+ CALL PhotoIonization_InsertProducts(iPair, PhotoReacToReac(iPhotoReac), b1, b2, normal, iLineOpt=iLine, PartBCIndex=PartBCIndex)
END IF ! PhotonEnergies(iLine,1+iPhotoReac).GT.0
END DO ! iPhotoReac = 1, NbrOfPhotonXsecReactions
END DO
@@ -811,14 +836,11 @@ SUBROUTINE BGGas_PhotoIonization(iSpec,iInit,TotalNbrOfReactions)
IF(TRIM(ChemReac%ReactModel(iReac)).NE.'phIon') CYCLE
DO iPart = 1, NumPhotoIonization(iReac)
iPair = iPair + 1
- CALL PhotoIonization_InsertProducts(iPair, iReac, iInit, iSpec)
+ CALL PhotoIonization_InsertProducts(iPair, iReac, b1, b2, normal, PartBCIndex=PartBCIndex)
END DO
END DO
END IF ! NbrOfPhotonXsecReactions.GT.0
-
-! Advance particle vector length and the current next free position with newly created particles
-PDM%ParticleVecLength = PDM%ParticleVecLength + DSMCSumOfFormedParticles
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + DSMCSumOfFormedParticles
+END ASSOCIATE
DSMCSumOfFormedParticles = 0
@@ -862,7 +884,7 @@ SUBROUTINE BGGas_ReadInDistribution()
LBWRITE(UNIT_stdOut,*) 'BGGas distribution - Using macroscopic values from file: ',TRIM(MacroRestartFileName)
-CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL GetDataSize(File_ID,'ElemData',nDims,HSize,attrib=.FALSE.)
nVarHDF5 = INT(HSize(1),4)
@@ -915,7 +937,8 @@ SUBROUTINE BGGas_TraceSpeciesSplit(iElem, nPart, nPair)
USE MOD_Globals
USE MOD_DSMC_Vars ,ONLY: BGGas, CollisMode, PartStateIntEn, DSMC
USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC, VibQuantsPar, PolyatomMolDSMC
-USE MOD_Particle_Vars ,ONLY: PDM,PEM,PartSpecies,PartState,PartMPF,Species
+USE MOD_Particle_Vars ,ONLY: PEM,PartSpecies,PartState,PartMPF,Species
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -964,10 +987,7 @@ SUBROUTINE BGGas_TraceSpeciesSplit(iElem, nPart, nPair)
! --- Create clone of test particle
iNewPart = iNewPart + 1
iSplitPart = iSplitPart + 1
- PartIndex = PDM%nextFreePosition(iNewPart+PDM%CurrentNextFreePosition)
- IF (PartIndex.EQ.0) THEN
- CALL Abort(__STAMP__,'ERROR in BGGas: MaxParticleNumber should be increased to account for the BGG particles!')
- END IF
+ PartIndex = GetNextFreePosition()
! Assign properties but do not use the velocity and energy of the background gas
CALL BGGas_AssignParticleProperties(iSpec,iPart,PartIndex,GetVelocity_opt=.FALSE.,GetInternalEnergy_opt=.TRUE.)
! Copy properties from the particle species
@@ -990,10 +1010,7 @@ SUBROUTINE BGGas_TraceSpeciesSplit(iElem, nPart, nPair)
iNewPart = iNewPart + 1
iSplitPart = iSplitPart + 1
! Get a free particle index
- bggPartIndex = PDM%nextFreePosition(iNewPart+PDM%CurrentNextFreePosition)
- IF (bggPartIndex.EQ.0) THEN
- CALL Abort(__STAMP__,'ERROR in BGGas: MaxParticleNumber should be increased to account for the BGG particles!')
- END IF
+ bggPartIndex = GetNextFreePosition()
! Set the pairing partner
BGGas%PairingPartner(PartIndex) = bggPartIndex
! Assign properties of the background gas
@@ -1007,9 +1024,6 @@ SUBROUTINE BGGas_TraceSpeciesSplit(iElem, nPart, nPair)
END IF
iPart = PEM%pNext(iPart)
END DO
-! Increase the particle vector length and the position in the linked list
-PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,bggPartIndex)
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + iNewPart
! Set the new number of particles
nPart = PEM%pNumber(iElem)
@@ -1021,7 +1035,7 @@ END SUBROUTINE BGGas_TraceSpeciesSplit
!> 1. Read-in geometry information based on selected type (e.g. cylinder)
!> 2. Determine which elements are the defined regions by comparing the element midpoint
!> 3. Write the corresponding region properties into the BGGas%Distribution array
-!> 4. Calculate the element locall species fraction in case of a multi-species background gas
+!> 4. Calculate the element local species fraction in case of a multi-species background gas
!> 5. Activate BGGas%UseDistribution to utilize the same arrays and routines during computation (but do not use it for read-in)
!===================================================================================================================================
SUBROUTINE BGGas_InitRegions()
@@ -1145,7 +1159,7 @@ END SUBROUTINE BGGas_InitRegions
!===================================================================================================================================
-!> Background gas regions: Set the internal temperatures in case of DSMC and CollisMode = 2/3 (not yet available during
+!> Background gas regions: Set the internal temperatures in case of DSMC and CollisMode = 2/3 (not yet available during
!> BGGas_InitRegions). Loop over all elements, species and inits per species to set values for molecules and/or atoms.
!===================================================================================================================================
SUBROUTINE BGGas_RegionsSetInternalTemp()
diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90
index a86b1b577..4cd852aa6 100644
--- a/src/particles/dsmc/dsmc_chemical_init.f90
+++ b/src/particles/dsmc/dsmc_chemical_init.f90
@@ -137,7 +137,6 @@ SUBROUTINE DSMC_chemical_init()
USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species
USE MOD_Particle_Analyze_Vars ,ONLY: ChemEnergySum
USE MOD_DSMC_ChemReact ,ONLY: CalcPartitionFunction
-USE MOD_part_emission_tools ,ONLY: CalcPhotonEnergy
USE MOD_DSMC_QK_Chemistry ,ONLY: QK_Init
USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions
#if USE_LOADBALANCE
@@ -152,10 +151,10 @@ SUBROUTINE DSMC_chemical_init()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
CHARACTER(LEN=3) :: hilf
-INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2, iInit
+INTEGER :: iReac, iReac2, iSpec, iPart, iReacDiss, iSpec2
INTEGER, ALLOCATABLE :: DummyRecomb(:,:)
LOGICAL :: DoScat
-REAL :: BGGasEVib, PhotonEnergy, omega, ChargeProducts, ChargeReactants
+REAL :: BGGasEVib, omega, ChargeProducts, ChargeReactants
INTEGER :: Reactant1, Reactant2, Reactant3, MaxSpecies, ReadInNumOfReact
!===================================================================================================================================
@@ -166,8 +165,9 @@ SUBROUTINE DSMC_chemical_init()
IF(ChemReac%NumOfReact.LE.0) THEN
CALL Abort(__STAMP__,' CollisMode = 3 requires a chemical reaction database. DSMC-NumOfReactions cannot be zero!')
END IF
-ChemReac%AnyQKReaction = .FALSE.
-ChemReac%AnyXSecReaction = .FALSE.
+ChemReac%AnyQKReaction = .FALSE.
+ChemReac%AnyXSecReaction = .FALSE.
+ChemReac%AnyPhIonReaction = .FALSE.
ALLOCATE(ChemReac%ArbDiss(ChemReac%NumOfReact))
! Allowing unspecified non-reactive collision partner (CH4 + M -> CH3 + H + M, e.g. (/1,0,0/) -> (/2,0,3/)
iReacDiss = ChemReac%NumOfReact
@@ -220,12 +220,12 @@ SUBROUTINE DSMC_chemical_init()
!----------------------------------------------------------------------------------------------------------------------------------
ALLOCATE(ChemReac%NumReac(ChemReac%NumOfReact))
ChemReac%NumReac = 0
-#if (PP_TimeDiscMethod==42)
-ALLOCATE(ChemReac%ReacCount(ChemReac%NumOfReact))
-ChemReac%ReacCount = 0
-ALLOCATE(ChemReac%ReacCollMean(CollInf%NumCase))
-ChemReac%ReacCollMean = 0.0
-#endif
+IF (DSMC%ReservoirSimu) THEN
+ ALLOCATE(ChemReac%ReacCount(ChemReac%NumOfReact))
+ ChemReac%ReacCount = 0
+ ALLOCATE(ChemReac%ReacCollMean(CollInf%NumCase))
+ ChemReac%ReacCollMean = 0.0
+END IF
ALLOCATE(ChemReac%ReactType(ChemReac%NumOfReact))
ChemReac%ReactType = '0'
ALLOCATE(ChemReac%ReactModel(ChemReac%NumOfReact))
@@ -319,9 +319,11 @@ SUBROUTINE DSMC_chemical_init()
CASE('phIon')
! Photo-ionization reactions
ChemReac%CrossSection(iReac) = GETREAL('DSMC-Reaction'//TRIM(hilf)//'-CrossSection')
+ ChemReac%AnyPhIonReaction = .TRUE.
CASE('phIonXSec')
! Photo-ionization reactions (data read-in from database)
NbrOfPhotonXsecReactions = NbrOfPhotonXsecReactions + 1
+ ChemReac%AnyPhIonReaction = .TRUE.
CASE DEFAULT
CALL abort(__STAMP__,'Selected reaction model is not supported in reaction number: ', IntInfoOpt=iReac)
END SELECT
@@ -407,26 +409,11 @@ SUBROUTINE DSMC_chemical_init()
__STAMP__,'ERROR: Ionization reactions require the definition of at least the ionization energy as electronic level!',iReac)
END IF
END DO
- ! Check whether the photon energy is sufficient to trigger the chemical reaction
- IF(TRIM(ChemReac%ReactModel(iReac)).EQ.'phIon') THEN
- PhotonEnergy = 0.
- DO iSpec = 1, nSpecies
- DO iInit = 1, Species(iSpec)%NumberOfInits
- SELECT CASE(TRIM(Species(iSpec)%Init(iInit)%SpaceIC))
- CASE('photon_cylinder','photon_honeycomb','photon_rectangle')
- PhotonEnergy = CalcPhotonEnergy(Species(iSpec)%Init(iInit)%WaveLength)
- EXIT
- END SELECT
- END DO
- END DO
-
- ChemReac%EForm(iReac) = ChemReac%EForm(iReac) + PhotonEnergy
- IF(ChemReac%EForm(iReac).LE.0.0) THEN
- CALL abort(__STAMP__,'ERROR: Photon energy is not sufficient for the given ionization reaction: ',iReac)
- END IF
- END IF ! TRIM(ChemReac%ReactModel(iReac)).EQ.'phIon'
END DO ! iReac = 1, ChemReac%NumOfReact
+! Photoionization
+CALL InitPhotonReactions()
+
! Populate the background reaction arrays and initialize the required partition functions
IF(DSMC%BackwardReacRate) THEN
CALL DSMC_BackwardRate_init()
@@ -779,78 +766,62 @@ SUBROUTINE DSMC_BackwardRate_init()
END SUBROUTINE DSMC_BackwardRate_init
-! SUBROUTINE Init_TLU_Data
-! !===================================================================================================================================
-! ! Reads Scattering Angle Lookup Table from Test_Lookup_komplett.txt
-! !===================================================================================================================================
-! ! MODULES
-! USE MOD_Globals
-! USE MOD_DSMC_Vars, ONLY : TLU_Data, ChemReac
-! ! IMPLICIT VARIABLE HANDLING
-! IMPLICIT NONE
-!
-! !-- parameters
-! INTEGER,PARAMETER :: unit1=20
-! !DOUBLE PRECISION, PARAMETER :: mass_ion=2.180d-25 !Xenon
-! !DOUBLE PRECISION, PARAMETER :: mass_neutral=2.180d-25 !Xenon
-!
-! !-- local variables
-! INTEGER :: io_error1,read_error,iLine
-! CHARACTER(LEN=1000000) :: string1
-! INTEGER :: N_b, N_E
-! DOUBLE PRECISION :: real1, real2
-! !===================================================================================================================================
-!
-! OPEN(UNIT=unit1,file=TRIM(ChemReac%TLU_FileName(ChemReac%NumOfReact)),STATUS='old',ACTION='READ',IOSTAT=io_error1)
-! IF ( io_error1 .EQ. 0) THEN
-! !----------------------------------Schleife ueber alle Zeilen in file1----------------------------------!
-! iLine=0
-! DO
-! !----------------------------------Einlesen----------------------------------!
-! READ(unit1,'(A)',IOSTAT=read_error) string1
-! IF ( read_error .GT. 0) THEN
-! CALL abort(__STAMP__,&
-! 'Chemistry - Error in Init_TLU_Data, Error:',read_error)
-! ELSE IF (read_error .LT. 0 ) THEN
-! EXIT ! Dateiende erreicht
-! ELSE
-! iLine=iLine+1
-! IF (iLine.EQ.1) THEN
-! READ(string1,*,IOSTAT=read_error) real1, real2
-! N_b=NINT(real1)
-! N_E=NINT(real2)
-! ALLOCATE( TLU_Data%Chitable(1:N_E,1:N_b))
-! ALLOCATE( TLU_Data%deltabj(1:N_E))
-! ELSE IF (iLine.EQ.2) THEN
-! READ(string1,*,IOSTAT=read_error) TLU_Data%Emin, TLU_Data%Emax, TLU_Data%deltaE
-! ELSE IF (iLine.EQ.3) THEN
-! READ(string1,*,IOSTAT=read_error) TLU_Data%deltabj(1:N_E)
-! ELSE IF (iLine.EQ.4 .OR. iLine.EQ.5) THEN
-! !dummy lines...
-! ELSE IF (iLine.GE.6 .AND. iLine.LE.N_b+5) THEN
-! READ(string1,*,IOSTAT=read_error) TLU_Data%Chitable(:,iLine-5)
-! ELSE
-! CALL abort(__STAMP__,&
-! 'Chemistry - Error in Init_TLU_Data, File too long, Error:',read_error)
-! END IF
-! IF ( read_error .NE. 0) THEN
-! !STOP "Datenfehler im gelesenen String!"
-! CALL abort(__STAMP__,&
-! 'Chemistry - Error in Init_TLU_Data, Data error in loaded string,Error:',read_error)
-! END IF
-! END IF
-! END DO
-! ELSE
-! !STOP "Datenfehler im gelesenen String!"
-! CALL abort(__STAMP__,&
-! 'Chemistry - Error in Init_TLU_Data, Error while opening of Test_Lookup_komplett.txt, Error:',io_error1)
-! !WRITE(*,'(A,I0,A)') 'Beim Oeffenen der Datei Test_Lookup_komplett.txt ist Fehler Nr. ', io_error1,' aufgetreten!'
-! END IF
-!
-! ! Force Chi at N_b to be 0
-! TLU_Data%Chitable(:,N_b) = 0
-!
-! CLOSE(unit=unit1)
-! END SUBROUTINE Init_TLU_Data
+!===================================================================================================================================
+!> Calculation and sanity check of ChemReac%EForm(iReac) for photoionization reactions, i.e., ChemReac%ReactModel(iReac).EQ.'phIon'
+!> The sanity check will determine if the photon energy is sufficient to trigger any reactions.
+!===================================================================================================================================
+SUBROUTINE InitPhotonReactions()
+! MODULES
+USE MOD_Globals ,ONLY: abort
+USE MOD_DSMC_Vars ,ONLY: ChemReac,CollisMode,UseDSMC
+USE MOD_part_emission_tools ,ONLY: CalcPhotonEnergy
+USE MOD_PARTICLE_Vars ,ONLY: nSpecies
+USE MOD_RayTracing_Vars ,ONLY: RayPartBound,Ray
+USE MOD_Particle_Vars ,ONLY: Species
+USE MOD_MCC_Vars ,ONLY: NbrOfPhotonXsecReactions
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: PhotonEnergy
+INTEGER :: iInit, iSpec, iReac
+!===================================================================================================================================
+IF(.NOT.UseDSMC) RETURN
+IF(CollisMode.NE.3) RETURN
+
+DO iReac = 1, ChemReac%NumOfReact
+ ! Check whether the photon energy is sufficient to trigger the chemical reaction
+ IF(TRIM(ChemReac%ReactModel(iReac)).EQ.'phIon') THEN
+ PhotonEnergy = 0.
+
+ ! Const. photon energy from wavelength given in ray tracing model
+ IF(RayPartBound.GT.0)THEN
+ PhotonEnergy = CalcPhotonEnergy(Ray%WaveLength)
+ END IF ! RayPartBound.GT.0
+
+ ! Const. photon energy from wavelength given in particle emission model
+ DO iSpec = 1, nSpecies
+ DO iInit = 1, Species(iSpec)%NumberOfInits
+ SELECT CASE(TRIM(Species(iSpec)%Init(iInit)%SpaceIC))
+ CASE('photon_cylinder','photon_honeycomb','photon_rectangle')
+ PhotonEnergy = CalcPhotonEnergy(Species(iSpec)%Init(iInit)%WaveLength)
+ EXIT
+ END SELECT
+ END DO
+ END DO
+
+ ChemReac%EForm(iReac) = ChemReac%EForm(iReac) + PhotonEnergy
+ IF(ChemReac%EForm(iReac).LE.0.0) THEN
+ CALL abort(__STAMP__,'ERROR: Photon energy is not sufficient for the given ionization reaction: ',iReac)
+ END IF
+ ! Abort if photon-ionization reactions using cross-sections have been defined
+ IF(NbrOfPhotonXsecReactions.GT.0) CALL abort(__STAMP__,&
+ 'Photoionization reactions with constant cross-sections cannot be combined with XSec data cross-sections for photoionization')
+ END IF ! TRIM(ChemReac%ReactModel(iReac)).EQ.'phIon'
+END DO ! iReac = 1, ChemReac%NumOfReact
+
+END SUBROUTINE InitPhotonReactions
+
END MODULE MOD_DSMC_ChemInit
diff --git a/src/particles/dsmc/dsmc_chemical_reactions.f90 b/src/particles/dsmc/dsmc_chemical_reactions.f90
index 642c4b41e..20db5c91d 100644
--- a/src/particles/dsmc/dsmc_chemical_reactions.f90
+++ b/src/particles/dsmc/dsmc_chemical_reactions.f90
@@ -282,9 +282,7 @@ SUBROUTINE CalcReactionProb(iPair,iReac,ReactionProb,nPair,NumDens)
END IF
IF(DSMC%ReservoirSimu) THEN
-#if (PP_TimeDiscMethod==42)
IF(DSMC%ReservoirRateStatistic) THEN
-#endif
IF((ReactionProb.GT.1).AND.(ReactionProbGTUnityCounter.LT.100)) THEN
ReactionProbGTUnityCounter=ReactionProbGTUnityCounter+1
IPWRITE(*,*) 'Warning: ReactionProb greater than unity! ReacNbr:', iReac,' ReactionProb:',ReactionProb
@@ -292,18 +290,14 @@ SUBROUTINE CalcReactionProb(iPair,iReac,ReactionProb,nPair,NumDens)
IPWRITE(*,*) ' Counted 100 ReactionProb greater than unity. Turning this warning off.'
END IF
END IF
-#if (PP_TimeDiscMethod==42)
END IF
-#endif
END IF
! ReactionProb should not be gt 1 to avoid meaningless high weighting of a single reaction
IF (ReactionProb.GT.1) ReactionProb = 1.0
-#if (PP_TimeDiscMethod==42)
-IF (.NOT.DSMC%ReservoirRateStatistic) THEN
+IF (DSMC%ReservoirSimu.AND..NOT.DSMC%ReservoirRateStatistic) THEN
ChemReac%NumReac(iReac) = ChemReac%NumReac(iReac) + ReactionProb
ChemReac%ReacCount(iReac) = ChemReac%ReacCount(iReac) + 1
END IF
-#endif
END SUBROUTINE CalcReactionProb
@@ -351,7 +345,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
! Routine performs an exchange reaction of the type A + B + C -> D + E + F, where A, B, C, D, E, F can be anything
!===================================================================================================================================
! MODULES
-USE MOD_Globals ,ONLY: abort,DOTPRODUCT,StringBeginsWith,UNIT_StdOut,myrank
+USE MOD_Globals ,ONLY: abort,DOTPRODUCT,StringBeginsWith,UNIT_StdOut
USE MOD_Globals_Vars
USE MOD_DSMC_Vars ,ONLY: Coll_pData, DSMC, CollInf, SpecDSMC, DSMCSumOfFormedParticles, ElectronicDistriPart
USE MOD_DSMC_Vars ,ONLY: ChemReac, PartStateIntEn, PolyatomMolDSMC, VibQuantsPar, RadialWeighting, BGGas, ElecRelaxPart
@@ -365,7 +359,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
USE MOD_DSMC_CollisVec ,ONLY: PostCollVec
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Analyze_Vars ,ONLY: ChemEnergySum
-USE MOD_part_tools ,ONLY: GetParticleWeight
+USE MOD_part_tools ,ONLY: GetParticleWeight, GetNextFreePosition
USE MOD_part_operations ,ONLY: RemoveParticle
#ifdef CODE_ANALYZE
USE MOD_Globals ,ONLY: unit_stdout,myrank
@@ -373,6 +367,9 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
#endif /* CODE_ANALYZE */
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartIn,nPartOut,PartEkinIn,PartEkinOut
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart
+#if USE_MPI
+USE MOD_Globals ,ONLY: myrank
+#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -394,7 +391,8 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
REAL :: cRelaNew(3), TempVelo(3)
#ifdef CODE_ANALYZE
REAL,PARAMETER :: RelMomTol=5e-9 ! Relative tolerance applied to conservation of momentum before/after reaction
-REAL,PARAMETER :: RelEneTol=2e-12 ! Relative tolerance applied to conservation of energy before/after reaction
+REAL,PARAMETER :: RelEneTol=5e-12 ! Relative tolerance applied to conservation of energy before/after reaction
+! ! 2024/1: Increased from 2e-12 to 5e-12 due to reggies failing when using CORE_SPLIT
REAL :: Energy_old,Energy_new,Momentum_old(3),Momentum_new(3)
INTEGER :: iMom, iMomDim
#endif /* CODE_ANALYZE */
@@ -427,8 +425,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
END IF
! Do not perform the reaction in case the reaction is to be calculated at a constant gas composition (DSMC%ReservoirSimuRate = T)
-#if (PP_TimeDiscMethod==42)
-IF (DSMC%ReservoirSimuRate) THEN
+IF (DSMC%ReservoirSimu.AND.DSMC%ReservoirSimuRate) THEN
! Count the number of reactions to determine the actual reaction rate
IF (DSMC%ReservoirRateStatistic) THEN
ChemReac%NumReac(iReac) = ChemReac%NumReac(iReac) + 1
@@ -436,7 +433,6 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
! Leave the routine again
RETURN
END IF
-#endif
Xi_elec = 0.
EZeroTempToExec = 0.
@@ -470,9 +466,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
ProductReac(2) = PartSpecies(ReactInx(3))
NumEduct = 3
END IF
- IF(ProductReac(3).EQ.0) THEN
- CALL RemoveParticle(ReactInx(3))
- ELSE
+ IF(ProductReac(3).NE.0) THEN
PartSpecies(ReactInx(3)) = ProductReac(3)
NumProd = 3
END IF
@@ -511,8 +505,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
IF(ProductReac(3).NE.0) THEN
! === Get free particle index for the 3rd product
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- ReactInx(3) = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (ReactInx(3).EQ.0) CALL abort(__STAMP__,'New Particle Number greater max Part Num in DSMC_Chemistry. Reaction: ',iReac)
+ ReactInx(3) = GetNextFreePosition()
PDM%ParticleInside(ReactInx(3)) = .true.
PDM%IsNewPart(ReactInx(3)) = .true.
PDM%dtFracPush(ReactInx(3)) = .FALSE.
@@ -551,8 +544,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
IF(ProductReac(4).NE.0) THEN
! === Get free particle index for the 4th product
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- ReactInx(4) = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (ReactInx(4).EQ.0) CALL abort(__STAMP__,'New Particle Number greater max Part Num in DSMC_Chemistry. Reaction: ',iReac)
+ ReactInx(4) = GetNextFreePosition()
PDM%ParticleInside(ReactInx(4)) = .true.
PDM%IsNewPart(ReactInx(4)) = .true.
PDM%dtFracPush(ReactInx(4)) = .FALSE.
@@ -1019,6 +1011,7 @@ SUBROUTINE DSMC_Chemistry(iPair, iReac)
VeloCOM(1:3) = FracMassCent1 * PartState(4:6,ReactInx(1)) + FracMassCent2 * PartState(4:6,ReactInx(3))
! When RHS is set, ReactInx(2) is utilized, not an error as the old state cancels out after the particle push in the time disc,
! therefore, there is no need to set change the index as the proper species, ProductReac(2), was utilized for the relaxation
+ CALL RemoveParticle(ReactInx(3))
ELSE
! Scattering 2 -> 2
IF(StringBeginsWith(ChemReac%ReactModel(iReac),'phIon')) THEN
@@ -1553,8 +1546,6 @@ SUBROUTINE CalcPhotoIonizationNumber(i,NbrOfPhotons,NbrOfReactions)
DO iReac = 1, ChemReac%NumOfReact
! Only treat photoionization reactions
IF(TRIM(ChemReac%ReactModel(iReac)).NE.'phIon') CYCLE
- IF(NbrOfPhotonXsecReactions.GT.0) CALL abort(__STAMP__,&
- 'Photoionization reactions with constant cross-sections cannot be combined with XSec data cross-sections for photoionization')
! First reactant of the reaction is the actual heavy particle species
ASSOCIATE( density => BGGas%NumberDensity(BGGas%MapSpecToBGSpec(ChemReac%Reactants(iReac,1))) ,&
CrossSection => ChemReac%CrossSection(iReac))
@@ -1567,7 +1558,7 @@ SUBROUTINE CalcPhotoIonizationNumber(i,NbrOfPhotons,NbrOfReactions)
END SUBROUTINE CalcPhotoIonizationNumber
-SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOpt)
+SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, b1, b2, normal, iLineOpt, PartBCIndex)
!===================================================================================================================================
!> Routine performing the photo-ionization reaction: initializing the heavy species at the background gas temperature (first
!> reactant) and distributing the remaining collision energy onto the electrons
@@ -1584,6 +1575,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Analyze_Vars ,ONLY: ChemEnergySum
USE MOD_part_tools ,ONLY: GetParticleWeight, DiceUnitVector, CalcERot_particle, CalcEVib_particle, CalcEElec_particle
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartIn,PartEkinIn
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart
@@ -1594,8 +1586,10 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER, INTENT(IN) :: iPair, iReac, iInit, InitSpec
+INTEGER, INTENT(IN) :: iPair, iReac
+REAL, INTENT(IN), OPTIONAL :: b1(3),b2(3),normal(3)
INTEGER, INTENT(IN), OPTIONAL :: iLineOpt
+INTEGER, INTENT(IN), OPTIONAL :: PartBCIndex
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1612,8 +1606,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
ProductReac(1:4) = ChemReac%Products(iReac,1:4)
! Do not perform the reaction in case the reaction is to be calculated at a constant gas composition (DSMC%ReservoirSimuRate = T)
-#if (PP_TimeDiscMethod==42)
-IF (DSMC%ReservoirSimuRate) THEN
+IF (DSMC%ReservoirSimu.AND.DSMC%ReservoirSimuRate) THEN
! Count the number of reactions to determine the actual reaction rate
IF (DSMC%ReservoirRateStatistic) THEN
ChemReac%NumReac(iReac) = ChemReac%NumReac(iReac) + 1
@@ -1621,7 +1614,6 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
! Leave the routine again
RETURN
END IF
-#endif
Weight = 0.
NumProd = 2; SumWeightProd = 0.
@@ -1649,8 +1641,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
IF(ProductReac(3).NE.0) THEN
! === Get free particle index for the 3rd product
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- ReactInx(3) = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (ReactInx(3).EQ.0) CALL abort(__STAMP__,'New Particle Number greater max Part Num in DSMC_Chemistry. Reaction: ',iReac)
+ ReactInx(3) = GetNextFreePosition()
PDM%ParticleInside(ReactInx(3)) = .true.
PDM%IsNewPart(ReactInx(3)) = .true.
PDM%dtFracPush(ReactInx(3)) = .FALSE.
@@ -1680,8 +1671,7 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
IF(ProductReac(4).NE.0) THEN
! === Get free particle index for the 4th product
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- ReactInx(4) = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (ReactInx(4).EQ.0) CALL abort(__STAMP__,'New Particle Number greater max Part Num in DSMC_Chemistry. Reaction: ',iReac)
+ ReactInx(4) = GetNextFreePosition()
PDM%ParticleInside(ReactInx(4)) = .true.
PDM%IsNewPart(ReactInx(4)) = .true.
PDM%dtFracPush(ReactInx(4)) = .FALSE.
@@ -1812,27 +1802,22 @@ SUBROUTINE PhotoIonization_InsertProducts(iPair, iReac, iInit, InitSpec, iLineOp
IF(SpecDSMC(iSpec)%InterID.EQ.4) THEN
PartState(4:6,iPart) = VeloCOM(1:3) + SQRT(CRela2_Electron) * DiceUnitVector()
! Change the direction of its velocity vector (randomly) to be perpendicular to the photon's path
- ASSOCIATE( b1 => Species(InitSpec)%Init(iInit)%NormalVector1IC(1:3) ,&
- b2 => Species(InitSpec)%Init(iInit)%NormalVector2IC(1:3) ,&
- normal => Species(InitSpec)%Init(iInit)%NormalIC ,&
- PartBCIndex => Species(InitSpec)%Init(iInit)%PartBCIndex)
- ! Get random vector b3 in b1-b2-plane
- CALL RANDOM_NUMBER(RandVal)
- PartState(4:6,iPart) = GetRandomVectorInPlane(b1,b2,PartState(4:6,iPart),RandVal)
- ! Rotate the resulting vector in the b3-NormalIC-plane
- PartState(4:6,iPart) = GetRotatedVector(PartState(4:6,iPart),normal)
- ! Store the particle information in PartStateBoundary.h5
- IF(DoBoundaryParticleOutputHDF5) THEN
- IF(usevMPF)THEN
- MPF = Species(InitSpec)%Init(iInit)%MacroParticleFactor ! Use emission-specific MPF
- ELSE
- MPF = Species(InitSpec)%MacroParticleFactor ! Use species MPF
- END IF ! usevMPF
- ! Only store volume-emitted particle data in PartStateBoundary.h5 if the PartBCIndex is greater/equal zero
- IF(PartBCIndex.GE.0) CALL StoreBoundaryParticleProperties(iPart,iSpec,PartState(1:3,iPart),&
- UNITVECTOR(PartState(4:6,iPart)),normal,iPartBound=PartBCIndex,mode=2,MPF_optIN=MPF)
- END IF ! DoBoundaryParticleOutputHDF5
- END ASSOCIATE
+ ! Get random vector b3 in b1-b2-plane
+ CALL RANDOM_NUMBER(RandVal)
+ PartState(4:6,iPart) = GetRandomVectorInPlane(b1,b2,PartState(4:6,iPart),RandVal)
+ ! Rotate the resulting vector in the b3-NormalIC-plane
+ PartState(4:6,iPart) = GetRotatedVector(PartState(4:6,iPart),normal)
+ ! Store the particle information in PartStateBoundary.h5
+ IF(DoBoundaryParticleOutputHDF5) THEN
+ IF(usevMPF)THEN
+ MPF = PartMPF(iPart) ! Use emission-specific MPF
+ ELSE
+ MPF = Species(iSpec)%MacroParticleFactor ! Use species MPF
+ END IF ! usevMPF
+ ! Only store volume-emitted particle data in PartStateBoundary.h5 if the PartBCIndex is greater/equal zero
+ IF(PartBCIndex.GE.0) CALL StoreBoundaryParticleProperties(iPart,iSpec,PartState(1:3,iPart),&
+ UNITVECTOR(PartState(4:6,iPart)),normal,iPartBound=PartBCIndex,mode=2,MPF_optIN=MPF)
+ END IF ! DoBoundaryParticleOutputHDF5
END IF
END DO
ELSE
diff --git a/src/particles/dsmc/dsmc_collis_mode.f90 b/src/particles/dsmc/dsmc_collis_mode.f90
index aa0a57d76..de1b4165c 100644
--- a/src/particles/dsmc/dsmc_collis_mode.f90
+++ b/src/particles/dsmc/dsmc_collis_mode.f90
@@ -49,9 +49,7 @@ SUBROUTINE DSMC_Elastic_Col(iPair)
USE MOD_Globals ,ONLY: unit_stdout,myrank
USE MOD_Particle_Vars ,ONLY: Symmetry
#endif /* CODE_ANALYZE */
-#if (PP_TimeDiscMethod==42)
USE MOD_DSMC_Vars ,ONLY: DSMC
-#endif
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -71,17 +69,14 @@ SUBROUTINE DSMC_Elastic_Col(iPair)
INTEGER :: iMom, iMomDim
#endif /* CODE_ANALYZE */
!===================================================================================================================================
-
-#if (PP_TimeDiscMethod==42)
! Reservoir simulation for obtaining the reaction rate at one given point does not require to perform the reaction
-IF (DSMC%ReservoirSimuRate) RETURN
-#endif
+IF (DSMC%ReservoirSimu.AND.DSMC%ReservoirSimuRate) RETURN
- iPart1 = Coll_pData(iPair)%iPart_p1
- iPart2 = Coll_pData(iPair)%iPart_p2
+iPart1 = Coll_pData(iPair)%iPart_p1
+iPart2 = Coll_pData(iPair)%iPart_p2
- iSpec1 = PartSpecies(iPart1)
- iSpec2 = PartSpecies(iPart2)
+iSpec1 = PartSpecies(iPart1)
+iSpec2 = PartSpecies(iPart2)
#ifdef CODE_ANALYZE
! Momentum conservation
@@ -106,13 +101,13 @@ SUBROUTINE DSMC_Elastic_Col(iPair)
cRelaNew(1:3) = PostCollVec(iPair)
! deltaV particle 1 (post collision particle 1 velocity in laboratory frame)
- PartState(4,iPart1) = VeloMx + FracMassCent2 * cRelaNew(1)
+ PartState(4,iPart1) = VeloMx + FracMassCent2 * cRelaNew(1)
PartState(5,iPart1) = VeloMy + FracMassCent2 * cRelaNew(2)
PartState(6,iPart1) = VeloMz + FracMassCent2 * cRelaNew(3)
! deltaV particle 2 (post collision particle 2 velocity in laboratory frame)
- PartState(4,iPart2) = VeloMx - FracMassCent1 * cRelaNew(1)
+ PartState(4,iPart2) = VeloMx - FracMassCent1 * cRelaNew(1)
PartState(5,iPart2) = VeloMy - FracMassCent1 * cRelaNew(2)
- PartState(6,iPart2) = VeloMz - FracMassCent1 * cRelaNew(3)
+ PartState(6,iPart2) = VeloMz - FracMassCent1 * cRelaNew(3)
#ifdef CODE_ANALYZE
Momentum_new(1:3) = Species(iSpec2)%MassIC* (/VeloMx - FracMassCent1*cRelaNew(1),&
VeloMy - FracMassCent1*cRelaNew(2),&
@@ -153,189 +148,6 @@ SUBROUTINE DSMC_Elastic_Col(iPair)
END SUBROUTINE DSMC_Elastic_Col
-!SUBROUTINE DSMC_Scat_Col(iPair)
-!!===================================================================================================================================
-!! Performs a collision with the possibility of a CEX. In the calculation of the new particle velocities a scattering angle is used,
-!! which is interpolated from a lookup table.
-!!===================================================================================================================================
-!! MODULES
-! USE MOD_DSMC_Vars, ONLY : Coll_pData, CollInf, TLU_Data, ChemReac
-! USE MOD_Particle_Vars, ONLY : PartSpecies, PartState
-! USE MOD_DSMC_ChemReact, ONLY : simpleCEX, simpleMEX
-!
-!! IMPLICIT VARIABLE HANDLING
-! IMPLICIT NONE
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! INPUT VARIABLES
-! INTEGER, INTENT(IN) :: iPair
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! OUTPUT VARIABLES
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! LOCAL VARIABLES
-! REAL :: FracMassCent1, FracMassCent2 ! mx/(mx+my)
-! REAL :: VeloMx, VeloMy, VeloMz ! center of mass velo
-! REAL :: cRelax, cRelay, cRelaz ! pre-collisional relativ velo
-! REAL :: cRelaxN, cRelayN, cRelazN ! post-collisional relativ velo
-! REAL :: b, bmax ! impact parameters
-! REAL :: Ekin
-! REAL :: ScatAngle, RotAngle ! scattering and rotational angle
-! REAL :: sigma_el, sigma_tot ! cross-sections
-! REAL :: P_CEX ! charge exchange probability
-! INTEGER :: iReac
-! REAL :: uRan2, uRan3, uRanRot, uRanVHS
-! REAL :: Pi, aEL, bEL, aCEX, bCEX
-! INTEGER :: iPart1, iPart2 ! Colliding particles 1 and 2
-!!===================================================================================================================================
-! iPart1 = Coll_pData(iPair)%iPart_p1
-! iPart2 = Coll_pData(iPair)%iPart_p2
-!
-! Pi = ACOS(-1.0)
-! aCEX = ChemReac%CEXa(ChemReac%ReactNum(PartSpecies(iPart1),PartSpecies(iPart2),1))
-! bCEX = ChemReac%CEXb(ChemReac%ReactNum(PartSpecies(iPart1),PartSpecies(iPart2),1))
-! aEL = ChemReac%ELa(ChemReac%ReactNum(PartSpecies(iPart1),PartSpecies(iPart2),1))
-! bEL = ChemReac%ELb(ChemReac%ReactNum(PartSpecies(iPart1),PartSpecies(iPart2),1))
-! ! Decision if scattering angle is greater than 1 degree and should be calculated
-!
-! sigma_el = bEL + aEL*0.5 * LOG10(Coll_pData(iPair)%cRela2)
-!
-! sigma_tot = ((aCEX+0.5*aEL)*0.5*LOG10(Coll_pData(iPair)%cRela2)+bCEX+0.5*bEL)
-!
-! CALL RANDOM_NUMBER(uRan2)
-!
-!IF ((sigma_el/sigma_tot).GT.uRan2) THEN
-! ! Calculation of relative velocities
-! cRelax = PartState(4,iPart1) - PartState(4,iPart2)
-! cRelay = PartState(5,iPart1) - PartState(5,iPart2)
-! cRelaz = PartState(6,iPart1) - PartState(6,iPart2)
-!
-! FracMassCent1 = CollInf%FracMassCent(PartSpecies(iPart1), Coll_pData(iPair)%PairType)
-! FracMassCent2 = CollInf%FracMassCent(PartSpecies(iPart2), Coll_pData(iPair)%PairType)
-!
-! ! Calculation of velo from center of mass
-! VeloMx = FracMassCent1 * PartState(4,iPart1) + FracMassCent2 * PartState(4,iPart2)
-! VeloMy = FracMassCent1 * PartState(5,iPart1) + FracMassCent2 * PartState(5,iPart2)
-! VeloMz = FracMassCent1 * PartState(6,iPart1) + FracMassCent2 * PartState(6,iPart2)
-!
-! ! Calculation of impact parameter b
-! bmax = SQRT(sigma_el/Pi)
-! b = bmax * SQRT(uRan2)
-! Ekin = (0.5*CollInf%MassRed(Coll_pData(iPair)%PairType)*Coll_pData(iPair)%cRela2/(1.6021766208E-19))
-!
-!
-! ! Determination of scattering angle by interpolation from a lookup table
-! ! Check if Collision Energy is below the threshold of table
-! IF (Ekin.LT.TLU_Data%Emin) THEN
-! ! Isotropic scattering
-! CALL RANDOM_NUMBER(uRanVHS)
-! ScatAngle = 2*ACOS(SQRT(uRanVHS))
-! ELSE
-! ! scattering corresponding to table lookup
-! CALL TLU_Scat_Interpol(Ekin,b,ScatAngle)
-! END IF
-!
-! ! Determination of rotational angle by random number
-! CALL RANDOM_NUMBER(uRanRot)
-! RotAngle = uRanRot * 2 * Pi
-!
-! ! Calculation of post-collision relative velocities in center-of-mass frame
-! cRelaxN = COS(ScatAngle)*cRelax + SIN(ScatAngle)*SIN(RotAngle)*(cRelay**2+cRelaz**2)**0.5
-! cRelayN = COS(ScatAngle)*cRelay &
-! +SIN(ScatAngle)*(SQRT(Coll_pData(ipair)%cRela2)*cRelaz*COS(RotAngle)-cRelax*cRelay*SIN(RotAngle))/(cRelay**2+cRelaz**2)**0.5
-! cRelazN = COS(ScatAngle)*cRelaz &
-! -SIN(ScatAngle)*(SQRT(Coll_pData(ipair)%cRela2)*cRelay*COS(RotAngle)+cRelax*cRelaz*SIN(RotAngle))/(cRelay**2+cRelaz**2)**0.5
-!
-! ! Transformation to laboratory frame
-! ! deltaV particle 1
-! PartState(4,iPart1) = VeloMx + FracMassCent2*CRelaxN
-! PartState(5,iPart1) = VeloMy + FracMassCent2*CRelayN
-! PartState(6,iPart1) = VeloMz + FracMassCent2*CRelazN
-! ! deltaV particle 2
-! PartState(4,iPart2) = VeloMx - FracMassCent1*CRelaxN
-! PartState(5,iPart2) = VeloMy - FracMassCent1*CRelayN
-! PartState(6,iPart2) = VeloMz - FracMassCent1*CRelazN
-!
-! ! Decision concerning CEX
-! P_CEX = 0.5
-! CALL RANDOM_NUMBER(uRan3)
-! iReac = ChemReac%ReactNum(PartSpecies(iPart1), PartSpecies(iPart2), 1)
-! IF (P_CEX.GT.uRan3) THEN
-! CALL simpleCEX(iReac, iPair, resetRHS_opt=.FALSE.)
-! ELSE
-! CALL simpleMEX(iReac, iPair)
-! END IF
-!
-! ELSE
-! ! Perform CEX and leave velocity vectors alone otherwise
-! ! CEX
-! iReac = ChemReac%ReactNum(PartSpecies(iPart1), PartSpecies(iPart2), 1)
-! CALL simpleCEX(iReac, iPair)
-!
-! END IF
-!
-!END SUBROUTINE DSMC_Scat_Col
-
-!SUBROUTINE TLU_Scat_Interpol(E_p,b_p,ScatAngle)
-!!===================================================================================================================================
-!! Interpolates ScatAngle from a lookup table
-!!===================================================================================================================================
-!! MODULES
-! USE MOD_Globals
-! USE MOD_DSMC_Vars, ONLY : TLU_Data
-!! IMPLICIT VARIABLE HANDLING
-! IMPLICIT NONE
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! INPUT VARIABLES
-! REAL, INTENT (IN) :: E_p, b_p ! E_p has to have the unit eV
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! OUTPUT VARIABLES
-! REAL, INTENT (OUT) :: ScatAngle
-!!-----------------------------------------------------------------------------------------------------------------------------------
-!! LOCAL VARIABLES
-! REAL :: i_f_jp1, j_f, i_f_j
-! INTEGER :: I_j,I_jp1,J
-! REAL :: w_i_j,w_i_jp1,w_j
-! INTEGER :: szb,szE
-! REAL :: chi_b_p_E_j,chi_b_p_E_jp1,chi_b_p_e_p
-!!===================================================================================================================================
-! IF (E_p.GT.TLU_Data%Emax) THEN
-! CALL abort(__STAMP__,&
-! 'Collis_mode - Error in TLU_Scat_Interpol: E_p GT Emax')
-! END IF
-! !write (*,*) (E_p-TLU_Data%Emin), TLU_Data%deltaE
-! j_f = (E_p-TLU_Data%Emin)/TLU_Data%deltaE
-! J = FLOOR(j_f)
-! w_j = j_f - J
-! J = J + 1 ! Fitting of the indices for the use in FORTRAN matrix
-! !write (*,*) j_f, J, w_j
-! i_f_j = ABS((b_p)/TLU_Data%deltabj(J))
-! i_f_jp1 = ABS((b_p)/TLU_Data%deltabj(J+1))
-! I_j = FLOOR(i_f_j)
-! I_jp1 = FLOOR(i_f_jp1)
-!
-! w_i_j = i_f_j - I_j
-! w_i_jp1 = i_f_jp1-I_jp1
-!
-! I_j = FLOOR(i_f_j)+1 ! Fitting of the indices for the use in FORTRAN matrix
-! I_jp1 = FLOOR(i_f_jp1)+1 !
-!
-! szE = SIZE(TLU_Data%Chitable,dim=1) !SIZE(delta_b_j)
-! szB = SIZE(TLU_Data%Chitable,dim=2)
-!
-!
-!
-! IF ((I_jp1+1).GE.szB) THEN
-! chi_b_p_E_j = (1 - w_i_j) * TLU_Data%Chitable(J,szB) !+ w_i_j * TLU_Data%Chitable(J,szB)
-! chi_b_p_E_jp1 = (1-w_i_jp1) * TLU_Data%Chitable((J+1),szB)
-! chi_b_p_E_p = (1-w_j) * chi_b_p_E_j + w_j * chi_b_p_E_jp1
-! ELSE
-! chi_b_p_E_j = (1 - w_i_j) * TLU_Data%Chitable(J,I_j) + w_i_j * TLU_Data%Chitable(J,I_jp1)
-! chi_b_p_E_jp1 = (1-w_i_jp1) * TLU_Data%Chitable((J+1),I_jp1) + w_i_jp1 * TLU_Data%Chitable((J+1),(I_jp1+1))
-! chi_b_p_E_p = (1-w_j) * chi_b_p_E_j + w_j * chi_b_p_E_jp1
-! END IF
-! ScatAngle = chi_b_p_E_p
-!
-! !write(*,*) (ScatAngle/ACOS(-1.0)*180), I_jp1, szB
-!END SUBROUTINE TLU_Scat_Interpol
SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair)
!===================================================================================================================================
@@ -352,10 +164,8 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair)
USE MOD_part_tools ,ONLY: GetParticleWeight
USE MOD_MCC_Vars ,ONLY: UseMCC, SpecXSec
USE MOD_MCC_XSec ,ONLY: XSec_CalcElecRelaxProb, XSec_ElectronicRelaxation
-#if (PP_TimeDiscMethod==42)
USE MOD_MCC_Vars ,ONLY: XSec_Relaxation
USE MOD_Particle_Analyze_Vars ,ONLY: CalcRelaxProb
-#endif
#ifdef CODE_ANALYZE
USE MOD_Globals ,ONLY: Abort
USE MOD_Globals ,ONLY: unit_stdout,myrank
@@ -485,15 +295,15 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair)
IF(ProbVib1.GT.iRan) DoVib1 = .TRUE.
END IF
-#if (PP_TimeDiscMethod==42)
-IF(CalcRelaxProb) THEN
- IF(XSec_Relaxation) THEN
- IF(DoVib1) THEN
- SpecXSec(iCase)%VibCount = SpecXSec(iCase)%VibCount + 1.0
+ IF (DSMC%ReservoirSimu) THEN
+ IF(CalcRelaxProb) THEN
+ IF(XSec_Relaxation) THEN
+ IF(DoVib1) THEN
+ SpecXSec(iCase)%VibCount = SpecXSec(iCase)%VibCount + 1.0
+ END IF
+ END IF
END IF
END IF
-END IF
-#endif
IF((SpecDSMC(iSpec2)%InterID.EQ.2).OR.(SpecDSMC(iSpec2)%InterID.EQ.20)) THEN
CALL RANDOM_NUMBER(iRan)
@@ -527,17 +337,17 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair)
FakXi = 0.5*Xi - 1. ! exponent factor of DOF, substitute of Xi_c - Xi_vib, laux diss page 40
-#if (PP_TimeDiscMethod==42)
-IF(CalcRelaxProb) THEN
- IF(XSec_Relaxation) THEN
- IF(DoVib2) THEN
- SpecXSec(iCase)%VibCount = SpecXSec(iCase)%VibCount + 1.0
+IF (DSMC%ReservoirSimu) THEN
+ IF(CalcRelaxProb) THEN
+ IF(XSec_Relaxation) THEN
+ IF(DoVib2) THEN
+ SpecXSec(iCase)%VibCount = SpecXSec(iCase)%VibCount + 1.0
+ END IF
END IF
END IF
+ ! Reservoir simulation for obtaining the reaction rate at one given point does not require to perform the reaction
+ IF (DSMC%ReservoirSimuRate) RETURN
END IF
-! Reservoir simulation for obtaining the reaction rate at one given point does not require to perform the reaction
-IF (DSMC%ReservoirSimuRate) RETURN
-#endif
!--------------------------------------------------------------------------------------------------!
! Electronic Relaxation / Transition
@@ -672,12 +482,12 @@ SUBROUTINE DSMC_Relax_Col_LauxTSHO(iPair)
! deltaV particle 1 (post collision particle 1 velocity in laboratory frame)
PartState(4,iPart1) = VeloMx + FracMassCent2*cRelaNew(1)
- PartState(5,iPart1) = VeloMy + FracMassCent2*cRelaNew(2)
- PartState(6,iPart1) = VeloMz + FracMassCent2*cRelaNew(3)
+ PartState(5,iPart1) = VeloMy + FracMassCent2*cRelaNew(2)
+ PartState(6,iPart1) = VeloMz + FracMassCent2*cRelaNew(3)
! deltaV particle 2 (post collision particle 2 velocity in laboratory frame)
PartState(4,iPart2) = VeloMx - FracMassCent1*cRelaNew(1)
- PartState(5,iPart2) = VeloMy - FracMassCent1*cRelaNew(2)
- PartState(6,iPart2) = VeloMz - FracMassCent1*cRelaNew(3)
+ PartState(5,iPart2) = VeloMy - FracMassCent1*cRelaNew(2)
+ PartState(6,iPart2) = VeloMz - FracMassCent1*cRelaNew(3)
#ifdef CODE_ANALYZE
Energy_new= 0.5*Species(iSpec2)%MassIC*((VeloMx - FracMassCent1*cRelaNew(1))**2 &
@@ -761,11 +571,8 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair)
REAL :: Weight1, Weight2
#endif /* CODE_ANALYZE */
!===================================================================================================================================
-
-#if (PP_TimeDiscMethod==42)
! Reservoir simulation for obtaining the reaction rate at one given point does not require to perform the reaction
-IF (DSMC%ReservoirSimuRate) RETURN
-#endif
+IF (DSMC%ReservoirSimu.AND.DSMC%ReservoirSimuRate) RETURN
iPart1 = Coll_pData(iPair)%iPart_p1
iPart2 = Coll_pData(iPair)%iPart_p2
@@ -962,7 +769,7 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair)
! --------------------------------------------------------------------------------------------------!
! Multi-mode relaxation with the Metropolis-Hastings method
! --------------------------------------------------------------------------------------------------!
- CALL DSMC_VibRelaxPoly(iPair,iPart2,FakXi)
+ CALL DSMC_VibRelaxPoly(iPair,iPart2,FakXi)
ELSE
! --------------------------------------------------------------------------------------------------!
! Single-mode relaxation of a previously selected mode
@@ -1030,7 +837,7 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair)
! Relaxation of first particle
IF ( DoElec1 ) THEN
! calculate energy for electronic relaxation of particle 1
- Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec + PartStateIntEn(3,iPart1)*GetParticleWeight(iPart1)
+ Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec + PartStateIntEn(3,iPart1)*GetParticleWeight(iPart1)
CALL ElectronicEnergyExchange(iPair,iPart1,FakXi)
Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec - PartStateIntEn(3,iPart1)*GetParticleWeight(iPart1)
END IF
@@ -1038,9 +845,9 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair)
! Electronic relaxation of second particle
IF ( DoElec2 ) THEN
! calculate energy for electronic relaxation of particle 2
- Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec + PartStateIntEn(3,iPart2)*GetParticleWeight(iPart2)
+ Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec + PartStateIntEn(3,iPart2)*GetParticleWeight(iPart2)
CALL ElectronicEnergyExchange(iPair,iPart2,FakXi)
- Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec - PartStateIntEn(3,iPart2)*GetParticleWeight(iPart2)
+ Coll_pData(iPair)%Ec = Coll_pData(iPair)%Ec - PartStateIntEn(3,iPart2)*GetParticleWeight(iPart2)
END IF
!--------------------------------------------------------------------------------------------------!
! Calculation of new particle velocities
@@ -1066,12 +873,12 @@ SUBROUTINE DSMC_Relax_Col_Gimelshein(iPair)
! deltaV particle 1 (post collision particle 1 velocity in laboratory frame)
PartState(4,iPart1) = VeloMx + FracMassCent2*cRelaNew(1)
- PartState(5,iPart1) = VeloMy + FracMassCent2*cRelaNew(2)
- PartState(6,iPart1) = VeloMz + FracMassCent2*cRelaNew(3)
+ PartState(5,iPart1) = VeloMy + FracMassCent2*cRelaNew(2)
+ PartState(6,iPart1) = VeloMz + FracMassCent2*cRelaNew(3)
! deltaV particle 2 (post collision particle 2 velocity in laboratory frame)
PartState(4,iPart2) = VeloMx - FracMassCent1*cRelaNew(1)
- PartState(5,iPart2) = VeloMy - FracMassCent1*cRelaNew(2)
- PartState(6,iPart2) = VeloMz - FracMassCent1*cRelaNew(3)
+ PartState(5,iPart2) = VeloMy - FracMassCent1*cRelaNew(2)
+ PartState(6,iPart2) = VeloMz - FracMassCent1*cRelaNew(3)
#ifdef CODE_ANALYZE
Energy_new= 0.5*Species(PartSpecies(iPart2))%MassIC*((VeloMx - FracMassCent1*cRelaNew(1))**2 &
@@ -1118,12 +925,10 @@ SUBROUTINE DSMC_perform_collision(iPair, iElem, NodeVolume, NodePartNum)
USE MOD_Particle_Vars ,ONLY: PartState, WriteMacroVolumeValues, Symmetry
USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, PDM, PartVeloRotRef, RotRefFrameOmega
USE MOD_TimeDisc_Vars ,ONLY: TEnd, Time
-#if (PP_TimeDiscMethod==42)
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
USE MOD_Particle_Vars ,ONLY: usevMPF, Species, PartSpecies
USE MOD_Particle_Analyze_Vars ,ONLY: CalcCollRates
USE MOD_part_tools ,ONLY: GetParticleWeight
-#endif
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1139,24 +944,21 @@ SUBROUTINE DSMC_perform_collision(iPair, iElem, NodeVolume, NodePartNum)
LOGICAL :: RelaxToDo
INTEGER :: iPart1, iPart2 ! Colliding particles 1 and 2
REAL :: Distance
-#if (PP_TimeDiscMethod==42)
REAL :: MacroParticleFactor, PairWeight
-#endif
!===================================================================================================================================
-
-#if (PP_TimeDiscMethod==42)
-IF(CalcCollRates) THEN
- PairWeight = (GetParticleWeight(Coll_pData(iPair)%iPart_p1) + GetParticleWeight(Coll_pData(iPair)%iPart_p2))/2.
- IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN
- ! Weighting factor already included in the PairWeight
- MacroParticleFactor = 1.
- ELSE
- ! Weighting factor should be the same for all species anyway (BGG: first species is the non-BGG particle species)
- MacroParticleFactor = Species(PartSpecies(Coll_pData(iPair)%iPart_p1))%MacroParticleFactor
+IF (DSMC%ReservoirSimu) THEN
+ IF(CalcCollRates) THEN
+ PairWeight = (GetParticleWeight(Coll_pData(iPair)%iPart_p1) + GetParticleWeight(Coll_pData(iPair)%iPart_p2))/2.
+ IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN
+ ! Weighting factor already included in the PairWeight
+ MacroParticleFactor = 1.
+ ELSE
+ ! Weighting factor should be the same for all species anyway (BGG: first species is the non-BGG particle species)
+ MacroParticleFactor = Species(PartSpecies(Coll_pData(iPair)%iPart_p1))%MacroParticleFactor
+ END IF
+ DSMC%NumColl(Coll_pData(iPair)%PairType) = DSMC%NumColl(Coll_pData(iPair)%PairType) + PairWeight*MacroParticleFactor
END IF
- DSMC%NumColl(Coll_pData(iPair)%PairType) = DSMC%NumColl(Coll_pData(iPair)%PairType) + PairWeight*MacroParticleFactor
END IF
-#endif
iPart1 = Coll_pData(iPair)%iPart_p1
iPart2 = Coll_pData(iPair)%iPart_p2
@@ -1292,7 +1094,7 @@ SUBROUTINE ReactionDecision(iPair, RelaxToDo, iElem, NodeVolume, NodePartNum)
ReactionProbArray = 0.
! Reset the complete array (only populated for the specific collision case)
PerformReaction = .FALSE.
-DO iPath = 1, ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths
+DO iPath = 1, ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths
ReacTest = ChemReac%CollCaseInfo(iCase)%ReactionIndex(iPath)
IF(TRIM(ChemReac%ReactModel(ReacTest)).EQ.'QK') THEN
CALL QK_TestReaction(iPair,ReacTest,PerformReaction(iPath))
@@ -1335,7 +1137,7 @@ SUBROUTINE ReactionDecision(iPair, RelaxToDo, iElem, NodeVolume, NodePartNum)
RelaxToDo = .FALSE.
IF(ReacCounter.GT.1) THEN
! Determine which reaction will occur, perform it and leave the loop
- ReactionProb = ReactionProb + 1./REAL(ReacCounter)
+ ReactionProb = ReactionProb + 1./REAL(ReacCounter)
IF(ReactionProb.GT.iRan) THEN
CALL DSMC_Chemistry(iPair, ReacTest)
! Exit the routine
@@ -1398,51 +1200,6 @@ SUBROUTINE ReactionDecision(iPair, RelaxToDo, iElem, NodeVolume, NodePartNum)
END IF
END IF
-! ! ############################################################################################################################### !
-! CASE(16) ! simple CEX/MEX
-! ! ############################################################################################################################### !
-! iReac = ChemReac%ReactNum(PartSpecies(iPart1), PartSpecies(iPart2), 1)
-! IF (ChemReac%DoScat(iReac)) THEN! MEX
-! CALL DSMC_Scat_Col(iPair)
-! ELSE
-! sigmaCEX = (ChemReac%CEXa(iReac)*0.5*LOG10(Coll_pData(iPair)%cRela2) + ChemReac%CEXb(iReac))
-! sigmaMEX = (ChemReac%MEXa(iReac)*0.5*LOG10(Coll_pData(iPair)%cRela2) + ChemReac%MEXb(iReac))
-! ReactionProb=0.
-! IF ((sigmaMEX.EQ.0.).AND.(sigmaCEX.GT.0.)) THEN
-! ReactionProb=1.
-! ELSEIF ((sigmaMEX.GT.0.).AND.(sigmaCEX.GE.0.)) THEN
-! ReactionProb=(sigmaCEX/sigmaMEX)/((sigmaCEX/sigmaMEX)+1)
-! ELSE
-! CALL Abort(&
-! __STAMP__&
-! ,'ERROR! CEX/MEX cross sections are both zero or at least one of them is negative.')
-! END IF
-! #if (PP_TimeDiscMethod==42)
-! IF (.NOT.DSMC%ReservoirRateStatistic) THEN
-! ChemReac%NumReac(iReac) = ChemReac%NumReac(iReac) + ReactionProb ! for calculation of reaction rate coefficient
-! ChemReac%ReacCount(iReac) = ChemReac%ReacCount(iReac) + 1
-! END IF
-! #endif
-! CALL RANDOM_NUMBER(iRan)
-! IF (ReactionProb.GT.iRan) THEN !CEX, otherwise MEX
-! #if (PP_TimeDiscMethod==42)
-! ! Reservoir simulation for obtaining the reaction rate at one given point does not require to perform the reaction
-! IF (.NOT.DSMC%ReservoirSimuRate) THEN
-! #endif
-! CALL simpleCEX(iReac, iPair)
-! #if (PP_TimeDiscMethod==42)
-! END IF
-! IF (DSMC%ReservoirRateStatistic) THEN
-! ChemReac%NumReac(iReac) = ChemReac%NumReac(iReac) + 1 ! for calculation of reaction rate coefficient
-! END IF
-! #endif
-! ELSE
-! CALL DSMC_Elastic_Col(iPair)
-! CALL simpleMEX(iReac, iPair)
-! END IF
-! END IF !ChemReac%DoScat(iReac)
-! RelaxToDo = .FALSE.
-
END SUBROUTINE ReactionDecision
diff --git a/src/particles/dsmc/dsmc_collision_prob.f90 b/src/particles/dsmc/dsmc_collision_prob.f90
index 2fe475165..e9a506178 100644
--- a/src/particles/dsmc/dsmc_collision_prob.f90
+++ b/src/particles/dsmc/dsmc_collision_prob.f90
@@ -240,33 +240,33 @@ SUBROUTINE DSMC_prob_calc(iElem, iPair, NodeVolume)
DSMC%CollProbMeanCount = DSMC%CollProbMeanCount + 1
END IF
-#if (PP_TimeDiscMethod==42)
-! Sum of collision probabilities for the collision pair, required for the correct reaction rate
-IF(ChemReac%NumOfReact.GT.0) THEN
- IF (ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths.GT.0) THEN
- CollProb = Coll_pData(iPair)%Prob
- IF(SpecDSMC(iSpec_p1)%UseCollXSec) THEN
- ! Calculate the collision probability for the null collision probability case
- IF(BGGas%BackgroundSpecies(iSpec_p2)) THEN
- IF(XSec_NullCollision) THEN
- IF(BGGas%UseDistribution) THEN
- CollProb = CollProb * SpecXSec(iCase)%ProbNullElem(iElem)
+IF (DSMC%ReservoirSimu) THEN
+ ! Sum of collision probabilities for the collision pair, required for the correct reaction rate
+ IF(ChemReac%NumOfReact.GT.0) THEN
+ IF (ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths.GT.0) THEN
+ CollProb = Coll_pData(iPair)%Prob
+ IF(SpecDSMC(iSpec_p1)%UseCollXSec) THEN
+ ! Calculate the collision probability for the null collision probability case
+ IF(BGGas%BackgroundSpecies(iSpec_p2)) THEN
+ IF(XSec_NullCollision) THEN
+ IF(BGGas%UseDistribution) THEN
+ CollProb = CollProb * SpecXSec(iCase)%ProbNullElem(iElem)
+ ELSE
+ CollProb = CollProb * SpecXSec(iCase)%ProbNull
+ END IF
ELSE
- CollProb = CollProb * SpecXSec(iCase)%ProbNull
+ IF(BGGas%UseDistribution)THEN
+ CollProb = CollProb * BGGas%SpeciesFractionElem(BGGas%MapSpecToBGSpec(iSpec_p2),iElem)
+ ELSE
+ CollProb = CollProb * BGGas%SpeciesFraction(BGGas%MapSpecToBGSpec(iSpec_p2))
+ END IF ! BGGas%UseDistribution
END IF
- ELSE
- IF(BGGas%UseDistribution)THEN
- CollProb = CollProb * BGGas%SpeciesFractionElem(BGGas%MapSpecToBGSpec(iSpec_p2),iElem)
- ELSE
- CollProb = CollProb * BGGas%SpeciesFraction(BGGas%MapSpecToBGSpec(iSpec_p2))
- END IF ! BGGas%UseDistribution
END IF
END IF
+ ChemReac%ReacCollMean(iCase) = ChemReac%ReacCollMean(iCase) + CollProb
END IF
- ChemReac%ReacCollMean(iCase) = ChemReac%ReacCollMean(iCase) + CollProb
END IF
END IF
-#endif
END SUBROUTINE DSMC_prob_calc
diff --git a/src/particles/dsmc/dsmc_electronic_model.f90 b/src/particles/dsmc/dsmc_electronic_model.f90
index 242371916..bcf25dab7 100644
--- a/src/particles/dsmc/dsmc_electronic_model.f90
+++ b/src/particles/dsmc/dsmc_electronic_model.f90
@@ -29,10 +29,6 @@ MODULE MOD_DSMC_ElectronicModel
MODULE PROCEDURE InitElectronShell
END INTERFACE
-INTERFACE TVEEnergyExchange
- MODULE PROCEDURE TVEEnergyExchange
-END INTERFACE
-
INTERFACE ReadSpeciesLevel
MODULE PROCEDURE ReadSpeciesLevel
END INTERFACE
@@ -341,7 +337,7 @@ SUBROUTINE ElectronicEnergyExchange(iPair,iPart1,FakXi, NewPart, XSec_Level)
(1.-LocRelaxProb)*ElectronicDistriPart(iPart1)%DistriFunc(iQua+1) + &
LocRelaxProb * SpecDSMC(iSpec)%ElectronicState(1,iQua) *EXP (-tmpExp)/ElectronicPartition
ELSE
- ElectronicDistriPart(iPart1)%DistriFunc(iQua+1) = (1.-LocRelaxProb)*ElectronicDistriPart(iPart1)%DistriFunc(iQua+1)
+ ElectronicDistriPart(iPart1)%DistriFunc(iQua+1) = (1.-LocRelaxProb)*ElectronicDistriPart(iPart1)%DistriFunc(iQua+1)
END IF
! ElectronicDistriPart(iPart1)%DistriFunc(iQua+1) = SpecDSMC(iSpec)%ElectronicState(1,iQua) * &
! EXP ( - SpecDSMC(iSpec)%ElectronicState(2,iQua) / TransElec)/ElectronicPartition
@@ -497,7 +493,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume)
nElecRelaxSpec =0; nElecRelax=0
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
- iSpec = PartSpecies(iPart)
+ iSpec = PartSpecies(iPart)
IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN
IF (.NOT.ElecRelaxPart(iPart)) CYCLE
partWeight = GetParticleWeight(iPart)
@@ -532,7 +528,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume)
DO iLoop = 1, nElecRelax
iPart = iPartIndx_NodeRelaxElec(iLoop)
iSpec = PartSpecies(iPart)
- partWeight = GetParticleWeight(iPart)
+ partWeight = GetParticleWeight(iPart)
CALL RANDOM_NUMBER(iRan)
iQua = INT( ( SpecDSMC(iSpec)%MaxElecQuant ) * iRan)
ElectronicPartitionTemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * EXP(-SpecDSMC(iSpec)%ElectronicState(2,iQua)/TEqui)
@@ -544,12 +540,12 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume)
ElectronicPartitionTemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * EXP(-SpecDSMC(iSpec)%ElectronicState(2,iQua)/TEqui)
CALL RANDOM_NUMBER(iRan)
END DO
- iQua = MAX(iQua,1)
+ iQua = MAX(iQua,1)
PartStateIntEn( 3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQua)
IF (TEqui.GT.SpecDSMC(iSpec)%MaxMeanXiElec(2)) THEN
SkipEnergyCons(iSpec)= .TRUE.
IF ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0) THEN
- DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
+ DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
iQua = iQua - 1
PartStateIntEn(3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQua)
IF (iQua.EQ.0) EXIT
@@ -566,7 +562,7 @@ SUBROUTINE LT_ElectronicEnergyExchange(iPartIndx_Node, nPart, NodeVolume)
! 8.) Determine the new particle state and ensure energy conservation by scaling the new velocities with the factor alpha.
alpha = SQRT(OldEn/NewEn)
DO iLoop = 1, nPart
- iPart = iPartIndx_Node(iLoop)
+ iPart = iPartIndx_Node(iLoop)
PartState(4:6,iPart) = vBulkAll(1:3) + alpha*(PartState(4:6,iPart)-vBulkAll(1:3))
END DO
@@ -575,7 +571,7 @@ END SUBROUTINE LT_ElectronicEnergyExchange
SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
!===================================================================================================================================
-!> Subroutine for the electronic excitation of chemical reacting particles, same steps as LT_ElectronicEnergyExchange but only for
+!> Subroutine for the electronic excitation of chemical reacting particles, same steps as LT_ElectronicEnergyExchange but only for
!> chemical reacting particles assuming an thermal equilibrium between translation and electronical excitation after the chemical
!> reaction
!===================================================================================================================================
@@ -621,16 +617,16 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
partWeight = GetParticleWeight(iPart)
- iSpec = PartSpecies(iPart)
- V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3)
- vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
+ iSpec = PartSpecies(iPart)
+ V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3)
+ vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
OldEn = OldEn + 0.5*Species(iSpec)%MassIC * vmag2*partWeight
END DO
NewEn = OldEn
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
- iSpec = PartSpecies(iPart)
+ iSpec = PartSpecies(iPart)
IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN
partWeight = GetParticleWeight(iPart)
OldEn = OldEn + PartStateIntEn(3,iPart)* partWeight
@@ -672,13 +668,13 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
DO iSpec = 1, nSpecies
Xi_ElecTotal = Xi_ElecTotal + Xi_ElecSpec(iSpec)*totalWeightSpec(iSpec)
END DO
-
+
TempEn = (3.*(nPart-1.)/nPart*totalWeight+Xi_ElecTotal)/2.*BoltzmannConst*TEqui
IF (TempEn.GT.OldEn) THEN
MaxTemp = TEqui
ELSE
MinTemp = TEqui
- END IF
+ END IF
END DO
ElectronicPartition = 0.
@@ -708,7 +704,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
nElecRelax = nElecRelax + 1
nElecRelaxSpec(iSpec) = nElecRelaxSpec(iSpec) + 1
iPartIndx_NodeRelaxElec(nElecRelax) = iPart
- partWeight = GetParticleWeight(iPart)
+ partWeight = GetParticleWeight(iPart)
CALL RANDOM_NUMBER(iRan)
iQua = INT( ( SpecDSMC(iSpec)%MaxElecQuant ) * iRan)
ElectronicPartitionTemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * EXP(-SpecDSMC(iSpec)%ElectronicState(2,iQua)/TEqui)
@@ -720,12 +716,12 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
ElectronicPartitionTemp = SpecDSMC(iSpec)%ElectronicState(1,iQua) * EXP(-SpecDSMC(iSpec)%ElectronicState(2,iQua)/TEqui)
CALL RANDOM_NUMBER(iRan)
END DO
- iQua = MAX(iQua,1)
+ iQua = MAX(iQua,1)
PartStateIntEn( 3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQua)
IF (TEqui.GT.SpecDSMC(iSpec)%MaxMeanXiElec(2)) THEN
SkipEnergyCons(iSpec)= .TRUE.
IF ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0) THEN
- DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
+ DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
iQua = iQua - 1
PartStateIntEn(3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQua)
IF (iQua.EQ.0) EXIT
@@ -744,7 +740,7 @@ SUBROUTINE LT_ElectronicEnergyExchangeChem(iPartIndx_Node, nPart)
alpha = SQRT(OldEn/NewEn)
DO iLoop = 1, nPart
- iPart = iPartIndx_Node(iLoop)
+ iPart = iPartIndx_Node(iLoop)
PartState(4:6,iPart) = vBulkAll(1:3) + alpha*(PartState(4:6,iPart)-vBulkAll(1:3))
END DO
@@ -753,7 +749,7 @@ END SUBROUTINE LT_ElectronicEnergyExchangeChem
SUBROUTINE LT_ElectronicExc_ConstructPartList(iPartIndx_NodeTotal, iPartIndx_NodeTotalElecExc, nPart, nPartRelax)
!===================================================================================================================================
-!> Construct List of Particles that must be checked for electronic excitation.
+!> Construct List of Particles that must be checked for electronic excitation.
!> Sort out the particles that have already been relaxed by a chemical reaction.
!===================================================================================================================================
! MODULES
@@ -865,13 +861,13 @@ SUBROUTINE CalcMoments_ElectronicExchange(nPart, iPartIndx_Node, nSpec, vBulkAll
DO iLoop = 1, nPart
iPart = iPartIndx_Node(iLoop)
partWeight = GetParticleWeight(iPart)
- iSpec = PartSpecies(iPart)
+ iSpec = PartSpecies(iPart)
V_rel(1:3)=PartState(4:6,iPart)-vBulkSpec(1:3,iSpec)
- vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
+ vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
u2Spec(iSpec) = u2Spec(iSpec) + vmag2*partWeight
- V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3)
- vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
+ V_rel(1:3)=PartState(4:6,iPart)-vBulkAll(1:3)
+ vmag2 = V_rel(1)**2 + V_rel(2)**2 + V_rel(3)**2
OldEn = OldEn + 0.5*Species(iSpec)%MassIC * vmag2*partWeight
IF((SpecDSMC(iSpec)%InterID.NE.4).AND.(.NOT.SpecDSMC(iSpec)%FullyIonized)) THEN
EElecSpec(iSpec) = EElecSpec(iSpec) + PartStateIntEn(3,iPart) * partWeight
@@ -880,7 +876,7 @@ SUBROUTINE CalcMoments_ElectronicExchange(nPart, iPartIndx_Node, nSpec, vBulkAll
IF (nSpecies.GT.1) THEN
SpecTemp = 0.0
- EnerTotal = 0.0
+ EnerTotal = 0.0
tempweight = 0.0; tempweight2 = 0.0; tempmass = 0.0; vBulkTemp = 0.0
DO iSpec = 1, nSpecies
IF ((nSpec(iSpec).GE.2).AND.(.NOT.ALMOSTZERO(u2Spec(iSpec)))) THEN
@@ -891,9 +887,9 @@ SUBROUTINE CalcMoments_ElectronicExchange(nPart, iPartIndx_Node, nSpec, vBulkAll
EnerTotal = EnerTotal + totalWeightSpec(iSpec) * Species(iSpec)%MassIC / 2. * vmag2
tempweight = tempweight + totalWeightSpec(iSpec)
tempweight2 = tempweight2 + totalWeightSpec2(iSpec)
- tempmass = tempmass + totalWeightSpec(iSpec) * Species(iSpec)%MassIC
- vBulkTemp(1:3) = vBulkTemp(1:3) + vBulkSpec(1:3,iSpec)*totalWeightSpec(iSpec) * Species(iSpec)%MassIC
- END IF
+ tempmass = tempmass + totalWeightSpec(iSpec) * Species(iSpec)%MassIC
+ vBulkTemp(1:3) = vBulkTemp(1:3) + vBulkSpec(1:3,iSpec)*totalWeightSpec(iSpec) * Species(iSpec)%MassIC
+ END IF
END DO
vBulkTemp(1:3) = vBulkTemp(1:3) / tempmass
@@ -1032,7 +1028,7 @@ SUBROUTINE EnergyConsElec(nPart, nElecRelax, nElecRelaxSpec, iPartIndx_NodeRelax
DO iSpec = 1, nSpecies
IF (SkipEnergyCons(iSpec)) CYCLE
IF (NewEnElec(iSpec).GT.0.0) THEN
- alpha(iSpec) = OldEn/NewEnElec(iSpec)*(Xi_ElecSpec(iSpec)*nElecRelaxSpec(iSpec)/(3.*(nPart-1.)+Xi_ElecTotal))
+ alpha(iSpec) = OldEn/NewEnElec(iSpec)*(Xi_ElecSpec(iSpec)*nElecRelaxSpec(iSpec)/(3.*(nPart-1.)+Xi_ElecTotal))
ELSE
alpha(iSpec) = 0.0
END IF
@@ -1041,16 +1037,16 @@ SUBROUTINE EnergyConsElec(nPart, nElecRelax, nElecRelaxSpec, iPartIndx_NodeRelax
iPart = iPartIndx_NodeRelaxElec(iLoop)
partWeight = GetParticleWeight(iPart)
iSpec = PartSpecies(iPart)
- IF (SkipEnergyCons(iSpec)) CYCLE
+ IF (SkipEnergyCons(iSpec)) CYCLE
betaV = alpha(iSpec)*PartStateIntEn( 3,iPart)
DO iQuant = 1, SpecDSMC(iSpec)%MaxElecQuant - 1
IF (betaV.LT.BoltzmannConst * SpecDSMC(iSpec)%ElectronicState(2,iQuant)) THEN
- iQuaMax = iQuant
+ iQuaMax = iQuant
EXIT
END IF
IF(iQuant.EQ.SpecDSMC(iSpec)%MaxElecQuant - 1) iQuaMax = iQuant
END DO
- Prob = (betaV-BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQuaMax-1)) &
+ Prob = (betaV-BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQuaMax-1)) &
/ (BoltzmannConst*(SpecDSMC(iSpec)%ElectronicState(2,iQuaMax) - SpecDSMC(iSpec)%ElectronicState(2,iQuaMax-1)))
CALL RANDOM_NUMBER(iRan)
IF (iRan.GT.Prob) THEN
@@ -1061,7 +1057,7 @@ SUBROUTINE EnergyConsElec(nPart, nElecRelax, nElecRelaxSpec, iPartIndx_NodeRelax
PartStateIntEn(3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQuaMax)
END IF
IF ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0) THEN
- DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
+ DO WHILE ((OldEn - (PartStateIntEn(3,iPart)*partWeight)).LT.0.0)
iQuant = iQuant - 1
PartStateIntEn(3,iPart) = BoltzmannConst*SpecDSMC(iSpec)%ElectronicState(2,iQuant)
IF (iQuant.EQ.0) EXIT
@@ -1069,78 +1065,76 @@ SUBROUTINE EnergyConsElec(nPart, nElecRelax, nElecRelaxSpec, iPartIndx_NodeRelax
END IF
OldEn = OldEn - PartStateIntEn(3,iPart)*partWeight
END DO
-END IF
+END IF
END SUBROUTINE EnergyConsElec
SUBROUTINE TVEEnergyExchange(CollisionEnergy,iPart1,FakXi)
!===================================================================================================================================
-! Electronic energy exchange
+! Translational-vibrational-electronic energy exchange
!===================================================================================================================================
- USE MOD_DSMC_Vars, ONLY : DSMC, SpecDSMC, PartStateIntEn
- USE MOD_Particle_Vars, ONLY : PartSpecies
- USE MOD_Globals_Vars, ONLY : BoltzmannConst
+USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC, PartStateIntEn
+USE MOD_Particle_Vars ,ONLY: PartSpecies
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst
! IMPLICIT VARIABLE HANDLING
- IMPLICIT NONE
+IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
- INTEGER, INTENT(IN) :: iPart1
- REAL, INTENT(IN) :: FakXi
+INTEGER, INTENT(IN) :: iPart1
+REAL, INTENT(IN) :: FakXi
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
- REAL, INTENT(INOUT) :: CollisionEnergy !
+REAL, INTENT(INOUT) :: CollisionEnergy
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
- INTEGER :: iQuaMax, MaxElecQuant, iQua ! , iQuaMax3
- INTEGER :: jQVib, QMaxVib
- REAL :: iRan, iRan2, gmax, gtemp, PartStateTemp, iRanVib
-!#if ( PP_TimeDiscMethod==42 )
-! INTEGER :: iQuaold
-!#endif
+INTEGER :: iQuaMax, MaxElecQuant, iQua
+INTEGER :: jQVib, QMaxVib
+REAL :: iRan, iRan2, gmax, gtemp, PartStateTemp, iRanVib
!===================================================================================================================================
- iQuaMax = 0
- ! Determine max electronic quant
- MaxElecQuant = SpecDSMC(PartSpecies(iPart1))%MaxElecQuant - 1
-!#if ( PP_TimeDiscMethod==42 )
-! iQuaold=0
-! ! determine old Quant
-! DO iQua = 0, MaxElecQuant
-! IF ( PartStateIntEn(3,iPart1) / BoltzmannConst .ge. &
-! SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) ) THEN
-! iQuaold = iQua
-! ELSE
-! ! exit loop
-! EXIT
-! END IF
-! END DO
-!#endif
- ! determine maximal Quant and term according to Eq (7) of Liechty
- gmax = 0
- PartStateTemp = CollisionEnergy / BoltzmannConst
- DO iQua = 0, MaxElecQuant
- IF ( (PartStateTemp &
- - SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
- - DSMC%GammaQuant * SpecDSMC(PartSpecies(iPart1))%CharaTVib) &
- .ge. 0 ) THEN
- gtemp = SpecDSMC(PartSpecies(iPart1))%ElectronicState(1,iQua) * &
- ( CollisionEnergy - BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
- -DSMC%GammaQuant * SpecDSMC(PartSpecies(iPart1))%CharaTVib * BoltzmannConst)**FakXi
- ! maximal possible Quant before term goes negative
- iQuaMax = iQua
- IF ( gtemp .gt. gmax ) THEN
- ! Quant of largest value of Eq (7)
- gmax = gtemp
- END IF
+iQuaMax = 0
+! Determine max electronic quant
+MaxElecQuant = SpecDSMC(PartSpecies(iPart1))%MaxElecQuant - 1
+! determine maximal Quant and term according to Eq (7) of Liechty
+gmax = 0
+PartStateTemp = CollisionEnergy / BoltzmannConst
+DO iQua = 0, MaxElecQuant
+ IF ( (PartStateTemp &
+ - SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
+ - DSMC%GammaQuant * SpecDSMC(PartSpecies(iPart1))%CharaTVib) &
+ .ge. 0 ) THEN
+ gtemp = SpecDSMC(PartSpecies(iPart1))%ElectronicState(1,iQua) * &
+ ( CollisionEnergy - BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
+ -DSMC%GammaQuant * SpecDSMC(PartSpecies(iPart1))%CharaTVib * BoltzmannConst)**FakXi
+ ! maximal possible Quant before term goes negative
+ iQuaMax = iQua
+ IF ( gtemp .gt. gmax ) THEN
+ ! Quant of largest value of Eq (7)
+ gmax = gtemp
END IF
- END DO
- ! max iQuant for dicing
- QMaxVib = INT(CollisionEnergy/(BoltzmannConst*SpecDSMC(PartSpecies(iPart1))%CharaTVib) &
- - DSMC%GammaQuant)
- QMaxVib = MIN(QMaxVib + 1, SpecDSMC(PartSpecies(iPart1))%MaxVibQuant)
+ END IF
+END DO
+! max iQuant for dicing
+QMaxVib = INT(CollisionEnergy/(BoltzmannConst*SpecDSMC(PartSpecies(iPart1))%CharaTVib) &
+ - DSMC%GammaQuant)
+QMaxVib = MIN(QMaxVib + 1, SpecDSMC(PartSpecies(iPart1))%MaxVibQuant)
+CALL RANDOM_NUMBER(iRan)
+CALL RANDOM_NUMBER(iRanVib)
+iQua = INT( ( iQuaMax +1 ) * iRan)
+jQVib = INT(iRanVib * QMaxVib)
+gtemp =( CollisionEnergy - BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
+ -(DSMC%GammaQuant + jQVib) * SpecDSMC(PartSpecies(iPart1))%CharaTVib * BoltzmannConst)
+IF (gtemp.LE.0.0) THEN
+ gtemp = 0.0
+ELSE
+ gtemp = SpecDSMC(PartSpecies(iPart1))%ElectronicState(1,iQua) *(gtemp)**FakXi
+END IF
+CALL RANDOM_NUMBER(iRan2)
+! acceptance-rejection for iQuaElec
+DO WHILE ( iRan2 .ge. gtemp / gmax )
CALL RANDOM_NUMBER(iRan)
CALL RANDOM_NUMBER(iRanVib)
- iQua = INT( ( iQuaMax +1 ) * iRan)
+ iQua = int( ( iQuaMax +1 ) * iRan)
jQVib = INT(iRanVib * QMaxVib)
gtemp =( CollisionEnergy - BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
-(DSMC%GammaQuant + jQVib) * SpecDSMC(PartSpecies(iPart1))%CharaTVib * BoltzmannConst)
@@ -1150,31 +1144,11 @@ SUBROUTINE TVEEnergyExchange(CollisionEnergy,iPart1,FakXi)
gtemp = SpecDSMC(PartSpecies(iPart1))%ElectronicState(1,iQua) *(gtemp)**FakXi
END IF
CALL RANDOM_NUMBER(iRan2)
- ! acceptance-rejection for iQuaElec
- DO WHILE ( iRan2 .ge. gtemp / gmax )
- CALL RANDOM_NUMBER(iRan)
- CALL RANDOM_NUMBER(iRanVib)
- iQua = int( ( iQuaMax +1 ) * iRan)
- jQVib = INT(iRanVib * QMaxVib)
- gtemp =( CollisionEnergy - BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua) &
- -(DSMC%GammaQuant + jQVib) * SpecDSMC(PartSpecies(iPart1))%CharaTVib * BoltzmannConst)
- IF (gtemp.LE.0.0) THEN
- gtemp = 0.0
- ELSE
- gtemp = SpecDSMC(PartSpecies(iPart1))%ElectronicState(1,iQua) *(gtemp)**FakXi
- END IF
- CALL RANDOM_NUMBER(iRan2)
- END DO
-#if (PP_TimeDiscMethod==42)
-! Reservoir simulation for obtaining the reaction rate at one given point does not require to performe the reaction
- IF (.NOT.DSMC%ReservoirSimuRate) THEN
-#endif
- PartStateIntEn(3,iPart1) = BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua)
- PartStateIntEn(1,iPart1) = (jQVib + DSMC%GammaQuant) * BoltzmannConst &
- * SpecDSMC(PartSpecies(iPart1))%CharaTVib
-#if (PP_TimeDiscMethod==42)
- END IF
-#endif
+END DO
+
+PartStateIntEn(3,iPart1) = BoltzmannConst * SpecDSMC(PartSpecies(iPart1))%ElectronicState(2,iQua)
+PartStateIntEn(1,iPart1) = (jQVib + DSMC%GammaQuant) * BoltzmannConst &
+ * SpecDSMC(PartSpecies(iPart1))%CharaTVib
END SUBROUTINE TVEEnergyExchange
@@ -1389,7 +1363,7 @@ SUBROUTINE CalcProbCorrFactorElec()
MinTemp=MIN(DSMC%InstantTXiElec(1,iSpec),DSMC%InstantTransTemp(nSpecies+1))
MaxTemp=MAX(DSMC%InstantTXiElec(1,iSpec),DSMC%InstantTransTemp(nSpecies+1))
Tequi= 0.5*(MaxTemp+MinTemp)
- iLoop = 1
+ iLoop = 1
OldEn =DSMC%InstantTXiElec(1,iSpec)*DSMC%InstantTXiElec(2,iSpec)+Xi_rel*DSMC%InstantTransTemp(nSpecies+1)
NewEn=(CalcXiElec(TEqui, iSpec)+Xi_rel)*Tequi
DO WHILE(ABS(OldEn-NewEn).GT.1E-2)
@@ -1397,8 +1371,8 @@ SUBROUTINE CalcProbCorrFactorElec()
MaxTemp = TEqui
ELSE
MinTemp = TEqui
- END IF
- Tequi= 0.5*(MaxTemp+MinTemp)
+ END IF
+ Tequi= 0.5*(MaxTemp+MinTemp)
NewEn=(CalcXiElec(TEqui, iSpec)+Xi_rel)*Tequi
iLoop = iLoop + 1
IF (iLoop.EQ.100) THEN
diff --git a/src/particles/dsmc/dsmc_init.f90 b/src/particles/dsmc/dsmc_init.f90
index 60e1be226..fb41970ac 100644
--- a/src/particles/dsmc/dsmc_init.f90
+++ b/src/particles/dsmc/dsmc_init.f90
@@ -35,6 +35,7 @@ MODULE MOD_DSMC_Init
! Private Part ---------------------------------------------------------------------------------------------------------------------
! Public Part ----------------------------------------------------------------------------------------------------------------------
PUBLIC :: InitDSMC, FinalizeDSMC
+PUBLIC :: SetVarVibProb2Elems
!===================================================================================================================================
PUBLIC::DefineParametersDSMC
CONTAINS
@@ -82,14 +83,13 @@ SUBROUTINE DefineParametersDSMC()
'Time-averaged mean collision probability\n'//&
'Mean collision separation distance over mean free path' , '.FALSE.')
CALL prms%CreateLogicalOption( 'Particles-DSMCReservoirSim', &
- 'Only TD=Reservoir (42).\n'//&
'Set [TRUE] to disable particle movement. Use for reservoir simulations.' , '.FALSE.')
CALL prms%CreateLogicalOption( 'Particles-DSMCReservoirSimRate', &
- 'Only TD=Reservoir (42).\n'//&
+ 'Only with Particles-DSMCReservoirSim = T\n'//&
'Set [TRUE] to disable particle reactions. Only probabilities (rates) are calculated.', &
'.FALSE.')
CALL prms%CreateLogicalOption( 'Particles-DSMCReservoirStatistic', &
- 'Only TD=Reservoir (42).\n'//&
+ 'Only with Particles-DSMCReservoirSim = T\n'//&
'Probabilities (rates) are calculated\n'//&
' [TRUE] counting reacting particles.\n'//&
' [FALSE] summing reaction probabilities (does not work with Q-K).' , '.FALSE.')
@@ -115,7 +115,8 @@ SUBROUTINE DefineParametersDSMC()
'Every mode has its own corrected relaxation probability, comparison with the '//&
'same random number while the previous probability is added to the next', '.FALSE.')
CALL prms%CreateLogicalOption( 'Particles-DSMC-CompareLandauTeller'&
- ,'Only TD=Reservoir (42). ', '.FALSE.')
+ ,'Allows the comparison with Landau-Teller equation. Only with Particles-DSMCReservoirSim = T.',&
+ '.FALSE.')
CALL prms%CreateLogicalOption( 'Particles-DSMC-UseOctree'&
,'Use octree method for dynamic grid resolution based on the current mean free path '//&
'and the particle number', '.FALSE.')
@@ -291,13 +292,12 @@ SUBROUTINE InitDSMC()
USE MOD_DSMC_Vars
USE MOD_Mesh_Vars ,ONLY: nElems, NGEo
USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst, ElementaryCharge
-USE MOD_Particle_Vars ,ONLY: nSpecies, Species, PDM, PartSpecies, Symmetry, UseVarTimeStep, usevMPF
-USE MOD_Particle_Vars ,ONLY: DoFieldIonization,SampleElecExcitation
+USE MOD_Particle_Vars ,ONLY: nSpecies, Species, PDM, Symmetry, UseVarTimeStep, usevMPF
+USE MOD_Particle_Vars ,ONLY: DoFieldIonization, SampleElecExcitation
USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree
USE MOD_DSMC_ChemInit ,ONLY: DSMC_chemical_init
-USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs, DSMC_SetInternalEnr_Poly
+USE MOD_DSMC_PolyAtomicModel ,ONLY: InitPolyAtomicMolecs
USE MOD_DSMC_CollisVec ,ONLY: DiceDeflectedVelocityVector4Coll, DiceVelocityVector4Coll, PostCollVec
-USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD
USE MOD_DSMC_BGGas ,ONLY: BGGas_RegionsSetInternalTemp
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
@@ -311,7 +311,7 @@ SUBROUTINE InitDSMC()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
CHARACTER(32) :: hilf , hilf2
-INTEGER :: iCase, iSpec, jSpec, iPart, iInit, iDOF, VarNum
+INTEGER :: iCase, iSpec, jSpec, iInit, iDOF, VarNum
INTEGER :: iColl, jColl, pColl ! for collision parameter read in
REAL :: A1, A2, delta_ij ! species constant for cross section (p. 24 Laux)
LOGICAL :: PostCollPointerSet
@@ -343,7 +343,7 @@ SUBROUTINE InitDSMC()
DSMC%GammaQuant = GETREAL('Particles-DSMC-GammaQuant')
DSMC%ElectronicModel = GETINT('Particles-DSMC-ElectronicModel')
IF(SampleElecExcitation.AND.(DSMC%ElectronicModel.NE.3)) CALL CollectiveStop(__STAMP__,&
- 'Part-SampElectronicExcitation = T requires Particles-DSMC-ElectronicModel = 3')
+ 'Part-SampleElectronicExcitation = T requires Particles-DSMC-ElectronicModel = 3')
IF (DSMC%ElectronicModel.GT.0) THEN
! Allocate internal energy array WITH electronic energy
ALLOCATE(PartStateIntEn(1:3,PDM%maxParticleNumber))
@@ -555,9 +555,9 @@ SUBROUTINE InitDSMC()
END IF ! DoFieldIonization.OR.CollisMode.NE.0
IF (CollisMode.EQ.0) THEN
-#if (PP_TimeDiscMethod==42)
- CALL Abort(__STAMP__, "Free Molecular Flow (CollisMode=0) is not supported for reservoir!")
-#endif
+ IF (DSMC%ReservoirSimu) THEN
+ CALL Abort(__STAMP__, "Free Molecular Flow (CollisMode=0) is not supported for reservoir!")
+ END IF
ELSE !CollisMode.GT.0
! species and case assignment arrays
ALLOCATE(DSMC%NumColl(CollInf%NumCase +1))
@@ -626,17 +626,15 @@ SUBROUTINE InitDSMC()
SpecDSMC(1:nSpecies)%MaxVibQuant = 0
SpecDSMC(1:nSpecies)%CharaTVib = 0
SpecDSMC(1:nSpecies)%EZeroPoint = 0.0
- SpecDSMC(1:nSpecies)%PolyatomicMol=.false.
+ SpecDSMC(1:nSpecies)%PolyatomicMol = .FALSE.
SpecDSMC(1:nSpecies)%SpecToPolyArray = 0
- useRelaxProbCorrFactor=GETLOGICAL('Particles-DSMC-useRelaxProbCorrFactor','.FALSE.')
+ useRelaxProbCorrFactor=GETLOGICAL('Particles-DSMC-useRelaxProbCorrFactor')
DO iSpec = 1, nSpecies
IF(SpecDSMC(iSpec)%InterID.NE.4) THEN
WRITE(UNIT=hilf,FMT='(I0)') iSpec
- SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol','.FALSE.')
+ SpecDSMC(iSpec)%PolyatomicMol=GETLOGICAL('Part-Species'//TRIM(hilf)//'-PolyatomicMol')
IF(SpecDSMC(iSpec)%PolyatomicMol.AND.DSMC%DoTEVRRelaxation) THEN
- CALL Abort(&
- __STAMP__&
- ,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!')
+ CALL Abort(__STAMP__,'! Simulation of Polyatomic Molecules and T-E-V-R relaxation not possible yet!!!')
END IF
IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
DSMC%NumPolyatomMolecs = DSMC%NumPolyatomMolecs + 1
@@ -657,9 +655,7 @@ SUBROUTINE InitDSMC()
SpecDSMC(iSpec)%CollNumRotInf = GETREAL('Part-Species'//TRIM(hilf)//'-CollNumRotInf')
SpecDSMC(iSpec)%TempRefRot = GETREAL('Part-Species'//TRIM(hilf)//'-TempRefRot')
IF(SpecDSMC(iSpec)%CollNumRotInf*SpecDSMC(iSpec)%TempRefRot.EQ.0) THEN
- CALL Abort(&
- __STAMP__&
- ,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec)
+ CALL Abort(__STAMP__,'Error! CollNumRotRef or TempRefRot is equal to zero for species:', iSpec)
END IF
END IF
! Read in species values for vibrational relaxation models of Milikan-White if necessary
@@ -675,23 +671,17 @@ SUBROUTINE InitDSMC()
SpecDSMC(iSpec)%MW_ConstB(jSpec) = GETREAL('Part-Species'//TRIM(hilf)//'-MWConstB-'//TRIM(hilf2))
IF(SpecDSMC(iSpec)%MW_ConstA(jSpec).EQ.0) THEN
- CALL Abort(&
- __STAMP__&
- ,'Error! MW_ConstA is equal to zero for species:', iSpec)
+ CALL Abort(__STAMP__,'Error! MW_ConstA is equal to zero for species:', iSpec)
END IF
IF(SpecDSMC(iSpec)%MW_ConstB(jSpec).EQ.0) THEN
- CALL Abort(&
- __STAMP__&
- ,'Error! MW_ConstB is equal to zero for species:', iSpec)
+ CALL Abort(__STAMP__,'Error! MW_ConstB is equal to zero for species:', iSpec)
END IF
END DO
END IF
SpecDSMC(iSpec)%VibCrossSec = GETREAL('Part-Species'//TRIM(hilf)//'-VibCrossSection')
! Only molecules or charged molecules
IF((SpecDSMC(iSpec)%VibCrossSec.EQ.0).AND.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) THEN
- CALL Abort(&
- __STAMP__&
- ,'Error! VibCrossSec is equal to zero for species:', iSpec)
+ CALL Abort(__STAMP__,'Error! VibCrossSec is equal to zero for species:', iSpec)
END IF
END IF
! Setting the values of Rot-/Vib-RelaxProb to a fix value (electronic: species-specific values are possible)
@@ -731,21 +721,17 @@ SUBROUTINE InitDSMC()
WRITE(UNIT=hilf2,FMT='(I0)') iInit
hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2)
IF((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)) THEN
- SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib','0.')
- SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot','0.')
+ SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib = GETREAL('Part-Species'//TRIM(hilf2)//'-TempVib')
+ SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot = GETREAL('Part-Species'//TRIM(hilf2)//'-TempRot')
IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%TRot*SpecDSMC(iSpec)%Surfaceflux(iInit)%TVib.EQ.0.) THEN
- CALL Abort(&
- __STAMP__&
- ,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit))
+ CALL Abort(__STAMP__,'Error! TVib and TRot not def. in Part-SpeciesXX-SurfacefluxXX-TempVib/TempRot for iSpec, iInit',iSpec,REAL(iInit))
END IF
END IF
! read electronic temperature
IF (DSMC%ElectronicModel.GT.0) THEN
- SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec','0.')
+ SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec = GETREAL('Part-Species'//TRIM(hilf2)//'-TempElec')
IF (SpecDSMC(iSpec)%Surfaceflux(iInit)%Telec.EQ.0.) THEN
- CALL Abort(&
- __STAMP__&
- ,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit))
+ CALL Abort(__STAMP__,' Error! Telec not defined in Part-SpeciesXX-SurfacefluxXX-Tempelec for iSpec, iInit',iSpec,REAL(iInit))
END IF
END IF
END DO !SurfaceFluxBCs
@@ -758,9 +744,7 @@ SUBROUTINE InitDSMC()
IF((SelectionProc.NE.2).AND.DSMC%PolySingleMode) THEN
! Single-mode relaxation of vibrational modes of polyatomic molecules only possible when the prohibiting double relaxation
! method is used (Gimelshein, SelectionProc = 2)
- CALL Abort(&
- __STAMP__&
- ,'ERROR: No single-mode polyatomic relaxation possible with chosen selection procedure! SelectionProc:', SelectionProc)
+ CALL Abort(__STAMP__,'ERROR: No single-mode polyatomic relaxation possible with chosen selection procedure! SelectionProc:', SelectionProc)
END IF
IF(.NOT.ALLOCATED(VibQuantsPar)) ALLOCATE(VibQuantsPar(PDM%maxParticleNumber))
ALLOCATE(PolyatomMolDSMC(DSMC%NumPolyatomMolecs))
@@ -774,37 +758,23 @@ SUBROUTINE InitDSMC()
! Comparison with Landau-Teller equation, including a different selection procedure (restricts relaxation to a single mode)
! and a correctional factor, both in dsmc_collis_mode.f90, also the translational temperature is fixed, in timedisc.f90
!-----------------------------------------------------------------------------------------------------------------------------------
-#if (PP_TimeDiscMethod==42)
- DSMC%CompareLandauTeller = GETLOGICAL('Particles-DSMC-CompareLandauTeller','.FALSE.')
- IF(DSMC%CompareLandauTeller) THEN
- IF(CollisMode.NE.2) THEN
- CALL abort(&
- __STAMP__&
- ,'ERROR: Comparison with Landau-Teller only available in CollisMode = 2, CollisMode:', CollisMode)
- END IF
- IF(nSpecies.GT.1) THEN
- CALL abort(&
- __STAMP__&
- ,'ERROR: Comparison with Landau-Teller only available for a single species, nSpecies:', nSpecies)
+ IF (DSMC%ReservoirSimu) THEN
+ DSMC%CompareLandauTeller = GETLOGICAL('Particles-DSMC-CompareLandauTeller','.FALSE.')
+ IF(DSMC%CompareLandauTeller) THEN
+ IF(CollisMode.NE.2) THEN
+ CALL abort(&
+ __STAMP__&
+ ,'ERROR: Comparison with Landau-Teller only available in CollisMode = 2, CollisMode:', CollisMode)
+ END IF
+ IF(nSpecies.GT.1) THEN
+ CALL abort(&
+ __STAMP__&
+ ,'ERROR: Comparison with Landau-Teller only available for a single species, nSpecies:', nSpecies)
+ END IF
END IF
END IF
-#endif
!-----------------------------------------------------------------------------------------------------------------------------------
! Setting the internal energy value of every particle
- DO iPart = 1, PDM%ParticleVecLength
- IF (PDM%ParticleInside(iPart)) THEN
- IF (Species(PartSpecies(iPart))%NumberOfInits.GT.0) THEN
- iInit = PDM%PartInit(iPart)
- IF (SpecDSMC(PartSpecies(iPart))%PolyatomicMol) THEN
- CALL DSMC_SetInternalEnr_Poly(PartSpecies(iPart),iInit,iPart,1)
- ELSE
- CALL DSMC_SetInternalEnr_LauxVFD(PartSpecies(iPart),iInit,iPart,1)
- END IF
- END IF
- END IF
- END DO
- ! Array not required anymore after the initialization is completed
- DEALLOCATE(PDM%PartInit)
IF(BGGas%UseRegions) THEN
CALL BGGas_RegionsSetInternalTemp()
END IF
@@ -895,8 +865,19 @@ SUBROUTINE InitDSMC()
! Journal of Computational Physics 246, 28–36. doi:10.1016/j.jcp.2013.03.018
!-----------------------------------------------------------------------------------------------------------------------------------
DSMC%UseOctree = GETLOGICAL('Particles-DSMC-UseOctree')
+ IF(DSMC%ReservoirSimu.AND.DSMC%UseOctree) CALL abort(__STAMP__,'Particles-DSMC-UseOctree = T not allowed for RESERVOIR simulations!')
DSMC%UseNearestNeighbour = GETLOGICAL('Particles-DSMC-UseNearestNeighbour')
+ IF(DSMC%ReservoirSimu.AND.DSMC%UseNearestNeighbour) THEN
+ CALL abort(__STAMP__,'Particles-DSMC-UseNearestNeighbour = T not allowed for RESERVOIR simulations!')
+ END IF
IF(DSMC%UseOctree) THEN
+ DO iSpec = 1, nSpecies
+ DO iInit = 1, Species(iSpec)%NumberOfInits
+ IF (TRIM(Species(iSpec)%Init(iInit)%SpaceIC).EQ.'point') THEN
+ CALL abort(__STAMP__,'ERROR: No combination of octree and SpaceIC=point possible!')
+ END IF
+ END DO
+ END DO
IF(NGeo.GT.PP_N) CALL abort(__STAMP__,' Set PP_N to NGeo, else, the volume is not computed correctly.')
CALL DSMC_init_octree()
END IF
@@ -941,9 +922,7 @@ SUBROUTINE InitDSMC()
IF((DSMC%VibRelaxProb.EQ.2).AND.(CollisMode.GE.2)) THEN
VarVibRelaxProb%alpha = GETREAL('Particles-DSMC-alpha','0.99')
IF ((VarVibRelaxProb%alpha.LT.0).OR.(VarVibRelaxProb%alpha.GE.1)) THEN
- CALL abort(&
- __STAMP__&
- ,'ERROR: Particles-DSMC-alpha has to be in the range between 0 and 1')
+ CALL abort(__STAMP__,'ERROR: Particles-DSMC-alpha has to be in the range between 0 and 1')
END IF
DO iSpec = 1, nSpecies
IF(.NOT.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20))) CYCLE
@@ -975,11 +954,6 @@ SUBROUTINE InitDSMC()
DSMC%QualityFacSampVib = 0.
DSMC%QualityFacSampVibSamp = 0
END IF
- CALL SetVarVibProb2Elems()
- ! CHeck if DSMC%InstantTransTemp is still needed
- IF(.NOT.(((CollisMode.GT.1).AND.(SelectionProc.EQ.2)).OR.DSMC%BackwardReacRate.OR.DSMC%CalcQualityFactors)) THEN
- SDEALLOCATE(DSMC%InstantTransTemp)
- END IF
END IF ! VibRelaxProb = 2
IF((DSMC%RotRelaxProb.GE.2).AND.DSMC%CalcQualityFactors.AND.(CollisMode.GE.2)) THEN
@@ -1191,7 +1165,7 @@ SUBROUTINE SetVarVibProb2Elems()
! Set initial vibrational relaxation probability to all elements
!===================================================================================================================================
! MODULES !
-USE MOD_Globals ,ONLY: abort, IK, MPI_COMM_WORLD
+USE MOD_Globals ,ONLY: abort, IK, MPI_COMM_PICLAS
USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species
USE MOD_Restart_Vars ,ONLY: DoRestart,RestartFile
USE MOD_Particle_Vars ,ONLY: nSpecies, PartSpecies
@@ -1215,129 +1189,129 @@ SUBROUTINE SetVarVibProb2Elems()
! INPUT / OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
- INTEGER :: iSpec, jSpec, iPart, iElem, dim, n
- REAL :: VibProb, Ti, Tj, CRela2, Velo1(3), Velo2(3), MPF
- INTEGER :: nPart, iLoop, nLoop
- INTEGER, ALLOCATABLE :: iPartIndx(:), nPerSpec(:)
- LOGICAL :: VibProbInitDone, VibProbDataExists
+INTEGER :: iSpec, jSpec, iPart, iElem, dim, n
+REAL :: VibProb, Ti, Tj, CRela2, Velo1(3), Velo2(3), MPF
+INTEGER :: nPart, iLoop, nLoop
+INTEGER, ALLOCATABLE :: iPartIndx(:), nPerSpec(:)
+LOGICAL :: VibProbInitDone, VibProbDataExists
!===================================================================================================================================
- ALLOCATE(VarVibRelaxProb%ProbVibAv(1:nElems,1:nSpecies))
- ALLOCATE(VarVibRelaxProb%ProbVibAvNew(1:nSpecies))
- ALLOCATE(VarVibRelaxProb%nCollis(1:nSpecies))
- VarVibRelaxProb%ProbVibAv = 0
- VibProbInitDone = .FALSE.
- IF (DoRestart) THEN
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
- ! read local ParticleInfo from HDF5
- CALL DatasetExists(File_ID,'VibProbInfo',VibProbDataExists)
- IF(VibProbDataExists)THEN
- VibProbInitDone = .TRUE.
- ! Associate construct for integer KIND=8 possibility
- LBWRITE(*,*) 'Set variable vibrational relaxation probability from restart file'
- ASSOCIATE (&
- nSpecies => INT(nSpecies,IK) ,&
- offsetElem => INT(offsetElem,IK),&
- nElems => INT(nElems,IK) )
- CALL ReadArray('VibProbInfo',2,(/nElems, nSpecies/),offsetElem,1,RealArray=VarVibRelaxProb%ProbVibAv(:,:))
- END ASSOCIATE
- END IF ! If 'VibProbInfo' exists
- CALL DatasetExists(File_ID,'VibProbConstInfo',VibProbDataExists,attrib=.TRUE.)
- IF((.NOT.VibProbInitDone).AND.VibProbDataExists) THEN
- VibProbInitDone = .TRUE.
- CALL ReadAttribute(File_ID,'VibProbConstInfo',1,RealScalar=VibProb)
- ! Set vibrational relaxation probability to former value
- LBWRITE(*,*) 'Set uniform vibrational relaxation probability from restart file'
- DO iElem = 1, nElems
- DO iSpec = 1, nSpecies
- VarVibRelaxProb%ProbVibAv(iElem,iSpec) = VibProb
- END DO
- END DO
- END IF ! If 'VibProbConstInfo' exists
- IF(.NOT.VibProbInitDone) THEN
- ! Set vibrational relaxation probability to default value
- LBWRITE(*,*) 'No vibrational relaxation probability data in restart file\n', &
- 'Set uniform vibrational relaxation probability of', 0.004
- DO iElem = 1, nElems
- DO iSpec = 1, nSpecies
- VarVibRelaxProb%ProbVibAv(iElem,iSpec) = 0.004
- END DO
- END DO
- END IF ! No restart information exist
- CALL CloseDataFile()
- ELSE ! If not DoRestart
- ALLOCATE(Coll_pData(1))
- ALLOCATE(nPerSpec(nSpecies))
- LBWRITE(*,*) 'Set vibrational relaxation probability based on temperature in the cell'
+ALLOCATE(VarVibRelaxProb%ProbVibAv(1:nElems,1:nSpecies))
+ALLOCATE(VarVibRelaxProb%ProbVibAvNew(1:nSpecies))
+ALLOCATE(VarVibRelaxProb%nCollis(1:nSpecies))
+VarVibRelaxProb%ProbVibAv = 0
+VibProbInitDone = .FALSE.
+IF (DoRestart) THEN
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
+ ! read local ParticleInfo from HDF5
+ CALL DatasetExists(File_ID,'VibProbInfo',VibProbDataExists)
+ IF(VibProbDataExists)THEN
+ VibProbInitDone = .TRUE.
+ ! Associate construct for integer KIND=8 possibility
+ LBWRITE(*,*) 'Set variable vibrational relaxation probability from restart file'
+ ASSOCIATE (&
+ nSpecies => INT(nSpecies,IK) ,&
+ offsetElem => INT(offsetElem,IK),&
+ nElems => INT(nElems,IK) )
+ CALL ReadArray('VibProbInfo',2,(/nElems, nSpecies/),offsetElem,1,RealArray=VarVibRelaxProb%ProbVibAv(:,:))
+ END ASSOCIATE
+ END IF ! If 'VibProbInfo' exists
+ CALL DatasetExists(File_ID,'VibProbConstInfo',VibProbDataExists,attrib=.TRUE.)
+ IF((.NOT.VibProbInitDone).AND.VibProbDataExists) THEN
+ VibProbInitDone = .TRUE.
+ CALL ReadAttribute(File_ID,'VibProbConstInfo',1,RealScalar=VibProb)
+ ! Set vibrational relaxation probability to former value
+ LBWRITE(*,*) 'Set uniform vibrational relaxation probability from restart file'
DO iElem = 1, nElems
- nPerSpec = 0
- nPart = PEM%pNumber(iElem)
- ! List of particles in the cell neccessary
- ALLOCATE(iPartIndx(nPart))
- iPartIndx(1:nPart) = 0
- ! create particle index list
- iPart = PEM%pStart(iElem)
- DO iLoop = 1, nPart
- iPartIndx(iLoop) = iPart
- iPart = PEM%pNext(iPart)
- END DO
- CollInf%Coll_SpecPartNum = 0
- DO iPart = 1, nPart
- MPF = GetParticleWeight(iPartIndx(iPart))
- CollInf%Coll_SpecPartNum(PartSpecies(iPartIndx(iPart))) = CollInf%Coll_SpecPartNum(PartSpecies(iPartIndx(iPart))) + MPF
- nPerSpec(PartSpecies(iPartIndx(iPart))) = nPerSpec(PartSpecies(iPartIndx(iPart))) + 1
+ DO iSpec = 1, nSpecies
+ VarVibRelaxProb%ProbVibAv(iElem,iSpec) = VibProb
END DO
- CALL CalcInstantTransTemp(iPartIndx,nPart)
+ END DO
+ END IF ! If 'VibProbConstInfo' exists
+ IF(.NOT.VibProbInitDone) THEN
+ ! Set vibrational relaxation probability to default value
+ LBWRITE(*,*) 'No vibrational relaxation probability data in restart file\n', &
+ 'Set uniform vibrational relaxation probability of', 0.004
+ DO iElem = 1, nElems
DO iSpec = 1, nSpecies
- IF(.NOT.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)))CYCLE
- IF((DSMC%InstantTransTemp(iSpec).NE.0).AND.(nPerSpec(iSpec).GE.5)) THEN
- Ti = DSMC%InstantTransTemp(iSpec)
+ VarVibRelaxProb%ProbVibAv(iElem,iSpec) = 0.004
+ END DO
+ END DO
+ END IF ! No restart information exist
+ CALL CloseDataFile()
+ELSE ! If not DoRestart
+ ALLOCATE(Coll_pData(1))
+ ALLOCATE(nPerSpec(nSpecies))
+ LBWRITE(*,*) '| Set vibrational relaxation probability based on temperature in the cell'
+ DO iElem = 1, nElems
+ nPerSpec = 0
+ nPart = PEM%pNumber(iElem)
+ ! List of particles in the cell neccessary
+ ALLOCATE(iPartIndx(nPart))
+ iPartIndx(1:nPart) = 0
+ ! create particle index list
+ iPart = PEM%pStart(iElem)
+ DO iLoop = 1, nPart
+ iPartIndx(iLoop) = iPart
+ iPart = PEM%pNext(iPart)
+ END DO
+ CollInf%Coll_SpecPartNum = 0
+ DO iPart = 1, nPart
+ MPF = GetParticleWeight(iPartIndx(iPart))
+ CollInf%Coll_SpecPartNum(PartSpecies(iPartIndx(iPart))) = CollInf%Coll_SpecPartNum(PartSpecies(iPartIndx(iPart))) + MPF
+ nPerSpec(PartSpecies(iPartIndx(iPart))) = nPerSpec(PartSpecies(iPartIndx(iPart))) + 1
+ END DO
+ CALL CalcInstantTransTemp(iPartIndx,nPart)
+ DO iSpec = 1, nSpecies
+ IF(.NOT.((SpecDSMC(iSpec)%InterID.EQ.2).OR.(SpecDSMC(iSpec)%InterID.EQ.20)))CYCLE
+ IF((DSMC%InstantTransTemp(iSpec).NE.0).AND.(nPerSpec(iSpec).GE.5)) THEN
+ Ti = DSMC%InstantTransTemp(iSpec)
+ ELSE
+ IF(DSMC%InstantTransTemp(nSpecies + 1).NE.0) THEN
+ Ti = DSMC%InstantTransTemp(nSpecies + 1)
+ ELSE
+ Ti = Species(iSpec)%Init(1)%MWTemperatureIC
+ END IF
+ END IF
+ n = 1
+ DO jSpec = 1, nSpecies
+ IF((DSMC%InstantTransTemp(jSpec).NE.0).AND.(nPerSpec(jSpec).GE.5)) THEN
+ Tj = DSMC%InstantTransTemp(jSpec)
ELSE
IF(DSMC%InstantTransTemp(nSpecies + 1).NE.0) THEN
- Ti = DSMC%InstantTransTemp(nSpecies + 1)
+ Tj = DSMC%InstantTransTemp(nSpecies + 1)
ELSE
- Ti = Species(iSpec)%Init(1)%MWTemperatureIC
+ Tj = Species(jSpec)%Init(1)%MWTemperatureIC
END IF
END IF
- n = 1
- DO jSpec = 1, nSpecies
- IF((DSMC%InstantTransTemp(jSpec).NE.0).AND.(nPerSpec(jSpec).GE.5)) THEN
- Tj = DSMC%InstantTransTemp(jSpec)
- ELSE
- IF(DSMC%InstantTransTemp(nSpecies + 1).NE.0) THEN
- Tj = DSMC%InstantTransTemp(nSpecies + 1)
- ELSE
- Tj = Species(jSpec)%Init(1)%MWTemperatureIC
- END IF
- END IF
- Coll_pData(1)%PairType = CollInf%Coll_Case(iSpec, jSpec)
- ! Calculate number of samples vor each collision pair dependent to alpha and the mole fraction in the cell
- IF(nPart.GT.0) THEN
- nLoop = INT( 1. / (1.-VarVibRelaxProb%alpha) * nPerSpec(jSpec)/nPart )
- ELSE
- nLoop = INT( 1. / (1.-VarVibRelaxProb%alpha) / nSpecies )
- END IF
- DO iLoop = 1,nLoop
- ! Calculate random relative velocity
- CRela2 = 0
- CALL CalcVelocity_maxwell_lpn(iSpec, Velo1, Temperature=Ti)
- CALL CalcVelocity_maxwell_lpn(jSpec, Velo2, Temperature=Tj)
- DO dim = 1,3
- CRela2 = CRela2 + (Velo1(dim)-Velo2(dim))**2
- END DO ! dim = 3
- Coll_pData(1)%CRela2 = CRela2
- CALL DSMC_calc_var_P_vib(iSpec,jSpec,1,VibProb)
- VarVibRelaxProb%ProbVibAv(iElem,iSpec) = VarVibRelaxProb%ProbVibAv(iElem,iSpec) &
- + (VibProb - VarVibRelaxProb%ProbVibAv(iElem,iSpec)) / n
- n = n + 1
- END DO ! iLoop = nLoop
- END DO ! jSpec = nSpecies
- END DO ! iSpec = nSpecies
- SDEALLOCATE(iPartIndx)
- END DO ! iElem = nElems
- SDEALLOCATE(Coll_pData)
- SDEALLOCATE(nPerSpec)
- END IF
+ Coll_pData(1)%PairType = CollInf%Coll_Case(iSpec, jSpec)
+ ! Calculate number of samples vor each collision pair dependent to alpha and the mole fraction in the cell
+ IF(nPart.GT.0) THEN
+ nLoop = INT( 1. / (1.-VarVibRelaxProb%alpha) * nPerSpec(jSpec)/nPart )
+ ELSE
+ nLoop = INT( 1. / (1.-VarVibRelaxProb%alpha) / nSpecies )
+ END IF
+ DO iLoop = 1,nLoop
+ ! Calculate random relative velocity
+ CRela2 = 0
+ CALL CalcVelocity_maxwell_lpn(iSpec, Velo1, Temperature=Ti)
+ CALL CalcVelocity_maxwell_lpn(jSpec, Velo2, Temperature=Tj)
+ DO dim = 1,3
+ CRela2 = CRela2 + (Velo1(dim)-Velo2(dim))**2
+ END DO ! dim = 3
+ Coll_pData(1)%CRela2 = CRela2
+ CALL DSMC_calc_var_P_vib(iSpec,jSpec,1,VibProb)
+ VarVibRelaxProb%ProbVibAv(iElem,iSpec) = VarVibRelaxProb%ProbVibAv(iElem,iSpec) &
+ + (VibProb - VarVibRelaxProb%ProbVibAv(iElem,iSpec)) / n
+ n = n + 1
+ END DO ! iLoop = nLoop
+ END DO ! jSpec = nSpecies
+ END DO ! iSpec = nSpecies
+ SDEALLOCATE(iPartIndx)
+ END DO ! iElem = nElems
+ SDEALLOCATE(Coll_pData)
+ SDEALLOCATE(nPerSpec)
+END IF
END SUBROUTINE SetVarVibProb2Elems
@@ -1350,7 +1324,6 @@ SUBROUTINE FinalizeDSMC()
!----------------------------------------------------------------------------------------------------------------------------------!
USE MOD_Globals
USE MOD_DSMC_Vars
-USE MOD_Particle_Vars, ONLY:PDM
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT VARIABLES
@@ -1390,7 +1363,6 @@ SUBROUTINE FinalizeDSMC()
IF(DSMC%CalcQualityFactors) THEN
SDEALLOCATE(DSMC%QualityFacSamp)
END IF
-SDEALLOCATE(PDM%PartInit)
SDEALLOCATE(Coll_pData)
SDEALLOCATE(SampDSMC)
SDEALLOCATE(MacroDSMC)
@@ -1445,6 +1417,8 @@ SUBROUTINE FinalizeDSMC()
SDEALLOCATE(CollInf%omega)
SDEALLOCATE(CollInf%dref)
SDEALLOCATE(CollInf%Tref)
+SDEALLOCATE(CollInf%OldCollPartner)
+CollInf%ProhibitDoubleColl=.FALSE.
!SDEALLOCATE(VibQuantsPar)
! SDEALLOCATE(XiEq_Surf)
SDEALLOCATE(DSMC_Solution)
@@ -1518,7 +1492,7 @@ RECURSIVE SUBROUTINE DeleteNodeVolume(Node)
INTEGER :: iLoop, nLoop
!===================================================================================================================================
nLoop = 2**Symmetry%Order
-IF(ASSOCIATED(Node%SubNode)) THEN
+IF(ASSOCIATED(Node%SubNode)) THEN
DO iLoop = 1, nLoop
CALL DeleteNodeVolume(Node%SubNode(iLoop))
END DO
diff --git a/src/particles/dsmc/dsmc_main.f90 b/src/particles/dsmc/dsmc_main.f90
index df02ce165..9a3b67b4a 100644
--- a/src/particles/dsmc/dsmc_main.f90
+++ b/src/particles/dsmc/dsmc_main.f90
@@ -71,29 +71,31 @@ SUBROUTINE DSMC_main(DoElement)
! Reset the number of particles created during the DSMC loop
DSMCSumOfFormedParticles = 0
-! Insert background gas particles for every simulation particle
-IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_InsertParticles()
+! Insert background gas particles for every simulation particle (except when using MCC and free-molecular flow)
+IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC).AND.(CollisMode.NE.0)) CALL BGGas_InsertParticles()
IF ((DSMC%ElectronicModel.EQ.4).AND.(CollisMode.EQ.3)) THEN
ElecRelaxPart(1:PDM%ParticleVecLength) = .TRUE.
END IF
+
#if USE_LOADBALANCE
CALL LBStartTime(tLBStart)
#endif /*USE_LOADBALANCE*/
-DO iElem = 1, nElems ! element/cell main loop
- IF(PRESENT(DoElement)) THEN
- IF (.NOT.DoElement(iElem)) CYCLE
- END IF
- nPart = PEM%pNumber(iElem)
- IF (nPart.LT.1) CYCLE
- IF(DSMC%CalcQualityFactors) THEN
- DSMC%CollProbMax = 0.0; DSMC%CollProbMean = 0.0; DSMC%CollProbMeanCount = 0; DSMC%CollSepDist = 0.0; DSMC%CollSepCount = 0
- DSMC%MeanFreePath = 0.0; DSMC%MCSoverMFP = 0.0
- IF(DSMC%RotRelaxProb.GT.2) DSMC%CalcRotProb = 0.
- DSMC%CalcVibProb = 0.
- END IF
- IF (CollisMode.NE.0) THEN
- CALL InitCalcVibRelaxProb
+
+IF (CollisMode.NE.0) THEN
+ DO iElem = 1, nElems ! element/cell main loop
+ IF(PRESENT(DoElement)) THEN
+ IF (.NOT.DoElement(iElem)) CYCLE
+ END IF
+ nPart = PEM%pNumber(iElem)
+ IF (nPart.LT.1) CYCLE
+ IF(DSMC%CalcQualityFactors) THEN
+ DSMC%CollProbMax = 0.0; DSMC%CollProbMean = 0.0; DSMC%CollProbMeanCount = 0; DSMC%CollSepDist = 0.0; DSMC%CollSepCount = 0
+ DSMC%MeanFreePath = 0.0; DSMC%MCSoverMFP = 0.0
+ IF(DSMC%RotRelaxProb.GT.2) DSMC%CalcRotProb = 0.
+ DSMC%CalcVibProb = 0.
+ END IF
+ CALL InitCalcVibRelaxProb()
IF(BGGas%NumberOfSpecies.GT.0) THEN
! Decide between MCC and DSMC-based background gas
IF(UseMCC) THEN
@@ -121,23 +123,20 @@ SUBROUTINE DSMC_main(DoElement)
END IF
CALL FinalizeCalcVibRelaxProb(iElem)
IF(DSMC%CalcQualityFactors) CALL SummarizeQualityFactors(iElem)
- END IF ! --- CollisMode.NE.0
#if USE_LOADBALANCE
- CALL LBElemSplitTime(iElem,tLBStart)
+ CALL LBElemSplitTime(iElem,tLBStart)
#endif /*USE_LOADBALANCE*/
-END DO ! iElem Loop
-
-! Advance particle vector length and the current next free position with newly created particles
-PDM%ParticleVecLength = PDM%ParticleVecLength + DSMCSumOfFormedParticles
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + DSMCSumOfFormedParticles
+ END DO ! iElem Loop
+END IF ! CollisMode.NE.0
IF(PDM%ParticleVecLength.GT.PDM%MaxParticleNumber) THEN
CALL Abort(__STAMP__&
,'ERROR in DSMC: ParticleVecLength greater than MaxParticleNumber! Increase the MaxParticleNumber to at least: ' &
, IntInfoOpt=PDM%ParticleVecLength)
END IF
+
! Delete background gas particles
-IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_DeleteParticles
+IF((BGGas%NumberOfSpecies.GT.0).AND.(.NOT.UseMCC)) CALL BGGas_DeleteParticles()
! Sampling of macroscopic values
! (here for a continuous average; average over N iterations is performed in src/analyze/analyze.f90)
diff --git a/src/particles/dsmc/dsmc_particle_pairing.f90 b/src/particles/dsmc/dsmc_particle_pairing.f90
index 8c6f0e6d5..7012f867e 100644
--- a/src/particles/dsmc/dsmc_particle_pairing.f90
+++ b/src/particles/dsmc/dsmc_particle_pairing.f90
@@ -75,7 +75,7 @@ SUBROUTINE DSMC_pairing_standard(iElem)
IF (DoVirtualCellMerge) THEN
! 1.) Create particle index list for pairing in the case of virtually merged cells. So, all particles from the merged cells are
! used for the pairing and the collisions.
- IF(VirtMergedCells(iElem)%isMerged) RETURN
+ IF(VirtMergedCells(iElem)%isMerged) RETURN
nPartMerged = nPart
DO iMergeElem = 1, VirtMergedCells(iElem)%NumOfMergedCells
nPartMerged = nPartMerged + PEM%pNumber(VirtMergedCells(iElem)%MergedCellID(iMergeElem))
@@ -102,7 +102,7 @@ SUBROUTINE DSMC_pairing_standard(iElem)
elemVolume = VirtMergedCells(iELem)%MergedVolume
ELSE
elemVolume = ElemVolume_Shared(GetCNElemID(iElem+offSetElem))
- END IF
+ END IF
ELSE
nPartMerged = nPart
ALLOCATE(iPartIndx(nPart))
@@ -117,7 +117,7 @@ SUBROUTINE DSMC_pairing_standard(iElem)
iPart = PEM%pNext(iPart)
END DO
elemVolume = ElemVolume_Shared(GetCNElemID(iElem+offSetElem))
-END IF
+END IF
! 2.) Perform pairing (random pairing or nearest neighbour pairing) and collision (including the decision for a reaction/relaxation)
CALL PerformPairingAndCollision(iPartIndx, nPartMerged, iElem , elemVolume)
@@ -191,7 +191,7 @@ SUBROUTINE DSMC_pairing_octree(iElem)
END DO
DoMergedCell = .TRUE.
END IF
-END IF
+END IF
IF (DoMergedCell) THEN
CALL PerformPairingAndCollision(TreeNode%iPartIndx_Node, nPartMerged, iElem, VirtMergedCells(iELem)%MergedVolume)
@@ -805,7 +805,7 @@ SUBROUTINE DSMC_pairing_quadtree(iElem)
END DO
DoMergedCell = .TRUE.
END IF
-END IF
+END IF
IF (DoMergedCell) THEN
CALL PerformPairingAndCollision(TreeNode%iPartIndx_Node, nPartMerged, iElem, VirtMergedCells(iELem)%MergedVolume)
@@ -836,7 +836,7 @@ SUBROUTINE DSMC_pairing_quadtree(iElem)
TreeNode%PNum_Node = nPart
iPart = PEM%pStart(iElem) ! create particle index list for pairing
DO iLoop = 1, nPart
- ! Attention: LastPartPos is the reference position here
+ ! Attention: LastPartPos is the reference position here, set in timedisc_TimeStep_DSMC.f90 / timedisc_TimeStep_BGK.f90
TreeNode%MappedPartStates(1:2,iLoop) = LastPartPos(1:2,iPart)
iPart = PEM%pNext(iPart)
END DO
@@ -1100,7 +1100,7 @@ SUBROUTINE DSMC_pairing_dotree(iElem)
iPart = PEM%pNext(iPart)
END DO
TreeNode%NodeDepth = 1
- ElemNodeVol(iElem)%Root%NodeDepth = 1
+ ElemNodeVol(iElem)%Root%NodeDepth = 1
ElemNodeVol(iElem)%Root%MidPoint(1:3) = (/0.0,0.0,0.0/)
CALL AddDoTreeNode(TreeNode, iElem, ElemNodeVol(iElem)%Root)
DEALLOCATE(TreeNode%MappedPartStates)
diff --git a/src/particles/dsmc/dsmc_polyatomic_model.f90 b/src/particles/dsmc/dsmc_polyatomic_model.f90
index 242a06c23..1df11c9ae 100644
--- a/src/particles/dsmc/dsmc_polyatomic_model.f90
+++ b/src/particles/dsmc/dsmc_polyatomic_model.f90
@@ -45,10 +45,10 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec)
! Initialization of variables for polyatomic molecules
!===================================================================================================================================
! MODULES
- USE MOD_Globals
- USE MOD_Globals_Vars, ONLY : BoltzmannConst
- USE MOD_DSMC_Vars, ONLY : DSMC, SpecDSMC, PolyatomMolDSMC
- USE MOD_ReadInTools
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : BoltzmannConst
+USE MOD_DSMC_Vars, ONLY : DSMC, SpecDSMC, PolyatomMolDSMC
+USE MOD_ReadInTools
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -61,52 +61,50 @@ SUBROUTINE InitPolyAtomicMolecs(iSpec)
CHARACTER(32) :: hilf, hilf2
INTEGER :: iPolyatMole, iVibDOF
!===================================================================================================================================
- WRITE(UNIT=hilf,FMT='(I0)') iSpec
- iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
- PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec')
- IF (PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN
- SpecDSMC(iSpec)%Xi_Rot = 2
- ELSE
- SpecDSMC(iSpec)%Xi_Rot = 3
- END IF
- PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms')
- ! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound)
- SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV','0.')
- IF(SpecDSMC(iSpec)%Ediss_eV.EQ.0.) THEN
- CALL abort(&
- __STAMP__&
- ,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec)
- END IF
- PolyatomMolDSMC(iPolyatMole)%VibDOF = 3*PolyatomMolDSMC(iPolyatMole)%NumOfAtoms - 3 - SpecDSMC(iSpec)%Xi_Rot
- ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF))
- IF(DSMC%PolySingleMode) THEN
- ALLOCATE(PolyatomMolDSMC(iPolyatMole)%GammaVib(PolyatomMolDSMC(iPolyatMole)%VibDOF))
- PolyatomMolDSMC(iPolyatMole)%GammaVib(:) = 0.0
- ALLOCATE(PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(PolyatomMolDSMC(iPolyatMole)%VibDOF))
- PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(:) = 0.0
- END IF
+WRITE(UNIT=hilf,FMT='(I0)') iSpec
+iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+PolyatomMolDSMC(iPolyatMole)%LinearMolec = GETLOGICAL('Part-Species'//TRIM(hilf)//'-LinearMolec')
+IF (PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN
+ SpecDSMC(iSpec)%Xi_Rot = 2
+ELSE
+ SpecDSMC(iSpec)%Xi_Rot = 3
+END IF
+PolyatomMolDSMC(iPolyatMole)%NumOfAtoms = GETINT('Part-Species'//TRIM(hilf)//'-NumOfAtoms')
+! TSHO not implemented with polyatomic molecules, but Ediss_eV required for the calculation of polyatomic temp. (upper bound)
+SpecDSMC(iSpec)%Ediss_eV = GETREAL('Part-Species'//TRIM(hilf)//'-Ediss_eV','0.')
+IF(SpecDSMC(iSpec)%Ediss_eV.EQ.0.) THEN
+ CALL abort(__STAMP__,'ERROR in Polyatomic Species-Ini: Missing dissociation energy, Species: ',iSpec)
+END IF
+PolyatomMolDSMC(iPolyatMole)%VibDOF = 3*PolyatomMolDSMC(iPolyatMole)%NumOfAtoms - 3 - SpecDSMC(iSpec)%Xi_Rot
+ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF))
+IF(DSMC%PolySingleMode) THEN
+ ALLOCATE(PolyatomMolDSMC(iPolyatMole)%GammaVib(PolyatomMolDSMC(iPolyatMole)%VibDOF))
+ PolyatomMolDSMC(iPolyatMole)%GammaVib(:) = 0.0
+ ALLOCATE(PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(PolyatomMolDSMC(iPolyatMole)%VibDOF))
+ PolyatomMolDSMC(iPolyatMole)%VibRelaxProb(:) = 0.0
+END IF
! Read-in of characteristic rotational temperature
- ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3))
- IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN
- PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0')
- PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1
- ELSE
- DO iVibDOF = 1,3
- WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF
- PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = &
- GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0')
- END DO
- END IF
- ! Read-in of characteristic vibrational temperature and calculation of zero-point energy
- DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ALLOCATE(PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(3))
+IF(PolyatomMolDSMC(iPolyatMole)%LinearMolec) THEN
+ PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(1) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot','0')
+ PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(2:3) = 1
+ELSE
+ DO iVibDOF = 1,3
WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF
- PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2))
- SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint &
- + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst
+ PolyatomMolDSMC(iPolyatMole)%CharaTRotDOF(iVibDOF) = &
+ GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempRot'//TRIM(hilf2),'0')
END DO
- ALLOCATE(PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF))
- ! Maximum number of quantum number per DOF cut at 80 to reduce computational effort
- PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) = 80
+END IF
+! Read-in of characteristic vibrational temperature and calculation of zero-point energy
+DO iVibDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ WRITE(UNIT=hilf2,FMT='(I0)') iVibDOF
+ PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF) = GETREAL('Part-Species'//TRIM(hilf)//'-CharaTempVib'//TRIM(hilf2))
+ SpecDSMC(iSpec)%EZeroPoint = SpecDSMC(iSpec)%EZeroPoint &
+ + DSMC%GammaQuant*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iVibDOF)*BoltzmannConst
+END DO
+ALLOCATE(PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(PolyatomMolDSMC(iPolyatMole)%VibDOF))
+! Maximum number of quantum number per DOF cut at 80 to reduce computational effort
+PolyatomMolDSMC(iPolyatMole)%MaxVibQuantDOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) = 80
END SUBROUTINE InitPolyAtomicMolecs
diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90
index 8a68d896d..377066184 100644
--- a/src/particles/dsmc/dsmc_symmetry.f90
+++ b/src/particles/dsmc/dsmc_symmetry.f90
@@ -85,7 +85,7 @@ SUBROUTINE DSMC_2D_InitVolumes()
USE MOD_Particle_Mesh_Vars ,ONLY: GEO,LocalVolume,MeshVolume
USE MOD_DSMC_Vars ,ONLY: SymmetrySide
USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,ElemCharLength_Shared
-USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,ElemSideNodeID_Shared, SideInfo_Shared, SideIsSymSide_Shared
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,ElemSideNodeID_Shared, SideInfo_Shared, SideIsSymSide_Shared, SideIsSymSide
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle
@@ -119,8 +119,15 @@ SUBROUTINE DSMC_2D_InitVolumes()
#if USE_MPI
CALL Allocate_Shared((/nNonUniqueGlobalSides/),SideIsSymSide_Shared_Win,SideIsSymSide_Shared)
CALL MPI_WIN_LOCK_ALL(0,SideIsSymSide_Shared_Win,IERROR)
+SideIsSymSide => SideIsSymSide_Shared
+! only CN root nullifies
+IF(myComputeNodeRank.EQ.0) SideIsSymSide = .FALSE.
+! This sync/barrier is required as it cannot be guaranteed that the zeros have been written to memory by the time the MPI_REDUCE
+! is executed (see MPI specification). Until the Sync is complete, the status is undefined, i.e., old or new value or utter nonsense.
+CALL BARRIER_AND_SYNC(SideIsSymSide_Shared_Win,MPI_COMM_SHARED)
#else
-ALLOCATE(SideIsSymSide_Shared(nComputeNodeSides))
+ALLOCATE(SideIsSymSide(nComputeNodeSides))
+SideIsSymSide = .FALSE.
#endif /*USE_MPI*/
! Flag of symmetry sides to be skipped during tracking
@@ -133,7 +140,7 @@ SUBROUTINE DSMC_2D_InitVolumes()
#endif
DO iSide = firstSide, lastSide
- SideIsSymSide_Shared(iSide) = .FALSE.
+ SideIsSymSide(iSide) = .FALSE.
! ignore non-BC sides
IF (SideInfo_Shared(SIDE_BCID,iSide).LE.0) CYCLE
#if USE_MPI
@@ -141,7 +148,7 @@ SUBROUTINE DSMC_2D_InitVolumes()
IF (ElemInfo_Shared(ELEM_HALOFLAG,SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.0) CYCLE
#endif /*USE_MPI*/
IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%SymmetryBC) &
- SideIsSymSide_Shared(iSide) = .TRUE.
+ SideIsSymSide(iSide) = .TRUE.
END DO
SymmetryBCExists = .FALSE.
@@ -358,6 +365,7 @@ SUBROUTINE DSMC_1D_InitVolumes()
END SUBROUTINE DSMC_1D_InitVolumes
+
SUBROUTINE DSMC_2D_InitRadialWeighting()
!===================================================================================================================================
!> Read-in and initialize the variables required for the cloning procedures. Two modes with a delayed clone insertion are available:
@@ -368,8 +376,10 @@ SUBROUTINE DSMC_2D_InitRadialWeighting()
USE MOD_Globals
USE MOD_ReadInTools
USE MOD_Restart_Vars ,ONLY: DoRestart
-USE MOD_PARTICLE_Vars ,ONLY: PDM
USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: DoLoadBalance, UseH5IOLoadBalance
+#endif /*USE_LOADBALANCE*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -379,12 +389,18 @@ SUBROUTINE DSMC_2D_InitRadialWeighting()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
!===================================================================================================================================
+
+! Clone read-in during load balance is currently only supported via the HDF5 output
+#if USE_LOADBALANCE
+IF(DoLoadBalance.AND.(.NOT.UseH5IOLoadBalance)) THEN
+ CALL abort(__STAMP__,'ERROR: Radial weighting only supports a load balance using an HDF5 output (UseH5IOLoadBalance = T)!')
+END IF
+#endif /*USE_LOADBALANCE*/
+
! Linear increasing weighting factor in the radial direction up to the domain boundary
RadialWeighting%PartScaleFactor = GETREAL('Particles-RadialWeighting-PartScaleFactor')
IF(RadialWeighting%PartScaleFactor.LT.1.) THEN
- CALL Abort(&
- __STAMP__,&
- 'ERROR in 2D axisymmetric simulation: PartScaleFactor has to be greater than 1!',RealInfoOpt=RadialWeighting%PartScaleFactor)
+ CALL Abort(__STAMP__,'ERROR in 2D axisymmetric simulation: PartScaleFactor has to be greater than 1!',RealInfoOpt=RadialWeighting%PartScaleFactor)
END IF
RadialWeighting%CloneMode = GETINT('Particles-RadialWeighting-CloneMode')
RadialWeighting%CloneInputDelay = GETINT('Particles-RadialWeighting-CloneDelay')
@@ -397,32 +413,28 @@ SUBROUTINE DSMC_2D_InitRadialWeighting()
RadialWeighting%nSubSides=GETINT('Particles-RadialWeighting-SurfFluxSubSides')
RadialWeighting%NextClone = 0
+RadialWeighting%CloneVecLengthDelta = 100
+RadialWeighting%CloneVecLength = RadialWeighting%CloneVecLengthDelta
SELECT CASE(RadialWeighting%CloneMode)
CASE(1)
IF(RadialWeighting%CloneInputDelay.LT.1) THEN
- CALL Abort(&
- __STAMP__,&
- 'ERROR in 2D axisymmetric simulation: Clone delay should be greater than 0')
+ CALL Abort(__STAMP__,'ERROR in 2D axisymmetric simulation: Clone delay should be greater than 0')
END IF
ALLOCATE(RadialWeighting%ClonePartNum(0:(RadialWeighting%CloneInputDelay-1)))
- ALLOCATE(ClonedParticles(1:INT(PDM%maxParticleNumber/RadialWeighting%CloneInputDelay),0:(RadialWeighting%CloneInputDelay-1)))
+ ALLOCATE(ClonedParticles(1:RadialWeighting%CloneVecLength,0:(RadialWeighting%CloneInputDelay-1)))
RadialWeighting%ClonePartNum = 0
IF(.NOT.DoRestart) RadialWeighting%CloneDelayDiff = 1
CASE(2)
IF(RadialWeighting%CloneInputDelay.LT.2) THEN
- CALL Abort(&
- __STAMP__,&
- 'ERROR in 2D axisymmetric simulation: Clone delay should be greater than 1')
+ CALL Abort(__STAMP__,'ERROR in 2D axisymmetric simulation: Clone delay should be greater than 1')
END IF
ALLOCATE(RadialWeighting%ClonePartNum(0:RadialWeighting%CloneInputDelay))
- ALLOCATE(ClonedParticles(1:INT(PDM%maxParticleNumber/RadialWeighting%CloneInputDelay),0:RadialWeighting%CloneInputDelay))
+ ALLOCATE(ClonedParticles(1:RadialWeighting%CloneVecLength,0:RadialWeighting%CloneInputDelay))
RadialWeighting%ClonePartNum = 0
IF(.NOT.DoRestart) RadialWeighting%CloneDelayDiff = 0
CASE DEFAULT
- CALL Abort(&
- __STAMP__,&
- 'ERROR in Radial Weighting of 2D/Axisymmetric: The selected cloning mode is not available! Choose between 1 and 2.'//&
+ CALL Abort(__STAMP__,'ERROR in Radial Weighting of 2D/Axisymmetric: The selected cloning mode is not available! Choose between 1 and 2.'//&
' CloneMode=1: Delayed insertion of clones; CloneMode=2: Delayed randomized insertion of clones')
END SELECT
@@ -501,6 +513,7 @@ SUBROUTINE DSMC_2D_RadialWeighting(iPart,iElem)
END IF
END SELECT
! Storing the particle information
+ IF(RadialWeighting%ClonePartNum(DelayCounter)+1.GT.RadialWeighting%CloneVecLength) CALL IncreaseClonedParticlesType()
RadialWeighting%ClonePartNum(DelayCounter) = RadialWeighting%ClonePartNum(DelayCounter) + 1
cloneIndex = RadialWeighting%ClonePartNum(DelayCounter)
ClonedParticles(cloneIndex,DelayCounter)%PartState(1:6)= PartState(1:6,iPart)
@@ -574,6 +587,7 @@ SUBROUTINE DSMC_2D_SetInClones()
USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
USE MOD_TimeDisc_Vars ,ONLY: iter
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, nPartIn
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -614,14 +628,7 @@ SUBROUTINE DSMC_2D_SetInClones()
! 2.) Insert the clones at the position they were created
DO iPart = 1, RadialWeighting%ClonePartNum(DelayCounter)
- PDM%ParticleVecLength = PDM%ParticleVecLength + 1
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
- PositionNbr = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
- IF (PDM%ParticleVecLength.GT.PDM%maxParticleNumber) THEN
- CALL Abort(&
- __STAMP__,&
- 'ERROR in 2D axisymmetric simulation: New Particle Number greater max Part Num!')
- END IF
+ PositionNbr = GetNextFreePosition()
! Copy particle parameters
PDM%ParticleInside(PositionNbr) = .TRUE.
PDM%IsNewPart(PositionNbr) = .TRUE.
@@ -675,6 +682,9 @@ SUBROUTINE DSMC_2D_SetInClones()
! 3.) Reset the list
RadialWeighting%ClonePartNum(DelayCounter) = 0
+! 3.1) Reduce ClonedParticles if necessary
+CALL ReduceClonedParticlesType()
+
END SUBROUTINE DSMC_2D_SetInClones
@@ -995,4 +1005,157 @@ SUBROUTINE DSMC_2D_TreatIdenticalParticles(iPair, nPair, nPart, iElem, iPartIndx
END SUBROUTINE DSMC_2D_TreatIdenticalParticles
+
+SUBROUTINE IncreaseClonedParticlesType()
+!===================================================================================================================================
+!> Increases RadialWeighting%CloneVecLength and the ClonedParticles(iPart,iDelay) type
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles, tClonedParticles
+USE MOD_Particle_Vars ,ONLY: PDM
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NewSize,i,ii,ALLOCSTAT
+TYPE (tClonedParticles), ALLOCATABLE :: ClonedParticles_new(:,:)
+!===================================================================================================================================
+
+NewSize = MAX(CEILING(RadialWeighting%CloneVecLength * (1+PDM%MaxPartNumIncrease)),RadialWeighting%CloneVecLength+RadialWeighting%CloneVecLengthDelta)
+
+SELECT CASE(RadialWeighting%CloneMode)
+CASE(1)
+ ALLOCATE(ClonedParticles_new(1:NewSize,0:(RadialWeighting%CloneInputDelay-1)),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased new ClonedParticles Array')
+ DO ii=0,RadialWeighting%CloneInputDelay-1
+ DO i=1,RadialWeighting%ClonePartNum(ii)
+ ClonedParticles_new(i,ii)%Species=ClonedParticles(i,ii)%Species
+ ClonedParticles_new(i,ii)%PartState(1:6)=ClonedParticles(i,ii)%PartState(1:6)
+ ClonedParticles_new(i,ii)%PartStateIntEn(1:3)=ClonedParticles(i,ii)%PartStateIntEn(1:3)
+ ClonedParticles_new(i,ii)%Element=ClonedParticles(i,ii)%Element
+ ClonedParticles_new(i,ii)%LastPartPos(1:3)=ClonedParticles(i,ii)%LastPartPos(1:3)
+ ClonedParticles_new(i,ii)%WeightingFactor=ClonedParticles(i,ii)%WeightingFactor
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%VibQuants,ClonedParticles_new(i,ii)%VibQuants)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%DistriFunc,ClonedParticles_new(i,ii)%DistriFunc)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%AmbiPolVelo,ClonedParticles_new(i,ii)%AmbiPolVelo)
+ END DO
+ END DO
+ DEALLOCATE(ClonedParticles)
+ CALL MOVE_ALLOC(ClonedParticles_New,ClonedParticles)
+CASE(2)
+ ALLOCATE(ClonedParticles_new(1:NewSize,0:RadialWeighting%CloneInputDelay),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased new ClonedParticles Array')
+ DO ii=0,RadialWeighting%CloneInputDelay
+ DO i=1,RadialWeighting%ClonePartNum(ii)
+ ClonedParticles_new(i,ii)%Species=ClonedParticles(i,ii)%Species
+ ClonedParticles_new(i,ii)%PartState(1:6)=ClonedParticles(i,ii)%PartState(1:6)
+ ClonedParticles_new(i,ii)%PartStateIntEn(1:3)=ClonedParticles(i,ii)%PartStateIntEn(1:3)
+ ClonedParticles_new(i,ii)%Element=ClonedParticles(i,ii)%Element
+ ClonedParticles_new(i,ii)%LastPartPos(1:3)=ClonedParticles(i,ii)%LastPartPos(1:3)
+ ClonedParticles_new(i,ii)%WeightingFactor=ClonedParticles(i,ii)%WeightingFactor
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%VibQuants,ClonedParticles_new(i,ii)%VibQuants)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%DistriFunc,ClonedParticles_new(i,ii)%DistriFunc)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%AmbiPolVelo,ClonedParticles_new(i,ii)%AmbiPolVelo)
+ END DO
+ END DO
+ DEALLOCATE(ClonedParticles)
+ CALL MOVE_ALLOC(ClonedParticles_New,ClonedParticles)
+CASE DEFAULT
+ CALL Abort(&
+ __STAMP__,&
+ 'ERROR in Radial Weighting of 2D/Axisymmetric: The selected cloning mode is not available! Choose between 1 and 2.'//&
+ ' CloneMode=1: Delayed insertion of clones; CloneMode=2: Delayed randomized insertion of clones')
+END SELECT
+
+RadialWeighting%CloneVecLength = NewSize
+
+END SUBROUTINE IncreaseClonedParticlesType
+
+
+SUBROUTINE ReduceClonedParticlesType()
+!===================================================================================================================================
+!> Reduces RadialWeighting%CloneVecLength and the ClonedParticles(iPart,iDelay) type
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles, tClonedParticles
+USE MOD_Particle_Vars ,ONLY: PDM
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NewSize,i,ii,ALLOCSTAT
+TYPE (tClonedParticles), ALLOCATABLE :: ClonedParticles_new(:,:)
+!===================================================================================================================================
+IF (MAXVAL(RadialWeighting%ClonePartNum(:)).GE.PDM%maxParticleNumber/(1.+PDM%MaxPartNumIncrease)**2) RETURN
+
+NewSize = MAX(CEILING(MAXVAL(RadialWeighting%ClonePartNum(:))*(1.+PDM%MaxPartNumIncrease)),1)
+
+IF (NewSize.GT.RadialWeighting%CloneVecLength-RadialWeighting%CloneVecLengthDelta) RETURN
+
+SELECT CASE(RadialWeighting%CloneMode)
+CASE(1)
+ ALLOCATE(ClonedParticles_new(1:NewSize,0:(RadialWeighting%CloneInputDelay-1)),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased new ClonedParticles Array')
+ DO ii=0,RadialWeighting%CloneInputDelay-1
+ DO i=1,RadialWeighting%ClonePartNum(ii)
+ ClonedParticles_new(i,ii)%Species=ClonedParticles(i,ii)%Species
+ ClonedParticles_new(i,ii)%PartState(1:6)=ClonedParticles(i,ii)%PartState(1:6)
+ ClonedParticles_new(i,ii)%PartStateIntEn(1:3)=ClonedParticles(i,ii)%PartStateIntEn(1:3)
+ ClonedParticles_new(i,ii)%Element=ClonedParticles(i,ii)%Element
+ ClonedParticles_new(i,ii)%LastPartPos(1:3)=ClonedParticles(i,ii)%LastPartPos(1:3)
+ ClonedParticles_new(i,ii)%WeightingFactor=ClonedParticles(i,ii)%WeightingFactor
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%VibQuants,ClonedParticles_new(i,ii)%VibQuants)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%DistriFunc,ClonedParticles_new(i,ii)%DistriFunc)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%AmbiPolVelo,ClonedParticles_new(i,ii)%AmbiPolVelo)
+ END DO
+ END DO
+ DEALLOCATE(ClonedParticles)
+ CALL MOVE_ALLOC(ClonedParticles_New,ClonedParticles)
+CASE(2)
+ ALLOCATE(ClonedParticles_new(1:NewSize,0:RadialWeighting%CloneInputDelay),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased new ClonedParticles Array')
+ DO ii=0,RadialWeighting%CloneInputDelay
+ DO i=1,RadialWeighting%ClonePartNum(ii)
+ ClonedParticles_new(i,ii)%Species=ClonedParticles(i,ii)%Species
+ ClonedParticles_new(i,ii)%PartState(1:6)=ClonedParticles(i,ii)%PartState(1:6)
+ ClonedParticles_new(i,ii)%PartStateIntEn(1:3)=ClonedParticles(i,ii)%PartStateIntEn(1:3)
+ ClonedParticles_new(i,ii)%Element=ClonedParticles(i,ii)%Element
+ ClonedParticles_new(i,ii)%LastPartPos(1:3)=ClonedParticles(i,ii)%LastPartPos(1:3)
+ ClonedParticles_new(i,ii)%WeightingFactor=ClonedParticles(i,ii)%WeightingFactor
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%VibQuants,ClonedParticles_new(i,ii)%VibQuants)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%DistriFunc,ClonedParticles_new(i,ii)%DistriFunc)
+ CALL MOVE_ALLOC(ClonedParticles(i,ii)%AmbiPolVelo,ClonedParticles_new(i,ii)%AmbiPolVelo)
+ END DO
+ END DO
+ DEALLOCATE(ClonedParticles)
+ CALL MOVE_ALLOC(ClonedParticles_New,ClonedParticles)
+CASE DEFAULT
+ CALL Abort(&
+ __STAMP__,&
+ 'ERROR in Radial Weighting of 2D/Axisymmetric: The selected cloning mode is not available! Choose between 1 and 2.'//&
+ ' CloneMode=1: Delayed insertion of clones; CloneMode=2: Delayed randomized insertion of clones')
+END SELECT
+
+RadialWeighting%CloneVecLength = NewSize
+
+END SUBROUTINE ReduceClonedParticlesType
+
END MODULE MOD_DSMC_Symmetry
diff --git a/src/particles/dsmc/dsmc_vars.f90 b/src/particles/dsmc/dsmc_vars.f90
index 3b1ae16ef..32aafc294 100644
--- a/src/particles/dsmc/dsmc_vars.f90
+++ b/src/particles/dsmc/dsmc_vars.f90
@@ -15,9 +15,6 @@ MODULE MOD_DSMC_Vars
! Contains the DSMC variables
!===================================================================================================================================
! MODULES
-#if USE_MPI
-USE MOD_Particle_MPI_Vars, ONLY: tPartMPIConnect
-#endif
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
PUBLIC
@@ -49,7 +46,7 @@ MODULE MOD_DSMC_Vars
INTEGER :: PairE_vMPF(2) ! 1: Pair chosen for energy redistribution
! 2: partical with minimal MPF of this Pair
LOGICAL :: useDSMC
-REAL , ALLOCATABLE :: PartStateIntEn(:,:) ! 1st index: 1:npartmax
+REAL , ALLOCATABLE :: PartStateIntEn(:,:) ! 1st index: 1:npartmax
! ! 2nd index: Evib, Erot, Eel
LOGICAL :: useRelaxProbCorrFactor ! Use the relaxation probability correction factor of Lumpkin
@@ -78,6 +75,8 @@ MODULE MOD_DSMC_Vars
INTEGER :: CloneInputDelay
LOGICAL :: CellLocalWeighting
INTEGER :: nSubSides
+ INTEGER :: CloneVecLength
+ INTEGER :: CloneVecLengthDelta
END TYPE tRadialWeighting
TYPE(tRadialWeighting) :: RadialWeighting
@@ -91,8 +90,8 @@ MODULE MOD_DSMC_Vars
REAL :: LastPartPos(1:3)
REAL :: WeightingFactor
INTEGER, ALLOCATABLE :: VibQuants(:)
- REAL, ALLOCATABLE :: DistriFunc(:)
- REAL, ALLOCATABLE :: AmbiPolVelo(:)
+ REAL, ALLOCATABLE :: DistriFunc(:)
+ REAL, ALLOCATABLE :: AmbiPolVelo(:)
END TYPE
TYPE(tClonedParticles),ALLOCATABLE :: ClonedParticles(:,:)
@@ -168,7 +167,7 @@ MODULE MOD_DSMC_Vars
LOGICAL :: UseElecXSec ! Flag if the electronic relaxation probability should be treated,
! using read-in cross-sectional data (currently only with BGG)
REAL,ALLOCATABLE :: CollFreqPreFactor(:) ! Prefactors for calculating the collision frequency in each time step
- REAL,ALLOCATABLE :: ElecRelaxCorrectFac(:) ! Correction factor for electronical landau-teller relaxation
+ REAL,ALLOCATABLE :: ElecRelaxCorrectFac(:) ! Correction factor for electronic landau-teller relaxation
REAL :: MaxMeanXiElec(2) ! 1: max mean XiElec 2: Temperature corresponding to max mean XiElec
END TYPE tSpeciesDSMC
@@ -185,7 +184,7 @@ MODULE MOD_DSMC_Vars
INTEGER :: NumOutput ! number of Outputs
REAL :: DeltaTimeOutput ! Time interval for Output
LOGICAL :: ReservoirSimu ! Flag for reservoir simulation
- LOGICAL :: ReservoirSimuRate ! Does not performe the collision.
+ LOGICAL :: ReservoirSimuRate ! Does not perform the collision.
! Switch to enable to create reaction rates curves
LOGICAL :: ReservoirSurfaceRate ! Switch enabling surface rate output without changing surface coverages
LOGICAL :: ReservoirRateStatistic ! if false, calculate the reaction coefficient rate by the probability
@@ -252,9 +251,7 @@ MODULE MOD_DSMC_Vars
! coefficient with the equilibrium constant by partition functions
REAL :: PartitionMaxTemp ! Temperature limit for pre-stored partition function (DEF: 20 000K)
REAL :: PartitionInterval ! Temperature interval for pre-stored partition function (DEF: 10K)
-#if (PP_TimeDiscMethod==42)
LOGICAL :: CompareLandauTeller ! Keeps the translational temperature at the fixed value of the init
-#endif
LOGICAL :: MergeSubcells ! Merge subcells after quadtree division if number of particles within
! subcell is less than 7
LOGICAL :: DoAmbipolarDiff
@@ -440,6 +437,8 @@ MODULE MOD_DSMC_Vars
TYPE(tCollCaseInfo), ALLOCATABLE:: CollCaseInfo(:) ! Information of collision cases (nCase)
! XSec Chemistry
LOGICAL :: AnyXSecReaction ! Defines if any XSec reaction is present
+ ! Photo-ionization Chemistry
+ LOGICAL :: AnyPhIonReaction ! Defines if any photo-ionization reaction is present
END TYPE
TYPE(tChemReactions) :: ChemReac
diff --git a/src/particles/emission/particle_br_electron_fluid.f90 b/src/particles/emission/particle_br_electron_fluid.f90
index df94d3872..635a35b09 100644
--- a/src/particles/emission/particle_br_electron_fluid.f90
+++ b/src/particles/emission/particle_br_electron_fluid.f90
@@ -70,8 +70,11 @@ END SUBROUTINE DefineParametersBR
SUBROUTINE InitSwitchBRElectronModel()
! MODULES !
USE MOD_HDG_Vars
-USE MOD_Globals ,ONLY: myrank, abort, UNIT_StdOut
+USE MOD_Globals ,ONLY: abort, UNIT_StdOut
USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETREAL,PrintOption
+#if USE_MPI
+USE MOD_Globals ,ONLY: myrank
+#endif /*USE_MPI*/
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT / OUTPUT VARIABLES
@@ -257,7 +260,7 @@ SUBROUTINE InitializeVariablesElectronFluidRegions()
END IF ! MPIRoot
#if USE_MPI
! Broadcast from root to other processors
- CALL MPI_BCAST(RegionElectronRefHDF5,3, MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iERROR)
+ CALL MPI_BCAST(RegionElectronRefHDF5,3, MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iERROR)
#endif /*USE_MPI*/
END IF ! DoRestart
@@ -613,7 +616,7 @@ SUBROUTINE CalculateBRAutomaticElectronRef()
! Sum the number of elements (later required for averaging the cell-constant values globally on each processor)
#if USE_MPI
-CALL MPI_ALLREDUCE(RegionElectronRefNew , RegionElectronRefNewGlobal , 3 , MPI_DOUBLE_PRECISION , MPI_SUM , MPI_COMM_WORLD , IERROR)
+CALL MPI_ALLREDUCE(RegionElectronRefNew , RegionElectronRefNewGlobal , 3 , MPI_DOUBLE_PRECISION , MPI_SUM , MPI_COMM_PICLAS , IERROR)
#else
RegionElectronRefNewGlobal = RegionElectronRefNew
#endif /*USE_MPI*/
@@ -903,7 +906,7 @@ END FUNCTION LesserThanWithTolerance
SUBROUTINE CreateElectronsFromBRFluid(CreateFromRestartFile)
! MODULES
USE MOD_Globals
-USE MOD_Globals ,ONLY: abort,MPIRoot,UNIT_stdOut,IK,MPI_COMM_WORLD
+USE MOD_Globals ,ONLY: abort,MPIRoot,UNIT_stdOut,IK,MPI_COMM_PICLAS
USE MOD_Globals_Vars ,ONLY: ElementaryCharge,BoltzmannConst
USE MOD_PreProc
USE MOD_Particle_Vars ,ONLY: PDM,PEM,PartState,nSpecies,Species,PartSpecies,usevMPF
@@ -920,7 +923,7 @@ SUBROUTINE CreateElectronsFromBRFluid(CreateFromRestartFile)
USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared
USE MOD_HDG_Vars ,ONLY: ElemToBRRegion,RegionElectronRef
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
-USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition
+USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition, GetNextFreePosition
USE MOD_TimeDisc_Vars ,ONLY: time
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
@@ -947,7 +950,7 @@ SUBROUTINE CreateElectronsFromBRFluid(CreateFromRestartFile)
IF(CreateFromRestartFile)THEN
ALLOCATE(ElectronDensityCell(1,1:PP_nElems))
ALLOCATE(ElectronTemperatureCell(1,1:PP_nElems))
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,'ElectronDensityCell',ElectronDensityCellExists)
IF(ElectronDensityCellExists)THEN
! Associate construct for integer KIND=8 possibility
@@ -1022,16 +1025,11 @@ SUBROUTINE CreateElectronsFromBRFluid(CreateFromRestartFile)
DO iPart=1,ElemCharge
BRNbrOfElectronsCreated = BRNbrOfElectronsCreated + 1
- ! Set the next free position in the particle vector list
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
- ParticleIndexNbr = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr.EQ.0) THEN
- CALL abort(__STAMP__,'ERROR in CreateElectronsFromBRFluid(): New Particle Number greater max Part Num!')
- END IF
- PDM%ParticleVecLength = PDM%ParticleVecLength + 1
+ ParticleIndexNbr = GetNextFreePosition()
!Set new SpeciesID of new particle (electron)
PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
+ PDM%isNewPart(ParticleIndexNbr) = .TRUE.
PartSpecies(ParticleIndexNbr) = ElecSpecIndx
! Place the electron randomly in the reference cell
@@ -1069,7 +1067,7 @@ SUBROUTINE CreateElectronsFromBRFluid(CreateFromRestartFile)
END IF ! CreateFromRestartFile
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,BRNbrOfElectronsCreated,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,BRNbrOfElectronsCreated,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(A,I0,A)') ' Created a total of ',BRNbrOfElectronsCreated,' electrons.'
@@ -1205,7 +1203,7 @@ SUBROUTINE InitBRAutomaticElectronRefElements()
! Sum the number of elements (later required for averaging the cell-constant values globally on each processor)
#if USE_MPI
-CALL MPI_ALLREDUCE(nBRAverageElems , nBRAverageElemsGlobal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_WORLD , IERROR)
+CALL MPI_ALLREDUCE(nBRAverageElems , nBRAverageElemsGlobal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_PICLAS , IERROR)
#else
nBRAverageElemsGlobal = nBRAverageElems
#endif /*USE_MPI*/
diff --git a/src/particles/emission/particle_emission.f90 b/src/particles/emission/particle_emission.f90
index 9d19810ca..83344d6dd 100644
--- a/src/particles/emission/particle_emission.f90
+++ b/src/particles/emission/particle_emission.f90
@@ -34,7 +34,7 @@ SUBROUTINE ParticleInserting()
!===================================================================================================================================
! Modules
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIInitGroup
#endif /*USE_MPI*/
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: c,PI
@@ -42,7 +42,7 @@ SUBROUTINE ParticleInserting()
USE MOD_Timedisc_Vars ,ONLY: RKdtFrac,RKdtFracTotal
USE MOD_Particle_Vars
USE MOD_PIC_Vars
-USE MOD_part_tools ,ONLY: UpdateNextFreePosition
+USE MOD_part_tools ,ONLY: UpdateNextFreePosition, GetNextFreePosition, IncreaseMaxParticleNumber
USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, SpecDSMC
USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD
USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly
@@ -60,6 +60,7 @@ SUBROUTINE ParticleInserting()
USE MOD_Particle_MPI_Vars ,ONLY: MPIW8TimePart,MPIW8CountPart
#endif /*defined(MEASURE_MPI_WAIT)*/
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: SEE,CalcElectronSEE
+USE MOD_Particle_Photoionization ,ONLY: PhotoIonization_RayTracing_Volume, PhotoIonization_RayTracing_SEE
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -86,6 +87,12 @@ SUBROUTINE ParticleInserting()
#endif /*defined(MEASURE_MPI_WAIT)*/
!===================================================================================================================================
+!--- Ray tracing based volume photo-ionization
+CALL PhotoIonization_RayTracing_Volume()
+
+!--- Ray tracing based secondary electron emission
+CALL PhotoIonization_RayTracing_SEE()
+
!--- Emission at time step
DO i=1,nSpecies
! Species-specific time step
@@ -178,10 +185,10 @@ SUBROUTINE ParticleInserting()
#if USE_MPI
! communicate number of particles with all procs in the same init group
InitGroup=Species(i)%Init(iInit)%InitCOMM
- IF(PartMPI%InitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL) THEN
+ IF(PartMPIInitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL) THEN
! only procs which are part of group take part in the communication
!NbrOfParticle based on RandVals!
- CALL MPI_BCAST(NbrOfParticle, 1, MPI_INTEGER,0,PartMPI%InitGroup(InitGroup)%COMM,IERROR)
+ CALL MPI_BCAST(NbrOfParticle, 1, MPI_INTEGER,0,PartMPIInitGroup(InitGroup)%COMM,IERROR)
ELSE
NbrOfParticle=0
END IF
@@ -226,9 +233,10 @@ SUBROUTINE ParticleInserting()
! Calculation of the number of photons depending on the cylinder height (ratio of actual to virtual cylinder height, which
! is spanned by the disk and the length given by c*dt)
IF(TRIM(Species(i)%Init(iInit)%SpaceIC).EQ.'photon_rectangle')THEN
+ ! Rectangular area -> cuboid: Equally distributed over c*dt
NbrOfPhotons = NbrOfPhotons * Species(i)%Init(iInit)%CuboidHeightIC / (c*dt)
ELSE
- ! Cylinder and honeycomb
+ ! Cylinder and honeycomb: Equally distributed over c*dt
NbrOfPhotons = NbrOfPhotons * Species(i)%Init(iInit)%CylinderHeightIC / (c*dt)
END IF
! Calculation of the number of electron resulting from the chemical reactions in the photoionization region
@@ -280,11 +288,11 @@ SUBROUTINE ParticleInserting()
! Communicate number of particles with all procs in the same init group
InitGroup=Species(i)%Init(iInit)%InitCOMM
NeutralizationBalanceGlobal=0 ! always nullify
- IF(PartMPI%InitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL) THEN
+ IF(PartMPIInitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL) THEN
! Loop over all elements and count the ion surplus per element if element-local emission is used
IF(nNeutralizationElems.GT.0) CALL CountNeutralizationParticles()
! Only processors which are part of group take part in the communication
- CALL MPI_ALLREDUCE(NeutralizationBalance,NeutralizationBalanceGlobal,1,MPI_INTEGER,MPI_SUM,PartMPI%InitGroup(InitGroup)%COMM,IERROR)
+ CALL MPI_ALLREDUCE(NeutralizationBalance,NeutralizationBalanceGlobal,1,MPI_INTEGER,MPI_SUM,PartMPIInitGroup(InitGroup)%COMM,IERROR)
ELSE
NeutralizationBalanceGlobal=0
END IF
@@ -331,9 +339,8 @@ SUBROUTINE ParticleInserting()
IF (UseVarTimeStep) CALL SetParticleTimeStep(NbrOfParticle)
! define molecule stuff
IF (useDSMC.AND.(CollisMode.GT.1)) THEN
- iPart = 1
- DO WHILE (iPart.LE.NbrOfParticle)
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
+ DO iPart = 1, NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.NE.0) THEN
IF (SpecDSMC(i)%PolyatomicMol) THEN
CALL DSMC_SetInternalEnr_Poly(i,iInit,PositionNbr,1)
@@ -341,36 +348,46 @@ SUBROUTINE ParticleInserting()
CALL DSMC_SetInternalEnr_LauxVFD(i,iInit,PositionNbr,1)
END IF
END IF
- iPart = iPart + 1
END DO
END IF
! Compute number of input particles and energy
IF(CalcPartBalance.AND.(NbrOfParticle.GT.0)) THEN
nPartIn(i)=nPartIn(i) + NbrOfparticle
DO iPart=1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) PartEkinIn(i) = PartEkinIn(i) + CalcEkinPart(PositionNbr)
+ PositionNbr = GetNextFreePosition(iPart)
+ PartEkinIn(i) = PartEkinIn(i) + CalcEkinPart(PositionNbr)
END DO ! iPart
END IF ! CalcPartBalance
! Update the current next free position and increase the particle vector length
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle
- PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle
+ IF(NbrOfParticle.GT.0) THEN
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle
+ PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0))
+ END IF
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+ DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+ END DO
+#endif
! Complete check if all particles were emitted successfully
#if USE_MPI
InitGroup=Species(i)%Init(iInit)%InitCOMM
- IF (PartMPI%InitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL .AND. Species(i)%Init(iInit)%sumOfRequestedParticles.GT.0) THEN
+ IF (PartMPIInitGroup(InitGroup)%COMM.NE.MPI_COMM_NULL .AND. Species(i)%Init(iInit)%sumOfRequestedParticles.GT.0) THEN
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
- CALL MPI_WAIT(PartMPI%InitGroup(InitGroup)%Request, MPI_STATUS_IGNORE, iError)
+ CALL MPI_WAIT(PartMPIInitGroup(InitGroup)%Request, MPI_STATUS_IGNORE, iError)
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterEnd, count_rate=Rate)
MPIW8TimePart(5) = MPIW8TimePart(5) + REAL(CounterEnd-CounterStart,8)/Rate
MPIW8CountPart(5) = MPIW8CountPart(5) + 1_8
#endif /*defined(MEASURE_MPI_WAIT)*/
- IF(PartMPI%InitGroup(InitGroup)%MPIRoot) THEN
+ IF(PartMPIInitGroup(InitGroup)%MPIRoot) THEN
#endif
! add number of matching error to particle emission to fit
! number of added particles
@@ -390,7 +407,7 @@ SUBROUTINE ParticleInserting()
! WRITE(UNIT_stdOut,'(A,I0,A)') 'ParticleEmission_parallel: matched all (',NbrOfParticle,') particles!'
END IF
#if USE_MPI
- END IF ! PartMPI%iProc.EQ.0
+ END IF ! PartMPIInitGroup(InitGroup)%MPIRoot
END IF
#endif
END DO ! iInit
diff --git a/src/particles/emission/particle_emission_init.f90 b/src/particles/emission/particle_emission_init.f90
index d313c071a..0341dbcbb 100644
--- a/src/particles/emission/particle_emission_init.f90
+++ b/src/particles/emission/particle_emission_init.f90
@@ -105,6 +105,11 @@ SUBROUTINE DefineParametersParticleEmission()
'distribution of the DSMCState file', numberedmulti=.TRUE.)
CALL prms%CreateIntOption( 'Part-Species[$]-Init[$]-BGG-Region' &
, 'Number of the region in which the given conditions shall be applied to', numberedmulti=.TRUE.)
+
+! === Cell local
+CALL prms%CreateRealArrayOption('Part-Species[$]-Init[$]-MinimalLocation', 'Minimal location', '-999. , -999., -999.', numberedmulti=.TRUE.)
+CALL prms%CreateRealArrayOption('Part-Species[$]-Init[$]-MaximalLocation', 'Maximal location', '999. , 999. , 999.', numberedmulti=.TRUE.)
+
! === Neutralization BC
CALL prms%CreateStringOption( 'Part-Species[$]-Init[$]-NeutralizationSource' , 'Name of the boundary used for calculating the charged particle balance used for thruster neutralization (no default).' ,numberedmulti=.TRUE.)
! === Photoionization
@@ -148,6 +153,7 @@ SUBROUTINE InitializeVariablesSpeciesInits()
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_MPI*/
USE MOD_Restart_Vars ,ONLY: DoRestart
+USE MOD_Analyze_Vars ,ONLY: DoSurfModelAnalyze
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -210,8 +216,8 @@ SUBROUTINE InitializeVariablesSpeciesInits()
IF(Species(iSpec)%TimeStepFactor.NE.1.) THEN
VarTimeStep%UseSpeciesSpecific = .TRUE.
IF(Species(iSpec)%TimeStepFactor.GT.1.) CALL CollectiveStop(__STAMP__,'ERROR: Species-specific time step only allows factors below 1!')
-#if (USE_HDG) && !(PP_TimeDiscMethod==508)
- CALL CollectiveStop(__STAMP__,'ERROR: Species-specific time step is only implemented with Boris-Leapfrog time discretization!')
+#if (USE_HDG) && !(PP_TimeDiscMethod==500) && !(PP_TimeDiscMethod==508) && !(PP_TimeDiscMethod==509)
+ CALL CollectiveStop(__STAMP__,'ERROR: Species-specific time step is only implemented with Euler, Leapfrog & Boris-Leapfrog time discretization!')
#endif /*(USE_HDG)*/
#if !(USE_HDG) && !(PP_TimeDiscMethod==4)
CALL CollectiveStop(__STAMP__,'ERROR: Species-specific time step is only implemented with HDG and/or DSMC')
@@ -249,6 +255,9 @@ SUBROUTINE InitializeVariablesSpeciesInits()
'For this emission type RadiusIC must be greater than Radius2IC!')
CASE('cuboid','photon_rectangle')
Species(iSpec)%Init(iInit)%CuboidHeightIC = GETREAL('Part-Species'//TRIM(hilf2)//'-CuboidHeightIC')
+ CASE('cell_local')
+ Species(iSpec)%Init(iInit)%MinLocation = GETREALARRAY('Part-Species'//TRIM(hilf2)//'-MinimalLocation',3)
+ Species(iSpec)%Init(iInit)%MaxLocation = GETREALARRAY('Part-Species'//TRIM(hilf2)//'-MaximalLocation',3)
END SELECT
! Space-ICs requiring basic geometry information and other options (all excluding cell_local and background)
IF((TRIM(Species(iSpec)%Init(iInit)%SpaceIC).NE.'cell_local').AND. &
@@ -328,6 +337,7 @@ SUBROUTINE InitializeVariablesSpeciesInits()
NeutralizationSource = TRIM(GETSTR('Part-Species'//TRIM(hilf2)//'-NeutralizationSource'))
NeutralizationBalance = 0
UseNeutralization = .TRUE.
+ DoSurfModelAnalyze = .TRUE.
IF((TRIM(Species(iSpec)%Init(iInit)%SpaceIC).EQ.'3D_Liu2010_neutralization').OR.&
(TRIM(Species(iSpec)%Init(iInit)%SpaceIC).EQ.'3D_Liu2010_neutralization_Szabo'))THEN
Species(iSpec)%Init(iInit)%FirstQuadrantOnly = GETLOGICAL('Part-Species'//TRIM(hilf2)//'-FirstQuadrantOnly')
@@ -353,14 +363,9 @@ SUBROUTINE InitializeVariablesSpeciesInits()
END IF
! 2D simulation/variable time step only with cell_local and/or surface flux
IF(UseVarTimeStep.OR.VarTimeStep%UseSpeciesSpecific) THEN
- SELECT CASE(TRIM(Species(iSpec)%Init(iInit)%SpaceIC))
- ! Do nothing
- CASE('cell_local','background')
- ! Abort for every other SpaceIC
- CASE DEFAULT
+ IF(Species(iSpec)%Init(iInit)%ParticleEmissionType.GT.0) &
CALL CollectiveStop(__STAMP__,'ERROR: Particle insertion/emission for variable time step '//&
- 'only possible with cell_local/background-SpaceIC and/or surface flux!')
- END SELECT
+ 'only possible with initial particle insertion and/or surface flux!')
END IF
!--- integer check for ParticleEmissionType 2
IF((Species(iSpec)%Init(iInit)%ParticleEmissionType.EQ.2).AND. &
@@ -443,14 +448,25 @@ SUBROUTINE InitialParticleInserting()
! MODULES
USE MOD_Globals
USE MOD_ReadInTools
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi
+USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep, RKdtFrac
+USE MOD_Mesh_Vars ,ONLY: SideToElem
USE MOD_Dielectric_Vars ,ONLY: DoDielectric,isDielectricElem,DielectricNoParticles
-USE MOD_DSMC_Vars ,ONLY: useDSMC, DSMC
+USE MOD_DSMC_Vars ,ONLY: useDSMC, DSMC, SpecDSMC, CollisMode
USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass,SetParticleMPF,SetParticleTimeStep
-USE MOD_Part_Pos_and_Velo ,ONLY: SetParticlePosition,SetParticleVelocity,SetPartPosAndVeloEmissionDistribution
+USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD
+USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly
+USE MOD_Part_Pos_and_Velo ,ONLY: SetParticlePosition,SetParticleVelocity,ParticleEmissionFromDistribution
+USE MOD_Part_Pos_and_Velo ,ONLY: ParticleEmissionCellLocal
USE MOD_DSMC_AmbipolarDiffusion ,ONLY: AD_SetInitElectronVelo
-USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition
-USE MOD_Particle_Vars ,ONLY: Species,nSpecies,PDM,PEM, usevMPF, SpecReset, UseVarTimeStep
+USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition, IncreaseMaxParticleNumber, GetNextFreePosition
USE MOD_Restart_Vars ,ONLY: DoRestart
+USE MOD_Particle_Vars ,ONLY: Species,nSpecies,PDM,PEM, usevMPF, SpecReset, UseVarTimeStep, VarTimeStep
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCPartNumOut
+USE MOD_Particle_Sampling_Adapt ,ONLY: AdaptiveBCSampling
+USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
+USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData
+USE MOD_DSMC_Init ,ONLY: SetVarVibProb2Elems
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
@@ -462,7 +478,8 @@ SUBROUTINE InitialParticleInserting()
! OUTPUT VARIABLES
!----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iSpec, NbrOfParticle,iInit,iPart,PositionNbr
+INTEGER :: iSpec,NbrOfParticle,iInit,iPart,PositionNbr,iSF,iSide,ElemID,SampleElemID,currentBC,jSample,iSample,BCSideID
+REAL :: TimeStepOverWeight, v_thermal, dtVar
!===================================================================================================================================
LBWRITE(UNIT_stdOut,'(A)') ' INITIAL PARTICLE INSERTING...'
@@ -480,34 +497,60 @@ SUBROUTINE InitialParticleInserting()
IF (Species(iSpec)%Init(iInit)%ParticleEmissionType.EQ.0) THEN
IF(Species(iSpec)%Init(iInit)%ParticleNumber.GT.HUGE(1)) CALL abort(__STAMP__,&
' Integer of initial particle number larger than max integer size: ',IntInfoOpt=HUGE(1))
- ! Set particle position and velocity
SELECT CASE(TRIM(Species(iSpec)%Init(iInit)%SpaceIC))
+ ! --------------------------------------------------------------------------------------------------
+ ! Cell-local particle emission: every processors loops over its own elements
+ CASE('cell_local')
+ LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Initial cell local particle emission for species ',iSpec,' ... '
+ CALL ParticleEmissionCellLocal(iSpec,iInit,NbrOfParticle)
+ ! TODO: MOVE EVERYTHING INTO THE EMISSION ROUTINE
+ CALL SetParticleVelocity(iSpec,iInit,NbrOfParticle)
+ ! SetParticleMPF cannot be performed anymore since the PartMPF was set based on the SplitThreshold
+ ! SetParticleTimeStep is done during the emission as well
+ ! SetParticleChargeAndMass is done as well
+ ! --------------------------------------------------------------------------------------------------
+ ! Cell-local particle emission from a given distribution
CASE('EmissionDistribution')
- CALL SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
+ CALL ParticleEmissionFromDistribution(iSpec,iInit,NbrOfParticle)
+ ! Particle velocity and species is set inside the above routine
+ IF (usevMPF) CALL SetParticleMPF(iSpec,iInit,NbrOfParticle)
+ IF (UseVarTimeStep) CALL SetParticleTimeStep(NbrOfParticle)
+ ! --------------------------------------------------------------------------------------------------
+ ! Global particle emission
CASE DEFAULT
NbrOfParticle = INT(Species(iSpec)%Init(iInit)%ParticleNumber,4)
LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle position for species ',iSpec,' ... '
CALL SetParticlePosition(iSpec,iInit,NbrOfParticle)
LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle velocities for species ',iSpec,' ... '
CALL SetParticleVelocity(iSpec,iInit,NbrOfParticle)
+ IF (usevMPF) CALL SetParticleMPF(iSpec,iInit,NbrOfParticle)
+ CALL SetParticleChargeAndMass(iSpec,NbrOfParticle)
+ IF (UseVarTimeStep) CALL SetParticleTimeStep(NbrOfParticle)
END SELECT
- LBWRITE(UNIT_stdOut,'(A,I0,A)') ' Set particle charge and mass for species ',iSpec,' ... '
- CALL SetParticleChargeAndMass(iSpec,NbrOfParticle)
- IF (usevMPF) CALL SetParticleMPF(iSpec,iInit,NbrOfParticle)
- IF (UseVarTimeStep) CALL SetParticleTimeStep(NbrOfParticle)
IF (useDSMC) THEN
IF (DSMC%DoAmbipolarDiff) CALL AD_SetInitElectronVelo(iSpec,iInit,NbrOfParticle)
- DO iPart = 1, NbrOfParticle
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- PDM%PartInit(PositionNbr) = iInit
- ELSE
- CALL abort(__STAMP__,'ERROR in InitialParticleInserting: No free particle index - maximum nbr of particles reached?')
- END IF
- END DO
+ IF((CollisMode.EQ.2).OR.(CollisMode.EQ.3)) THEN
+ DO iPart = 1, NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
+ IF (SpecDSMC(iSpec)%PolyatomicMol) THEN
+ CALL DSMC_SetInternalEnr_Poly(iSpec,iInit,PositionNbr,1)
+ ELSE
+ CALL DSMC_SetInternalEnr_LauxVFD(iSpec,iInit,PositionNbr,1)
+ END IF
+ END DO
+ END IF
END IF
! Add new particles to particle vector length
- PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle
+ IF(NbrOfParticle.GT.0) PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(NbrOfParticle))
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+ DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+ END DO
+#endif
! Update
CALL UpdateNextFreePosition()
END IF ! Species(iSpec)%Init(iInit)%ParticleEmissionType.EQ.0
@@ -531,6 +574,44 @@ SUBROUTINE InitialParticleInserting()
END IF
END IF
+IF(UseAdaptiveBC.OR.(nPorousBC.GT.0)) THEN
+!--- Sampling of near adaptive boundary element values after particle insertion to get initial distribution
+ CALL AdaptiveBCSampling(initSampling_opt=.TRUE.)
+ ! Adaptive BC Type = 4: Approximation of particles leaving the domain, assuming zero bulk velocity, using the fall-back values
+ DO iSpec=1,nSpecies
+ ! Species-specific time step
+ IF(VarTimeStep%UseSpeciesSpecific) THEN
+ dtVar = ManualTimeStep * RKdtFrac * Species(iSpec)%TimeStepFactor
+ ELSE
+ dtVar = ManualTimeStep * RKdtFrac
+ END IF
+ DO iSF=1,Species(iSpec)%nSurfacefluxBCs
+ currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
+ ! Skip processors without a surface flux
+ IF (BCdata_auxSF(currentBC)%SideNumber.EQ.0) CYCLE
+ ! Skip other regular surface flux and other types
+ IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) CYCLE
+ ! Calculate the velocity for the surface flux with the thermal velocity assuming a zero bulk velocity
+ TimeStepOverWeight = dtVar / Species(iSpec)%MacroParticleFactor
+ v_thermal = SQRT(2.*BoltzmannConst*Species(iSpec)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) / (2.0*SQRT(PI))
+ ! Loop over sides on the surface flux
+ DO iSide=1,BCdata_auxSF(currentBC)%SideNumber
+ BCSideID=BCdata_auxSF(currentBC)%SideList(iSide)
+ ElemID = SideToElem(S2E_ELEM_ID,BCSideID)
+ SampleElemID = AdaptBCMapElemToSample(ElemID)
+ IF(SampleElemID.GT.0) THEN
+ DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1)
+ AdaptBCPartNumOut(iSpec,iSF) = AdaptBCPartNumOut(iSpec,iSF) + INT(AdaptBCMacroVal(4,SampleElemID,iSpec) &
+ * TimeStepOverWeight * SurfMeshSubSideData(iSample,jSample,BCSideID)%area * v_thermal)
+ END DO; END DO
+ END IF ! SampleElemID.GT.0
+ END DO ! iSide=1,BCdata_auxSF(currentBC)%SideNumber
+ END DO ! iSF=1,Species(iSpec)%nSurfacefluxBCs
+ END DO ! iSpec=1,nSpecies
+END IF
+
+IF((DSMC%VibRelaxProb.EQ.2).AND.(CollisMode.GE.2)) CALL SetVarVibProb2Elems()
+
LBWRITE(UNIT_stdOut,'(A)') ' INITIAL PARTICLE INSERTING DONE!'
END SUBROUTINE InitialParticleInserting
@@ -745,14 +826,11 @@ SUBROUTINE DetermineInitialParticleNumber()
!>
!===================================================================================================================================
! MODULES
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: PI
USE MOD_DSMC_Vars ,ONLY: RadialWeighting, DSMC
USE MOD_Particle_Mesh_Vars ,ONLY: LocalVolume
-USE MOD_Particle_Vars ,ONLY: PDM,Species,nSpecies,SpecReset,Symmetry
+USE MOD_Particle_Vars ,ONLY: Species,nSpecies,SpecReset,Symmetry
USE MOD_ReadInTools
USE MOD_Restart_Vars ,ONLY: DoRestart
! IMPLICIT VARIABLE HANDLING
@@ -831,21 +909,13 @@ SUBROUTINE DetermineInitialParticleNumber()
END IF
! Sum-up the number of particles to be inserted
#if USE_MPI
- insertParticles = insertParticles + INT(REAL(Species(iSpec)%Init(iInit)%ParticleNumber)/REAL(PartMPI%nProcs),8)
+ insertParticles = insertParticles + INT(REAL(Species(iSpec)%Init(iInit)%ParticleNumber)/REAL(nProcessors),8)
#else
insertParticles = insertParticles + INT(Species(iSpec)%Init(iInit)%ParticleNumber,8)
#endif
END DO ! iInit = 1, Species(iSpec)%NumberOfInits
END DO ! iSpec=1,nSpecies
-IF(.NOT.RadialWeighting%DoRadialWeighting) THEN
- IF (insertParticles.GT.PDM%maxParticleNumber) THEN
- IPWRITE(UNIT_stdOut,*)' Maximum particle number : ',PDM%maxParticleNumber
- IPWRITE(UNIT_stdOut,*)' To be inserted particles: ',INT(insertParticles,4)
- CALL abort(__STAMP__,'Number of to be inserted particles per init-proc exceeds max. particle number! ')
- END IF
-END IF
-
END SUBROUTINE DetermineInitialParticleNumber
diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90
index f73b56709..36a5eb133 100644
--- a/src/particles/emission/particle_emission_tools.f90
+++ b/src/particles/emission/particle_emission_tools.f90
@@ -62,10 +62,6 @@ MODULE MOD_part_emission_tools
MODULE PROCEDURE QUASIREL
END INTERFACE
-INTERFACE SetCellLocalParticlePosition
- MODULE PROCEDURE SetCellLocalParticlePosition
-END INTERFACE
-
INTERFACE CalcNbrOfPhotons
MODULE PROCEDURE CalcNbrOfPhotons
END INTERFACE
@@ -74,10 +70,6 @@ MODULE MOD_part_emission_tools
MODULE PROCEDURE CalcIntensity_Gaussian
END INTERFACE
-INTERFACE CalcVelocity_FromWorkFuncSEE
- MODULE PROCEDURE CalcVelocity_FromWorkFuncSEE
-END INTERFACE
-
INTERFACE DSMC_SetInternalEnr_LauxVFD
MODULE PROCEDURE DSMC_SetInternalEnr_LauxVFD
END INTERFACE
@@ -88,11 +80,14 @@ MODULE MOD_part_emission_tools
END INTERFACE
#endif /*CODE_ANALYZE*/
+INTERFACE InsideQuadrilateral
+ MODULE PROCEDURE InsideQuadrilateral
+END INTERFACE
+
!===================================================================================================================================
PUBLIC :: CalcVelocity_taylorgreenvortex, CalcVelocity_gyrotroncircle
PUBLIC :: IntegerDivide,SetParticleChargeAndMass,SetParticleMPF,CalcVelocity_maxwell_lpn,SamplePoissonDistri
PUBLIC :: BessK,DEVI,SYNGE,QUASIREL
-PUBLIC :: SetCellLocalParticlePosition
PUBLIC :: SetParticlePositionPoint, SetParticlePositionEquidistLine, SetParticlePositionLine, SetParticlePositionDisk
PUBLIC :: SetParticlePositionCircle, SetParticlePositionGyrotronCircle, SetParticlePositionCuboidCylinder
PUBLIC :: SetParticlePositionSphere, SetParticlePositionSinDeviation, SetParticleTimeStep
@@ -111,6 +106,7 @@ MODULE MOD_part_emission_tools
PUBLIC :: CalcVectorAdditionCoeffs
#endif /*CODE_ANALYZE*/
PUBLIC :: CountNeutralizationParticles
+PUBLIC :: InsideQuadrilateral
!===================================================================================================================================
CONTAINS
@@ -210,8 +206,9 @@ SUBROUTINE SetParticleTimeStep(NbrOfParticle)
!> the particle vector, loops over the total number of particles and the indices in the nextFreePosition array.
!===================================================================================================================================
! MODULES
-USE MOD_Particle_Vars ,ONLY: PDM, PartTimeStep, PEM, PartState
+USE MOD_Particle_Vars ,ONLY: PartTimeStep, PEM, PartState
USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
!----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -225,7 +222,7 @@ SUBROUTINE SetParticleTimeStep(NbrOfParticle)
INTEGER :: iPart, PositionNbr
!===================================================================================================================================
DO iPart=1, NbrOfParticle
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
+ PositionNbr = GetNextFreePosition(iPart)
PartTimeStep(PositionNbr) = GetParticleTimeStep(PartState(1,PositionNbr), PartState(2,PositionNbr),PEM%LocalElemID(PositionNbr))
END DO
@@ -238,7 +235,8 @@ SUBROUTINE SetParticleChargeAndMass(FractNbr,NbrOfParticle)
!===================================================================================================================================
! MODULES
USE MOD_Globals
-USE MOD_Particle_Vars, ONLY : PDM, PartSpecies
+USE MOD_Particle_Vars ,ONLY: PartSpecies
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
!----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -250,15 +248,11 @@ SUBROUTINE SetParticleChargeAndMass(FractNbr,NbrOfParticle)
INTEGER,INTENT(INOUT) :: NbrOfParticle
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: i,PositionNbr
+INTEGER :: iPart,PositionNbr
!===================================================================================================================================
-DO i=1, NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- PartSpecies(PositionNbr) = FractNbr
- ELSE
- CALL abort(__STAMP__,'ERROR in SetParticlePosition:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
- END IF
+DO iPart=1, NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
+ PartSpecies(PositionNbr) = FractNbr
END DO
END SUBROUTINE SetParticleChargeAndMass
@@ -270,9 +264,9 @@ SUBROUTINE SetParticleMPF(FractNbr,iInit,NbrOfParticle)
!===================================================================================================================================
! MODULES
USE MOD_Globals
-USE MOD_Particle_Vars ,ONLY: PDM, PartMPF, Species, PartState
+USE MOD_Particle_Vars ,ONLY: PartMPF, Species, PartState
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
-USE MOD_part_tools ,ONLY: CalcRadWeightMPF
+USE MOD_part_tools ,ONLY: CalcRadWeightMPF, GetNextFreePosition
!===================================================================================================================================
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -285,25 +279,19 @@ SUBROUTINE SetParticleMPF(FractNbr,iInit,NbrOfParticle)
INTEGER,INTENT(INOUT) :: NbrOfParticle
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: i,PositionNbr
-!===================================================================================================================================
-i = 1
-DO WHILE (i .le. NbrOfParticle)
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- IF(RadialWeighting%DoRadialWeighting) THEN
- PartMPF(PositionNbr) = CalcRadWeightMPF(PartState(2,PositionNbr),FractNbr,PositionNbr)
- ELSE
- IF(iInit.EQ.-1)THEN
- PartMPF(PositionNbr) = Species(FractNbr)%MacroParticleFactor
- ELSE
- PartMPF(PositionNbr) = Species(FractNbr)%Init(iInit)%MacroParticleFactor ! Use emission-specific MPF (default is species MPF)
- END IF ! iInit.EQ.-1
- END IF
+INTEGER :: iPart,PositionNbr
+!===================================================================================================================================
+DO iPart=1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
+ IF(RadialWeighting%DoRadialWeighting) THEN
+ PartMPF(PositionNbr) = CalcRadWeightMPF(PartState(2,PositionNbr),FractNbr,PositionNbr)
ELSE
- CALL abort(__STAMP__,'ERROR in SetParticlePosition:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
+ IF(iInit.EQ.-1)THEN
+ PartMPF(PositionNbr) = Species(FractNbr)%MacroParticleFactor
+ ELSE
+ PartMPF(PositionNbr) = Species(FractNbr)%Init(iInit)%MacroParticleFactor ! Use emission-specific MPF (default is species MPF)
+ END IF ! iInit.EQ.-1
END IF
- i = i + 1
END DO
END SUBROUTINE SetParticleMPF
@@ -903,132 +891,6 @@ SUBROUTINE SamplePoissonDistri(RealTarget,IntSample,Flag_opt)
END SUBROUTINE SamplePoissonDistri
-SUBROUTINE SetCellLocalParticlePosition(chunkSize,iSpec,iInit,UseExactPartNum)
-!===================================================================================================================================
-!> routine for inserting particles positions locally in every cell
-!===================================================================================================================================
-! MODULES
-USE MOD_Globals
-USE MOD_DSMC_Vars ,ONLY: RadialWeighting
-USE MOD_part_tools ,ONLY: CalcRadWeightMPF
-USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
-USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
-USE MOD_Particle_Mesh_Vars ,ONLY: LocalVolume
-USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared,ElemVolume_Shared,ElemMidPoint_Shared
-USE MOD_Mesh_Tools ,ONLY: GetCNElemID
-USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
-USE MOD_Particle_Vars ,ONLY: Species, PDM, PartState, PEM, Symmetry, UseVarTimeStep, PartTimeStep, PartMPF
-USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-INTEGER, INTENT(IN) :: iSpec
-INTEGER, INTENT(IN) :: iInit
-LOGICAL, INTENT(IN) :: UseExactPartNum
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INOUTPUT VARIABLES
-INTEGER, INTENT(INOUT) :: chunkSize
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-INTEGER :: iElem, ichunkSize, iGlobalElem
-INTEGER :: iPart, nPart
-REAL :: iRan, RandomPos(3)
-REAL :: PartDens
-LOGICAL :: InsideFlag
-INTEGER :: CellChunkSize(1+offsetElem:nElems+offsetElem)
-INTEGER :: chunkSize_tmp, ParticleIndexNbr
-REAL :: adaptTimestep
-INTEGER :: CNElemID
-!-----------------------------------------------------------------------------------------------------------------------------------
- IF (UseExactPartNum) THEN
- IF(chunkSize.GE.PDM%maxParticleNumber) THEN
- CALL abort(__STAMP__,'SetCellLocalParticlePosition: Maximum particle number reached! max. particles needed: ',chunksize)
- END IF
- CellChunkSize(:)=0
- ASSOCIATE( start => GetCNElemID(1+offsetElem),&
- end => GetCNElemID(nElems+offsetElem))
- CALL IntegerDivide(chunkSize,nElems,ElemVolume_Shared(start:end),CellChunkSize(:))
- END ASSOCIATE
- ELSE
- PartDens = Species(iSpec)%Init(iInit)%PartDensity / Species(iSpec)%MacroParticleFactor ! numerical Partdensity is needed
- IF(RadialWeighting%DoRadialWeighting) PartDens = PartDens * 2. / (RadialWeighting%PartScaleFactor)
- chunkSize_tmp = INT(PartDens * LocalVolume)
- IF(chunkSize_tmp.GE.PDM%maxParticleNumber) THEN
- CALL abort(__STAMP__,&
- 'ERROR in SetCellLocalParticlePosition: Maximum particle number during sanity check! max. particles needed: ',&
- IntInfoOpt=chunkSize_tmp)
- END IF
- END IF
-
- ichunkSize = 1
- ParticleIndexNbr = 1
- DO iElem = 1, nElems
- iGlobalElem = iElem + offsetElem
- CNElemID = GetCNElemID(iGlobalElem)
- ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iGlobalElem) ) ! 1-2: Min, Max value; 1-3: x,y,z
- IF (UseExactPartNum) THEN
- nPart = CellChunkSize(iGlobalElem)
- ELSE
- IF(RadialWeighting%DoRadialWeighting) THEN
- PartDens = Species(iSpec)%Init(iInit)%PartDensity / CalcRadWeightMPF(ElemMidPoint_Shared(2,CNElemID), iSpec)
- END IF
- CALL RANDOM_NUMBER(iRan)
- IF(UseVarTimeStep) THEN
- adaptTimestep = GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
- nPart = INT(PartDens / adaptTimestep * ElemVolume_Shared(CNElemID) + iRan)
- ELSE
- nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
- END IF
- END IF
- DO iPart = 1, nPart
- ParticleIndexNbr = PDM%nextFreePosition(iChunksize + PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr .ne. 0) THEN
- InsideFlag=.FALSE.
- DO WHILE(.NOT.InsideFlag)
- CALL RANDOM_NUMBER(RandomPos)
- IF(Symmetry%Axisymmetric.AND.(.NOT.RadialWeighting%DoRadialWeighting)) THEN
- ! Treatment of axisymmetry without weighting
- RandomPos(1) = Bounds(1,1) + RandomPos(1)*(Bounds(2,1)-Bounds(1,1))
- RandomPos(2) = SQRT(RandomPos(2)*(Bounds(2,2)**2-Bounds(1,2)**2)+Bounds(1,2)**2)
- ELSE
- RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:))
- END IF
- IF(Symmetry%Order.LE.2) RandomPos(3) = 0.
- IF(Symmetry%Order.LE.1) RandomPos(2) = 0.
- InsideFlag = ParticleInsideCheck(RandomPos,iPart,iGlobalElem)
- END DO
- PartState(1:3,ParticleIndexNbr) = RandomPos(1:3)
- PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
- PDM%IsNewPart(ParticleIndexNbr)=.TRUE.
- PDM%dtFracPush(ParticleIndexNbr) = .FALSE.
- PEM%GlobalElemID(ParticleIndexNbr) = iGlobalElem
- ichunkSize = ichunkSize + 1
- IF (UseVarTimeStep) THEN
- PartTimeStep(ParticleIndexNbr) = &
- GetParticleTimeStep(PartState(1,ParticleIndexNbr), PartState(2,ParticleIndexNbr),iElem)
- END IF
- IF(RadialWeighting%DoRadialWeighting) THEN
- PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr),iSpec,ParticleIndexNbr)
- END IF
- ELSE
- WRITE(UNIT_stdOut,*) ""
- IPWRITE(UNIT_stdOut,*) "ERROR:"
- IPWRITE(UNIT_stdOut,*) " iPart :", iPart
- IPWRITE(UNIT_stdOut,*) "PDM%maxParticleNumber :", PDM%maxParticleNumber
- CALL abort(__STAMP__&
- ,'ERROR in SetCellLocalParticlePosition: Maximum particle number reached during inserting! --> ParticleIndexNbr.EQ.0')
- END IF
- END DO
- END ASSOCIATE
- END DO
- chunkSize = ichunkSize - 1
-
-END SUBROUTINE SetCellLocalParticlePosition
-
-
SUBROUTINE SetParticlePositionPoint(FractNbr,iInit,chunkSize,particle_positions)
!===================================================================================================================================
! Set particle position
@@ -1307,7 +1169,7 @@ SUBROUTINE SetParticlePositionCuboidCylinder(FractNbr,iInit,chunkSize,particle_p
!===================================================================================================================================
! modules
USE MOD_Globals
-USE MOD_Particle_Vars ,ONLY: Species, Symmetry, PDM
+USE MOD_Particle_Vars ,ONLY: Species, Symmetry
USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos, CalcRadWeightMPF
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
!----------------------------------------------------------------------------------------------------------------------------------
@@ -1372,10 +1234,6 @@ SUBROUTINE SetParticlePositionCuboidCylinder(FractNbr,iInit,chunkSize,particle_p
IF(Species(FractNbr)%MacroParticleFactor/RadWeightMPF.LT.iRan) THEN
i=i+1
CYCLE
- ELSE IF(chunkSize2.GT.PDM%maxParticleNumber) THEN
- IPWRITE(UNIT_stdOut,*)'Inserted percentage of particles',REAL(i)/REAL(chunkSize)*100
- CALL CollectiveStop(__STAMP__,&
- 'Number of to be inserted particles per init-proc exceeds max. particle number! ')
END IF
END IF
END IF
@@ -1395,7 +1253,7 @@ SUBROUTINE SetParticlePositionSphere(FractNbr,iInit,chunkSize,particle_positions
!===================================================================================================================================
! modules
USE MOD_Globals
-USE MOD_Particle_Vars ,ONLY: Species, Symmetry, PDM
+USE MOD_Particle_Vars ,ONLY: Species, Symmetry
USE MOD_Part_tools ,ONLY: DICEUNITVECTOR, CalcPartSymmetryPos, CalcRadWeightMPF
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
!----------------------------------------------------------------------------------------------------------------------------------
@@ -1434,10 +1292,6 @@ SUBROUTINE SetParticlePositionSphere(FractNbr,iInit,chunkSize,particle_positions
IF(Species(FractNbr)%MacroParticleFactor/RadWeightMPF.LT.iRan) THEN
i=i+1
CYCLE
- ELSE IF(chunkSize2.GT.PDM%maxParticleNumber) THEN
- IPWRITE(UNIT_stdOut,*)'Inserted percentage of particles',REAL(i)/REAL(chunkSize)*100
- CALL CollectiveStop(__STAMP__,&
- 'Number of to be inserted particles per init-proc exceeds max. particle number! ')
END IF
END IF
END IF
@@ -1701,7 +1555,7 @@ PPURE FUNCTION CalcPhotonEnergy(lambda)
END FUNCTION CalcPhotonEnergy
-SUBROUTINE CalcVelocity_FromWorkFuncSEE(FractNbr, Vec3D, iInit)
+SUBROUTINE CalcVelocity_FromWorkFuncSEE(W, m, t_vec, n_vec, Vec3D)
!===================================================================================================================================
!> Subroutine to sample photon SEE electrons velocities from given energy distribution based on a work function.
!> Perform ARM for the energy distribution and a second ARM for the emission angle (between the impacting photon and the emitting
@@ -1710,12 +1564,11 @@ SUBROUTINE CalcVelocity_FromWorkFuncSEE(FractNbr, Vec3D, iInit)
! MODULES
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: PI, ElementaryCharge
-USE MOD_Particle_Vars ,ONLY: Species
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER,INTENT(IN) :: FractNbr
-INTEGER,INTENT(IN), OPTIONAL :: iInit
+REAL,INTENT(IN) :: W, m ! Work function, mass
+REAL,INTENT(IN) :: t_vec(3), n_vec(3) ! Tangential and normal vector
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
REAL,INTENT(OUT) :: Vec3D(3)
@@ -1725,19 +1578,14 @@ SUBROUTINE CalcVelocity_FromWorkFuncSEE(FractNbr, Vec3D, iInit)
REAL :: E_temp, E_max, VeloABS
REAL :: Theta, Chi!, Psi_temp
REAL :: PDF_temp, PDF_max
-REAL, PARAMETER :: PDF_max2=4./ACOS(-1.)
+REAL, PARAMETER :: PDF_max2=4./PI
REAL :: VeloVec_norm(3), RotationAxi(3)
LOGICAL :: ARM_SEE_PDF
REAL :: Theta_temp
!===================================================================================================================================
-ASSOCIATE( W => Species(FractNbr)%Init(iInit)%WorkFunctionSEE ,&
- m => Species(FractNbr)%MassIC ,&
- t_vec => Species(FractNbr)%Init(iInit)%NormalVector1IC ,&
- n_vec => Species(FractNbr)%Init(iInit)%NormalIC )
-
! ARM for energy distribution
-E_max = 25.0*W ! in eV (this yields an integral of 0.9956759, i.e., 95.57% of electrons have this or a lower energy)
+E_max = 25.0*W ! in eV (this yields an integral of 0.9956759, i.e., 99.57% of electrons have this or a lower energy)
PDF_max = 81.0 / (128.0 * W) ! PDF_max at E = W/3 (derivation of 6W^2E/(E+W)^4 == 0)
ARM_SEE_PDF=.TRUE.
DO WHILE(ARM_SEE_PDF)
@@ -1780,8 +1628,6 @@ SUBROUTINE CalcVelocity_FromWorkFuncSEE(FractNbr, Vec3D, iInit)
! Calc VeloVec
Vec3D = VeloVec_norm * VeloABS
-END ASSOCIATE
-
END SUBROUTINE CalcVelocity_FromWorkFuncSEE
@@ -2156,6 +2002,83 @@ PPURE LOGICAL FUNCTION InsideHexagon(pos,R,ri) RESULT(L)
END ASSOCIATE
END FUNCTION InsideHexagon
+!===================================================================================================================================
+!> Calculate determinant of 3 points
+!===================================================================================================================================
+PPURE REAL FUNCTION pointDet(P1,P2,P3)
+! MODULES
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+REAL,INTENT(IN) :: P1(2),P2(2),P3(2)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+pointDet = (P1(1)-P3(1))*(P2(2)-P3(2)) - (P2(1)-P3(1))*(P1(2)-P3(2))
+END FUNCTION pointDet
+
+!===================================================================================================================================
+!> Check if x,y is inside side
+!===================================================================================================================================
+PPURE LOGICAL FUNCTION InsideQuadrilateral(X,NonUniqueGlobalSideID) RESULT(L)
+! MODULES
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,SideInfo_Shared,ElemSideNodeID_Shared
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL,INTENT(IN) :: X(2)
+INTEGER,INTENT(IN) :: NonUniqueGlobalSideID
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+LOGICAL :: pos,neg
+INTEGER :: iNode,CNElemID,locSideID
+REAL :: P(1:2,1:4),d(3)
+!===================================================================================================================================
+CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,NonUniqueGlobalSideID))
+locSideID = SideInfo_Shared(SIDE_LOCALID,NonUniqueGlobalSideID)
+
+DO iNode = 1,4
+ P(1:2,iNode) = NodeCoords_Shared(1:2,ElemSideNodeID_Shared(iNode,locSideID,CNElemID)+1)
+END DO
+
+! ! sorted
+! P(1:2,1) = (/0,0/)
+! P(1:2,2) = (/1,0/)
+! P(1:2,3) = (/1,1/)
+! P(1:2,4) = (/0,1/)
+!
+! ! not sorted
+! P(1:2,1) = (/0,0/)
+! P(1:2,2) = (/1,1/)
+! P(1:2,3) = (/1,0/)
+! P(1:2,4) = (/0,1/)
+
+d(1) = pointDet(X,P(1:2,1),P(1:2,2))
+d(2) = pointDet(X,P(1:2,2),P(1:2,3))
+d(3) = pointDet(X,P(1:2,3),P(1:2,1))
+
+pos = (d(1).GT.0).OR.(d(2).GT.0).OR.(d(3).GT.0)
+neg = (d(1).LT.0).OR.(d(2).LT.0).OR.(d(3).LT.0)
+
+L = .NOT.(pos.AND.neg)
+
+IF(.NOT.L)THEN
+ d(1) = pointDet(X,P(1:2,1),P(1:2,3))
+ d(2) = pointDet(X,P(1:2,3),P(1:2,4))
+ d(3) = pointDet(X,P(1:2,4),P(1:2,1))
+
+ pos = (d(1).GT.0).OR.(d(2).GT.0).OR.(d(3).GT.0)
+ neg = (d(1).LT.0).OR.(d(2).LT.0).OR.(d(3).LT.0)
+
+ L = .NOT.(pos.AND.neg)
+END IF ! .NOT.L
+
+END FUNCTION InsideQuadrilateral
+
SUBROUTINE SetParticlePositionLandmark(chunkSize,particle_positions,mode)
!===================================================================================================================================
@@ -2286,7 +2209,6 @@ SUBROUTINE SetParticlePositionLiu2010SzaboNeutralization(chunkSize,particle_posi
! modules
USE MOD_Globals
USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
-USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared
USE MOD_Particle_Vars ,ONLY: isNeutralizationElem,NeutralizationBalanceElem
@@ -2323,7 +2245,7 @@ SUBROUTINE SetParticlePositionLiu2010SzaboNeutralization(chunkSize,particle_posi
! Count number of emitted particles to compare with chunkSize later on
emittedParticles = emittedParticles + 1
! Emit at random position in element (assume tri-linear element geometry, if position is outside discard the position)
- ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,GlobalElemID) ) ! 1-2: Min, Max value; 1-3: x,y,z
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,GlobalElemID) ) ! 1-2: Min, Max value; 1-3: x,y,z
InsideFlag = .FALSE.
DO WHILE(.NOT.InsideFlag)
CALL RANDOM_NUMBER(RandomPos)
diff --git a/src/particles/emission/particle_emission_vars.f90 b/src/particles/emission/particle_emission_vars.f90
index 9de0b903f..dd242beb6 100644
--- a/src/particles/emission/particle_emission_vars.f90
+++ b/src/particles/emission/particle_emission_vars.f90
@@ -47,7 +47,9 @@ MODULE MOD_Particle_Emission_Vars
REAL :: CylinderHeightIC ! third measure of cylinder
! (set 0 for flat rectangle),
! negative value = opposite direction
- REAL :: VeloIC ! velocity for inital Data
+ REAL :: MinLocation(3) ! Minimal location for cell_local
+ REAL :: MaxLocation(3) ! Maximal location for cell_local
+ REAL :: VeloIC ! Velocity magnitude [m/s]
REAL :: VeloVecIC(3) ! normalized velocity vector
REAL :: Amplitude ! Amplitude for sin-deviation initiation.
REAL :: WaveNumber ! WaveNumber for sin-deviation initiation.
@@ -129,7 +131,7 @@ MODULE MOD_Particle_Emission_Vars
INTEGER :: EmissionDistributionN !< Polynomial degree for particle emission in each element
INTEGER :: EmissionDistributionDim !< Spatial dimension of variable external field data: 1D, 2D or 3D
LOGICAL :: EmissionDistributionAxisSym !< True if the data is axis symmetric, e.g., B(r,z)
-INTEGER :: EmissionDistributionRadInd !< Index of radial r-coordinate when using 2D data and axis symmetric
+INTEGER :: EmissionDistributionRadInd !< Index of radial r-coordinate when using 2D data and axis symmetric
INTEGER :: EmissionDistributionAxisDir !< Direction that is used for the axial symmetric direction (1,2 or 3)
INTEGER :: EmissionDistributionNum(1:3) !< Number of points in x, y and z-direction
REAL :: EmissionDistributionMin(1:3) !< Minimum values in x,y,z
diff --git a/src/particles/emission/particle_macroscopic_restart.f90 b/src/particles/emission/particle_macroscopic_restart.f90
index 4830fc115..6d1788d2c 100644
--- a/src/particles/emission/particle_macroscopic_restart.f90
+++ b/src/particles/emission/particle_macroscopic_restart.f90
@@ -38,12 +38,13 @@ SUBROUTINE MacroRestart_InsertParticles()
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: Pi
USE MOD_DSMC_Vars ,ONLY: RadialWeighting, DSMC
-USE MOD_part_tools ,ONLY: CalcRadWeightMPF,InitializeParticleMaxwell
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_part_tools ,ONLY: CalcRadWeightMPF,InitializeParticleMaxwell, IncreaseMaxParticleNumber
USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
USE MOD_Particle_Vars ,ONLY: Species, PDM, nSpecies, PartState, Symmetry, UseVarTimeStep
USE MOD_Restart_Vars ,ONLY: MacroRestartValues
-USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,BoundsOfElem_Shared
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,BoundsOfElem_Shared, ElemMidPoint_Shared
USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
!-----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
@@ -56,8 +57,8 @@ SUBROUTINE MacroRestart_InsertParticles()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iElem,iSpec,iPart,nPart,locnPart,iHeight,yPartitions,GlobalElemID
-REAL :: iRan, RandomPos(3), PartDens, TempMPF, MaxPosTemp, MinPosTemp
+INTEGER :: iElem,iSpec,iPart,nPart,locnPart,iHeight,yPartitions,CNElemID,GlobalElemID
+REAL :: iRan, RandomPos(3), PartDens, MaxPosTemp, MinPosTemp
REAL :: TempVol, Volume
LOGICAL :: InsideFlag
!===================================================================================================================================
@@ -68,6 +69,7 @@ SUBROUTINE MacroRestart_InsertParticles()
DO iElem = 1, nElems
GlobalElemID = iElem + offsetElem
+ CNElemID = GetCNElemID(GlobalElemID)
ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,GlobalElemID) ) ! 1-2: Min, Max value; 1-3: x,y,z
! #################### 2D ##########################################################################################################
IF (Symmetry%Axisymmetric) THEN
@@ -77,18 +79,17 @@ SUBROUTINE MacroRestart_InsertParticles()
IF (iSpec.EQ.DSMC%AmbiDiffElecSpec) CYCLE
END IF
yPartitions = 6
- PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS)
! Particle weighting
DO iHeight = 1, yPartitions
MinPosTemp = Bounds(1,2) + (Bounds(2,2) - Bounds(1,2))/ yPartitions *(iHeight-1.)
MaxPosTemp = Bounds(1,2) + (Bounds(2,2) - Bounds(1,2))/ yPartitions *iHeight
TempVol = (MaxPosTemp-MinPosTemp)*(Bounds(2,1)-Bounds(1,1)) * Pi * (MaxPosTemp+MinPosTemp)
- TempMPF = CalcRadWeightMPF((MaxPosTemp+MinPosTemp)*0.5,iSpec)
+ PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / CalcRadWeightMPF((MaxPosTemp+MinPosTemp)*0.5,iSpec)
IF(UseVarTimeStep) THEN
- TempMPF = TempMPF * GetParticleTimeStep((Bounds(2,1)+Bounds(1,1))*0.5, (MaxPosTemp+MinPosTemp)*0.5, iElem)
+ PartDens = PartDens * GetParticleTimeStep((Bounds(2,1)+Bounds(1,1))*0.5, (MaxPosTemp+MinPosTemp)*0.5, iElem)
END IF
CALL RANDOM_NUMBER(iRan)
- nPart = INT(PartDens / TempMPF * TempVol + iRan)
+ nPart = INT(PartDens * TempVol + iRan)
DO iPart = 1, nPart
InsideFlag=.FALSE.
CALL RANDOM_NUMBER(RandomPos)
@@ -97,6 +98,7 @@ SUBROUTINE MacroRestart_InsertParticles()
RandomPos(3) = 0.0
InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
IF (InsideFlag) THEN
+ IF (locnPart.GE.PDM%maxParticleNumber) CALL IncreaseMaxParticleNumber()
PartState(1:3,locnPart) = RandomPos(1:3)
CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
locnPart = locnPart + 1
@@ -109,12 +111,13 @@ SUBROUTINE MacroRestart_InsertParticles()
IF (DSMC%DoAmbipolarDiff) THEN
IF (iSpec.EQ.DSMC%AmbiDiffElecSpec) CYCLE
END IF
+ PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / Species(iSpec)%MacroParticleFactor
CALL RANDOM_NUMBER(iRan)
- TempMPF = Species(iSpec)%MacroParticleFactor
IF(UseVarTimeStep) THEN
- TempMPF = TempMPF * GetParticleTimeStep((Bounds(2,1)+Bounds(1,1))*0.5, (Bounds(2,2)+Bounds(1,2))*0.5, iElem)
+ PartDens = PartDens / GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
END IF
- nPart = INT(MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / TempMPF * ElemVolume_Shared(GlobalElemID) + iRan)
+ nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
+ CALL IncreaseMaxParticleNumber(nPart)
DO iPart = 1, nPart
InsideFlag=.FALSE.
DO WHILE (.NOT.InsideFlag)
@@ -136,23 +139,25 @@ SUBROUTINE MacroRestart_InsertParticles()
IF (DSMC%DoAmbipolarDiff) THEN
IF (iSpec.EQ.DSMC%AmbiDiffElecSpec) CYCLE
END IF
+ PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / Species(iSpec)%MacroParticleFactor
CALL RANDOM_NUMBER(iRan)
- TempMPF = Species(iSpec)%MacroParticleFactor
IF(UseVarTimeStep) THEN
- TempMPF = TempMPF * GetParticleTimeStep((Bounds(2,1)+Bounds(1,1))*0.5, (Bounds(2,2)+Bounds(1,2))*0.5, iElem)
+ PartDens = PartDens / GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
END IF
- nPart = INT(MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / TempMPF * Volume + iRan)
+ nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
+ CALL IncreaseMaxParticleNumber(nPart)
+
DO iPart = 1, nPart
InsideFlag=.FALSE.
- CALL RANDOM_NUMBER(RandomPos(1:2))
- RandomPos(1:2) = Bounds(1,1:2) + RandomPos(1:2)*(Bounds(2,1:2)-Bounds(1,1:2))
- RandomPos(3) = 0.0
- InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
- IF (InsideFlag) THEN
- PartState(1:3,locnPart) = RandomPos(1:3)
- CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
- locnPart = locnPart + 1
- END IF
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos(1:2))
+ RandomPos(1:2) = Bounds(1,1:2) + RandomPos(1:2)*(Bounds(2,1:2)-Bounds(1,1:2))
+ RandomPos(3) = 0.0
+ InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
+ END DO
+ PartState(1:3,locnPart) = RandomPos(1:3)
+ CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
+ locnPart = locnPart + 1
END DO ! nPart
END DO ! nSpecies
ELSE IF(Symmetry%Order.EQ.1) THEN
@@ -161,24 +166,25 @@ SUBROUTINE MacroRestart_InsertParticles()
IF (DSMC%DoAmbipolarDiff) THEN
IF (iSpec.EQ.DSMC%AmbiDiffElecSpec) CYCLE
END IF
+ PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / Species(iSpec)%MacroParticleFactor
CALL RANDOM_NUMBER(iRan)
- TempMPF = Species(iSpec)%MacroParticleFactor
IF(UseVarTimeStep) THEN
- TempMPF = TempMPF * GetParticleTimeStep((Bounds(2,1)+Bounds(1,1))*0.5, (Bounds(2,2)+Bounds(1,2))*0.5, iElem)
+ PartDens = PartDens / GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
END IF
- nPart = INT(MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / TempMPF * Volume + iRan)
+ nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
+ CALL IncreaseMaxParticleNumber(nPart)
DO iPart = 1, nPart
InsideFlag=.FALSE.
- CALL RANDOM_NUMBER(RandomPos(1))
- RandomPos(1:2) = Bounds(1,1) + RandomPos(1)*(Bounds(2,1)-Bounds(1,1))
- RandomPos(2) = 0.0
- RandomPos(3) = 0.0
- InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
- IF (InsideFlag) THEN
- PartState(1:3,locnPart) = RandomPos(1:3)
- CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
- locnPart = locnPart + 1
- END IF
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos(1))
+ RandomPos(1:2) = Bounds(1,1) + RandomPos(1)*(Bounds(2,1)-Bounds(1,1))
+ RandomPos(2) = 0.0
+ RandomPos(3) = 0.0
+ InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
+ END DO
+ PartState(1:3,locnPart) = RandomPos(1:3)
+ CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
+ locnPart = locnPart + 1
END DO ! nPart
END DO ! nSpecies
ELSE
@@ -188,31 +194,39 @@ SUBROUTINE MacroRestart_InsertParticles()
IF (DSMC%DoAmbipolarDiff) THEN
IF (iSpec.EQ.DSMC%AmbiDiffElecSpec) CYCLE
END IF
+ PartDens = MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / Species(iSpec)%MacroParticleFactor
CALL RANDOM_NUMBER(iRan)
- TempMPF = Species(iSpec)%MacroParticleFactor
IF(UseVarTimeStep) THEN
- TempMPF = TempMPF * GetParticleTimeStep(iElem=iElem)
+ PartDens = PartDens / GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
END IF
- nPart = INT(MacroRestartValues(iElem,iSpec,DSMC_NUMDENS) / TempMPF * Volume + iRan)
+ nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
+ CALL IncreaseMaxParticleNumber(nPart)
DO iPart = 1, nPart
InsideFlag=.FALSE.
- CALL RANDOM_NUMBER(RandomPos)
- RandomPos(1:3) = Bounds(1,1:3) + RandomPos(1:3)*(Bounds(2,1:3)-Bounds(1,1:3))
- InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
- IF (InsideFlag) THEN
- PartState(1:3,locnPart) = RandomPos(1:3)
- CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
- locnPart = locnPart + 1
- END IF
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos)
+ RandomPos(1:3) = Bounds(1,1:3) + RandomPos(1:3)*(Bounds(2,1:3)-Bounds(1,1:3))
+ InsideFlag = ParticleInsideCheck(RandomPos,iPart,GlobalElemID)
+ END DO
+ PartState(1:3,locnPart) = RandomPos(1:3)
+ CALL InitializeParticleMaxwell(locnPart,iSpec,iElem,Mode=1)
+ locnPart = locnPart + 1
END DO ! nPart
END DO ! nSpecies
END IF ! 1D/2D/Axisymmetric/3D
END ASSOCIATE
END DO ! nElems
-IF(locnPart.GE.PDM%maxParticleNumber) CALL abort(__STAMP__,'ERROR in MacroRestart: Increase maxParticleNumber!', locnPart)
-
PDM%ParticleVecLength = PDM%ParticleVecLength + locnPart
+#ifdef CODE_ANALYZE
+IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+END DO
+#endif
END SUBROUTINE MacroRestart_InsertParticles
diff --git a/src/particles/emission/particle_photoionization.f90 b/src/particles/emission/particle_photoionization.f90
new file mode 100644
index 000000000..e7b8e4e47
--- /dev/null
+++ b/src/particles/emission/particle_photoionization.f90
@@ -0,0 +1,567 @@
+!==================================================================================================================================
+! Copyright (c) 2023 boltzplatz - numerical plasma dynamics GmbH
+!
+! This file is part of PICLas (piclas.boltzplatz.eu/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Particle_Photoionization
+!===================================================================================================================================
+!> Module for particle insertion through photo-ionization
+!===================================================================================================================================
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: PhotoIonization_RayTracing_SEE, PhotoIonization_RayTracing_Volume
+!===================================================================================================================================
+CONTAINS
+
+SUBROUTINE PhotoIonization_RayTracing_SEE()
+!===================================================================================================================================
+!> Routine calculates the number of secondary electrons to be emitted and inserts them on the surface, utilizing the cell-local
+!> photon energy from the raytracing
+!===================================================================================================================================
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: PI
+USE MOD_Timedisc_Vars ,ONLY: dt,time
+USE MOD_Particle_Boundary_Vars ,ONLY: Partbound,DoBoundaryParticleOutputRay
+USE MOD_Particle_Vars ,ONLY: Species, PartState, usevMPF
+USE MOD_RayTracing_Vars ,ONLY: Ray,UseRayTracing,RayElemEmission
+USE MOD_part_emission_tools ,ONLY: CalcPhotonEnergy
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared,UseBezierControlPoints
+USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D, BezierSampleXi
+USE MOD_Particle_Surfaces ,ONLY: EvaluateBezierPolynomialAndGradient, CalcNormAndTangBezier
+USE MOD_Mesh_Vars ,ONLY: NGeo,nBCSides,offsetElem,SideToElem
+USE MOD_part_emission_tools ,ONLY: CalcVelocity_FromWorkFuncSEE
+USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties
+USE MOD_part_operations ,ONLY: CreateParticle
+USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
+USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide
+#ifdef LSERK
+USE MOD_Timedisc_Vars ,ONLY: iStage, RK_c, nRKStages
+#endif
+#if USE_MPI
+!USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides
+!USE MOD_MPI_Shared_Vars ,ONLY: nComputeNodeProcessors,myComputeNodeRank
+#else
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
+#endif /*USE_MPI*/
+!USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall_loc,PhotonSurfSideArea
+#if USE_HDG
+USE MOD_HDG_Vars ,ONLY: UseFPC,FPC,UseEPC,EPC
+USE MOD_Mesh_Vars ,ONLY: BoundaryType
+#endif /*USE_HDG*/
+USE MOD_SurfaceModel_Analyze_Vars ,ONLY: SEE,CalcElectronSEE
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemBaryNGeo
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!----------------------------------------------------------------------------------------------------------------------------------!
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: t_1, t_2, E_Intensity,vec(3)
+INTEGER :: NbrOfRepetitions, SideID, iSample, GlobElemID, PartID, BCSideID, iLocSide, locElemID, iSurfSide, CNElemID
+INTEGER :: p, q, BCID, SpecID, iPart, NbrOfSEE, iSEEBC
+REAL :: RealNbrOfSEE, TimeScalingFactor, MPF
+REAL :: Particle_pos(1:3), xi(2)
+REAL :: RandVal, RandVal2(2), xiab(1:2,1:2), nVec(3), tang1(3), tang2(3), Velo3D(3)
+#if USE_HDG
+INTEGER :: iBC,iUniqueFPCBC,iUniqueEPCBC,BCState
+#endif /*USE_HDG*/
+!===================================================================================================================================
+! Check if ray tracing based SEE is active
+! 1) Boundary from which rays are emitted
+IF(.NOT.UseRayTracing) RETURN
+! 2) SEE yield for any BC greater than zero
+IF(.NOT.ANY(PartBound%PhotonSEEYield(:).GT.0.)) RETURN
+
+! TODO: Copied here from InitParticleMesh, which is only build if not TriaSurfaceFlux
+IF(UseBezierControlPoints)THEN
+ IF(.NOT.ALLOCATED(BezierSampleXi)) ALLOCATE(BezierSampleXi(0:Ray%nSurfSample))
+ DO iSample=0,Ray%nSurfSample
+ BezierSampleXi(iSample)=-1.+2.0/Ray%nSurfSample*iSample
+ END DO
+END IF
+
+! Surf sides are shared, array calculation can be distributed
+!#if USE_MPI
+!firstSide = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1
+!lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))
+!#else
+!firstSide = 1
+!lastSide = nGlobalSurfSides
+!#endif /*USE_MPI*/
+
+ASSOCIATE( tau => Ray%PulseDuration ,&
+ tShift => Ray%tShift ,&
+ lambda => Ray%WaveLength ,&
+ Period => Ray%Period)
+! Temporal bound of integration
+#ifdef LSERK
+IF (iStage.EQ.1) THEN
+t_1 = Time
+t_2 = Time + RK_c(2) * dt
+ELSE
+ IF (iStage.NE.nRKStages) THEN
+ t_1 = Time + RK_c(iStage) * dt
+ t_2 = Time + RK_c(iStage+1) * dt
+ ELSE
+ t_1 = Time + RK_c(iStage) * dt
+ t_2 = Time + dt
+ END IF
+END IF
+#else
+t_1 = Time
+t_2 = Time + dt
+#endif
+
+! Calculate the current pulse
+NbrOfRepetitions = INT(Time/Period)
+
+! Add arbitrary time shift (-4 sigma_t) so that I_max is not at t=0s
+! Note that sigma_t = tau / sqrt(2)
+t_1 = t_1 - tShift - NbrOfRepetitions * Period
+t_2 = t_2 - tShift - NbrOfRepetitions * Period
+
+! check if t_2 is outside of the pulse
+IF(t_2.GT.2.0*tShift) t_2 = 2.0*tShift
+
+TimeScalingFactor = 0.5 * SQRT(PI) * tau * (ERF(t_2/tau)-ERF(t_1/tau))
+
+DO BCSideID=1,nBCSides
+ locElemID = SideToElem(S2E_ELEM_ID,BCSideID)
+ ! Skip elements without ionization
+ IF(.NOT.RayElemEmission(1,locElemID)) CYCLE
+ iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID)
+ SideID = GetGlobalNonUniqueSideID(offsetElem+locElemID,iLocSide)
+ iSurfSide = GlobalSide2SurfSide(SURF_SIDEID,SideID)
+ !SideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ BCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))
+ ! Skip non-reflective BC sides
+ IF(PartBound%TargetBoundCond(BCID).NE.PartBound%ReflectiveBC) CYCLE
+ ! Skip BC sides with zero yield
+ IF(PartBound%PhotonSEEYield(BCID).LE.0.) CYCLE
+ ! Determine which species is to be inserted
+ SpecID = PartBound%PhotonSEEElectronSpecies(BCID)
+ ! Sanity check
+ IF(SpecID.EQ.0)THEN
+ IPWRITE(UNIT_StdOut,*) "BCID =", BCID
+ IPWRITE(UNIT_StdOut,*) "PartBound%PhotonSEEElectronSpecies(BCID) =", PartBound%PhotonSEEElectronSpecies(BCID)
+ CALL abort(__STAMP__,'Electron species index cannot be zero!')
+ END IF ! SpecID.eq.0
+ ! Determine which element the particles are going to be inserted
+ GlobElemID = SideInfo_Shared(SIDE_ELEMID ,SideID)
+ ! Determine the weighting factor of the electron species
+ IF(usevMPF)THEN
+ MPF = PartBound%PhotonSEEMacroParticleFactor(BCID) ! Use SEE-specific MPF
+ ELSE
+ MPF = Species(SpecID)%MacroParticleFactor ! Use species MPF
+ END IF ! usevMPF
+ ! Loop over the subsides
+ DO p = 1, Ray%nSurfSample
+ DO q = 1, Ray%nSurfSample
+ ! Calculate the number of SEEs per subside
+ !E_Intensity = PhotonSampWall(2,p,q,iSurfSide) * TimeScalingFactor
+ E_Intensity = PhotonSampWall_loc(p,q,BCSideID) * PhotonSurfSideArea(p,q,iSurfSide) * TimeScalingFactor
+ RealNbrOfSEE = E_Intensity / CalcPhotonEnergy(lambda) * PartBound%PhotonSEEYield(BCID) / MPF
+ CALL RANDOM_NUMBER(RandVal)
+ NbrOfSEE = INT(RealNbrOfSEE+RandVal)
+ IF(NbrOfSEE.GT.0)THEN
+ ! Check if photon SEE electric current is to be measured
+ IF(CalcElectronSEE)THEN
+ ! Note that the negative value of the charge -q is used below
+ iSEEBC = SEE%BCIDToSEEBCID(BCID)
+ SEE%RealElectronOut(iSEEBC) = SEE%RealElectronOut(iSEEBC) - MPF*NbrOfSEE*Species(SpecID)%ChargeIC
+ END IF ! (NbrOfSEE.GT.0).AND.(CalcElectronSEE)
+ ! Calculate the normal & tangential vectors
+ IF(UseBezierControlPoints)THEN
+ ! Use Bezier polynomial
+ xi(1)=(BezierSampleXi(p-1)+BezierSampleXi(p))/2. ! (a+b)/2
+ xi(2)=(BezierSampleXi(q-1)+BezierSampleXi(q))/2. ! (a+b)/2
+ xiab(1,1:2)=(/BezierSampleXi(p-1),BezierSampleXi(p)/)
+ xiab(2,1:2)=(/BezierSampleXi(q-1),BezierSampleXi(q)/)
+ CALL CalcNormAndTangBezier(nVec,tang1,tang2,xi(1),xi(2),SideID)
+ ELSE
+ ! Sanity check
+ CALL abort(__STAMP__,'Photoionization with ray tracing requires BezierControlPoints3D')
+ END IF ! UseBezierControlPoints
+ ! Normal vector provided by the routine points outside of the domain
+ nVec = -nVec
+ ! Loop over number of particles to be inserted
+ DO iPart = 1, NbrOfSEE
+ ! Determine particle position within the sub-side
+ CALL RANDOM_NUMBER(RandVal2)
+ IF(UseBezierControlPoints)THEN
+ ! Use Bezier polynomial
+ xi=(xiab(:,2)-xiab(:,1))*RandVal2+xiab(:,1)
+ CALL EvaluateBezierPolynomialAndGradient(xi,NGeo,3,BezierControlPoints3D(1:3,0:NGeo,0:NGeo,SideID),Point=Particle_pos(1:3))
+ ELSE
+ ! Sanity check
+ CALL abort(__STAMP__,'Photoionization with ray tracing requires BezierControlPoints3D')
+ END IF ! UseBezierControlPoints
+ ! Determine particle velocity
+ CALL CalcVelocity_FromWorkFuncSEE(PartBound%PhotonSEEWorkFunction(BCID), Species(SpecID)%MassIC, tang1, nVec, Velo3D)
+ ! Move particle slightly into the domain away from the surface because TriaTracking loses the particle during restart
+ ! as the InsideQuad3D test returns "not inside" for these particles and they are deleted
+ CNElemID = GetCNElemID(GlobElemID)
+ vec(1:3) = ElemBaryNGeo(1:3,CNElemID) - Particle_pos(1:3)
+ Particle_pos(1:3) = Particle_pos(1:3) + 1e-7 * vec(1:3)
+ ! Create new particle
+ CALL CreateParticle(SpecID,Particle_pos(1:3),GlobElemID,Velo3D(1:3),0.,0.,0.,NewPartID=PartID,NewMPF=MPF)
+ ! 1. Store the particle information in PartStateBoundary.h5
+ IF(DoBoundaryParticleOutputRay) CALL StoreBoundaryParticleProperties(PartID,SpecID,PartState(1:3,PartID),&
+ UNITVECTOR(PartState(4:6,PartID)),nVec,iPartBound=BCID,mode=2,MPF_optIN=MPF)
+#if USE_HDG
+ ! 2. Check if floating boundary conditions (FPC) are used and consider electron holes
+ IF(UseFPC)THEN
+ iBC = PartBound%MapToFieldBC(BCID)
+ IF(iBC.LE.0) CALL abort(__STAMP__,'iBC = PartBound%MapToFieldBC(PartBCIndex) must be >0',IntInfoOpt=iBC)
+ IF(BoundaryType(iBC,BC_TYPE).EQ.20)THEN ! BCType = BoundaryType(iBC,BC_TYPE)
+ BCState = BoundaryType(iBC,BC_STATE) ! State is iFPC
+ iUniqueFPCBC = FPC%Group(BCState,2)
+ FPC%ChargeProc(iUniqueFPCBC) = FPC%ChargeProc(iUniqueFPCBC) - Species(SpecID)%ChargeIC * MPF ! Use negative charge!
+ END IF ! BCType.EQ.20
+ END IF ! UseFPC
+ ! 3. Check if electric potential condition (EPC) are used and consider electron holes
+ IF(UseEPC)THEN
+ iBC = PartBound%MapToFieldBC(BCID)
+ IF(iBC.LE.0) CALL abort(__STAMP__,'iBC = PartBound%MapToFieldBC(PartBCIndex) must be >0',IntInfoOpt=iBC)
+ IF(BoundaryType(iBC,BC_TYPE).EQ.8)THEN ! BCType = BoundaryType(iBC,BC_TYPE)
+ BCState = BoundaryType(iBC,BC_STATE) ! State is iEPC
+ iUniqueEPCBC = EPC%Group(BCState,2)
+ EPC%ChargeProc(iUniqueEPCBC) = EPC%ChargeProc(iUniqueEPCBC) - Species(SpecID)%ChargeIC * MPF ! Use negative charge!
+ END IF ! BCType.EQ.8
+ END IF ! UseEPC
+#endif /*USE_HDG*/
+ END DO ! iPart = 1, NbrOfSEE
+ END IF ! NbrOfSEE.GT.0
+ END DO ! q = 1, Ray%nSurfSample
+ END DO ! p = 1, Ray%nSurfSample
+END DO
+
+END ASSOCIATE
+
+END SUBROUTINE PhotoIonization_RayTracing_SEE
+
+
+SUBROUTINE PhotoIonization_RayTracing_Volume()
+!===================================================================================================================================
+!> Routine calculates the number of photo-ionization reactions, utilizing the cell-local photon energy from the raytracing
+!===================================================================================================================================
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+! Variables
+USE MOD_Globals_Vars ,ONLY: PI, c
+USE MOD_Timedisc_Vars ,ONLY: dt,time
+USE MOD_Mesh_Vars ,ONLY: nElems, offsetElem
+USE MOD_Mesh_Vars ,ONLY: NGeo,wBaryCL_NGeo,XiCL_NGeo,XCL_NGeo
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing, Ray,RayElemEmission
+USE MOD_RayTracing_Vars ,ONLY: U_N_Ray_loc,N_DG_Ray_loc,N_Inter_Ray
+USE MOD_RayTracing_Vars ,ONLY: RaySecondaryVectorX,RaySecondaryVectorY,RaySecondaryVectorZ
+USE MOD_Particle_Vars ,ONLY: Species, PartState, usevMPF, PartMPF, PDM, PEM, PartSpecies
+USE MOD_DSMC_Vars ,ONLY: ChemReac, DSMC, SpecDSMC, BGGas, Coll_pData, CollisMode, PartStateIntEn
+USE MOD_DSMC_Vars ,ONLY: newAmbiParts, iPartIndx_NodeNewAmbi
+! Functions/Subroutines
+USE MOD_Eval_xyz ,ONLY: TensorProductInterpolation
+USE MOD_part_emission_tools ,ONLY: CalcPhotonEnergy
+USE MOD_DSMC_ChemReact ,ONLY: PhotoIonization_InsertProducts
+USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn, DSMC_SetInternalEnr_LauxVFD
+USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly
+USE MOD_part_tools ,ONLY: CalcVelocity_maxwell_particle
+#if defined(LSERK)
+USE MOD_TimeDisc_Vars ,ONLY: iStage,nRKStages,RK_c
+#endif /*defined(LSERK)*/
+USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties
+USE MOD_Particle_Boundary_Vars ,ONLY: DoBoundaryParticleOutputRay
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
+!----------------------------------------------------------------------------------------------------------------------------------!
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iElem,k,l,m,iReac,iPair,iGlobalElem,iVar
+INTEGER :: SpecID,nPair,NRayLoc,BGGSpecID
+INTEGER :: NbrOfRepetitions
+INTEGER :: PartID,newPartID
+REAL :: t_1, t_2, E_Intensity, TimeScalingFactor
+REAL :: density, NbrOfPhotons, NbrOfReactions
+REAL :: RandNum,RandVal(3),Xi(3)
+REAL :: RandomPos(1:3),MPF
+REAL :: RayDirection(1:3),RayBaseVector1IC(1:3),RayBaseVector2IC(1:3)
+!===================================================================================================================================
+
+IF(.NOT.UseRayTracing) RETURN
+
+! Photo-ionization is currently only supported with CollisMode = 3
+IF(CollisMode.NE.3) RETURN
+
+IF(.NOT.ChemReac%AnyPhIonReaction) RETURN
+
+! Determine the time-dependent ray intensity
+ASSOCIATE(tau => Ray%PulseDuration ,&
+ tShift => Ray%tShift ,&
+ lambda => Ray%WaveLength ,&
+ Period => Ray%Period)
+
+#ifdef LSERK
+IF (iStage.EQ.1) THEN
+t_1 = Time
+t_2 = Time + RK_c(2) * dt
+ELSE
+ IF (iStage.NE.nRKStages) THEN
+ t_1 = Time + RK_c(iStage) * dt
+ t_2 = Time + RK_c(iStage+1) * dt
+ ELSE
+ t_1 = Time + RK_c(iStage) * dt
+ t_2 = Time + dt
+ END IF
+END IF
+#else
+t_1 = Time
+t_2 = Time + dt
+#endif
+
+! Calculate the current pulse
+NbrOfRepetitions = INT(Time/Period)
+
+! Add arbitrary time shift (-4 sigma_t) so that I_max is not at t=0s
+! Note that sigma_t = tau / sqrt(2)
+t_1 = t_1 - tShift - NbrOfRepetitions * Period
+t_2 = t_2 - tShift - NbrOfRepetitions * Period
+
+! check if t_2 is outside of the pulse
+IF(t_2.GT.2.0*tShift) t_2 = 2.0*tShift
+
+TimeScalingFactor = 0.5 * SQRT(PI) * tau * (ERF(t_2/tau)-ERF(t_1/tau))
+
+! Loop over the first and secondary rays
+DO iVar = 1, 2
+ ! Set the direction for the first ray direction before the element loop since it does not change
+ IF(iVar.EQ.1) THEN
+ RayDirection(1:3) = Ray%Direction(1:3)
+ RayBaseVector1IC(1:3) = Ray%BaseVector1IC(1:3)
+ RayBaseVector2IC(1:3) = Ray%BaseVector2IC(1:3)
+ END IF
+ ! Loop over all elements
+ DO iElem=1, nElems
+ ! Skip elements without ionization
+ IF(.NOT.RayElemEmission(iVar,iElem)) CYCLE
+ iGlobalElem = iElem+offSetElem
+ ! Set the ray-direction in case of secondary rays
+ IF(iVar.EQ.2) THEN
+ ! Generate two base vectors perpendicular to the ray direction
+ RayDirection(1:3) = (/RaySecondaryVectorX(iElem),RaySecondaryVectorY(iElem),RaySecondaryVectorZ(iElem)/)
+ ! Check whether the direction is zero
+ IF(.NOT.ALL(RayDirection(1:3).EQ.0.)) THEN
+ CALL OrthoNormVec(RayDirection(1:3),RayBaseVector1IC(1:3),RayBaseVector2IC(1:3))
+ ELSE
+ CYCLE
+ END IF
+ END IF
+ ! Set the element local order and loop over all sub-elements
+ NRayLoc = N_DG_Ray_loc(iElem)
+ DO m=0,NRayLoc
+ DO l=0,NRayLoc
+ DO k=0,NRayLoc
+ E_Intensity = U_N_Ray_loc(iElem)%U(iVar,k,l,m) * TimeScalingFactor
+ ! Number of photons (TODO: spectrum)
+ NbrOfPhotons = E_Intensity / (CalcPhotonEnergy(lambda) * c * dt)
+ DO iReac = 1, ChemReac%NumOfReact
+ SpecID = ChemReac%Reactants(iReac,1)
+ ! TODO: Background gas density distribution
+ BGGSpecID = BGGas%MapSpecToBGSpec(SpecID)
+ density = BGGas%NumberDensity(BGGSpecID)
+ ! Determine the number of particles to insert
+ ! Collision number: Z = n_gas * n_ph * sigma_reac * v (in the case of photons its speed of light)
+ ! Number of reactions: N = Z * dt * V (number of photons cancels out the volume)
+ ! Number of reactions: N = n_gas * N_ph * sigma_reac * v * dt
+ NbrOfReactions = density * NbrOfPhotons * ChemReac%CrossSection(iReac) * c * dt / Species(SpecID)%MacroParticleFactor
+ CALL RANDOM_NUMBER(RandNum)
+ nPair = INT(NbrOfReactions+RandNum)
+ ALLOCATE(Coll_pData(nPair))
+ Coll_pData%Ec = 0.
+ ! Loop over all newly created particles
+ DO iPair = 1, nPair
+ ! Get a random position in the subelement
+ CALL RANDOM_NUMBER(RandVal)
+ Xi(1) = -1.0 + SUM(N_Inter_Ray(NRayLoc)%wGP(0:k-1)) + N_Inter_Ray(NRayLoc)%wGP(k) * RandVal(1)
+ Xi(2) = -1.0 + SUM(N_Inter_Ray(NRayLoc)%wGP(0:l-1)) + N_Inter_Ray(NRayLoc)%wGP(l) * RandVal(2)
+ Xi(3) = -1.0 + SUM(N_Inter_Ray(NRayLoc)%wGP(0:m-1)) + N_Inter_Ray(NRayLoc)%wGP(m) * RandVal(3)
+ IF(ANY(Xi.GT.1.0).OR.ANY(Xi.LT.-1.0))THEN
+ IPWRITE(UNIT_StdOut,*) "Xi =", Xi
+ CALL abort(__STAMP__,'xi out of range')
+ END IF ! ANY(Xi.GT.1.0).OR.ANY(Xi.LT.-1.0)
+ ! Get the physical coordinates that correspond to the reference coordinates
+ CALL TensorProductInterpolation(Xi(1:3),3,NGeo,XiCL_NGeo,wBaryCL_NGeo,XCL_NGeo(1:3,0:NGeo,0:NGeo,0:NGeo,iElem),RandomPos(1:3))
+ ! Create new particle from the background gas
+ PartID = GetNextFreePosition()
+ IF(PartID.GT.PDM%MaxParticleNumber)THEN
+ CALL abort(__STAMP__,'Raytrace Photoionization: PartID.GT.PDM%MaxParticleNumber. '//&
+ 'Increase Part-maxParticleNumber or use more processors. PartID=',IntInfoOpt=PartID)
+ END IF
+ IF(PartID.EQ.0) CALL Abort(__STAMP__,'ERROR in PhotoIonization: MaxParticleNumber should be increased!')
+ ! Set the position
+ PartState(1:3,PartID) = RandomPos(1:3)
+ ! Set the species
+ PartSpecies(PartID) = SpecID
+ ! Set the velocity (required for the collision energy, although relatively small compared to the photon energy)
+ IF(BGGas%UseDistribution) THEN
+ PartState(4:6,PartID) = CalcVelocity_maxwell_particle(SpecID,BGGas%Distribution(BGGSpecID,4:6,iElem)) &
+ + BGGas%Distribution(BGGSpecID,1:3,iElem)
+ ELSE
+ CALL CalcVelocity_maxwell_lpn(FractNbr=SpecID, Vec3D=PartState(4:6,PartID), iInit=1)
+ END IF
+ ! Ambipolar diffusion
+ IF (DSMC%DoAmbipolarDiff) THEN
+ newAmbiParts = newAmbiParts + 1
+ iPartIndx_NodeNewAmbi(newAmbiParts) = PartID
+ END IF
+ ! Set the internal energies
+ IF(CollisMode.GT.1) THEN
+ IF(SpecDSMC(SpecID)%PolyatomicMol) THEN
+ CALL DSMC_SetInternalEnr_Poly(SpecID,1,PartID,1)
+ ELSE
+ CALL DSMC_SetInternalEnr_LauxVFD(SpecID,1,PartID,1)
+ END IF
+ END IF
+ ! Particle flags
+ PDM%ParticleInside(PartID) = .TRUE.
+ PDM%IsNewPart(PartID) = .TRUE.
+ PDM%dtFracPush(PartID) = .FALSE.
+ PEM%GlobalElemID(PartID) = iGlobalElem
+ PEM%LastGlobalElemID(PartID) = iGlobalElem
+ ! Create second particle (only the index and the flags/elements needs to be set)
+ newPartID = GetNextFreePosition()
+ IF(newPartID.GT.PDM%MaxParticleNumber)THEN
+ CALL abort(__STAMP__,'Raytrace Photoionization: newPartID.GT.PDM%MaxParticleNumber. '//&
+ 'Increase Part-maxParticleNumber or use more processors. newPartID=',IntInfoOpt=newPartID)
+ END IF
+ IF (newPartID.EQ.0) THEN
+ CALL Abort(__STAMP__,'ERROR in PhotoIonization: MaxParticleNumber should be increased!')
+ END IF
+ IF (DSMC%DoAmbipolarDiff) THEN
+ newAmbiParts = newAmbiParts + 1
+ iPartIndx_NodeNewAmbi(newAmbiParts) = newPartID
+ END IF
+ ! Set the position
+ PartState(1:3,newPartID) = RandomPos(1:3)
+ ! Particle flags
+ PDM%ParticleInside(newPartID) = .TRUE.
+ PDM%IsNewPart(newPartID) = .TRUE.
+ PDM%dtFracPush(newPartID) = .FALSE.
+ PEM%GlobalElemID(newPartID) = iGlobalElem
+ PEM%LastGlobalElemID(newPartID) = iGlobalElem
+ ! Pairing (first particle is the background gas species)
+ Coll_pData(iPair)%iPart_p1 = PartID
+ Coll_pData(iPair)%iPart_p2 = newPartID
+ ! Relative velocity is not required as the relative translational energy will not be considered
+ Coll_pData(iPair)%CRela2 = 0.
+ ! Weighting factor: use the weighting factor of the emission init
+ MPF = Species(SpecID)%MacroParticleFactor
+ IF(usevMPF) THEN
+ PartMPF(PartID) = MPF
+ PartMPF(newPartID) = MPF
+ END IF
+ ! Store the ion particle information in PartStateBoundary.h5
+ IF(DoBoundaryParticleOutputRay) THEN
+ CALL StoreBoundaryParticleProperties(PartID,SpecID,PartState(1:3,PartID),&
+ UNITVECTOR(PartState(4:6,PartID)),(/0.,0.,1./),iPartBound=0,mode=2,MPF_optIN=MPF)
+ CALL StoreBoundaryParticleProperties(NewPartID,SpecID,PartState(1:3,NewPartID),&
+ UNITVECTOR(PartState(4:6,NewPartID)),(/0.,0.,1./),iPartBound=0,mode=2,MPF_optIN=MPF)
+ END IF ! DoBoundaryParticleOutputRay
+ ! Velocity (set it to zero, as it will be subtracted in the chemistry module)
+ PartState(4:6,newPartID) = 0.
+ ! Internal energies (set it to zero)
+ PartStateIntEn(1:2,newPartID) = 0.
+ IF(DSMC%ElectronicModel.GT.0) PartStateIntEn(3,newPartID) = 0.
+ ! Insert the products and distribute the reaction energy (Requires: Pair indices, Coll_pData(iPair)%iPart_p1/2)
+ IF(DoBoundaryParticleOutputRay) THEN
+ ! Store the electron particle information in PartStateBoundary.h5
+ CALL PhotoIonization_InsertProducts(iPair, iReac, RayBaseVector1IC, RayBaseVector2IC, RayDirection, PartBCIndex=0)
+ ELSE
+ ! DO NOT store the electron particle information in PartStateBoundary.h5
+ CALL PhotoIonization_InsertProducts(iPair, iReac, RayBaseVector1IC, RayBaseVector2IC, RayDirection, PartBCIndex=-1)
+ END IF
+ END DO ! iPart = 1, nPair
+ DEALLOCATE(Coll_pData)
+ END DO ! iReac = 1, ChemReac%NumOfReact
+ END DO ! k
+ END DO ! l
+ END DO ! m
+ END DO ! iElem = 1, nElems
+END DO ! iVar = 1, 2
+
+
+END ASSOCIATE
+
+END SUBROUTINE PhotoIonization_RayTracing_Volume
+
+
+! SUBROUTINE CalcPhotoIonizationNumber(iReac,iElem,NbrOfPhotons,NbrOfReactions)
+! !===================================================================================================================================
+! !>
+! !===================================================================================================================================
+! ! MODULES
+! USE MOD_Globals
+! USE MOD_Globals_Vars ,ONLY: c
+! USE MOD_Particle_Vars ,ONLY: Species
+! USE MOD_DSMC_Vars ,ONLY: BGGas,ChemReac
+! USE MOD_TimeDisc_Vars ,ONLY: dt
+! ! IMPLICIT VARIABLE HANDLING
+! IMPLICIT NONE
+! !-----------------------------------------------------------------------------------------------------------------------------------
+! ! INPUT VARIABLES
+! INTEGER, INTENT(IN) :: i
+! REAL, INTENT(IN) :: NbrOfPhotons
+! !-----------------------------------------------------------------------------------------------------------------------------------
+! ! OUTPUT VARIABLES
+! REAL, INTENT(OUT) :: NbrOfReactions
+! !-----------------------------------------------------------------------------------------------------------------------------------
+! ! LOCAL VARIABLES
+! INTEGER :: iReac,SpecID
+! REAL :: density
+! !===================================================================================================================================
+
+! SpecID = ChemReac%Reactants(iReac,1)
+
+! ! TODO: Background gas density distribution
+! density = BGGas%NumberDensity(BGGas%MapSpecToBGSpec(SpecID))
+! ! TODO: Variable particle weight
+! ! TODO: Variable particle time step
+
+! SELECT CASE(TRIM(ChemReac%ReactModel(iReac)))
+! CASE('phIon')
+! ! Collision number: Z = n_gas * n_ph * sigma_reac * v (in the case of photons its speed of light)
+! ! Number of reactions: N = Z * dt * V (number of photons cancels out the volume)
+! NbrOfReactions = density * NbrOfPhotons * ChemReac%CrossSection(iReac) * c * dt / Species(SpecID)%MacroParticleFactor
+! CASE('phIonXSec')
+! ! TODO:
+! CASE DEFAULT
+! CYCLE
+! END SELECT
+
+! END SUBROUTINE CalcPhotoIonizationNumber
+
+END MODULE MOD_Particle_Photoionization
diff --git a/src/particles/emission/particle_position_and_velocity.f90 b/src/particles/emission/particle_position_and_velocity.f90
index b27368573..71e248449 100644
--- a/src/particles/emission/particle_position_and_velocity.f90
+++ b/src/particles/emission/particle_position_and_velocity.f90
@@ -24,79 +24,85 @@ MODULE MOD_part_pos_and_velo
!-----------------------------------------------------------------------------------------------------------------------------------
! Private Part ---------------------------------------------------------------------------------------------------------------------
! Public Part ----------------------------------------------------------------------------------------------------------------------
-
-INTERFACE SetParticlePosition
- MODULE PROCEDURE SetParticlePosition
-END INTERFACE
-
-INTERFACE SetParticleVelocity
- MODULE PROCEDURE SetParticleVelocity
-END INTERFACE
-
-INTERFACE SetPartPosAndVeloEmissionDistribution
- MODULE PROCEDURE SetPartPosAndVeloEmissionDistribution
-END INTERFACE
-
!===================================================================================================================================
-PUBLIC :: SetParticleVelocity, SetParticlePosition, SetPartPosAndVeloEmissionDistribution
+PUBLIC :: SetParticleVelocity, SetParticlePosition
+PUBLIC :: ParticleEmissionCellLocal, ParticleEmissionFromDistribution
!===================================================================================================================================
CONTAINS
-
-SUBROUTINE SetParticlePositionCellLocal(FractNbr,iInit,NbrOfParticle)
+SUBROUTINE ParticleEmissionCellLocal(iSpec,iInit,NbrOfParticle)
!===================================================================================================================================
-! Set particle position for processor-local particles (only in processor elements)
+!> Routine for inserting particles positions locally in every cell
!===================================================================================================================================
-! modules
+! MODULES
USE MOD_Globals
-USE MOD_Particle_Vars ,ONLY: Species,Symmetry
-USE MOD_part_Emission_Tools ,ONLY: IntegerDivide,SetCellLocalParticlePosition
+USE MOD_part_emission_tools ,ONLY: IntegerDivide
+USE MOD_part_tools ,ONLY: CalcRadWeightMPF
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting
+USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
+USE MOD_Particle_Mesh_Vars ,ONLY: LocalVolume
+USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared,ElemVolume_Shared,ElemMidPoint_Shared
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
+USE MOD_Particle_Vars ,ONLY: Species, PDM, PartState, PEM, Symmetry, UseVarTimeStep, PartTimeStep, PartMPF, PartSpecies
+USE MOD_Particle_Vars ,ONLY: usevMPF, UseSplitAndMerge, vMPFSplitThreshold
+USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
+USE MOD_Part_Tools ,ONLY: IncreaseMaxParticleNumber, GetNextFreePosition
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-USE MOD_Particle_Mesh_Vars ,ONLY: LocalVolume
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIInitGroup
#endif /*USE_MPI*/
-!----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
-INTEGER,INTENT(IN) :: FractNbr, iInit
+INTEGER, INTENT(IN) :: iSpec
+INTEGER, INTENT(IN) :: iInit
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+INTEGER, INTENT(INOUT) :: NbrOfParticle
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
-INTEGER,INTENT(INOUT) :: NbrOfParticle
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: chunkSize
-LOGICAL :: DoExactPartNumInsert
+INTEGER :: iElem, ichunkSize, iGlobalElem
+INTEGER :: iPart, nPart
+REAL :: iRan, RandomPos(3)
+REAL :: PartDens, CellLocalPartMPF
+LOGICAL :: InsideFlag, DoExactPartNumInsert
+INTEGER :: CellChunkSize(1+offsetElem:nElems+offsetElem)
+INTEGER :: chunkSize, chunkSize_tmp, PartID
+INTEGER :: CNElemID
#if USE_MPI
-INTEGER :: InitGroup
-REAL,ALLOCATABLE :: ProcMeshVol(:)
-INTEGER,ALLOCATABLE :: ProcNbrOfParticle(:)
+INTEGER :: InitGroup
+REAL,ALLOCATABLE :: ProcMeshVol(:)
+INTEGER,ALLOCATABLE :: ProcNbrOfParticle(:)
#endif
-!===================================================================================================================================/
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Number of particles contains either a read-in value or calculated from number density
+NbrOfParticle = INT(Species(iSpec)%Init(iInit)%ParticleNumber,4)
DoExactPartNumInsert = .FALSE.
! check if particle inserting during simulation or initial inserting and also if via partdensity or exact particle number
! nbrOfParticles is set for initial inserting if initialPartNum or partdensity is set in ini
! ParticleNumber and PartDensity not working together
-IF (NbrofParticle.EQ.0.AND.(Species(FractNbr)%Init(iInit)%ParticleNumber.EQ.0)) RETURN
-IF ((NbrofParticle.GT.0).AND.(Species(FractNbr)%Init(iInit)%PartDensity.LE.0.)) THEN
+IF (NbrofParticle.EQ.0) RETURN
+IF ((NbrofParticle.GT.0).AND.(Species(iSpec)%Init(iInit)%PartDensity.LE.0.)) THEN
DoExactPartNumInsert = .TRUE.
IF(Symmetry%Axisymmetric) CALL abort(__STAMP__,'Axisymmetric: Particle insertion only possible with PartDensity!')
END IF
chunksize = 0
#if USE_MPI
! emission group communicator
-InitGroup=Species(FractNbr)%Init(iInit)%InitCOMM
-IF(PartMPI%InitGroup(InitGroup)%COMM.EQ.MPI_COMM_NULL) THEN
+InitGroup=Species(iSpec)%Init(iInit)%InitCOMM
+IF(PartMPIInitGroup(InitGroup)%COMM.EQ.MPI_COMM_NULL) THEN
NbrofParticle=0
RETURN
END IF
-IF (PartMPI%InitGroup(InitGroup)%nProcs.GT.1) THEN
+IF (PartMPIInitGroup(InitGroup)%nProcs.GT.1) THEN
IF (DoExactPartNumInsert) THEN !###$ ToDo
- IF (PartMPI%InitGroup(InitGroup)%MPIROOT) THEN
- ALLOCATE(ProcMeshVol(0:PartMPI%InitGroup(InitGroup)%nProcs-1))
- ALLOCATE(ProcNbrOfParticle(0:PartMPI%InitGroup(InitGroup)%nProcs-1))
+ IF (PartMPIInitGroup(InitGroup)%MPIROOT) THEN
+ ALLOCATE(ProcMeshVol(0:PartMPIInitGroup(InitGroup)%nProcs-1))
+ ALLOCATE(ProcNbrOfParticle(0:PartMPIInitGroup(InitGroup)%nProcs-1))
ProcMeshVol=0.
ProcNbrOfParticle=0
ELSE ! to reduce global memory allocation if a lot of procs are used
@@ -106,11 +112,11 @@ SUBROUTINE SetParticlePositionCellLocal(FractNbr,iInit,NbrOfParticle)
ProcNbrOfParticle=0
END IF !InitGroup%MPIroot
CALL MPI_GATHER(LocalVolume,1,MPI_DOUBLE_PRECISION &
- ,ProcMeshVol,1,MPI_DOUBLE_PRECISION,0,PartMPI%InitGroup(InitGroup)%COMM,iError)
- IF (PartMPI%InitGroup(InitGroup)%MPIROOT) THEN
- CALL IntegerDivide(NbrOfParticle,PartMPI%InitGroup(InitGroup)%nProcs,ProcMeshVol,ProcNbrOfParticle)
+ ,ProcMeshVol,1,MPI_DOUBLE_PRECISION,0,PartMPIInitGroup(InitGroup)%COMM,iError)
+ IF (PartMPIInitGroup(InitGroup)%MPIROOT) THEN
+ CALL IntegerDivide(NbrOfParticle,PartMPIInitGroup(InitGroup)%nProcs,ProcMeshVol,ProcNbrOfParticle)
END IF
- CALL MPI_SCATTER(ProcNbrOfParticle, 1, MPI_INTEGER, chunksize, 1, MPI_INTEGER, 0, PartMPI%InitGroup(InitGroup)%COMM, IERROR)
+ CALL MPI_SCATTER(ProcNbrOfParticle, 1, MPI_INTEGER, chunksize, 1, MPI_INTEGER, 0, PartMPIInitGroup(InitGroup)%COMM, IERROR)
SDEALLOCATE(ProcMeshVol)
SDEALLOCATE(ProcNbrOfParticle)
END IF
@@ -120,12 +126,113 @@ SUBROUTINE SetParticlePositionCellLocal(FractNbr,iInit,NbrOfParticle)
#else
IF (DoExactPartNumInsert) chunksize = NbrOfParticle
#endif /*USE_MPI*/
-IF ((chunksize.GT.0).OR.(Species(FractNbr)%Init(iInit)%PartDensity.GT.0.)) THEN
- CALL SetCellLocalParticlePosition(chunkSize,FractNbr,iInit,DoExactPartNumInsert)
+
+IF ((chunksize.EQ.0).AND.(Species(iSpec)%Init(iInit)%PartDensity.EQ.0.)) RETURN
+ ! CALL SetCellLocalParticlePosition(chunkSize,iSpec,iInit,DoExactPartNumInsert)
+
+! Approximate the total number of particles to be inserted
+IF (DoExactPartNumInsert) THEN
+ IF (Species(iSpec)%Init(iInit)%ParticleEmissionType.EQ.0) CALL IncreaseMaxParticleNumber(chunkSize)
+ CellChunkSize(:)=0
+ ASSOCIATE( start => GetCNElemID(1+offsetElem),&
+ end => GetCNElemID(nElems+offsetElem))
+ CALL IntegerDivide(chunkSize,nElems,ElemVolume_Shared(start:end),CellChunkSize(:))
+ END ASSOCIATE
+ELSE
+ PartDens = Species(iSpec)%Init(iInit)%PartDensity / Species(iSpec)%MacroParticleFactor ! numerical Partdensity is needed
+ IF(RadialWeighting%DoRadialWeighting) PartDens = PartDens * 2. / (RadialWeighting%PartScaleFactor)
+ chunkSize_tmp = INT(PartDens * LocalVolume)
+ IF(UseSplitAndMerge) THEN
+ IF(vMPFSplitThreshold(iSpec).GT.0) chunkSize_tmp = nElems * vMPFSplitThreshold(iSpec)
+ END IF
+ IF (Species(iSpec)%Init(iInit)%ParticleEmissionType.EQ.0) CALL IncreaseMaxParticleNumber(chunkSize_tmp)
END IF
-NbrOfParticle = chunksize
-END SUBROUTINE SetParticlePositionCellLocal
+! Loop over all local elements and insert particles
+ichunkSize = 1
+PartID = 1
+DO iElem = 1, nElems
+ iGlobalElem = iElem + offsetElem
+ CNElemID = GetCNElemID(iGlobalElem)
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iGlobalElem), &
+ MinPos => Species(iSpec)%Init(iInit)%MinLocation(1:3), &
+ MaxPos => Species(iSpec)%Init(iInit)%MaxLocation(1:3)) ! 1-2: Min, Max value; 1-3: x,y,z
+ ! Skip elements outside of the defined limits (optional)
+ IF ((ElemMidPoint_Shared(1,CNElemID).LE.MinPos(1)).OR.(ElemMidPoint_Shared(1,CNElemID).GE.MaxPos(1))) CYCLE
+ IF ((ElemMidPoint_Shared(2,CNElemID).LE.MinPos(2)).OR.(ElemMidPoint_Shared(2,CNElemID).GE.MaxPos(2))) CYCLE
+ IF ((ElemMidPoint_Shared(3,CNElemID).LE.MinPos(3)).OR.(ElemMidPoint_Shared(3,CNElemID).GE.MaxPos(3))) CYCLE
+ ! Determine the number of particles
+ IF (DoExactPartNumInsert) THEN
+ ! Number of particles to be inserted through %ParticleNumber: exact particle number or %PartDensity (number depends on cell volume)
+ nPart = CellChunkSize(iGlobalElem)
+ ELSE
+ ! Number of particles to be inserted through %PartDensity: number depends on cell volume, weighting factor or split threshold
+ ! Apply radial weighting
+ IF(RadialWeighting%DoRadialWeighting) THEN
+ PartDens = Species(iSpec)%Init(iInit)%PartDensity / CalcRadWeightMPF(ElemMidPoint_Shared(2,CNElemID), iSpec)
+ ELSE
+ PartDens = Species(iSpec)%Init(iInit)%PartDensity / Species(iSpec)%MacroParticleFactor
+ END IF
+ ! Apply variable time step
+ IF(UseVarTimeStep) THEN
+ PartDens = PartDens / GetParticleTimeStep(ElemMidPoint_Shared(1,CNElemID), ElemMidPoint_Shared(2,CNElemID), iElem)
+ END IF
+ ! Calculate the number of particles
+ CALL RANDOM_NUMBER(iRan)
+ nPart = INT(PartDens * ElemVolume_Shared(CNElemID) + iRan)
+ ! Variable weights: If a threshold for splitting has been defined for the species, insert that as the minimal number of particles
+ IF(UseSplitAndMerge) THEN
+ IF(vMPFSplitThreshold(iSpec).GT.0) THEN
+ nPart = vMPFSplitThreshold(iSpec)
+ CellLocalPartMPF = Species(iSpec)%Init(iInit)%PartDensity * ElemVolume_Shared(CNElemID) / REAL(nPart)
+ END IF
+ END IF
+ END IF
+ ! Insert the determined number of particles
+ DO iPart = 1, nPart
+ PartID = GetNextFreePosition(ichunkSize)
+ InsideFlag=.FALSE.
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos)
+ IF(Symmetry%Axisymmetric.AND.(.NOT.RadialWeighting%DoRadialWeighting)) THEN
+ ! Treatment of axisymmetry without weighting
+ RandomPos(1) = Bounds(1,1) + RandomPos(1)*(Bounds(2,1)-Bounds(1,1))
+ RandomPos(2) = SQRT(RandomPos(2)*(Bounds(2,2)**2-Bounds(1,2)**2)+Bounds(1,2)**2)
+ ELSE
+ RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:))
+ END IF
+ IF(Symmetry%Order.LE.2) RandomPos(3) = 0.
+ IF(Symmetry%Order.LE.1) RandomPos(2) = 0.
+ InsideFlag = ParticleInsideCheck(RandomPos,iPart,iGlobalElem)
+ END DO
+ PartSpecies(PartID) = iSpec
+ PartState(1:3,PartID) = RandomPos(1:3)
+ PDM%ParticleInside(PartID) = .TRUE.
+ PDM%IsNewPart(PartID)=.TRUE.
+ PDM%dtFracPush(PartID) = .FALSE.
+ PEM%GlobalElemID(PartID) = iGlobalElem
+ ichunkSize = ichunkSize + 1
+ IF (UseVarTimeStep) PartTimeStep(PartID) = GetParticleTimeStep(PartState(1,PartID), PartState(2,PartID),iElem)
+ ! Check if vMPF (and radial weighting is used) to determine the MPF of the new particle
+ IF(usevMPF) THEN
+ IF(RadialWeighting%DoRadialWeighting) THEN
+ PartMPF(PartID) = CalcRadWeightMPF(PartState(2,PartID),iSpec,PartID)
+ ELSE
+ PartMPF(PartID) = Species(iSpec)%MacroParticleFactor
+ END IF
+ END IF
+ ! Correct the PartMPF in case the SplitThreshold was used as a fixed number of particles per cell
+ IF(UseSplitAndMerge) THEN
+ IF(vMPFSplitThreshold(iSpec).GT.0) PartMPF(PartID) = CellLocalPartMPF
+ END IF
+ END DO
+ END ASSOCIATE
+END DO
+chunkSize = ichunkSize - 1
+
+NbrOfParticle = chunkSize
+
+END SUBROUTINE ParticleEmissionCellLocal
SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
@@ -134,9 +241,9 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
!===================================================================================================================================
! modules
USE MOD_Globals
-USE MOD_Particle_Vars ,ONLY: Species,PDM,PartState,FractNbrOld,chunkSizeOld,NeutralizationBalance
-USE MOD_Particle_Localization ,ONLY: LocateParticleInElement
-USE MOD_part_emission_tools ,ONLY: IntegerDivide,SetCellLocalParticlePosition,SetParticlePositionPoint
+USE MOD_Particle_Vars ,ONLY: Species,PDM,PartState,FractNbrOld,chunkSizeOld,NeutralizationBalance, PartPosRef, PEM
+USE MOD_Particle_Localization ,ONLY: SinglePointToElement
+USE MOD_part_emission_tools ,ONLY: IntegerDivide,SetParticlePositionPoint
USE MOD_part_emission_tools ,ONLY: SetParticlePositionEquidistLine, SetParticlePositionLine, SetParticlePositionDisk
USE MOD_part_emission_tools ,ONLY: SetParticlePositionCuboidCylinder, SetParticlePositionGyrotronCircle,SetParticlePositionCircle
USE MOD_part_emission_tools ,ONLY: SetParticlePositionSphere, SetParticlePositionSinDeviation
@@ -146,10 +253,12 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
USE MOD_part_emission_tools ,ONLY: SetParticlePositionLandmark,SetParticlePositionLandmarkNeutralization
USE MOD_part_emission_tools ,ONLY: SetParticlePositionLiu2010Neutralization,SetParticlePositionLiu2010Neutralization3D
USE MOD_part_emission_tools ,ONLY: SetParticlePositionLiu2010SzaboNeutralization
-USE MOD_DSMC_Vars ,ONLY: RadialWeighting
+USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
+USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
+USE MOD_Part_Tools ,ONLY: IncreaseMaxParticleNumber, GetNextFreePosition
#if USE_MPI
USE MOD_Particle_MPI_Emission ,ONLY: SendEmissionParticlesToProcs
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIInitGroup
#endif /*USE_MPI*/
!----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
@@ -165,15 +274,11 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
REAL,ALLOCATABLE :: particle_positions(:)
INTEGER :: i,ParticleIndexNbr,allocStat,nChunks, chunkSize
INTEGER :: DimSend
+INTEGER, ALLOCATABLE :: AcceptedParts(:)
#if USE_MPI
INTEGER :: InitGroup
#endif
!===================================================================================================================================
-IF (TRIM(Species(FractNbr)%Init(iInit)%SpaceIC).EQ.'cell_local') THEN
- CALL SetParticlePositionCellLocal(FractNbr,iInit,NbrOfParticle)
- RETURN
-END IF
-
Species(FractNbr)%Init(iInit)%sumOfRequestedParticles = NbrOfParticle
IF((NbrOfParticle.LE.0).AND.(ABS(Species(FractNbr)%Init(iInit)%PartDensity).LE.0.)) RETURN
@@ -185,7 +290,7 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
! emission group communicator
#if USE_MPI
InitGroup=Species(FractNbr)%Init(iInit)%InitCOMM
-IF(PartMPI%InitGroup(InitGroup)%COMM.EQ.MPI_COMM_NULL) THEN
+IF(PartMPIInitGroup(InitGroup)%COMM.EQ.MPI_COMM_NULL) THEN
NbrofParticle=0
RETURN
END IF
@@ -194,15 +299,15 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
(TRIM(Species(FractNbr)%Init(iInit)%SpaceIC).EQ.'circle' ) .OR. &
(TRIM(Species(FractNbr)%Init(iInit)%SpaceIC).EQ.'line_with_equidistant_distribution' )) THEN
nChunks = 1
-ELSE IF (nbrOfParticle.GT.(PartMPI%InitGroup(InitGroup)%nProcs*10)) THEN
- nChunks = PartMPI%InitGroup(InitGroup)%nProcs
+ELSE IF (nbrOfParticle.GT.(PartMPIInitGroup(InitGroup)%nProcs*10)) THEN
+ nChunks = PartMPIInitGroup(InitGroup)%nProcs
ELSE
nChunks = 1
END IF
! Set default chunkSize
chunkSize = INT(nbrOfParticle/nChunks)
-IF (PartMPI%InitGroup(InitGroup)%MPIROOT) THEN
+IF (PartMPIInitGroup(InitGroup)%MPIROOT) THEN
chunkSize = chunkSize*(1-nChunks) + nbrOfParticle
END IF
@@ -218,18 +323,12 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
#if USE_MPI
! all proc taking part in particle inserting
-IF (PartMPI%InitGroup(InitGroup)%MPIROOT.OR.nChunks.GT.1) THEN
+IF (PartMPIInitGroup(InitGroup)%MPIROOT.OR.nChunks.GT.1) THEN
#endif
! Allocate part pos buffer
- IF(RadialWeighting%DoRadialWeighting.AND.(chunkSize.GT.PDM%maxParticleNumber)) THEN
- ALLOCATE( particle_positions(1:PDM%maxParticleNumber*DimSend), STAT=allocStat )
- IF (allocStat .NE. 0) &
- CALL abort(__STAMP__,'ERROR in SetParticlePosition: cannot allocate particle_positions!')
- ELSE
- ALLOCATE( particle_positions(1:chunkSize*DimSend), STAT=allocStat )
- IF (allocStat .NE. 0) &
- CALL abort(__STAMP__,'ERROR in SetParticlePosition: cannot allocate particle_positions!')
- END IF
+ ALLOCATE( particle_positions(1:chunkSize*DimSend), STAT=allocStat )
+ IF (allocStat .NE. 0) &
+ CALL abort(__STAMP__,'ERROR in SetParticlePosition: cannot allocate particle_positions!')
! Sanity check
IF (allocStat .NE. 0) CALL abort(__STAMP__,'ERROR in SetParticlePosition: cannot allocate particle_positions!')
@@ -296,31 +395,35 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
chunkSize = 0
END IF
! Need to open MPI communication regardless of the chunk number. Make it only dependent on the number of procs
-IF (PartMPI%InitGroup(InitGroup)%nProcs.GT.1) THEN
+IF (PartMPIInitGroup(InitGroup)%nProcs.GT.1) THEN
CALL SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles,particle_positions)
! Finish emission on local proc
ELSE
#endif /*USE_MPI*/
- Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles = 0
ParticleIndexNbr = 1
+ ALLOCATE(AcceptedParts(0:chunkSize))
+ AcceptedParts=-1
+ AcceptedParts(0)=0
+ DO i = 1,chunkSize
+ AcceptedParts(i) = SinglePointToElement(particle_positions(DimSend*(i-1)+1:DimSend*(i-1)+DimSend),doHALO=.FALSE.)
+ IF(AcceptedParts(i).NE.-1) AcceptedParts(0) = AcceptedParts(0) + 1
+ END DO
+ Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles = 0
+ IF (Species(FractNbr)%Init(iInit)%ParticleEmissionType.EQ.0) CALL IncreaseMaxParticleNumber(AcceptedParts(0))
DO i = 1,chunkSize
! Find a free position in the PDM array
- IF ((i.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) THEN
- ParticleIndexNbr = PDM%nextFreePosition(Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles + 1 + PDM%CurrentNextFreePosition)
- END IF
- IF (ParticleIndexNbr.NE.0) THEN
+ IF(AcceptedParts(i).NE.-1) THEN
+ Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles = Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles + 1
+ ParticleIndexNbr = GetNextFreePosition(Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles)
PartState(1:DimSend,ParticleIndexNbr) = particle_positions(DimSend*(i-1)+1:DimSend*(i-1)+DimSend)
- PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
- CALL LocateParticleInElement(ParticleIndexNbr,doHALO=.FALSE.)
- IF (PDM%ParticleInside(ParticleIndexNbr)) THEN
- Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles = Species(FractNbr)%Init(iInit)%mySumOfMatchedParticles + 1
- PDM%IsNewPart(ParticleIndexNbr) = .TRUE.
- PDM%dtFracPush(ParticleIndexNbr) = .FALSE.
- END IF
- ELSE
- CALL ABORT(__STAMP__,'ERROR in SetParticlePosition:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
+ PDM%ParticleInside(ParticleIndexNbr)=.TRUE.
+ PEM%GlobalElemID(ParticleIndexNbr) = AcceptedParts(i)
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:DimSend,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),AcceptedParts(i))
+ PDM%IsNewPart(ParticleIndexNbr) = .TRUE.
+ PDM%dtFracPush(ParticleIndexNbr) = .FALSE.
END IF
END DO
+ DEALLOCATE(AcceptedParts)
#if USE_MPI
END IF
@@ -331,8 +434,8 @@ SUBROUTINE SetParticlePosition(FractNbr,iInit,NbrOfParticle)
, MPI_INTEGER &
, MPI_SUM &
, 0 &
- , PartMPI%InitGroup(InitGroup)%COMM &
- , PartMPI%InitGroup(InitGroup)%Request &
+ , PartMPIInitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%Request &
, IERROR)
#else
! in the serial case, particles are only emitted on the current processor
@@ -363,7 +466,7 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
USE MOD_part_emission_tools ,ONLY: CalcVelocity_gyrotroncircle
USE MOD_Particle_Boundary_Vars ,ONLY: DoBoundaryParticleOutputHDF5
USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties
-USE MOD_part_tools ,ONLY: BuildTransGaussNums, InRotRefFrameCheck
+USE MOD_part_tools ,ONLY: BuildTransGaussNums, InRotRefFrameCheck, GetNextFreePosition
USE MOD_Particle_Vars ,ONLY: CalcBulkElectronTemp,BulkElectronTemp
#if USE_HDG
USE MOD_HDG_Vars ,ONLY: UseFPC,FPC,UseEPC,EPC
@@ -378,7 +481,7 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
INTEGER,INTENT(INOUT) :: NbrOfParticle
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: i, PositionNbr
+INTEGER :: iPart, PositionNbr
CHARACTER(30) :: velocityDistribution
REAL :: VeloIC, VeloVecIC(3), maxwellfac, VeloVecNorm
REAL :: iRanPart(3, NbrOfParticle), Vec3D(3),MPF
@@ -401,15 +504,15 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
SELECT CASE(TRIM(velocityDistribution))
CASE('constant')
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
PartState(4:6,PositionNbr) = VeloVecIC(1:3) * VeloIC
END IF
END DO
CASE('gyrotron_circle')
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
CALL CalcVelocity_gyrotroncircle(FractNbr, Vec3D, iInit, PositionNbr)
PartState(4:6,PositionNbr) = Vec3D(1:3)
@@ -419,8 +522,8 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
! maxwell_lpn: Maxwell low particle number
! 2D_landmark: Ionization profile from T. Charoy, 2D axial-azimuthal particle-in-cell benchmark for low-temperature partially
! magnetized plasmas (2019)
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
CALL CalcVelocity_maxwell_lpn(FractNbr, Vec3D, iInit=iInit)
PartState(4:6,PositionNbr) = Vec3D(1:3)
@@ -430,8 +533,8 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
IF(.NOT.CalcBulkElectronTemp) CALL abort(__STAMP__,&
'Velocity distribution 2D_Liu2010_neutralization requires CalcBulkElectronTemp=T')
! Use the global electron temperature if available
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
CALL CalcVelocity_maxwell_lpn(FractNbr, Vec3D, Temperature=BulkElectronTemp*eV2Kelvin)
PartState(4:6,PositionNbr) = Vec3D(1:3)
@@ -440,8 +543,8 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
END IF
END DO
CASE('taylorgreenvortex')
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
CALL CalcVelocity_taylorgreenvortex(FractNbr, Vec3D, iInit=iInit, Element=PEM%GlobalElemID(PositionNbr))
PartState(4:6,PositionNbr) = Vec3D(1:3)
@@ -450,19 +553,21 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
CASE('maxwell')
CALL BuildTransGaussNums(NbrOfParticle, iRanPart)
maxwellfac = SQRT(BoltzmannConst*Species(FractNbr)%Init(iInit)%MWTemperatureIC/Species(FractNbr)%MassIC)
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
- PartState(4:6,PositionNbr) = VeloIC *VeloVecIC(1:3) + iRanPart(1:3,i)*maxwellfac
+ PartState(4:6,PositionNbr) = VeloIC *VeloVecIC(1:3) + iRanPart(1:3,iPart)*maxwellfac
END IF
END DO
CASE('IMD') ! read IMD particle velocity from *.chkpt file -> velocity space has already been read when particles position was done
! do nothing
CASE('photon_SEE_energy')
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr .NE. 0) THEN
- CALL CalcVelocity_FromWorkFuncSEE(FractNbr, Vec3D, iInit=iInit)
+ CALL CalcVelocity_FromWorkFuncSEE(Species(FractNbr)%Init(iInit)%WorkFunctionSEE, &
+ Species(FractNbr)%MassIC, Species(FractNbr)%Init(iInit)%NormalVector1IC, &
+ Species(FractNbr)%Init(iInit)%NormalIC, Vec3D(1:3))
PartState(4:6,PositionNbr) = Vec3D(1:3)
ASSOCIATE( PartBCIndex => Species(FractNbr)%Init(iInit)%PartBCIndex)
@@ -520,8 +625,8 @@ SUBROUTINE SetParticleVelocity(FractNbr,iInit,NbrOfParticle)
END SELECT
IF(UseRotRefFrame) THEN
- DO i = 1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
+ DO iPart = 1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (PositionNbr.GT.0) THEN
PDM%InRotRefFrame(PositionNbr) = InRotRefFrameCheck(PositionNbr)
! Initialize velocity in the rotational frame of reference
@@ -542,14 +647,17 @@ END SUBROUTINE SetParticleVelocity
!> Each processor creates all species randomly in each element using the sub-volumes defined by the Gaussian quadrature and
!> guarantees that at least one particle is created for each sub volume (depending of course on the MPF).
!===================================================================================================================================
-SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
+SUBROUTINE ParticleEmissionFromDistribution(iSpec,iInit,NbrOfParticle)
! modules
!USE MOD_Globals
USE MOD_PreProc
-USE MOD_Globals ,ONLY: myrank,UNIT_StdOut,MPI_COMM_WORLD,abort
-USE MOD_part_tools ,ONLY: InitializeParticleMaxwell,InterpolateEmissionDistribution2D
+#if USE_MPI
+USE MOD_Globals ,ONLY: myrank
+#endif /*USE_MPI*/
+USE MOD_Globals ,ONLY: UNIT_StdOut,abort
+USE MOD_part_tools ,ONLY: InitializeParticleMaxwell,InterpolateEmissionDistribution2D, GetNextFreePosition
USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
-USE MOD_Particle_Vars ,ONLY: Species, PDM, PartState, PEM, LastPartPos
+USE MOD_Particle_Vars ,ONLY: Species, PDM, PartState, PEM, LastPartPos, PartPosRef, PartSpecies
USE MOD_Particle_Tracking ,ONLY: ParticleInsideCheck
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
USE MOD_Particle_Emission_Vars ,ONLY: EmissionDistributionDim, EmissionDistributionN
@@ -559,7 +667,7 @@ SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
USE MOD_Equation ,ONLY: ExactFunc
USE MOD_Mesh_Vars ,ONLY: Elem_xGP,sJ
USE MOD_Interpolation_Vars ,ONLY: NodeTypeVISU,NodeType
-USE MOD_Eval_xyz ,ONLY: TensorProductInterpolation
+USE MOD_Eval_xyz ,ONLY: TensorProductInterpolation, GetPositionInRefElem
USE MOD_Mesh_Vars ,ONLY: NGeo,XCL_NGeo,XiCL_NGeo,wBaryCL_NGeo,offsetElem
USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,BoundsOfElem_Shared
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
@@ -738,13 +846,15 @@ SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
! Exclude particles outside of the element
IF (InsideFlag) THEN
NbrOfParticle = NbrOfParticle + 1
- PositionNbr = PDM%nextFreePosition(NbrOfParticle+PDM%CurrentNextFreePosition)
+ PositionNbr = GetNextFreePosition(NbrOfParticle)
PEM%GlobalElemID(PositionNbr) = GlobalElemID
PDM%ParticleInside(PositionNbr) = .TRUE.
- IF((PositionNbr.GE.PDM%maxParticleNumber).OR.&
- (PositionNbr.EQ.0)) CALL abort(__STAMP__,'Emission: Increase maxParticleNumber!',PositionNbr)
+ PDM%isNewPart(PositionNbr) = .TRUE.
PartState(1:3,PositionNbr) = RandomPos(1:3)
+ IF(TrackingMethod.EQ.REFMAPPING) &
+ CALL GetPositionInRefElem(PartState(1:3,PositionNbr),PartPosRef(1:3,PositionNbr),GlobalElemID)
CALL InitializeParticleMaxwell(PositionNbr,iSpec,iElem,Mode=2,iInit=iInit)
+ PartSpecies(PositionNbr) = iSpec
END IF
END DO ! nPart
END DO ! k
@@ -775,7 +885,7 @@ SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
SELECT CASE(TrackingMethod)
CASE(REFMAPPING,TRACING)
! Attention: NbrOfParticle+PDM%CurrentNextFreePosition + 1
- PositionNbr = PDM%nextFreePosition(NbrOfParticle+PDM%CurrentNextFreePosition + 1)
+ PositionNbr = GetNextFreePosition(NbrOfParticle+1)
PEM%GlobalElemID(PositionNbr) = GlobalElemID
LastPartPos(1:3,PositionNbr) = RandomPos(1:3)
InsideFlag = ParticleInsideCheck(RandomPos,PositionNbr,GlobalElemID)
@@ -788,13 +898,13 @@ SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
! Exclude particles outside of the element
IF (InsideFlag) THEN
NbrOfParticle = NbrOfParticle + 1
- PositionNbr = PDM%nextFreePosition(NbrOfParticle+PDM%CurrentNextFreePosition)
+ PositionNbr = GetNextFreePosition(NbrOfParticle)
PEM%GlobalElemID(PositionNbr) = GlobalElemID
PDM%ParticleInside(PositionNbr) = .TRUE.
- IF((PositionNbr.GE.PDM%maxParticleNumber).OR.&
- (PositionNbr.EQ.0)) CALL abort(__STAMP__,'Emission: Increase maxParticleNumber!',PositionNbr)
+ PDM%isNewPart(PositionNbr) = .TRUE.
PartState(1:3,PositionNbr) = RandomPos(1:3)
CALL InitializeParticleMaxwell(PositionNbr,iSpec,iElem,Mode=2,iInit=iInit)
+ PartSpecies(PositionNbr) = iSpec
END IF
END DO ! nPart
@@ -807,7 +917,7 @@ SUBROUTINE SetPartPosAndVeloEmissionDistribution(iSpec,iInit,NbrOfParticle)
END SELECT
END DO ! iElem = 1, nElems
-END SUBROUTINE SetPartPosAndVeloEmissionDistribution
+END SUBROUTINE ParticleEmissionFromDistribution
END MODULE MOD_part_pos_and_velo
diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90
index 936941611..d9ca9af02 100644
--- a/src/particles/emission/particle_surface_flux.f90
+++ b/src/particles/emission/particle_surface_flux.f90
@@ -35,11 +35,11 @@ SUBROUTINE ParticleSurfaceflux()
! Modules
USE MOD_Globals
USE MOD_Particle_Vars
-USE MOD_part_tools ,ONLY: CalcRadWeightMPF
+USE MOD_part_tools ,ONLY: CalcRadWeightMPF, IncreaseMaxParticleNumber
USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, RadialWeighting, DSMC
USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem
-USE MOD_Part_Tools ,ONLY: GetParticleWeight
+USE MOD_Part_Tools ,ONLY: GetParticleWeight, GetNextFreePosition
USE MOD_Part_Emission_Tools ,ONLY: SetParticleChargeAndMass, SetParticleMPF
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance, CalcSurfFluxInfo, nPartIn, PartEkinIn
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart
@@ -56,9 +56,6 @@ SUBROUTINE ParticleSurfaceflux()
USE MOD_LoadBalance_Vars ,ONLY: nSurfacefluxPerElem
USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBPauseTime
#endif /*USE_LOADBALANCE*/
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -96,13 +93,12 @@ SUBROUTINE ParticleSurfaceflux()
! Adaptive BC, Type = 4 (Const. massflow): Sum-up the global number of particles exiting through BC and calculate new weights
IF(SF%AdaptiveType.EQ.4) THEN
#if USE_MPI
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,AdaptBCPartNumOut(iSpec,iSF),1,MPI_INTEGER,MPI_SUM,PartMPI%COMM,IERROR)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,AdaptBCPartNumOut(iSpec,iSF),1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,IERROR)
#endif
IF(.NOT.ALMOSTEQUAL(SF%AdaptiveMassflow,0.)) CALL CalcConstMassflowWeight(iSpec,iSF)
END IF
- !Calc Particles for insertion in standard case
- IF ((.NOT.DoPoissonRounding).AND.(.NOT. DoTimeDepInflow).AND.(.NOT.RadialWeighting%DoRadialWeighting) &
- .AND.(.NOT.SF%Adaptive)) CALL CalcPartInsSubSidesStandardCase(iSpec,iSF, PartInsSubSides)
+ ! Calc Particles for insertion in standard case
+ IF (SF%Type.EQ.0) CALL CalcPartInsSubSidesStandardCase(iSpec,iSF, PartInsSubSides)
!----- 0.: go through (sub)sides if present in proc
IF (BCdata_auxSF(currentBC)%SideNumber.EQ.0) THEN
@@ -141,29 +137,33 @@ SUBROUTINE ParticleSurfaceflux()
IF(Symmetry%Axisymmetric) CALL DefineSideDirectVec2D(SideID, xyzNod, minPos, RVec)
!-- compute number of to be inserted particles
- IF (.NOT.RadialWeighting%DoRadialWeighting) THEN
- IF(.NOT.SF%Adaptive) THEN
- IF (.NOT.DoPoissonRounding .AND. .NOT.DoTimeDepInflow) THEN
- IF(SF%ThermionicEmission.AND.SF%SchottkyEffectTE) THEN
+ SELECT CASE(SF%Type)
+ CASE(0)
+ ! Standard surface flux with fixed number of particles per side
+ PartInsSubSide=PartInsSubSides(iSample,jSample,iSide)
+ CASE(1)
+ ! Adaptive surface flux: Number of particles depends on velocity/temperature/mass flow (includes treatment for RadialWeighting)
+ CALL CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, minPos, RVec, PartInsSubSide, PartInsSideRadWeight)
+ CASE(2)
+ ! Radial weighting: Number of particles depends on the modified area and includes insertion over subsides
+ CALL CalcPartInsRadWeight(iSpec, iSF, iSample, jSample, iSide, minPos, RVec, PartInsSubSide, PartInsSideRadWeight)
+ CASE(3)
+ ! DoPoissonRounding .AND. .NOT.DoTimeDepInflow
+ CALL CalcPartInsPoissonDistr(iSpec, iSF, iSample, jSample, iSide, PartInsSubSide)
+ CASE(4)
+ ! DoTimeDepInflow
+ CALL RANDOM_NUMBER(RandVal1)
+ PartInsSubSide = INT(SF%PartDensity / Species(iSpec)%MacroParticleFactor &
+ * dt*RKdtFrac * SF%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR+RandVal1)
#if (USE_HDG)
- CALL CalcPartInsThermionicEmissionSchottky(iSpec,iSF,iSample,jSample,iSide,iLocSide,ElemID,PartInsSubSide)
+ CASE(5)
+ ! SF%ThermionicEmission.AND.SF%SchottkyEffectTE
+ CALL CalcPartInsThermionicEmissionSchottky(iSpec,iSF,iSample,jSample,iSide,iLocSide,ElemID,PartInsSubSide)
#endif
- ELSE
- PartInsSubSide=PartInsSubSides(iSample,jSample,iSide)
- END IF
- ELSE IF(DoPoissonRounding .AND. .NOT.DoTimeDepInflow)THEN
- CALL CalcPartInsPoissonDistr(iSpec, iSF, iSample, jSample, iSide, PartInsSubSide)
- ELSE !DoTimeDepInflow
- CALL RANDOM_NUMBER(RandVal1)
- PartInsSubSide = INT(SF%PartDensity / Species(iSpec)%MacroParticleFactor &
- * dt*RKdtFrac * SF%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR+RandVal1)
- END IF !DoPoissonRounding
- ELSE !SF%Adaptive
- CALL CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, PartInsSubSide)
- END IF ! Adaptive SurfaceFlux
- ELSE
- CALL CalcPartInsRadWeight(iSpec, iSF, iSample, jSample, iSide, minPos, RVec, PartInsSubSide, PartInsSideRadWeight)
- END IF ! noAdaptive.AND.(.NOT.Symmetry2DAxisymmetric)
+ CASE DEFAULT
+ CALL abort(__STAMP__,'ERROR in ParticleSurfaceflux: Given surface flux type is not defined!')
+ END SELECT
+
!-- proceed with calculated to be inserted particles
IF (PartInsSubSide.LT.0) THEN
IPWRITE(*,*) 'ERROR in ParticleSurfaceflux: Calculated number of particles to insert below zero! PartInsSubSide: ', PartInsSubSide
@@ -184,7 +184,7 @@ SUBROUTINE ParticleSurfaceflux()
!-- Set Positions
IF(Symmetry%Axisymmetric) THEN
- CALL CalcPartPosRadWeight(iSpec, iSF, iSide, minPos, RVec, PartInsSubSide, PartInsSideRadWeight, particle_positions, allowedRejections)
+ CALL CalcPartPosAxisym(iSpec, iSF, iSide, minPos, RVec, PartInsSubSide, PartInsSideRadWeight, particle_positions, allowedRejections)
ELSE
DO WHILE (iPart+allowedRejections .LE. PartInsSubSide)
IF (TriaSurfaceFlux) THEN
@@ -221,39 +221,34 @@ SUBROUTINE ParticleSurfaceflux()
ParticleIndexNbr = 1
DO iPart=1,PartInsSubSide
IF ((iPart.EQ.1).OR.PDM%ParticleInside(ParticleIndexNbr)) &
- ParticleIndexNbr = PDM%nextFreePosition(iPartTotal + 1 + PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr .ne. 0) THEN
- PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3)
- IF (SF%VeloIsNormal.AND.(.NOT.TriaSurfaceFlux)) THEN
- PartState(4:5,ParticleIndexNbr) = particle_xis(2*(iPart-1)+1:2*(iPart-1)+2) !use velo as dummy-storage for xi!
- END IF
- LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr)
+ ParticleIndexNbr = GetNextFreePosition(iPartTotal+1)
+ PartState(1:3,ParticleIndexNbr) = particle_positions(3*(iPart-1)+1:3*(iPart-1)+3)
+ IF (SF%VeloIsNormal.AND.(.NOT.TriaSurfaceFlux)) THEN
+ PartState(4:5,ParticleIndexNbr) = particle_xis(2*(iPart-1)+1:2*(iPart-1)+2) !use velo as dummy-storage for xi!
+ END IF
+ LastPartPos(1:3,ParticleIndexNbr)=PartState(1:3,ParticleIndexNbr)
#if defined(IMPA) || defined(ROS)
- IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),globElemId)
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),globElemId)
#endif /*IMPA*/
- PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
- PDM%dtFracPush(ParticleIndexNbr) = .TRUE.
- PDM%IsNewPart(ParticleIndexNbr) = .TRUE.
- PEM%GlobalElemID(ParticleIndexNbr) = globElemId
- PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay"
- iPartTotal = iPartTotal + 1
- IF (UseVarTimeStep) THEN
- PartTimeStep(ParticleIndexNbr) = GetParticleTimeStep(PartState(1,ParticleIndexNbr),PartState(2,ParticleIndexNbr), &
- PEM%LocalElemID(ParticleIndexNbr))
- END IF
- IF (RadialWeighting%DoRadialWeighting) THEN
- PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr)
- END IF
- IF(CalcSurfFluxInfo) THEN
- SF%SampledMassflow = SF%SampledMassflow + GetParticleWeight(ParticleIndexNbr)
- END IF
+ PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
+ PDM%dtFracPush(ParticleIndexNbr) = .TRUE.
+ PDM%IsNewPart(ParticleIndexNbr) = .TRUE.
+ PEM%GlobalElemID(ParticleIndexNbr) = globElemId
+ PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay"
+ iPartTotal = iPartTotal + 1
+ IF (UseVarTimeStep) THEN
+ PartTimeStep(ParticleIndexNbr) = GetParticleTimeStep(PartState(1,ParticleIndexNbr),PartState(2,ParticleIndexNbr), &
+ PEM%LocalElemID(ParticleIndexNbr))
+ END IF
+ IF (RadialWeighting%DoRadialWeighting) THEN
+ PartMPF(ParticleIndexNbr) = CalcRadWeightMPF(PartState(2,ParticleIndexNbr), iSpec,ParticleIndexNbr)
+ END IF
+ IF(CalcSurfFluxInfo) THEN
+ SF%SampledMassflow = SF%SampledMassflow + GetParticleWeight(ParticleIndexNbr)
+ END IF
#ifdef CODE_ANALYZE
- CALL AnalyzePartPos(ParticleIndexNbr)
+ CALL AnalyzePartPos(ParticleIndexNbr)
#endif /*CODE_ANALYZE*/
- ELSE
- IPWRITE(*,*) 'Total number of particles emitted: ', PartsEmitted, ' Current number of particles: ', PartInsSubSide
- CALL abort(__STAMP__,'ERROR in ParticleSurfaceflux: ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
- END IF
END DO
!----- 2a.: set velocities if special for each subside
CALL SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartInsSubSide)
@@ -262,12 +257,6 @@ SUBROUTINE ParticleSurfaceflux()
IF (useDSMC) THEN
IF (DSMC%DoAmbipolarDiff) CALL AD_SetSFElectronVelo(iSpec,iSF,iSample,jSample,iSide,BCSideID,SideID,ElemID,NbrOfParticle,PartInsSubSide,particle_xis)
- DO iPart = 1, NbrOfParticle
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr .EQ. 0) THEN
- CALL abort(__STAMP__,'ERROR in InitialParticleInserting: No free particle index - maximum nbr of particles reached?')
- END IF
- END DO
END IF
IF (SF%VeloIsNormal .AND. .NOT.TriaSurfaceFlux) DEALLOCATE(particle_xis)
@@ -296,14 +285,24 @@ SUBROUTINE ParticleSurfaceflux()
! Compute number of input particles and energy
nPartIn(iSpec)=nPartIn(iSpec) + NbrOfParticle
DO iPart=1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr.NE.0) PartEkinIn(iSpec) = PartEkinIn(iSpec)+CalcEkinPart(PositionNbr)
+ PositionNbr = GetNextFreePosition(iPart)
+ PartEkinIn(iSpec) = PartEkinIn(iSpec)+CalcEkinPart(PositionNbr)
END DO ! iPart
END IF ! CalcPartBalance
! instead of an UpdateNextfreePosition we update the particleVecLength only - enough ?!?
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle
- PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfParticle
- IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL abort(__STAMP__, 'Error ParticleSurfaceflux: Maximum number of particles reached!')
+ IF(iPartTotal.GT.0) THEN
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + NbrOfParticle
+ PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0))
+ END IF
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+ DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+ END DO
+#endif
#if USE_LOADBALANCE
CALL LBPauseTime(LB_SURFFLUX,tLBStart)
#endif /*USE_LOADBALANCE*/
@@ -329,9 +328,6 @@ SUBROUTINE CalcPartInsSubSidesStandardCase(iSpec, iSF, PartInsSubSides)
USE MOD_TimeDisc_Vars ,ONLY: dt, RKdtFrac, RKdtFracTotal, Time
USE MOD_Particle_Surfaces_Vars ,ONLY: SurfFluxSideSize, BCdata_auxSF
USE MOD_Part_Emission_Tools ,ONLY: IntegerDivide, SamplePoissonDistri
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -404,7 +400,7 @@ SUBROUTINE CalcPartInsSubSidesStandardCase(iSpec, iSF, PartInsSubSides)
END IF !ReduceNoise, MPIroot
#if USE_MPI
IF (SF%ReduceNoise) THEN !scatter PartInsProc into PartInsSF of procs
- CALL MPI_SCATTER(PartInsProc(0:nProcessors-1),1,MPI_INTEGER,PartInsSF,1,MPI_INTEGER,0,PartMPI%COMM,IERROR)
+ CALL MPI_SCATTER(PartInsProc(0:nProcessors-1),1,MPI_INTEGER,PartInsSF,1,MPI_INTEGER,0,MPI_COMM_PICLAS,IERROR)
END IF !ReduceNoise
#endif /*USE_MPI*/
!-- calc global to-be-inserted number of parts and distribute to SubSides (proc local)
@@ -532,9 +528,9 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle)
! MODULES
USE MOD_Globals
USE MOD_DSMC_Vars ,ONLY: SpecDSMC
-USE MOD_Particle_Vars ,ONLY: PDM
USE MOD_DSMC_PolyAtomicModel ,ONLY: DSMC_SetInternalEnr_Poly
USE MOD_part_emission_tools ,ONLY: DSMC_SetInternalEnr_LauxVFD
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -547,16 +543,13 @@ SUBROUTINE SetInnerEnergies(iSpec, iSF, NbrOfParticle)
INTEGER :: iPart, PositionNbr
!===================================================================================================================================
iPart = 1
-DO WHILE (iPart .le. NbrOfParticle)
- PositionNbr = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr .ne. 0) THEN
+DO iPart=1,NbrOfParticle
+ PositionNbr = GetNextFreePosition(iPart)
IF (SpecDSMC(iSpec)%PolyatomicMol) THEN
CALL DSMC_SetInternalEnr_Poly(iSpec,iSF,PositionNbr,2)
ELSE
CALL DSMC_SetInternalEnr_LauxVFD(iSpec, iSF, PositionNbr,2)
END IF
- END IF
- iPart = iPart + 1
END DO
END SUBROUTINE SetInnerEnergies
@@ -725,7 +718,7 @@ END FUNCTION CalcPartPosTriaSurface
!===================================================================================================================================
!> Calculate a random particle position for the case of radial weighting (2D axisymmetric)
!===================================================================================================================================
-SUBROUTINE CalcPartPosRadWeight(iSpec,iSF,iSide,minPos,RVec,PartInsSubSide,PartInsSideRadWeight,particle_positions,allowedRejections)
+SUBROUTINE CalcPartPosAxisym(iSpec,iSF,iSide,minPos,RVec,PartInsSubSide,PartInsSideRadWeight,particle_positions,allowedRejections)
! MODULES
! IMPLICIT VARIABLE HANDLING
USE MOD_Globals
@@ -816,7 +809,7 @@ SUBROUTINE CalcPartPosRadWeight(iSpec,iSF,iSide,minPos,RVec,PartInsSubSide,PartI
END DO
END IF
-END SUBROUTINE CalcPartPosRadWeight
+END SUBROUTINE CalcPartPosAxisym
!===================================================================================================================================
@@ -911,7 +904,7 @@ END SUBROUTINE CalcPartInsPoissonDistr
!===================================================================================================================================
!> Calculate the particle number per side for the case of adaptive surface flux BCs
!===================================================================================================================================
-SUBROUTINE CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, PartInsSubSide)
+SUBROUTINE CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, minPos, RVec, PartInsSubSide, PartInsSideRadWeight)
! MODULES
! IMPLICIT VARIABLE HANDLING
USE MOD_Globals
@@ -921,27 +914,30 @@ SUBROUTINE CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, Pa
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMacroVal, AdaptBCMapElemToSample, AdaptBCBackupVelocity, AdaptBCPartNumOut
USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData
USE MOD_Mesh_Vars ,ONLY: SideToElem
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
INTEGER, INTENT(IN) :: iSpec, iSF, BCSideID, iSide, jSample, iSample
-INTEGER, INTENT(OUT) :: PartInsSubSide
+REAL, INTENT(IN) :: minPos(2), RVec(2)
+INTEGER, INTENT(OUT) :: PartInsSubSide, PartInsSideRadWeight(:)
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL :: ElemPartDensity, T, pressure, VeloVec(3), vec_nIn(3), veloNormal, VeloIC, VeloVecIC(3)
REAL :: projFak, a, v_thermal, vSF, nVFR, RandVal1, dtVar
-INTEGER :: ElemID, SampleElemID
+INTEGER :: iSub, ElemID, SampleElemID
!===================================================================================================================================
! Species-specific time step
IF(VarTimeStep%UseSpeciesSpecific) THEN
- dtVar = dt * Species(iSpec)%TimeStepFactor
+ dtVar = dt * RKdtFrac * Species(iSpec)%TimeStepFactor
ELSE
- dtVar = dt
+ dtVar = dt * RKdtFrac
END IF
+! 1) Calculate the velocity, density and/or temperature based on the selected BC type
ElemID = SideToElem(1,BCSideID)
SampleElemID = AdaptBCMapElemToSample(ElemID)
SELECT CASE(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType)
@@ -951,7 +947,7 @@ SUBROUTINE CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, Pa
CASE(2) ! adaptive Outlet/freestream
ElemPartDensity = AdaptBCMacroVal(4,SampleElemID,iSpec)
pressure = Species(iSpec)%Surfaceflux(iSF)%AdaptivePressure
- T = pressure / (BoltzmannConst * AdaptBCMacroVal(4,SampleElemID,iSpec))
+ T = pressure / (BoltzmannConst * ElemPartDensity)
CASE(3) ! Mass flow, temperature constant
VeloVec(1:3) = AdaptBCMacroVal(1:3,SampleElemID,iSpec)
vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
@@ -994,30 +990,53 @@ SUBROUTINE CalcPartInsAdaptive(iSpec, iSF, BCSideID, iSide, iSample, jSample, Pa
projFak = DOT_PRODUCT(vec_nIn,VeloVecIC) !VeloVecIC projected to inwards normal
v_thermal = SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC) !thermal speed
a = 0 !dummy for projected speed ratio in constant v-distri
-!-- compute total volume flow rate through surface
+
+! 2) Compute total volume flow rate through surface depending on the area and velocity/temperature
SELECT CASE(TRIM(Species(iSpec)%Surfaceflux(iSF)%velocityDistribution))
CASE('constant')
vSF = VeloIC * projFak !Velo proj. to inwards normal
- nVFR = MAX(SurfMeshSubSideData(iSample,jSample,BCSideID)%area * vSF,0.) !VFR proj. to inwards normal (only positive parts!)
+ vSF = MAX(vSF,0.) !VFR proj. to inwards normal (only positive parts!)
CASE('maxwell','maxwell_lpn')
IF ( ALMOSTEQUAL(v_thermal,0.)) THEN
v_thermal = 1.
END IF
a = VeloIC * projFak / v_thermal !speed ratio proj. to inwards n (can be negative!)
vSF = v_thermal / (2.0*SQRT(PI)) * ( EXP(-(a*a)) + a*SQRT(PI)*(1+ERF(a)) ) !mean flux velocity through normal sub-face
- nVFR = SurfMeshSubSideData(iSample,jSample,BCSideID)%area * vSF !VFR projected to inwards normal of sub-side
CASE DEFAULT
CALL abort(__STAMP__,'ERROR in CalcPartInsAdaptive: Wrong velocity distribution!')
END SELECT
+
+IF(RadialWeighting%DoRadialWeighting) THEN
+ ! In case of adaptive SF, nVFR is initialized as only a weighted area
+ nVFR = Species(iSpec)%Surfaceflux(iSF)%SurfFluxSubSideData(iSample,jSample,iSide)%nVFR * vSF
+ELSE
+ nVFR = SurfMeshSubSideData(iSample,jSample,BCSideID)%area * vSF
+END IF
+
+! 3) Calculate the actual number of particles per side
IF(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) THEN
+ ! TODO: RADIAL WEIGHTING TREATMENT
CALL RANDOM_NUMBER(RandVal1)
PartInsSubSide = INT(Species(iSpec)%Surfaceflux(iSF)%ConstMassflowWeight(iSample,jSample,iSide) &
- * (Species(iSpec)%Surfaceflux(iSF)%AdaptiveMassflow * dtVar*RKdtFrac &
+ * (Species(iSpec)%Surfaceflux(iSF)%AdaptiveMassflow * dtVar &
/ (Species(iSpec)%MassIC * Species(iSpec)%MacroParticleFactor) &
+ REAL(AdaptBCPartNumOut(iSpec,iSF))) +RandVal1)
ELSE
CALL RANDOM_NUMBER(RandVal1)
- PartInsSubSide = INT(ElemPartDensity / Species(iSpec)%MacroParticleFactor * dtVar*RKdtFrac * nVFR+RandVal1)
+ PartInsSubSide = INT(ElemPartDensity / Species(iSpec)%MacroParticleFactor * dtVar * nVFR + RandVal1)
+ ! Radial weighting: subdivide the side into smaller subsides to improve distribution
+ IF(RadialWeighting%DoRadialWeighting.AND..NOT.RadialWeighting%CellLocalWeighting) THEN
+ ! Skip sides parallel to rotational axis
+ IF(.NOT.ALMOSTEQUAL(minPos(2),minPos(2)+RVec(2))) THEN
+ PartInsSubSide = 0
+ DO iSub = 1, RadialWeighting%nSubSides
+ CALL RANDOM_NUMBER(RandVal1)
+ PartInsSideRadWeight(iSub) = INT(ElemPartDensity / Species(iSpec)%MacroParticleFactor &
+ * dtVar * Species(iSpec)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) * vSF + RandVal1)
+ PartInsSubSide = PartInsSubSide + PartInsSideRadWeight(iSub)
+ END DO
+ END IF
+ END IF
END IF
! DEBUG OUTPUT
@@ -1059,9 +1078,6 @@ SUBROUTINE CalcConstMassflowWeight(iSpec,iSF)
USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData, BCdata_auxSF, SurfFluxSideSize
USE MOD_Mesh_Vars ,ONLY: SideToElem, offsetElem
USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif
!----------------------------------------------------------------------------------------------------------------------------------!
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -1152,7 +1168,7 @@ SUBROUTINE CalcConstMassflowWeight(iSpec,iSF)
! Calculate the total volume flow rate over the whole BC across all processors
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,nVFRTotal,1,MPI_DOUBLE,MPI_SUM,PartMPI%COMM,IERROR)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,nVFRTotal,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_PICLAS,IERROR)
#endif
! Determine the weight of each side compared to the total volume flow rate
@@ -1193,7 +1209,7 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid
USE MOD_Particle_Surfaces_Vars ,ONLY: SurfMeshSubSideData, TriaSurfaceFlux
USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangBezier
USE MOD_Particle_Sampling_Vars ,ONLY: AdaptBCMapElemToSample, AdaptBCMacroVal
-USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck
+USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck, GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1274,25 +1290,23 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid
VeloVecIC(1:3) = VeloVecIC(1:3) / VECNORM(VeloVecIC(1:3))
END IF
DO i = NbrOfParticle-PartIns+1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5)
- IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
- vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
- vec_t1(1:3) = 0. !dummy
- vec_t2(1:3) = 0. !dummy
- ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
- CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
- vec_nIn(1:3) = -vec_nIn(1:3)
- vec_t1(1:3) = 0. !dummy
- vec_t2(1:3) = 0. !dummy
- ELSE
- vec_nIn(1:3) = VeloVecIC(1:3)
- END IF !VeloIsNormal
- ! Build complete velo-vector
- Vec3D(1:3) = vec_nIn(1:3) * Species(iSpec)%Surfaceflux(iSF)%VeloIC
- PartState(4:6,PositionNbr) = Vec3D(1:3)
- END IF !PositionNbr .NE. 0
+ PositionNbr = GetNextFreePosition(i)
+ ! In case of side-normal velocities: calc n-vector at particle position, xi was saved in PartState(4:5)
+ IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
+ vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
+ vec_t1(1:3) = 0. !dummy
+ vec_t2(1:3) = 0. !dummy
+ ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
+ CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
+ vec_nIn(1:3) = -vec_nIn(1:3)
+ vec_t1(1:3) = 0. !dummy
+ vec_t2(1:3) = 0. !dummy
+ ELSE
+ vec_nIn(1:3) = VeloVecIC(1:3)
+ END IF !VeloIsNormal
+ ! Build complete velo-vector
+ Vec3D(1:3) = vec_nIn(1:3) * Species(iSpec)%Surfaceflux(iSF)%VeloIC
+ PartState(4:6,PositionNbr) = Vec3D(1:3)
END DO !i = ...NbrOfParticle
CASE('maxwell','maxwell_lpn')
!-- determine envelope for most efficient ARM [Garcia and Wagner 2006, JCP217-2]
@@ -1316,140 +1330,136 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid
END IF !low speed / high speed / rayleigh flow
DO i = NbrOfParticle-PartIns+1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr .NE. 0) THEN
- !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5)
- IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
- vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
- vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3)
- vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3)
- ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
- CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
- ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
- vec_nIn(1:3) = -vec_nIn(1:3)
- END IF !VeloIsNormal
- !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times!
- SELECT CASE(envelope)
- CASE(0)
- CALL RANDOM_NUMBER(RandVal1)
- zstar = -SQRT(-LOG(RandVal1))
- CASE(1)
- DO
- CALL RANDOM_NUMBER(RandVal2)
- zstar = -SQRT(a*a-LOG(RandVal2(1)))
- IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN
+ PositionNbr = GetNextFreePosition(i)
+ !-- 0a.: In case of side-normal velocities: calc n-/t-vectors at particle position, xi was saved in PartState(4:5)
+ IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal .AND. TriaSurfaceFlux) THEN
+ vec_nIn(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_nIn(1:3)
+ vec_t1(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t1(1:3)
+ vec_t2(1:3) = SurfMeshSubSideData(iSample,jSample,BCSideID)%vec_t2(1:3)
+ ELSE IF (Species(iSpec)%Surfaceflux(iSF)%VeloIsNormal) THEN
+ CALL CalcNormAndTangBezier( nVec=vec_nIn(1:3),tang1=vec_t1(1:3),tang2=vec_t2(1:3) &
+ ,xi=PartState(4,PositionNbr),eta=PartState(5,PositionNbr),SideID=SideID )
+ vec_nIn(1:3) = -vec_nIn(1:3)
+ END IF !VeloIsNormal
+ !-- 1.: determine zstar (initial generation of potentially too many RVu is for needed indentities of RVu used multiple times!
+ SELECT CASE(envelope)
+ CASE(0)
+ CALL RANDOM_NUMBER(RandVal1)
+ zstar = -SQRT(-LOG(RandVal1))
+ CASE(1)
+ DO
+ CALL RANDOM_NUMBER(RandVal2)
+ zstar = -SQRT(a*a-LOG(RandVal2(1)))
+ IF ( -(a-zstar)/zstar .GT. RandVal2(2)) THEN
+ EXIT
+ END IF
+ END DO
+ CASE(2)
+ z = 0.5*(a-SQRT(a*a+2.))
+ beta = a-(1.0-a)*(a-z)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN
+ zstar=-SQRT(beta*beta-LOG(RandVal3(2)))
+ IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN
EXIT
END IF
- END DO
- CASE(2)
- z = 0.5*(a-SQRT(a*a+2.))
- beta = a-(1.0-a)*(a-z)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- IF (EXP(-(beta*beta))/(EXP(-(beta*beta))+2.0*(a-z)*(a-beta)*EXP(-(z*z))).GT.RandVal3(1)) THEN
- zstar=-SQRT(beta*beta-LOG(RandVal3(2)))
- IF ( -(a-zstar)/zstar .GT. RandVal3(3)) THEN
- EXIT
- END IF
- ELSE
- zstar=beta+(a-beta)*RandVal3(2)
- IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN
- EXIT
- END IF
+ ELSE
+ zstar=beta+(a-beta)*RandVal3(2)
+ IF ( (a-zstar)/(a-z)*EXP(z*z-(zstar*zstar)) .GT. RandVal3(3)) THEN
+ EXIT
END IF
- END DO
- CASE(3)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- u = RandVal3(1)
- IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
+ END IF
+ END DO
+ CASE(3)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ u = RandVal3(1)
+ IF ( a*SQRT(PI)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
! IF (.NOT.DoZigguratSampling) THEN !polar method
- IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
- RandN = RandN_save
- RandN_in_Mem=.FALSE.
- ELSE
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_in_Mem=.TRUE.
- END IF
+ IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
+ RandN = RandN_save
+ RandN_in_Mem=.FALSE.
+ ELSE
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_in_Mem=.TRUE.
+ END IF
! ELSE !ziggurat method
! RandN=rnor()
! END IF
- zstar = -1./SQRT(2.)*ABS(RandN)
- EXIT
- ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
- zstar = -SQRT(-LOG(RandVal3(2)))
+ zstar = -1./SQRT(2.)*ABS(RandN)
+ EXIT
+ ELSE IF ( (a*SQRT(PI)+1.)/(a*SQRT(PI)+1+a*a) .GT. u) THEN
+ zstar = -SQRT(-LOG(RandVal3(2)))
+ EXIT
+ ELSE
+ zstar = (1.0-SQRT(RandVal3(2)))*a
+ IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN
EXIT
- ELSE
- zstar = (1.0-SQRT(RandVal3(2)))*a
- IF (EXP(-(zstar*zstar)).GT.RandVal3(3)) THEN
- EXIT
- END IF
END IF
- END DO
- CASE(4)
- DO
- CALL RANDOM_NUMBER(RandVal3)
- IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN
- zstar=-SQRT(-LOG(RandVal3(2)))
- ELSE
+ END IF
+ END DO
+ CASE(4)
+ DO
+ CALL RANDOM_NUMBER(RandVal3)
+ IF (1.0/(2.0*a*SQRT(PI)+1.0).GT.RandVal3(1)) THEN
+ zstar=-SQRT(-LOG(RandVal3(2)))
+ ELSE
! IF (.NOT.DoZigguratSampling) THEN !polar method
- IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
- RandN = RandN_save
- RandN_in_Mem=.FALSE.
- ELSE
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
- RandN_in_Mem=.TRUE.
- END IF
+ IF (RandN_in_Mem) THEN !reusing second RandN form previous polar method
+ RandN = RandN_save
+ RandN_in_Mem=.FALSE.
+ ELSE
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ RandN = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_save = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ RandN_in_Mem=.TRUE.
+ END IF
! ELSE !ziggurat method
! RandN=rnor()
! END IF
- zstar = 1./SQRT(2.)*RandN
- END IF
- IF ( (a-zstar)/a .GT. RandVal3(3)) THEN
- EXIT
- END IF
- END DO
- CASE DEFAULT
- CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!')
- END SELECT
- !-- 2.: sample normal directions and build complete velo-vector
- Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar)
+ zstar = 1./SQRT(2.)*RandN
+ END IF
+ IF ( (a-zstar)/a .GT. RandVal3(3)) THEN
+ EXIT
+ END IF
+ END DO
+ CASE DEFAULT
+ CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong envelope in SetSurfacefluxVelocities!')
+ END SELECT
+ !-- 2.: sample normal directions and build complete velo-vector
+ Vec3D(1:3) = vec_nIn(1:3) * SQRT(2.*BoltzmannConst*T/Species(iSpec)%MassIC)*(a-zstar)
! IF (.NOT.DoZigguratSampling) THEN !polar method
- Velosq = 2
- DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
- CALL RANDOM_NUMBER(RandVal2)
- Velo1 = 2.*RandVal2(1) - 1.
- Velo2 = 2.*RandVal2(2) - 1.
- Velosq = Velo1**2 + Velo2**2
- END DO
- Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
- Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
+ Velosq = 2
+ DO WHILE ((Velosq .GE. 1.) .OR. (Velosq .EQ. 0.))
+ CALL RANDOM_NUMBER(RandVal2)
+ Velo1 = 2.*RandVal2(1) - 1.
+ Velo2 = 2.*RandVal2(2) - 1.
+ Velosq = Velo1**2 + Velo2**2
+ END DO
+ Velo1 = Velo1*SQRT(-2*LOG(Velosq)/Velosq)
+ Velo2 = Velo2*SQRT(-2*LOG(Velosq)/Velosq)
! ELSE !ziggurat method
! Velo1=rnor()
! Velo2=rnor()
! END IF
- Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) )
- Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) )
- PartState(4:6,PositionNbr) = Vec3D(1:3)
- ELSE !PositionNbr .EQ. 0
- CALL abort(__STAMP__,'PositionNbr .EQ. 0!')
- END IF !PositionNbr .NE. 0
+ Vec3D(1:3) = Vec3D(1:3) + vec_t1(1:3) * ( Velo_t1+Velo1*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) )
+ Vec3D(1:3) = Vec3D(1:3) + vec_t2(1:3) * ( Velo_t2+Velo2*SQRT(BoltzmannConst*T/Species(iSpec)%MassIC) )
+ PartState(4:6,PositionNbr) = Vec3D(1:3)
END DO !i = ...NbrOfParticle
CASE DEFAULT
CALL abort(__STAMP__,'ERROR in SurfaceFlux: Wrong velocity distribution!')
@@ -1457,14 +1467,12 @@ SUBROUTINE SetSurfacefluxVelocities(iSpec,iSF,iSample,jSample,iSide,BCSideID,Sid
IF(UseRotRefFrame) THEN
DO i = NbrOfParticle-PartIns+1,NbrOfParticle
- PositionNbr = PDM%nextFreePosition(i+PDM%CurrentNextFreePosition)
- IF (PositionNbr.GT.0) THEN
- ! Detect if particle is within a RotRefDomain
- PDM%InRotRefFrame(PositionNbr) = InRotRefFrameCheck(PositionNbr)
- ! Initialize velocity in the rotational frame of reference
- IF(PDM%InRotRefFrame(PositionNbr)) THEN
- PartVeloRotRef(1:3,PositionNbr) = PartState(4:6,PositionNbr) - CROSS(RotRefFrameOmega(1:3),PartState(1:3,PositionNbr))
- END IF
+ PositionNbr = GetNextFreePosition(i)
+ ! Detect if particle is within a RotRefDomain
+ PDM%InRotRefFrame(PositionNbr) = InRotRefFrameCheck(PositionNbr)
+ ! Initialize velocity in the rotational frame of reference
+ IF(PDM%InRotRefFrame(PositionNbr)) THEN
+ PartVeloRotRef(1:3,PositionNbr) = PartState(4:6,PositionNbr) - CROSS(RotRefFrameOmega(1:3),PartState(1:3,PositionNbr))
END IF
END DO
END IF
diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90
index 3dc9f6fd1..0ae442262 100644
--- a/src/particles/emission/particle_surface_flux_init.f90
+++ b/src/particles/emission/particle_surface_flux_init.f90
@@ -134,12 +134,12 @@ SUBROUTINE InitializeParticleSurfaceflux()
USE MOD_Particle_Vars ,ONLY: Species, nSpecies, DoSurfaceFlux
USE MOD_Particle_Vars ,ONLY: UseCircularInflow, DoForceFreeSurfaceFlux
USE MOD_Particle_Vars ,ONLY: VarTimeStep
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_Restart_Vars ,ONLY: DoRestart, RestartTime
USE MOD_DSMC_Vars ,ONLY: AmbiPolarSFMapping, DSMC, useDSMC
+USE MOD_Particle_Vars ,ONLY: Symmetry
#if USE_MPI
USE MOD_Particle_Vars ,ONLY: DoPoissonRounding, DoTimeDepInflow
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#endif /*USE_MPI*/
#ifdef CODE_ANALYZE
USE MOD_Particle_Vars ,ONLY: CountCircInflowType
@@ -173,7 +173,7 @@ SUBROUTINE InitializeParticleSurfaceflux()
CALL BCSurfMeshSideAreasandNormals()
UseCircularInflow=.FALSE.
-UseAdaptive=.FALSE.
+UseAdaptiveBC=.FALSE.
MaxSurfacefluxBCs=0
nDataBC=0
DoSurfaceFlux=.FALSE.
@@ -182,8 +182,8 @@ SUBROUTINE InitializeParticleSurfaceflux()
CALL ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC)
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoTimeDepInflow,1,MPI_LOGICAL,MPI_LAND,PartMPI%COMM,iError) !set T if this is for all procs
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoPoissonRounding,1,MPI_LOGICAL,MPI_LAND,MPI_COMM_PICLAS,iError) !set T if this is for all procs
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoTimeDepInflow,1,MPI_LOGICAL,MPI_LAND,MPI_COMM_PICLAS,iError) !set T if this is for all procs
#endif /*USE_MPI*/
CALL CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp)
@@ -253,7 +253,7 @@ SUBROUTINE InitializeParticleSurfaceflux()
IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN
totalAreaSF_global = 0.0
CALL MPI_ALLREDUCE(Species(iSpec)%Surfaceflux(iSF)%totalAreaSF,totalAreaSF_global,1, &
- MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR)
+ MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,IERROR)
Species(iSpec)%Surfaceflux(iSF)%totalAreaSF = totalAreaSF_global
END IF
#endif
@@ -321,6 +321,7 @@ SUBROUTINE InitializeParticleSurfaceflux()
IF(Species(iSpec)%Surfaceflux(iSF)%Adaptive) THEN
IF(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) THEN
currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
+ IF(Symmetry%Axisymmetric) CALL abort(__STAMP__, 'ERROR: AdaptiveType = 4 is not implemented with axisymmetric simulations!')
! Weighting factor to account for a
ALLOCATE(Species(iSpec)%Surfaceflux(iSF)%ConstMassflowWeight(1:SurfFluxSideSize(1),1:SurfFluxSideSize(2), &
1:BCdata_auxSF(currentBC)%SideNumber))
@@ -329,6 +330,7 @@ SUBROUTINE InitializeParticleSurfaceflux()
IF(ALMOSTEQUAL(Species(iSpec)%Surfaceflux(iSF)%AdaptiveMassflow,0.)) CALL CalcConstMassflowWeightForZeroMassFlow(iSpec,iSF)
! Circular inflow in combination with AdaptiveType = 4 requires the partial circle area per tria side
IF(Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN
+ IF(Symmetry%Axisymmetric) CALL abort(__STAMP__, 'ERROR: Circular inflow is not implemented with axisymmetric simulations!')
ALLOCATE(Species(iSpec)%Surfaceflux(iSF)%CircleAreaPerTriaSide(1:SurfFluxSideSize(1),1:SurfFluxSideSize(2), &
1:BCdata_auxSF(currentBC)%SideNumber))
Species(iSpec)%Surfaceflux(iSF)%CircleAreaPerTriaSide = 0.0
@@ -340,7 +342,7 @@ SUBROUTINE InitializeParticleSurfaceflux()
END DO ! iSpec=1,nSpecies
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSurfaceFlux,1,MPI_LOGICAL,MPI_LOR,PartMPI%COMM,iError) !set T if at least 1 proc have SFs
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,DoSurfaceFlux,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError) !set T if at least 1 proc have SFs
#endif /*USE_MPI*/
IF (.NOT.DoSurfaceFlux) THEN !-- no SFs defined
LBWRITE(*,*) 'WARNING: No Sides for SurfacefluxBCs found! DoSurfaceFlux is now disabled!'
@@ -383,10 +385,10 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC)
USE MOD_ReadInTools
USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi
USE MOD_Particle_Vars ,ONLY: nSpecies, Species, UseVarTimeStep, VarTimeStep, DoPoissonRounding, DoTimeDepInflow
-USE MOD_Particle_Vars ,ONLY: Symmetry, UseCircularInflow
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Vars ,ONLY: UseCircularInflow
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound
-USE MOD_DSMC_Vars ,ONLY: useDSMC, BGGas
+USE MOD_DSMC_Vars ,ONLY: useDSMC, BGGas, RadialWeighting
USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, BezierSampleN, TriaSurfaceFlux
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Mesh_Vars ,ONLY: NGeo
@@ -431,6 +433,9 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC)
SF%BC = GETINT('Part-Species'//TRIM(hilf2)//'-BC')
! Sanity check: BC index must be within the number of defined particle boundary conditions
IF (SF%BC.LT.1 .OR. SF%BC.GT.nPartBound) CALL abort(__STAMP__, 'SurfacefluxBCs must be between 1 and nPartBound!')
+ ! Default surface flux type (constant particle number per side)
+ SF%Type = 0
+ SF%AdaptiveType = 0
! Initialize SF-specific variables
WRITE(UNIT=hilf2,FMT='(I0)') iSF
hilf2=TRIM(hilf)//'-Surfaceflux'//TRIM(hilf2)
@@ -544,17 +549,20 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC)
ELSE
SF%ARM_DmaxSampleN = 0
END IF
+ ! === Set the surface flux type
+ IF(DoPoissonRounding) SF%Type = 3
+ IF(DoTimeDepInflow) SF%Type = 4
+ IF(RadialWeighting%DoRadialWeighting) SF%Type = 2
! === ADAPTIVE BC ==============================================================================================================
SF%Adaptive = GETLOGICAL('Part-Species'//TRIM(hilf2)//'-Adaptive')
IF(SF%Adaptive) THEN
- DoPoissonRounding = .TRUE.
- UseAdaptive = .TRUE.
+ UseAdaptiveBC = .TRUE.
+ SF%Type = 1
IF(TrackingMethod.EQ.REFMAPPING) THEN
CALL abort(__STAMP__,'ERROR: Adaptive surface flux boundary conditions are not implemented with RefMapping!')
END IF
- IF((Symmetry%Order.LE.2).OR.(UseVarTimeStep.AND..NOT.VarTimeStep%UseDistribution)) THEN
- CALL abort(__STAMP__&
- ,'ERROR: Adaptive surface flux boundary conditions are not implemented with 2D/axisymmetric or variable time step!')
+ IF(UseVarTimeStep.AND..NOT.VarTimeStep%UseDistribution) THEN
+ CALL abort(__STAMP__,'ERROR: Adaptive surface flux boundary conditions are not implemented with variable time step!')
END IF
SF%AdaptiveType = GETINT('Part-Species'//TRIM(hilf2)//'-Adaptive-Type')
SELECT CASE(SF%AdaptiveType)
@@ -581,8 +589,6 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC)
,'ERROR in adaptive surface flux: using a reflective BC without circularInflow is only allowed for Type 4!')
END IF
END IF
- ELSE
- SF%AdaptiveType = 0
END IF
! === THERMIONIC EMISSION ======================================================================================================
SF%ThermionicEmission = GETLOGICAL('Part-Species'//TRIM(hilf2)//'-ThermionicEmission')
@@ -629,9 +635,8 @@ SUBROUTINE BCSurfMeshSideAreasandNormals()
iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID)
SideID=GetGlobalNonUniqueSideID(offsetElem+ElemID,iLocSide)
IF (TriaSurfaceFlux) THEN
- IF (SurfFluxSideSize(1).NE.1 .OR. SurfFluxSideSize(2).NE.2) CALL abort(&
-__STAMP__&
-, 'SurfFluxSideSize must be 1,2 for TriaSurfaceFlux!')
+ IF (SurfFluxSideSize(1).NE.1 .OR. SurfFluxSideSize(2).NE.2) CALL abort(__STAMP__,&
+ 'SurfFluxSideSize must be 1,2 for TriaSurfaceFlux!')
DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1)
CALL CalcNormAndTangTriangle(SideID=SideID,nVec=tmp_Vec_nOut(:,iSample,jSample) &
,tang1=tmp_Vec_t1(:,iSample,jSample) &
@@ -641,9 +646,8 @@ SUBROUTINE BCSurfMeshSideAreasandNormals()
SurfMeshSideAreas(BCSideID)=SurfMeshSideAreas(BCSideID)+tmp_SubSideAreas(iSample,jSample)
END DO; END DO
ELSE
- IF (ANY(SurfFluxSideSize.NE.BezierSampleN)) CALL abort(&
-__STAMP__&
-, 'SurfFluxSideSize must be BezierSampleN,BezierSampleN for .NOT.TriaSurfaceFlux!')
+ IF (ANY(SurfFluxSideSize.NE.BezierSampleN)) CALL abort(__STAMP__,&
+ 'SurfFluxSideSize must be BezierSampleN,BezierSampleN for .NOT.TriaSurfaceFlux!')
CALL GetBezierSampledAreas(SideID=SideID &
,BezierSampleN=BezierSampleN &
,SurfMeshSubSideAreas=tmp_SubSideAreas &
@@ -695,9 +699,6 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp)
USE MOD_DSMC_Symmetry ,ONLY: DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides
USE MOD_DSMC_Vars ,ONLY: RadialWeighting
USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangTriangle
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -872,7 +873,7 @@ SUBROUTINE CreateSideListAndFinalizeAreasSurfFlux(nDataBC, BCdata_auxSFTemp)
DO iPartBound=1,nPartBound
areasLoc(iPartBound)=BCdata_auxSF(iPartBound)%LocalArea
END DO
- CALL MPI_ALLREDUCE(areasLoc,areasGlob,nPartBound,MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,IERROR)
+ CALL MPI_ALLREDUCE(areasLoc,areasGlob,nPartBound,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,IERROR)
#endif
DO iPartBound=1,nPartBound
#if USE_MPI
@@ -985,8 +986,7 @@ SUBROUTINE InitVolumeFlowRate(iSpec, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFT
!-- compute total volume flow rate through surface
SELECT CASE(TRIM(Species(iSpec)%Surfaceflux(iSF)%velocityDistribution))
CASE('constant')
- vSF = Species(iSpec)%Surfaceflux(iSF)%VeloIC * projFak ! Velo proj. to inwards normal
- nVFR = MAX(tmp_SubSideAreas(iSample,jSample) * vSF,0.) ! VFR proj. to inwards normal (only positive parts!)
+ vSF = MAX(Species(iSpec)%Surfaceflux(iSF)%VeloIC * projFak,0.) ! VFR proj. to inwards normal (only positive parts!)
CASE('maxwell','maxwell_lpn')
IF ( ALMOSTEQUAL(v_thermal,0.)) THEN
CALL abort(__STAMP__,' ERROR in SurfaceFlux: Calculated thermal velocity is zero! Temperature input might be missing (-MWTemperatureIC) ')
@@ -997,26 +997,27 @@ SUBROUTINE InitVolumeFlowRate(iSpec, iSF, iSide, tmp_SubSideAreas, BCdata_auxSFT
ELSE
vSF = v_thermal / (2.0*SQRT(PI)) ! mean flux velocity through normal sub-face
END IF
- ! Calculate the volume flow rate. In case of an emission current and mass flow, it contains only the area
- IF(Species(iSpec)%Surfaceflux(iSF)%UseEmissionCurrent.OR.Species(iSpec)%Surfaceflux(iSF)%UseMassflow) THEN
- nVFR = tmp_SubSideAreas(iSample,jSample) ! Area
- ! vSF set to 1 to allow the utilization with radial weighting (untested)
- vSF = 1.
- ELSE
- nVFR = tmp_SubSideAreas(iSample,jSample) * vSF ! VFR projected to inwards normal of sub-side
- END IF
- IF(RadialWeighting%DoRadialWeighting) THEN
- nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide)
- DO iSub = 1, RadialWeighting%nSubSides
- IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN
- Species(iSpec)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) &
- * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)
- END IF
- END DO
- END IF
CASE DEFAULT
CALL abort(__STAMP__, 'ERROR in SurfaceFlux: Wrong velocity distribution!')
END SELECT
+ ! Calculate the volume flow rate. In case of an emission current and mass flow, it contains only the area
+ IF(Species(iSpec)%Surfaceflux(iSF)%UseEmissionCurrent .OR. Species(iSpec)%Surfaceflux(iSF)%UseMassflow .OR. &
+ Species(iSpec)%Surfaceflux(iSF)%Adaptive) THEN
+ nVFR = tmp_SubSideAreas(iSample,jSample) ! Area
+ ! vSF set to 1 to allow the utilization with radial weighting (untested)
+ vSF = 1.
+ ELSE
+ nVFR = tmp_SubSideAreas(iSample,jSample) * vSF ! VFR projected to inwards normal of sub-side
+ END IF
+ IF(RadialWeighting%DoRadialWeighting) THEN
+ nVFR = nVFR / BCdata_auxSFTemp(currentBC)%WeightingFactor(iSide)
+ DO iSub = 1, RadialWeighting%nSubSides
+ IF(ABS(BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)).GT.0.)THEN
+ Species(iSpec)%Surfaceflux(iSF)%nVFRSub(iSide,iSub) = BCdata_auxSFTemp(currentBC)%SubSideArea(iSide,iSub) &
+ * vSF / BCdata_auxSFTemp(currentBC)%SubSideWeight(iSide,iSub)
+ END IF
+ END DO
+ END IF
IF (Species(iSpec)%Surfaceflux(iSF)%CircularInflow) THEN
! Check whether cell is completely outside of the circular inflow region and set the volume flow rate to zero
IF (Species(iSpec)%Surfaceflux(iSF)%SurfFluxSideRejectType(iSide).EQ.1) nVFR = 0.
@@ -1049,9 +1050,6 @@ SUBROUTINE InitReduceNoiseSF(iSpec, iSF)
! MODULES
USE MOD_Globals
USE MOD_Particle_Vars ,ONLY: Species
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1073,9 +1071,9 @@ SUBROUTINE InitReduceNoiseSF(iSpec, iSF)
END IF !MPIroot
#if USE_MPI
CALL MPI_GATHER(Species(iSpec)%Surfaceflux(iSF)%VFR_total,1,MPI_DOUBLE_PRECISION &
- ,Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcs,1,MPI_DOUBLE_PRECISION,0,PartMPI%COMM,iError)
+ ,Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcs,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iError)
IF(MPIroot)THEN
- DO iProc=0,PartMPI%nProcs-1
+ DO iProc=0,nProcessors-1
Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcsTotal = Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcsTotal &
+ Species(iSpec)%Surfaceflux(iSF)%VFR_total_allProcs(iProc)
END DO
@@ -1242,11 +1240,12 @@ SUBROUTINE ReadInThermionicEmission(iSpec,iSF)
! Consider influence of electric field on the material work function (Schottky effect)
SF%SchottkyEffectTE = GETLOGICAL('Part-Species'//TRIM(help2)//'-ThermionicEmission-SchottkyEffect')
-#if !(USE_HDG)
IF(SF%SchottkyEffectTE) THEN
+ SF%Type = 5
+#if !(USE_HDG)
CALL abort(__STAMP__,'ERROR in Surface Flux: Thermionic emission with Schottky effect requires an electric field!')
-END IF
#endif
+END IF
! Material-specific work function read-in in eV and converted to K
SF%WorkFunctionTE = GETREAL('Part-Species'//TRIM(help2)//'-ThermionicEmission-WorkFunction') * eV2Joule
! Material-specific constant read-in in A/(cm^2 K^2) and converted to m^2
diff --git a/src/particles/emission/particle_surface_flux_vars.f90 b/src/particles/emission/particle_surface_flux_vars.f90
index da5d51d5f..87990da63 100644
--- a/src/particles/emission/particle_surface_flux_vars.f90
+++ b/src/particles/emission/particle_surface_flux_vars.f90
@@ -39,6 +39,13 @@ MODULE MOD_Particle_SurfaceFlux_Vars
TYPE typeSurfaceflux
INTEGER :: BC ! PartBound to be emitted from
+ INTEGER :: Type ! Type set based on the read-in parameters
+ ! 0: Standard surface flux
+ ! 1: Adaptive surface flux (includes RadialWeighting)
+ ! 2: Radial weighting in axisymmetric simulations
+ ! 3: DoPoissonRounding .AND. .NOT.DoTimeDepInflow
+ ! 4: DoTimeDepInflow
+ ! 5: Thermionic emission with Schottky effect (requires HDG)
CHARACTER(30) :: velocityDistribution ! specifying keyword for velocity distribution
REAL :: VeloIC ! velocity for initial Data
REAL :: VeloVecIC(3) ! normalized velocity vector
diff --git a/src/particles/fp_flow/fpflow_colloperator.f90 b/src/particles/fp_flow/fpflow_colloperator.f90
index 31557eea9..3918580c3 100644
--- a/src/particles/fp_flow/fpflow_colloperator.f90
+++ b/src/particles/fp_flow/fpflow_colloperator.f90
@@ -51,7 +51,6 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume)
USE MOD_DSMC_Vars ,ONLY: CollInf, RadialWeighting
USE Ziggurat
USE MOD_Particle_Analyze_Tools ,ONLY: CalcTVibPoly
-USE MOD_BGK_CollOperator ,ONLY: CalcTEquiPoly, CalcTEqui
USE MOD_part_tools ,ONLY: GetParticleWeight
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -186,7 +185,7 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume)
nXiVibDOF = PolyatomMolDSMC(iPolyatMole)%VibDOF
ALLOCATE(Xi_vib_DOF(nXiVibDOF))
Xi_vib_DOF(:) = 0.
- TVib = CalcTVibPoly(Evib/totalWeight, 1)
+ TVib = CalcTVibPoly(Evib/totalWeight + SpecDSMC(1)%EZeroPoint, 1)
IF (TVib.GT.0.0) THEN
DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
Xi_vib = Xi_vib + 2.*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TVib &
@@ -703,4 +702,275 @@ SUBROUTINE FP_CollisionOperator(iPartIndx_Node, nPart, NodeVolume)
END SUBROUTINE FP_CollisionOperator
+SUBROUTINE CalcTEqui(nPart, CellTemp, TRot, TVib, Xi_Vib, Xi_Vib_old, RotExp, VibExp, &
+ TEqui, rotrelaxfreq, vibrelaxfreq, dtCell, DoVibRelaxIn)
+!===================================================================================================================================
+! Calculation of the vibrational temperature (zero-point search) for non-polyatomic molecules for Fokker-Planck
+!===================================================================================================================================
+! MODULES
+USE MOD_DSMC_Vars, ONLY: SpecDSMC
+USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL, INTENT(IN) :: CellTemp, TRot, TVib, Xi_Vib_old, rotrelaxfreq, vibrelaxfreq, dtCell
+INTEGER, INTENT(IN) :: nPart
+LOGICAL, OPTIONAL, INTENT(IN) :: DoVibRelaxIn
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL, INTENT(OUT) :: Xi_vib, TEqui, RotExp, VibExp
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+REAL :: TEqui_Old, betaR, betaV, RotFrac, VibFrac, TEqui_Old2
+REAL :: eps_prec=1.0E-0
+REAL :: correctFac, correctFacRot, maxexp !, Xi_rel
+LOGICAL :: DoVibRelax
+!===================================================================================================================================
+IF (PRESENT(DoVibRelaxIn)) THEN
+ DoVibRelax = DoVibRelaxIn
+ELSE
+ DoVibRelax = BGKDoVibRelaxation
+END IF
+maxexp = LOG(HUGE(maxexp))
+! Xi_rel = 2.*(2. - CollInf%omega(1,1))
+! correctFac = 1. + (2.*SpecDSMC(1)%CharaTVib / (CellTemp*(EXP(SpecDSMC(1)%CharaTVib / CellTemp)-1.)))**(2.) &
+! * EXP(SpecDSMC(1)%CharaTVib /CellTemp) / (2.*Xi_rel)
+! correctFacRot = 1. + 2./Xi_rel
+
+correctFac = 1.
+correctFacRot = 1.
+RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
+RotFrac = nPart*(1.-RotExp)
+IF(DoVibRelax) THEN
+ VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
+ VibFrac = nPart*(1.-VibExp)
+ELSE
+ VibExp = 0.0
+ VibFrac = 0.0
+ Xi_vib = 0.0
+END IF
+TEqui_Old = 0.0
+TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib_old*VibFrac)
+DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
+ IF (ABS(TRot-TEqui).LT.1E-3) THEN
+ RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
+ ELSE
+ betaR = ((TRot-CellTemp)/(TRot-TEqui))*rotrelaxfreq*dtCell/correctFacRot
+ IF (-betaR.GT.0.0) THEN
+ RotExp = 0.
+ ELSE IF (betaR.GT.maxexp) THEN
+ RotExp = 0.
+ ELSE
+ RotExp = exp(-betaR)
+ END IF
+ END IF
+ RotFrac = nPart*(1.-RotExp)
+ IF(DoVibRelax) THEN
+ IF (ABS(TVib-TEqui).LT.1E-3) THEN
+ VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
+ ELSE
+ betaV = ((TVib-CellTemp)/(TVib-TEqui))*vibrelaxfreq*dtCell/correctFac
+ IF (-betaV.GT.0.0) THEN
+ VibExp = 0.
+ ELSE IF (betaV.GT.maxexp) THEN
+ VibExp = 0.
+ ELSE
+ VibExp = exp(-betaV)
+ END IF
+ END IF
+ IF ((SpecDSMC(1)%CharaTVib/TEqui).GT.maxexp) THEN
+ Xi_Vib = 0.0
+ ELSE
+ Xi_vib = 2.*SpecDSMC(1)%CharaTVib/TEqui/(EXP(SpecDSMC(1)%CharaTVib/TEqui)-1.)
+ END IF
+ VibFrac = nPart*(1.-VibExp)
+ END IF
+ TEqui_Old = TEqui
+ TEqui_Old2 = TEqui
+ TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib*VibFrac)
+ IF(DoVibRelax) THEN
+ DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
+ TEqui =(TEqui + TEqui_Old2)*0.5
+ IF ((SpecDSMC(1)%CharaTVib/TEqui).GT.maxexp) THEN
+ Xi_Vib = 0.0
+ ELSE
+ Xi_vib = 2.*SpecDSMC(1)%CharaTVib/TEqui/(EXP(SpecDSMC(1)%CharaTVib/TEqui)-1.)
+ END IF
+ TEqui_Old2 = TEqui
+ TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) / (3.*(nPart-1.)+2.*RotFrac+Xi_vib*VibFrac)
+ END DO
+ END IF
+END DO
+
+END SUBROUTINE CalcTEqui
+
+
+SUBROUTINE CalcTEquiPoly(nPart, CellTemp, TRot, TVib, nXiVibDOF, Xi_Vib_DOF, Xi_Vib_old, RotExp, VibExp, TEqui, rotrelaxfreq, vibrelaxfreq, &
+ dtCell, DoVibRelaxIn)
+!===================================================================================================================================
+! Calculation of the vibrational temperature (zero-point search) for polyatomic molecules
+!===================================================================================================================================
+! MODULES
+USE MOD_DSMC_Vars, ONLY: SpecDSMC, PolyatomMolDSMC
+USE MOD_BGK_Vars, ONLY: BGKDoVibRelaxation
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL, INTENT(IN) :: CellTemp, TRot, TVib, Xi_Vib_old, rotrelaxfreq, vibrelaxfreq
+INTEGER, INTENT(IN) :: nPart,nXiVibDOF
+REAL, INTENT(IN) :: dtCell
+LOGICAL, OPTIONAL, INTENT(IN) :: DoVibRelaxIn
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL, INTENT(OUT) :: Xi_vib_DOF(nXiVibDOF), TEqui, RotExp, VibExp
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+REAL :: TEqui_Old, betaR, betaV, RotFrac, VibFrac, Xi_Rot, TEqui_Old2, exparg
+REAL :: eps_prec=1.0
+REAL :: correctFac, correctFacRot
+INTEGER :: iDOF, iPolyatMole
+LOGICAL :: DoVibRelax
+!===================================================================================================================================
+IF (PRESENT(DoVibRelaxIn)) THEN
+ DoVibRelax = DoVibRelaxIn
+ELSE
+ DoVibRelax = BGKDoVibRelaxation
+END IF
+
+! rotational degrees of freedom of polyatomic molecule
+Xi_Rot = SpecDSMC(1)%Xi_Rot
+iPolyatMole = SpecDSMC(1)%SpecToPolyArray
+
+! Xi_rel = 2.*(2. - CollInf%omega(1,1))
+! correctFac = 0.0
+! DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+! correctFac = correctFac &
+! + (2.*PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / (CellTemp &
+! *(EXP(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / CellTemp)-1.)))**(2.) &
+! * EXP(PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF) / CellTemp) / 2.
+! END DO
+! correctFac = 1. + correctFac/Xi_rel
+! correctFacRot = 1. + Xi_Rot/Xi_rel
+
+correctFac = 1.
+correctFacRot = 1.
+
+! Calculate number of rotational relaxing molecules with number of molecules * probability of relaxation
+! P = 1 - exp(-nu*dt) with relaxation frequency nu and timestep dt
+RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
+RotFrac = nPart*(1.-RotExp)
+! Calculate number of vibrational relaxing molecules if enabled with number of molecules * probability of relaxation
+! P = 1 - exp(-nu*dt) with relaxation frequency nu and timestep dt
+IF(DoVibRelax) THEN
+ VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
+ VibFrac = nPart*(1.-VibExp)
+ELSE
+ VibExp = 0.0
+ VibFrac = 0.0
+ Xi_vib_DOF = 0.0
+END IF
+TEqui_Old = 0.0
+! M. Pfeiffer et. al., "Extension of Particle-based BGK Models to Polyatomic Species in Hypersonic Flow around a Flat-faced
+! Cylinder", AIP Conference Proceedings 2132, 100001 (2019)
+! Solving of equation system for TEqui and betaR and betaV
+TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib)/(3.*(nPart-1.)+2.*RotFrac+Xi_Vib_old*VibFrac)
+! Required condition of Landau-Teller relaxation not fulfilled --> relaxation probabilities of rotation and vibration are
+! corrected with a parameter beta for rotation and vibration as suggested by Burt:
+! J. Burt and I. Boyd, “Evaluation of a particle method for the ellipsoidal statistical Bhatnagar-Gross-Krook equation”,
+! 44th AIAA Aerospace Sciences Meeting and Exhibit (AIAA, 2006), p. 989
+! Solving of equation system until accuracy eps_prec is reached
+DO WHILE ( ABS( TEqui - TEqui_Old ) .GT. eps_prec )
+ ! if difference too small: beta is not taken into account
+ IF (ABS(TRot-TEqui).LT.1E-3) THEN
+ RotExp = exp(-rotrelaxfreq*dtCell/correctFacRot)
+ ELSE
+ ! betaR = beta*nu*dt (= correction parameter rotation * relaxation frequency * time step)
+ betaR = ((TRot-CellTemp)/(TRot-TEqui))*rotrelaxfreq*dtCell/correctFacRot
+ ! negative betaR would leed to negative relaxation probability!
+ IF (-betaR.GT.0.0) THEN
+ RotExp = 0.
+ ! Check if the exponent is within the range of machine precision
+ ELSE IF (CHECKEXP(betaR)) THEN
+ RotExp = exp(-betaR)
+ ELSE
+ RotExp = 0.
+ END IF
+ END IF
+ ! new calculation of number of rotational relaxing molecules
+ RotFrac = nPart*(1.-RotExp)
+
+ IF(DoVibRelax) THEN
+ ! if difference too small: beta is not taken into account
+ IF (ABS(TVib-TEqui).LT.1E-3) THEN
+ VibExp = exp(-vibrelaxfreq*dtCell/correctFac)
+ ELSE
+ ! betaV = beta*nu*dt (= correction parameter vibration * relaxation frequency * time step)
+ betaV = ((TVib-CellTemp)/(TVib-TEqui))*vibrelaxfreq*dtCell/correctFac
+ ! negative betaV would leed to negative relaxation probability!
+ IF (-betaV.GT.0.0) THEN
+ VibExp = 0.
+ ! Check if the exponent is within the range of machine precision
+ ELSEIF(CHECKEXP(betaV))THEN
+ VibExp = exp(-betaV)
+ ELSE
+ VibExp = 0.
+ END IF
+ END IF
+ ! new calculation of number of vibrational relaxing molecules
+ VibFrac = nPart*(1.-VibExp)
+
+ ! Loop over all vibrational degrees of freedom to calculate them using TEqui
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg))THEN
+ IF(exparg.gt.0.)THEN ! positive overflow: exp -> inf
+ Xi_vib_DOF(iDOF) = 2.*exparg/(EXP(exparg)-1.)
+ ELSE ! negative overflow: exp -> 0
+ Xi_vib_DOF(iDOF) = 2.*exparg/(-1.)
+ END IF ! exparg.gt.0.
+ ELSE
+ Xi_vib_DOF(iDOF) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END DO
+ END IF
+ TEqui_Old = TEqui
+ TEqui_Old2 = TEqui
+
+ ! new calculation of equilibrium temperature with new RotFrac, new VibFrac new Xi_vib_DOF(TEqui) in denominator
+ TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) &
+ / (3.*(nPart-1.)+2.*RotFrac+SUM(Xi_vib_DOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))*VibFrac)
+ IF(DoVibRelax) THEN
+ ! accuracy eps_prec not reached yet
+ DO WHILE( ABS( TEqui - TEqui_Old2 ) .GT. eps_prec )
+ ! mean value of old and new equilibrium temperature
+ TEqui =(TEqui + TEqui_Old2)*0.5
+ ! Loop over all vibrational degrees of freedom
+ DO iDOF = 1, PolyatomMolDSMC(iPolyatMole)%VibDOF
+ exparg = PolyatomMolDSMC(iPolyatMole)%CharaTVibDOF(iDOF)/TEqui
+ ! Check if the exponent is within the range of machine precision for calculation of vibrational degrees of freedom
+ IF(CHECKEXP(exparg))THEN
+ IF(exparg.gt.0.)THEN ! positive overflow: exp -> inf
+ Xi_vib_DOF(iDOF) = 2.*exparg/(EXP(exparg)-1.)
+ ELSE ! negative overflow: exp -> 0
+ Xi_vib_DOF(iDOF) = 2.*exparg/(-1.)
+ END IF ! exparg.gt.0.
+ ELSE
+ Xi_vib_DOF(iDOF) = 0.0
+ END IF ! CHECKEXP(exparg)
+ END DO
+ TEqui_Old2 = TEqui
+ ! new calculation of equilibrium temperature with corrected vibrational degrees of freedom in denominator
+ TEqui = (3.*(nPart-1.)*CellTemp+2.*RotFrac*TRot+Xi_Vib_old*VibFrac*TVib) &
+ / (3.*(nPart-1.)+2.*RotFrac+SUM(Xi_vib_DOF(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))*VibFrac)
+ END DO
+ END IF
+END DO
+
+END SUBROUTINE CalcTEquiPoly
+
END MODULE MOD_FP_CollOperator
diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90
index 367d550cf..47193d11c 100644
--- a/src/particles/mcc/mcc.f90
+++ b/src/particles/mcc/mcc.f90
@@ -63,7 +63,7 @@ SUBROUTINE MonteCarloCollision(iElem)
! ROUTINES
USE MOD_DSMC_Analyze ,ONLY: CalcMeanFreePath
USE MOD_DSMC_BGGas ,ONLY: BGGas_AssignParticleProperties
-USE MOD_part_tools ,ONLY: GetParticleWeight, CalcVelocity_maxwell_particle
+USE MOD_part_tools ,ONLY: GetParticleWeight, CalcVelocity_maxwell_particle, GetNextFreePosition
USE MOD_Part_Emission_Tools ,ONLY: CalcVelocity_maxwell_lpn
USE MOD_DSMC_Collis ,ONLY: DSMC_perform_collision
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
@@ -274,7 +274,7 @@ SUBROUTINE MonteCarloCollision(iElem)
! Clone the regular particle (re-using the index of the previous particle if it didn't collide)
IF(PartIndex.EQ.0) THEN
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- PartIndex = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
+ PartIndex = GetNextFreePosition()
IF (PartIndex.EQ.0) THEN
CALL Abort(__STAMP__,'ERROR in MCC: MaxParticleNumber should be increased!')
END IF
@@ -410,7 +410,7 @@ SUBROUTINE MonteCarloCollision(iElem)
IF(ChemReac%CollCaseInfo(iCase)%HasXSecReaction) THEN
IF(bggPartIndex.EQ.0) THEN
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- bggPartIndex = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
+ bggPartIndex = GetNextFreePosition()
IF (bggPartIndex.EQ.0) THEN
CALL Abort(__STAMP__,'ERROR in MCC: MaxParticleNumber should be increased!')
END IF
@@ -466,7 +466,7 @@ SUBROUTINE MonteCarloCollision(iElem)
! Creating a new background gas particle
IF(bggPartIndex.EQ.0) THEN
DSMCSumOfFormedParticles = DSMCSumOfFormedParticles + 1
- bggPartIndex = PDM%nextFreePosition(DSMCSumOfFormedParticles+PDM%CurrentNextFreePosition)
+ bggPartIndex = GetNextFreePosition()
IF (bggPartIndex.EQ.0) THEN
CALL Abort(__STAMP__,'ERROR in MCC: MaxParticleNumber should be increased!')
END IF
@@ -504,7 +504,7 @@ SUBROUTINE MonteCarloCollision(iElem)
ELSE ! No collision
IF(SplitInProgress) THEN
! Save the index of the first particle that did not collide
- IF(SplitRestPart.EQ.0) THEN
+ IF(SplitRestPart.EQ.0) THEN
SplitRestPart = PartIndex
! Reset the PartIndex to use a new particle (unless it is the last particle, keep the index to check whether it can be deleted)
IF(iPartSplit.NE.SplitPartNum) PartIndex = 0
@@ -547,23 +547,23 @@ SUBROUTINE MonteCarloCollision(iElem)
DSMC%CollProbMean = DSMC%CollProbMean + CollProb
DSMC%CollProbMeanCount = DSMC%CollProbMeanCount + 1
END IF ! DSMC%CalcQualityFactors
-
-#if (PP_TimeDiscMethod==42)
- ! Sum of collision probabilities for the collision pair, required for the correct reaction rate
- IF(ChemReac%NumOfReact.GT.0) THEN
- IF (ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths.GT.0) THEN
- IF(SpecXSec(iSpec)%UseCollXSec) THEN
- ! Calculate the collision probability for the null collision probability case
- IF(XSec_NullCollision) THEN
- CollProb = CollProb * ProbNull
- ELSE
- CollProb = CollProb * BGGasFraction
+ ! Reservoir simulation: determination of the reaction probabilities
+ IF (DSMC%ReservoirSimu) THEN
+ ! Sum of collision probabilities for the collision pair, required for the correct reaction rate
+ IF(ChemReac%NumOfReact.GT.0) THEN
+ IF (ChemReac%CollCaseInfo(iCase)%NumOfReactionPaths.GT.0) THEN
+ IF(SpecXSec(iSpec)%UseCollXSec) THEN
+ ! Calculate the collision probability for the null collision probability case
+ IF(XSec_NullCollision) THEN
+ CollProb = CollProb * ProbNull
+ ELSE
+ CollProb = CollProb * BGGasFraction
+ END IF
END IF
+ ChemReac%ReacCollMean(iCase) = ChemReac%ReacCollMean(iCase) + CollProb
END IF
- ChemReac%ReacCollMean(iCase) = ChemReac%ReacCollMean(iCase) + CollProb
- END IF
- END IF ! ChemReac%NumOfReact.GT.0
-#endif
+ END IF ! ChemReac%NumOfReact.GT.0
+ END IF ! DSMC%ReservoirSimu
END DO ! DO WHILE(iLoop.LE.SpecPairNum(iCase))
SDEALLOCATE(PartIndexCase)
END DO ! bgSpec = 1, BGGas%NumberOfSpecies
@@ -709,13 +709,11 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP
ELSE
ChemReac%CollCaseInfo(iCase)%ReactionProb(iPath) = 0.
END IF
- ! Calculation of reaction rate coefficient
-#if (PP_TimeDiscMethod==42)
- IF (.NOT.DSMC%ReservoirRateStatistic) THEN
+ ! Reservoir simulation: Calculation of reaction rate coefficient
+ IF (DSMC%ReservoirSimu.AND..NOT.DSMC%ReservoirRateStatistic) THEN
ChemReac%NumReac(ReacTest) = ChemReac%NumReac(ReacTest) + ChemReac%CollCaseInfo(iCase)%ReactionProb(iPath)
ChemReac%ReacCount(ReacTest) = ChemReac%ReacCount(ReacTest) + 1
END IF
-#endif
END IF
END DO
diff --git a/src/particles/mcc/mcc_init.f90 b/src/particles/mcc/mcc_init.f90
index c78140d86..239fc5496 100644
--- a/src/particles/mcc/mcc_init.f90
+++ b/src/particles/mcc/mcc_init.f90
@@ -117,14 +117,14 @@ SUBROUTINE InitMCC()
IF(SpecDSMC(iSpec)%UseElecXSec.AND.SpecDSMC(iSpec)%InterID.EQ.4) THEN
CALL Abort(__STAMP__,'ERROR: Electronic relaxation should be enabled for the respective heavy species, not the electrons!')
END IF
-#if (PP_TimeDiscMethod!=42)
- IF(SpecDSMC(iSpec)%UseElecXSec.AND.(.NOT.BGGas%BackgroundSpecies(iSpec))) THEN
- SWRITE(*,*) 'NOTE: Electronic relaxation via cross-sections for regular DSMC is currently only enabled for the RESERVOIR'
- SWRITE(*,*) 'NOTE: timedisc to test the calculation of the probabilities during regression testing. For DSMC, a de-excitation'
- SWRITE(*,*) 'NOTE: model should be implemented. Regression test: WEK_Reservoir/MCC_N2_XSec_Elec'
- CALL Abort(__STAMP__,'ERROR: Electronic relaxation via cross-section (-UseElecXSec) is only supported with a background gas!')
+ IF(.NOT.DSMC%ReservoirSimu) THEN
+ IF(SpecDSMC(iSpec)%UseElecXSec.AND.(.NOT.BGGas%BackgroundSpecies(iSpec))) THEN
+ SWRITE(*,*) 'NOTE: Electronic relaxation via cross-sections for regular DSMC is currently only enabled using the flag'
+ SWRITE(*,*) 'NOTE: Particles-DSMCReservoirSim = T to test the calculation of the probabilities during regression testing.'
+ SWRITE(*,*) 'NOTE: For DSMC, a de-excitation model should be implemented. Regression test: WEK_Reservoir/MCC_N2_XSec_Elec'
+ CALL Abort(__STAMP__,'ERROR: Electronic relaxation via cross-section (-UseElecXSec) is only supported with a background gas!')
+ END IF
END IF
-#endif
END DO
! Enable MCC if any of the flags was set
@@ -146,6 +146,11 @@ SUBROUTINE InitMCC()
IF(.NOT.UseMCC.AND.VarTimeStep%UseSpeciesSpecific) CALL abort(__STAMP__,&
'ERROR: Only MCC is implemented with a species-specific time step!')
+! Disable SampleElecExcitation if electronic excitation has not been enabled for at least one species
+IF(SampleElecExcitation.AND.(.NOT.ANY(SpecDSMC(:)%UseElecXSec))) THEN
+ SampleElecExcitation = .FALSE.
+ LBWRITE(*,*) '| WARNING: Part-SampleElectronicExcitation has been disabled as no electronic excitation has been enabled through -UseElecXSec = T!'
+END IF
! Leave the routine
IF(.NOT.UseMCC) RETURN
@@ -387,8 +392,8 @@ SUBROUTINE InitMCC()
CALL abort(__STAMP__,'Total null collision probability is above unity. Please reduce the time step! Probability is: '&
,RealInfoOpt=TotalProb(partSpec))
ELSEIF(TotalProb(partSpec).GT.0.1) THEN
- SWRITE(*,*) 'Total null collision probability is above 0.1. A value of 1E-2 is recommended in literature!'
- SWRITE(*,*) 'Particle Species: ', TRIM(SpecDSMC(partSpec)%Name), ' Probability: ', TotalProb(partSpec)
+ LBWRITE(*,*) 'Total null collision probability is above 0.1. A value of 1E-2 is recommended in literature!'
+ LBWRITE(*,*) 'Particle Species: ', TRIM(SpecDSMC(partSpec)%Name), ' Probability: ', TotalProb(partSpec)
END IF ! TotalProb(partSpec).GT.1.0
END IF ! XSec_NullCollision
END IF ! SpecXSec(iCase)%UseCollXSec
@@ -412,20 +417,22 @@ SUBROUTINE InitMCC()
IF(SampleElecExcitation) THEN
ExcitationLevelCounter = 0
ALLOCATE(ExcitationLevelMapping(CollInf%NumCase,MAXVAL(SpecXSec(:)%NumElecLevel)))
+ ! Count the number of excitation levels for all collision cases
DO iCase = 1, CollInf%NumCase
IF(.NOT.SpecXSec(iCase)%UseElecXSec) CYCLE
DO iLevel = 1, SpecXSec(iCase)%NumElecLevel
ExcitationLevelCounter = ExcitationLevelCounter + 1
ExcitationLevelMapping(iCase,iLevel) = ExcitationLevelCounter
END DO
- IF(ExcitationLevelCounter.NE.SUM(SpecXSec(:)%NumElecLevel)) THEN
- IPWRITE(UNIT_StdOut,*) "ExcitationLevelCounter =", ExcitationLevelCounter
- IPWRITE(UNIT_StdOut,*) "SUM(SpecXSec(:)%NumElecLevel) =", SUM(SpecXSec(:)%NumElecLevel)
- CALL abort(__STAMP__,'Electronic excitation sampling: Wrong level counter!')
- END IF
- ALLOCATE(ExcitationSampleData(ExcitationLevelCounter,nElems))
- ExcitationSampleData = 0.
END DO
+ ! Sanity check
+ IF(ExcitationLevelCounter.NE.SUM(SpecXSec(:)%NumElecLevel)) THEN
+ IPWRITE(UNIT_StdOut,*) "ExcitationLevelCounter =", ExcitationLevelCounter
+ IPWRITE(UNIT_StdOut,*) "SUM(SpecXSec(:)%NumElecLevel) =", SUM(SpecXSec(:)%NumElecLevel)
+ CALL abort(__STAMP__,'Electronic excitation sampling: Wrong level counter!')
+ END IF
+ ALLOCATE(ExcitationSampleData(ExcitationLevelCounter,nElems))
+ ExcitationSampleData = 0.
END IF
#if defined(PARTICLES) && USE_HDG
@@ -460,25 +467,27 @@ SUBROUTINE DetermineNullCollProb(iCase,iSpec,jSpec)
INTEGER,INTENT(IN) :: jSpec
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: MaxDOF, bggSpec,iElem
+INTEGER :: MaxDOF, bggSpec, iElem, partSpec
REAL :: MaxCollFreq, MaxCollFreqElem, Mass, dtVar
REAL,ALLOCATABLE :: Velocity(:)
!===================================================================================================================================
-! Set the correct time step
-IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN
- dtVar = ManualTimeStep * Species(iSpec)%TimeStepFactor
-ELSE
- dtVar = ManualTimeStep
-END IF
-
! Select the background species as the target cloud and use the mass of particle species
IF(BGGas%BackgroundSpecies(iSpec)) THEN
bggSpec = BGGas%MapSpecToBGSpec(iSpec)
Mass = Species(jSpec)%MassIC
+ partSpec = jSpec
ELSE
bggSpec = BGGas%MapSpecToBGSpec(jSpec)
Mass = Species(iSpec)%MassIC
+ partSpec = iSpec
+END IF
+
+! Set the correct time step for the particle species
+IF(VarTimeStep%UseSpeciesSpecific.AND..NOT.VarTimeStep%DisableForMCC) THEN
+ dtVar = ManualTimeStep * Species(partSpec)%TimeStepFactor
+ELSE
+ dtVar = ManualTimeStep
END IF
MaxDOF = SIZE(SpecXSec(iCase)%CollXSecData,2)
@@ -828,7 +837,7 @@ SUBROUTINE CheckPhotoionizationXSec()
IF(SpecPhotonXSecInterpolated(iLine,NbrOfPhotonXsecReactions+3).LE.0.)THEN
ZeroLine = iLine
EXIT
- END IF !
+ END IF !
END DO ! iLine = PhotoIonFirstLine, PhotoIonLastLine
IF(ZeroLine.GT.0)THEN
diff --git a/src/particles/mcc/mcc_xsec.f90 b/src/particles/mcc/mcc_xsec.f90
index 6d0b886d7..b376d7753 100644
--- a/src/particles/mcc/mcc_xsec.f90
+++ b/src/particles/mcc/mcc_xsec.f90
@@ -581,7 +581,7 @@ SUBROUTINE XSec_ElectronicRelaxation(iPair,iCase,iPart_p1,iPart_p2,DoElec1,DoEle
!> 1. Interpolate the cross-section (MCC) or use the probability (VHS)
!> 2. Determine which electronic level is to be excited
!> 3. Reduce the total collision probability if no electronic excitation occurred
-!> 4. Count the number of relaxation process for the relaxation rate (TimeDisc=42 only)
+!> 4. Count the number of relaxation process for the relaxation rate (Only with Particles-DSMCReservoirSim = T)
!===================================================================================================================================
! MODULES
USE MOD_DSMC_Vars ,ONLY: SpecDSMC, Coll_pData, PartStateIntEn
@@ -650,7 +650,7 @@ SUBROUTINE XSec_ElectronicRelaxation(iPair,iCase,iPart_p1,iPart_p2,DoElec1,DoEle
END IF ! SUM(SpecXSec(iCase)%ElecLevel(:)%Prob).GT.0.
END IF ! Electronic energy = 0, ground-state
-! 4. Count the number of relaxation process for the relaxation rate
+! 4. Count the number of relaxation process for the relaxation rate and cell-local sampling
IF(CalcRelaxProb.OR.SamplingActive.OR.WriteMacroVolumeValues) THEN
IF(ElecLevelRelax.GT.0) THEN
IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN
@@ -666,6 +666,7 @@ SUBROUTINE XSec_ElectronicRelaxation(iPair,iCase,iPart_p1,iPart_p2,DoElec1,DoEle
WeightedParticle = GetParticleWeight(iPart_p2) * WeightedParticle
END IF
SpecXSec(iCase)%ElecLevel(ElecLevelRelax)%Counter = SpecXSec(iCase)%ElecLevel(ElecLevelRelax)%Counter + WeightedParticle
+ ! Sampling of the cell-local excitation rate
IF(SampleElecExcitation) THEN
ElecLevel = ExcitationLevelMapping(iCase,ElecLevelRelax)
ElemID = PEM%LocalElemID(iPart_p1)
@@ -1022,8 +1023,7 @@ END SUBROUTINE ReadReacPhotonXSec
SUBROUTINE ReadReacPhotonSpectrum(iPhotoReac)
!===================================================================================================================================
-!> Read-in of photoionization reaction cross-sections from a given database. Check whether the
-!> group exists. Trying to swap the species indices if dataset not found.
+!> TODO:
!===================================================================================================================================
! use module
USE MOD_io_hdf5
@@ -1278,12 +1278,10 @@ SUBROUTINE XSec_CalcReactionProb(iPair,iCase,iElem,SpecNum1,SpecNum2,MacroPartic
END IF
END ASSOCIATE
! Calculation of reaction rate coefficient
-#if (PP_TimeDiscMethod==42)
- IF (.NOT.DSMC%ReservoirRateStatistic) THEN
+ IF (DSMC%ReservoirSimu.AND..NOT.DSMC%ReservoirRateStatistic) THEN
ChemReac%NumReac(ReacTest) = ChemReac%NumReac(ReacTest) + ChemReac%CollCaseInfo(iCase)%ReactionProb(iPath)
ChemReac%ReacCount(ReacTest) = ChemReac%ReacCount(ReacTest) + 1
END IF
-#endif
END IF
END DO
diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90
index 0f93b4c62..2e0cf71fe 100644
--- a/src/particles/particle_init.f90
+++ b/src/particles/particle_init.f90
@@ -91,8 +91,16 @@ SUBROUTINE DefineParametersParticles()
CALL prms%CreateRealOption( 'InitialIonizationChargeAverage' , 'Average charge for each atom/molecule in the cell '//&
'(corresponds to the ionization degree)')
-CALL prms%CreateIntOption( 'Part-MaxParticleNumber', 'Maximum number of Particles per proc (used for array init)'&
- , '1')
+CALL prms%CreateIntOption( 'Part-MaxParticleNumber', 'Maximum allowed particles per core, 0=no limit')
+CALL prms%CreateRealOption( 'Part-MaxPartNumIncrease', 'How much shall the PDM%MaxParticleNumber be incresed if it is full'&
+ , '0.1')
+CALL prms%CreateLogicalOption( 'Part-RearrangePartIDs', 'Rearrange PartIDs in the process of reducing maxPartNum to allow lower memory usage'&
+ , '.TRUE.')
+#if USE_MPI
+CALL prms%CreateLogicalOption( 'Part-MPI-UNFP-afterPartSend', 'UpdateNextFreePosition after MPIParticleSend to reduce '//&
+ 'PDM%maxParticleNummber increase and decreace operations'&
+ , '.FALSE.')
+#endif
CALL prms%CreateIntOption( 'Part-NumberOfRandomSeeds' , 'Number of Seeds for Random Number Generator'//&
'Choose nRandomSeeds \n'//&
'=-1 Random \n'//&
@@ -130,7 +138,7 @@ SUBROUTINE DefineParametersParticles()
'i.e. how deep the merge extends into the mesh starting from \n'//&
'each cell. 0 is the least aggressive merge, 2 the most \n'//&
'aggressive merge.','0')
-CALL prms%CreateIntOption( 'Part-MaxNumbCellsMerge' ,'Maximum number of cells to be merged.','4')
+CALL prms%CreateIntOption( 'Part-MaxNumbCellsMerge' ,'Maximum number of cells to be merged.','4')
CALL prms%SetSection("IMD")
! IMD things
@@ -191,8 +199,8 @@ SUBROUTINE DefineParametersParticles()
, 'Set [T] to activate sampling, analyze and h5 output for surfaces. Therefore either time fraction or iteration sampling'//&
' have to be enabled as well.', '.FALSE.')
-CALL prms%CreateLogicalOption( 'Part-SampElectronicExcitation'&
- , 'Set [T] to activate sampling of electronic energy excitation', '.FALSE.')
+CALL prms%CreateLogicalOption( 'Part-SampleElectronicExcitation'&
+ , 'Set [T] to activate sampling of electronic energy excitation (currently only available for ElectronicModel = 3)', '.FALSE.')
! === Rotational frame of reference
CALL prms%CreateLogicalOption( 'Part-UseRotationalReferenceFrame', 'Activate rotational frame of reference', '.FALSE.')
@@ -209,19 +217,28 @@ END SUBROUTINE DefineParametersParticles
!===================================================================================================================================
! Global particle parameters needed for other particle inits
!===================================================================================================================================
-SUBROUTINE InitParticleGlobals()
+SUBROUTINE InitParticleGlobals(IsLoadBalance)
! MODULES
USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: ProjectName
USE MOD_ReadInTools
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Vars ,ONLY: Symmetry
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+USE MOD_PICDepo_Method ,ONLY: InitDepositionMethod
+USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, VarTimeStep
+USE MOD_ReadInTools ,ONLY: GETLOGICAL
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing,PerformRayTracing
+USE MOD_Particle_TimeStep ,ONLY: InitPartTimeStep
+USE MOD_Photon_TrackingVars ,ONLY: RadiationSurfState,RadiationVolState
+USE MOD_Restart_Vars ,ONLY: DoRestart
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
+LOGICAL,INTENT(IN) :: IsLoadBalance
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -230,7 +247,17 @@ SUBROUTINE InitParticleGlobals()
LBWRITE(UNIT_stdOut,'(A)')' INIT PARTICLE GLOBALS...'
-! Find tracking method immediately, a lot of the later variables depend on it
+!--- Variable time step
+VarTimeStep%UseLinearScaling = GETLOGICAL('Part-VariableTimeStep-LinearScaling')
+VarTimeStep%UseDistribution = GETLOGICAL('Part-VariableTimeStep-Distribution')
+IF (VarTimeStep%UseLinearScaling.OR.VarTimeStep%UseDistribution) THEN
+ UseVarTimeStep = .TRUE.
+ IF(.NOT.IsLoadBalance) CALL InitPartTimeStep()
+ELSE
+ UseVarTimeStep = .FALSE.
+END IF
+
+!--- Find tracking method immediately, a lot of the later variables depend on it
TrackingMethod = GETINTFROMSTR('TrackingMethod')
SELECT CASE(TrackingMethod)
CASE(REFMAPPING,TRACING,TRIATRACKING)
@@ -243,6 +270,30 @@ SUBROUTINE InitParticleGlobals()
LBWRITE(UNIT_stdOut,'(A)') "TrackingMethod set to TriaTracking due to Symmetry2D."
END IF
+!--- Particle-in-cell deposition method
+CALL InitDepositionMethod()
+
+!--- Ray Tracing
+! 1) Activate ray tracing based emission (also required for plasma simulation)
+UseRayTracing = GETLOGICAL('UseRayTracing')
+! 2) Activate actual ray tracing algorithms that track rays through the complete mesh (full mesh mode)
+RadiationSurfState = TRIM(ProjectName)//'_RadiationSurfState.h5'
+RadiationVolState = TRIM(ProjectName)//'_RadiationVolState.h5'
+PerformRayTracing = .FALSE. ! default
+IF(UseRayTracing)THEN
+ IF(FILEEXISTS(RadiationSurfState).AND.FILEEXISTS(RadiationVolState))THEN
+ PerformRayTracing = .FALSE.
+ ELSE
+ PerformRayTracing = .TRUE.
+ IF(DoRestart) CALL abort(__STAMP__,'Restart simulation requires '//TRIM(RadiationSurfState)//' and '//TRIM(RadiationVolState))
+ END IF ! FILEEXISTS(RadiationSurfState).AND.FILEEXISTS(RadiationVolState)
+END IF ! UseRayTracing
+
+#if (PP_TimeDiscMethod==600)
+! Radiation solver/transport always requires PerformRayTracing = T
+PerformRayTracing = .TRUE.
+#endif
+
LBWRITE(UNIT_stdOut,'(A)')' INIT PARTICLE GLOBALS DONE'
END SUBROUTINE InitParticleGlobals
@@ -267,17 +318,18 @@ SUBROUTINE InitParticles()
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Vars ,ONLY: ParticlesInitIsDone,WriteMacroVolumeValues,WriteMacroSurfaceValues,nSpecies
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_Particle_Emission_Init ,ONLY: InitialParticleInserting
USE MOD_Particle_SurfFlux_Init ,ONLY: InitializeParticleSurfaceflux
USE MOD_SurfaceModel_Init ,ONLY: InitSurfaceModel
USE MOD_Particle_Surfaces ,ONLY: InitParticleSurfaces
USE MOD_Particle_Sampling_Adapt ,ONLY: InitAdaptiveBCSampling
+USE MOD_Particle_Boundary_Init ,ONLY: InitParticleBoundarySurfSides
USE MOD_Particle_Boundary_Init ,ONLY: InitRotPeriodicMapping, InitAdaptiveWallTemp, InitRotPeriodicInterPlaneMapping
USE MOD_DSMC_BGGas ,ONLY: BGGas_InitRegions
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: InitParticleCommSize
-!USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionParticlesToProcs
+!USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionParticlesToProcs ! USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionParticlesToProcs
#endif
#if (PP_TimeDiscMethod==300)
USE MOD_FPFlow_Init ,ONLY: InitFPFlow
@@ -291,6 +343,8 @@ SUBROUTINE InitParticles()
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+USE MOD_RayTracing_Init ,ONLY: InitRayTracing
+USE MOD_Mesh_Vars ,ONLY: NodeCoords
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -323,8 +377,6 @@ SUBROUTINE InitParticles()
CALL InitializeVariables()
-! Insert the initial particles
-CALL InitialParticleInserting()
! Initialize particle surface flux to be performed per iteration
CALL InitializeParticleSurfaceflux()
@@ -336,24 +388,38 @@ SUBROUTINE InitParticles()
DSMC_Solution = 0.0
END IF
-! Initialize surface sampling / rotational periodic mapping
-! (the following IF arguments have to be considered in FinalizeParticleBoundarySampling as well)
-IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive)).OR.(nPorousBC.GT.0).OR.PartBound%UseRotPeriodicBC) THEN
+! Initialize the counters (nComputeNodeSurfSides,nComputeNodeSurfTotalSides,nComputeNodeSurfOutputSides) and
+! mappings (GlobalSide2SurfSide,SurfSide2GlobalSide) of the particle boundary surface sides
+CALL InitParticleBoundarySurfSides()
+! Initialize rotational periodic mappings (requires InitParticleBoundarySurfSides)
+IF(PartBound%UseRotPeriodicBC) CALL InitRotPeriodicMapping()
+IF(PartBound%UseInterPlaneBC) CALL InitRotPeriodicInterPlaneMapping()
+! Initialize surface sampling (the following IF arguments have to be considered in FinalizeParticleBoundarySampling as well)
+#if (PP_TimeDiscMethod==600)
+CALL InitParticleBoundarySampling()
+#endif
+IF (WriteMacroSurfaceValues.OR.DSMC%CalcSurfaceVal.OR.(ANY(PartBound%Reactive))) THEN
+#if !(PP_TimeDiscMethod==600)
CALL InitParticleBoundarySampling()
- IF(PartBound%UseRotPeriodicBC) CALL InitRotPeriodicMapping()
- IF(PartBound%UseInterPlaneBC) CALL InitRotPeriodicInterPlaneMapping()
+#endif
CALL InitAdaptiveWallTemp()
END IF
-! Initialize porous boundary condition (requires BCdata_auxSF and SurfMesh from InitParticleBoundarySampling)
+! Initialize porous boundary condition (requires BCdata_auxSF and InitParticleBoundarySurfSides)
IF(nPorousBC.GT.0) CALL InitPorousBoundaryCondition()
! Allocate sampling of near adaptive boundary element values
-IF(UseAdaptive.OR.(nPorousBC.GT.0)) CALL InitAdaptiveBCSampling()
+IF(UseAdaptiveBC.OR.(nPorousBC.GT.0)) CALL InitAdaptiveBCSampling()
-! Initialize backrgound gas regions (requires completed InitParticleGeometry for ElemMidPoint_Shared)
+! Initialize background gas regions (requires completed InitParticleGeometry for ElemMidPoint_Shared)
IF(BGGas%UseRegions) CALL BGGas_InitRegions()
+! Ray tracing
+CALL InitRayTracing()
+
+! Was deallocated in InitParticleMesh previously
+DEALLOCATE(NodeCoords)
+
IF (useDSMC) THEN
CALL InitDSMC()
CALL InitMCC()
@@ -370,6 +436,9 @@ SUBROUTINE InitParticles()
DSMC%ElectronicModel = 0
END IF
+! Insert the initial particles
+CALL InitialParticleInserting()
+
! Both routines have to be called AFTER InitializeVariables and InitDSMC
CALL InitPartDataSize()
#if USE_MPI
@@ -404,7 +473,6 @@ SUBROUTINE InitializeVariables()
#if USE_MPI
USE MOD_Particle_MPI_Emission ,ONLY: InitEmissionComm
USE MOD_Particle_MPI_Halo ,ONLY: IdentifyPartExchangeProcs
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#endif /*USE_MPI*/
#ifdef CODE_ANALYZE
USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolationAnalytic
@@ -424,9 +492,18 @@ SUBROUTINE InitializeVariables()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
REAL :: ManualTimeStepParticle ! temporary variable
+CHARACTER(32) :: hilf
!===================================================================================================================================
! Read basic particle parameter
-PDM%maxParticleNumber = GETINT('Part-maxParticleNumber','1')
+WRITE(UNIT=hilf,FMT='(I0)') HUGE(PDM%maxAllowedParticleNumber)
+PDM%maxAllowedParticleNumber = GETINT('Part-maxParticleNumber',TRIM(hilf))
+PDM%MaxPartNumIncrease = GETREAL('Part-MaxPartNumIncrease','0.1')
+PDM%RearrangePartIDs = GETLOGICAL('Part-RearrangePartIDs','.TRUE.')
+#if USE_MPI
+PDM%UNFPafterMPIPartSend = GETLOGICAL('Part-MPI-UNFP-afterPartSend','.FALSE.')
+#endif
+PDM%maxParticleNumber=1
+PDM%ParticleVecLength=0
CALL AllocateParticleArrays()
CALL InitializeVariablesRandomNumbers()
@@ -451,14 +528,14 @@ SUBROUTINE InitializeVariables()
CALL InitializeVariablesPartBoundary()
!-- Get PIC deposition (skip DSMC, FP-Flow and BGS-Flow related timediscs)
-#if (PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)
+#if (PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)
DoDeposition = .FALSE.
!DoInterpolation = .FALSE.
CALL PrintOption('No PIC-related Time discretization, turning deposition off. DoDeposition','INFO',LogOpt=DoDeposition)
!CALL PrintOption('No PIC-related Time discretization, turning interpolation off. DoInterpolation','*CHANGE',LogOpt=DoDeposition)
#else
DoDeposition = GETLOGICAL('PIC-DoDeposition')
-#endif /*(PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)*/
+#endif /*(PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==300) || (PP_TimeDiscMethod==400)*/
!-- Get PIC interpolation (could be skipped above, but DSMC octree requires some interpolation variables, which are allocated before
! init DSMC determines whether DSMC%UseOctree is true or false)
@@ -500,7 +577,7 @@ SUBROUTINE InitializeVariables()
#if USE_MPI
CALL InitEmissionComm()
-CALL MPI_BARRIER(PartMPI%COMM,IERROR)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,IERROR)
#endif /*USE_MPI*/
#if defined(PARTICLES) && USE_HDG
@@ -592,34 +669,17 @@ SUBROUTINE AllocateParticleArrays()
PDM%nextFreePosition(1:PDM%maxParticleNumber)=0
ALLOCATE(PEM%GlobalElemID(1:PDM%maxParticleNumber), STAT=ALLOCSTAT)
-IF (ALLOCSTAT.NE.0) CALL abort(&
-__STAMP__&
- ,' Cannot allocate PEM%GlobalElemID(1:PDM%maxParticleNumber) array!')
+IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,' Cannot allocate PEM%GlobalElemID(1:PDM%maxParticleNumber) array!')
ALLOCATE(PEM%LastGlobalElemID(1:PDM%maxParticleNumber), STAT=ALLOCSTAT)
-IF (ALLOCSTAT.NE.0) CALL abort(&
-__STAMP__&
- ,' Cannot allocate PEM%LastGlobalElemID(1:PDM%maxParticleNumber) array!')
+IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,' Cannot allocate PEM%LastGlobalElemID(1:PDM%maxParticleNumber) array!')
-IF (useDSMC) THEN
+IF (useDSMC.OR.usevMPF) THEN
ALLOCATE(PEM%pStart(1:nElems) , &
PEM%pNumber(1:nElems) , &
PEM%pEnd(1:nElems) , &
PEM%pNext(1:PDM%maxParticleNumber) , STAT=ALLOCSTAT)
-
- IF (ALLOCSTAT.NE.0) THEN
- CALL abort(&
-__STAMP__&
- , ' Cannot allocate DSMC PEM arrays!')
- END IF
-END IF
-IF (useDSMC) THEN
- ALLOCATE(PDM%PartInit(1:PDM%maxParticleNumber), STAT=ALLOCSTAT)
- IF (ALLOCSTAT.NE.0) THEN
- CALL abort(&
-__STAMP__&
- ,' Cannot allocate DSMC PEM arrays!')
- END IF
+ IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__, ' Cannot allocate DSMC PEM arrays!')
END IF
END SUBROUTINE AllocateParticleArrays
@@ -686,7 +746,7 @@ SUBROUTINE InitializeVariablesVirtualCellMerge()
DoVirtualCellMerge = GETLOGICAL('Part-DoVirtualCellMerge')
IF(DoVirtualCellMerge)THEN
#if USE_MPI
-DoParticleLatencyHiding = .FALSE.
+DoParticleLatencyHiding = .FALSE.
#endif
VirtualCellMergeSpread = GETINT('Part-CellMergeSpread')
MaxNumOfMergedCells = GETINT('Part-MaxNumbCellsMerge')
@@ -828,6 +888,7 @@ SUBROUTINE InitializeVariablesWriteMacroValues()
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -838,9 +899,16 @@ SUBROUTINE InitializeVariablesWriteMacroValues()
! LOCAL VARIABLES
!===================================================================================================================================
! Include surface values in the macroscopic output
-DSMC%CalcSurfaceVal = GETLOGICAL('Particles-DSMC-CalcSurfaceVal')
+IF(UseRayTracing)THEN
+ ! Automatically activate when UseRayTracing = T
+ DSMC%CalcSurfaceVal = .TRUE.
+ CALL PrintOption('Surface sampling activated (UseRayTracing=T): Particles-DSMC-CalcSurfaceVal','INFO',&
+ LogOpt=DSMC%CalcSurfaceVal)
+ELSE
+ DSMC%CalcSurfaceVal = GETLOGICAL('Particles-DSMC-CalcSurfaceVal')
+END IF ! UseRayTracing
! Include electronic energy excitation in the macroscopic output
-SampleElecExcitation = GETLOGICAL('Part-SampElectronicExcitation')
+SampleElecExcitation = GETLOGICAL('Part-SampleElectronicExcitation')
! Sampling for and output every given number of iterations (sample is reset after an output)
WriteMacroValues = GETLOGICAL('Part-WriteMacroValues')
IF(WriteMacroValues)THEN
@@ -1184,6 +1252,7 @@ SUBROUTINE InitialIonization()
USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn
USE MOD_DSMC_Vars ,ONLY: useDSMC
USE MOD_Eval_xyz ,ONLY: TensorProductInterpolation
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
@@ -1292,12 +1361,11 @@ SUBROUTINE InitialIonization()
DO iPart=1,ElemCharge(iElem) ! 1 electron for each charge of each element
! Set the next free position in the particle vector list
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
- ParticleIndexNbr = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
- PDM%ParticleVecLength = PDM%ParticleVecLength + 1
+ ParticleIndexNbr = GetNextFreePosition()
!Set new SpeciesID of new particle (electron)
- PDM%ParticleInside(ParticleIndexNbr) = .true.
+ PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
+ PDM%isNewPart(ParticleIndexNbr) = .TRUE.
PartSpecies(ParticleIndexNbr) = ElecSpecIndx
! Place the electron randomly in the reference cell
@@ -1445,7 +1513,7 @@ SUBROUTINE InitRandomSeed(nRandomSeeds,SeedSize,Seeds)
!===================================================================================================================================
! MODULES
#if USE_MPI
-USE MOD_Particle_MPI_Vars, ONLY:PartMPI
+USE MOD_Globals
#endif
! IMPLICIT VARIABLE HANDLING
!===================================================================================================================================
@@ -1497,9 +1565,9 @@ SUBROUTINE InitRandomSeed(nRandomSeeds,SeedSize,Seeds)
DO iSeed = 1, SeedSize
#if USE_MPI
IF (nRandomSeeds.EQ.0) THEN
- AuxilaryClock=AuxilaryClock+PartMPI%MyRank
+ AuxilaryClock=AuxilaryClock+myRank
ELSE IF(nRandomSeeds.GT.0) THEN
- AuxilaryClock=AuxilaryClock+(PartMPI%MyRank+1)*INT(Seeds(iSeed),8)*37
+ AuxilaryClock=AuxilaryClock+(myRank+1)*INT(Seeds(iSeed),8)*37
END IF
#else
IF (nRandomSeeds.GT.0) THEN
diff --git a/src/particles/particle_mesh/particle_bgm.f90 b/src/particles/particle_mesh/particle_bgm.f90
index f863fe648..bfa64e20d 100644
--- a/src/particles/particle_mesh/particle_bgm.f90
+++ b/src/particles/particle_mesh/particle_bgm.f90
@@ -134,6 +134,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
USE MOD_Particle_Mesh_Vars ,ONLY: CNTotalSide2GlobalSide
USE MOD_Particle_Mesh_Vars ,ONLY: GlobalElem2CNTotalElem
USE MOD_Particle_Mesh_Vars ,ONLY: CNTotalElem2GlobalElem
+USE MOD_RayTracing_Vars ,ONLY: PerformRayTracing
#endif /*USE_MPI*/
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
@@ -352,7 +353,12 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
#if USE_MPI
SafetyFactor = GETREAL('Part-SafetyFactor')
-halo_eps_velo = GETREAL('Particles-HaloEpsVelo')
+IF(PerformRayTracing)THEN
+ halo_eps_velo = 1e200
+ CALL PrintOption('Full mesh mode activated (PerformRayTracing=T): Particles-HaloEpsVelo','INFO',RealOpt=halo_eps_velo)
+ELSE
+ halo_eps_velo = GETREAL('Particles-HaloEpsVelo')
+END IF ! PerformRayTracing
! Adaptive SF: Determine global shape function radius from maximum of characteristic length in each cell
IF((TRIM(DepositionType).EQ.'shape_function_adaptive').AND.SFAdaptiveSmoothing)THEN
@@ -383,7 +389,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
END SELECT
CharacteristicLengthMax = MAX(CharacteristicLengthMax,CharacteristicLength)
END DO ! iElem = 1, nElems
- CALL MPI_ALLREDUCE(MPI_IN_PLACE,CharacteristicLengthMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,CharacteristicLengthMax,1,MPI_DOUBLE_PRECISION,MPI_MAX,MPI_COMM_PICLAS,iError)
r_sf = 1.1 * CharacteristicLengthMax ! Increase by 10%
IF(CharacteristicLength.LE.0.) CALL abort(__STAMP__,'CharacteristicLength.LE.0. is not allowed.')
CALL PrintOption('Global shape function radius from elements: PIC-shapefunction-radius' , 'INFO.' , RealOpt=r_sf)
@@ -400,14 +406,13 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
#if !(USE_HDG)
deltaT = CalcTimeStep()
#else
- CALL abort(__STAMP__&
- , 'ManualTimeStep.LLE0.0 -> ManualTimeStep is not defined correctly! ManualTimeStep = ',RealInfoOpt=ManualTimeStep)
+ CALL abort(__STAMP__, 'ManualTimeStep<=0.0: time step is not defined correctly! ManualTimeStep = ',RealInfoOpt=ManualTimeStep)
#endif /*USE_HDG*/
ELSE
deltaT=ManualTimeStep
END IF
IF (halo_eps_velo.EQ.0) halo_eps_velo = c
-#if (PP_TimeDiscMethod==4 || PP_TimeDiscMethod==200 || PP_TimeDiscMethod==42)
+#if (PP_TimeDiscMethod==4 || PP_TimeDiscMethod==200)
IF (halo_eps_velo.EQ.c) CALL abort(__STAMP__, 'halo_eps_velo.EQ.c -> Halo Eps Velocity for MPI not defined')
#endif
#if (PP_TimeDiscMethod==501) || (PP_TimeDiscMethod==502) || (PP_TimeDiscMethod==506)
@@ -710,7 +715,7 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
IF (MeshHasPeriodic) CALL CheckPeriodicSides (EnlargeBGM)
CALL BARRIER_AND_SYNC(ElemInfo_Shared_Win,MPI_COMM_SHARED)
IF (PartBound%UseRotPeriodicBC) CALL CheckRotPeriodicSides(EnlargeBGM)
- CALL BARRIER_AND_SYNC(ElemInfo_Shared_Win,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(ElemInfo_Shared_Win,MPI_COMM_SHARED)
IF (PartBound%UseInterPlaneBC) CALL CheckInterPlaneSides(EnlargeBGM)
CALL BARRIER_AND_SYNC(ElemInfo_Shared_Win,MPI_COMM_SHARED)
@@ -1112,53 +1117,65 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
END IF ! nComputeNodeProcessors.EQ.nProcessors_Global
#ifdef CODE_ANALYZE
-! Sanity checks
-IF ( SUM(ElemInfo_Shared(ELEM_HALOFLAG,:) ,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1).NE.nComputeNodeElems) &
- CALL ABORT(__STAMP__,'Error with number of local elements on compute node')
-
-IF ((SUM(ElemInfo_Shared(ELEM_HALOFLAG,:) ,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1) &
- +SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/2,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.2) &
- +SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/3,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.3)).NE.nComputeNodeTotalElems) &
- CALL ABORT(__STAMP__,'Error with number of halo elements on compute node')
-
-! Debug output
-IF (myRank.EQ.0) THEN
- LBWRITE(Unit_StdOut,'(A)') ' DETERMINED compute-node (CN) halo region ...'
- LBWRITE(Unit_StdOut,'(A)') ' | CN Rank | Local Elements | Halo Elements (non-peri) | Halo Elements (peri) |'
- CALL FLUSH(UNIT_stdOut)
- ALLOCATE(NumberOfElements(3*nLeaderGroupProcs))
-END IF
+ASSOCIATE( Sum1 => COUNT(ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1), &
+ Sum2 => COUNT(ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.2), &
+ Sum3 => COUNT(ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.3), &
+ Sum4 => COUNT(ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.4))
+
+ ! Sanity checks
+ IF (Sum1.NE.nComputeNodeElems) THEN
+ IPWRITE(UNIT_StdOut,*) "SUM(ElemInfo_Shared(ELEM_HALOFLAG,:) ,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1):", Sum1
+ IPWRITE(UNIT_StdOut,*) "nComputeNodeElems =", nComputeNodeElems
+ CALL ABORT(__STAMP__,'Error with number of local elements on compute node')
+ END IF
-IF (myComputeNodeRank.EQ.0) THEN
- ASSOCIATE( sendBuf => (/ &
- SUM(ElemInfo_Shared(ELEM_HALOFLAG,:) ,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1), &
- SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/2,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.2), &
- SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/3,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.3)/) )
- IF (myRank.EQ.0) THEN
- CALL MPI_GATHER(sendBuf , 3 , MPI_INTEGER , NumberOfElements , 3 , MPI_INTEGER , 0 , MPI_COMM_LEADERS_SHARED , iError)
- ELSE
- CALL MPI_GATHER(sendBuf , 3 , MPI_INTEGER , MPI_IN_PLACE , 3 , MPI_INTEGER , 0 , MPI_COMM_LEADERS_SHARED , iError)
- END IF
- END ASSOCIATE
-END IF
+ IF (Sum1+Sum2+Sum3+Sum4.NE.nComputeNodeTotalElems) THEN
+ IPWRITE(UNIT_StdOut,*) "SUM(ElemInfo_Shared(ELEM_HALOFLAG,:) ,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.1):", Sum1
+ IPWRITE(UNIT_StdOut,*) "SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/2,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.2):", Sum2
+ IPWRITE(UNIT_StdOut,*) "SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/3,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.3):", Sum3
+ IPWRITE(UNIT_StdOut,*) "SUM(ElemInfo_Shared(ELEM_HALOFLAG,:)/4,MASK=ElemInfo_Shared(ELEM_HALOFLAG,:).EQ.4):", Sum4
+ IPWRITE(UNIT_StdOut,*) "Sum1+Sum2+Sum3+Sum4 =", Sum1+Sum2+Sum3+Sum4
+ IPWRITE(UNIT_StdOut,*) "nComputeNodeTotalElems =", nComputeNodeTotalElems
+ CALL ABORT(__STAMP__,'Error with number of halo elements on compute node')
+ END IF
+
+ ! Debug output
+ IF (myRank.EQ.0) THEN
+ LBWRITE(Unit_StdOut,'(A)') ' DETERMINED compute-node (CN) halo region ...'
+ LBWRITE(Unit_StdOut,'(A)') ' | CN Rank | Local Elements | Halo Elements (non-peri) | Halo Elements (peri) | Halo Elements (Mortar) |'
+ CALL FLUSH(UNIT_stdOut)
+ ALLOCATE(NumberOfElements(4*nLeaderGroupProcs))
+ END IF
+
+ IF (myComputeNodeRank.EQ.0) THEN
+ ASSOCIATE( sendBuf => (/ Sum1, Sum2, Sum3, Sum4/) )
+ IF (myRank.EQ.0) THEN
+ CALL MPI_GATHER(sendBuf , 4 , MPI_INTEGER , NumberOfElements , 4 , MPI_INTEGER , 0 , MPI_COMM_LEADERS_SHARED , iError)
+ ELSE
+ CALL MPI_GATHER(sendBuf , 4 , MPI_INTEGER , MPI_IN_PLACE , 4 , MPI_INTEGER , 0 , MPI_COMM_LEADERS_SHARED , iError)
+ END IF
+ END ASSOCIATE
+ END IF
+END ASSOCIATE
IF (MPIRoot) THEN
#if USE_LOADBALANCE
IF(.NOT.PerformLoadBalance)THEN
#endif /*USE_LOADBALANCE*/
DO iProc = 0,nLeaderGroupProcs-1
- WRITE(Unit_StdOut,'(A,I7,A,I15,A,I25,A,I21,A)') &
+ WRITE(Unit_StdOut,'(A,I7,A,I15,A,I25,A,I21,A,I23,A)') &
' |>',iProc, &
- ' |' ,NumberOfElements(iProc*3+1), &
- ' |' ,NumberOfElements(iProc*3+2), &
- ' |' ,NumberOfElements(iProc*3+3), ' |'
+ ' |' ,NumberOfElements(iProc*4+1), &
+ ' |' ,NumberOfElements(iProc*4+2), &
+ ' |' ,NumberOfElements(iProc*4+3), &
+ ' |' ,NumberOfElements(iProc*4+4), ' |'
END DO
WRITE(Unit_StdOut,'(A)') ' '
#if USE_LOADBALANCE
END IF ! .NOT.PerformLoadBalance
#endif /*USE_LOADBALANCE*/
END IF
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#else
hilf=' '
#endif /*CODE_ANALYZE*/
@@ -1241,23 +1258,25 @@ SUBROUTINE BuildBGMAndIdentifyHaloRegion()
CALL MPI_FETCH_AND_OP(increment,dummyInt,MPI_INTEGER,0,INT(posElem*SIZE_INT,MPI_ADDRESS_KIND),MPI_SUM,FIBGM_nTotalElems_Shared_Win,IERROR)
! Perform logical OR and place data on CN root
CALL MPI_FETCH_AND_OP(.TRUE. ,dummyLog,MPI_LOGICAL,0,INT(posRank*SIZE_INT,MPI_ADDRESS_KIND),MPI_LOR,FIBGMToProcFlag_Shared_Win ,IERROR)
+ ! MPI_FETCH_AND_OP does guarantee completion before MPI_WIN_FLUSH, so ensure it before leaving the scope
+ CALL MPI_WIN_FLUSH(0,FIBGM_nTotalElems_Shared_Win,iError)
+ CALL MPI_WIN_FLUSH(0,FIBGMToProcFlag_Shared_Win ,iError)
END ASSOCIATE
-
- ! Store the min/max extent
- CALL MPI_FETCH_AND_OP(iBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (1-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
- CALL MPI_FETCH_AND_OP(jBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (2-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
- CALL MPI_FETCH_AND_OP(kBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (3-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
- CALL MPI_FETCH_AND_OP(iBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (1-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
- CALL MPI_FETCH_AND_OP(jBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (2-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
- CALL MPI_FETCH_AND_OP(kBGM,dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (3-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
END DO
END DO
END DO
+
+ ! Store the min/max extent
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(1,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (1-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(3,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (2-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(5,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (3-1)*(2) + (1-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MIN,FIBGMToProcExtent_Shared_Win,IERROR)
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(2,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (1-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(4,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (2-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
+ CALL MPI_FETCH_AND_OP(ElemToBGM_Shared(6,iElem),dummyInt,MPI_INTEGER,0,INT(((ProcRank)*(3)*(2) + (3-1)*(2) + (2-1))*SIZE_INT,MPI_ADDRESS_KIND),MPI_MAX,FIBGMToProcExtent_Shared_Win,IERROR)
+ ! MPI_FETCH_AND_OP does guarantee completion before MPI_WIN_FLUSH, so ensure it before leaving the scope
+ CALL MPI_WIN_FLUSH(0,FIBGMToProcExtent_Shared_Win,iError)
END DO
-CALL MPI_WIN_FLUSH(0,FIBGM_nTotalElems_Shared_Win,iError)
-CALL MPI_WIN_FLUSH(0,FIBGMToProcFlag_Shared_Win ,iError)
-CALL MPI_WIN_FLUSH(0,FIBGMToProcExtent_Shared_Win,iError)
CALL BARRIER_AND_SYNC(FIBGMToProcFlag_Shared_Win ,MPI_COMM_SHARED)
CALL BARRIER_AND_SYNC(FIBGMToProcExtent_Shared_Win,MPI_COMM_SHARED)
CALL BARRIER_AND_SYNC(FIBGM_nTotalElems_Shared_Win,MPI_COMM_SHARED)
@@ -1517,14 +1536,16 @@ SUBROUTINE FinalizeBGM()
#if USE_LOADBALANCE
END IF
IF(.NOT. ((PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance))) )THEN
+#endif /*USE_LOADBALANCE*/
! Mapping arrays are only allocated if not running on one node
IF (nComputeNodeProcessors.NE.nProcessors_Global) THEN
CALL UNLOCK_AND_FREE(GlobalElem2CNTotalElem_Shared_Win)
END IF ! nComputeNodeProcessors.NE.nProcessors_Global
+#if USE_LOADBALANCE
END IF ! .NOT. ((PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance)) .AND. DoDeposition)
#endif /*USE_LOADBALANCE*/
-!CALL UNLOCK_AND_FREE(ElemToBGM_Shared_Win)
+CALL UNLOCK_AND_FREE(ElemToBGM_Shared_Win)
CALL UNLOCK_AND_FREE(BoundsOfElem_Shared_Win)
CALL UNLOCK_AND_FREE(FIBGM_nTotalElems_Shared_Win)
CALL UNLOCK_AND_FREE(FIBGM_nElems_Shared_Win)
@@ -1578,24 +1599,24 @@ SUBROUTINE FinalizeBGM()
END IF ! nComputeNodeProcessors.NE.nProcessors_Global
ADEALLOCATE(CNTotalSide2GlobalSide)
ADEALLOCATE(CNTotalSide2GlobalSide_Shared)
-#endif /*USE_MPI*/
-#if USE_MPI
CALL FinalizeHaloInfo()
-#endif /*USE_MPI*/
#if USE_LOADBALANCE
! This will be deallocated in FinalizeDeposition() when using load balance
!IF(.NOT. ((PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance)).AND.DoDeposition) )THEN
! Note that no inquiry for DoDeposition is made here because the surface charging container is to be preserved
IF(.NOT. ((PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance))) )THEN
+#endif /*USE_LOADBALANCE*/
! Mapping arrays are only allocated if not running on one node
IF (nComputeNodeProcessors.NE.nProcessors_Global) THEN
ADEALLOCATE(GlobalElem2CNTotalElem)
ADEALLOCATE(GlobalElem2CNTotalElem_Shared)
END IF ! nComputeNodeProcessors.NE.nProcessors_Global
+#if USE_LOADBALANCE
END IF ! .NOT. ((PerformLoadBalance.AND.(.NOT.UseH5IOLoadBalance)) .AND. DoDeposition)
#endif /*USE_LOADBALANCE*/
+#endif /*USE_MPI*/
END SUBROUTINE FinalizeBGM
@@ -2001,10 +2022,10 @@ END SUBROUTINE CheckRotPeriodicSides
SUBROUTINE CheckInterPlaneSides(EnlargeBGM)
!===================================================================================================================================
!> checks the elements against inter plane
-!> In addition to halo flat elements (normal halo region), find all elements on both side of a intermediate plane that
+!> In addition to halo flat elements (normal halo region), find all elements on both side of a intermediate plane that
!> are within range of the proc during a loop over all BCs:
!> (1) Loop over all compute-node elements and check if they are within InterplaneRegion => Node is within InterplaneRegion
-!> (2) Loop over all elements that are NOT on the compute node and add them as halo elements if they are within the corresponding
+!> (2) Loop over all elements that are NOT on the compute node and add them as halo elements if they are within the corresponding
!> InterplaneRegion
!===================================================================================================================================
! MODULES !
@@ -2058,7 +2079,7 @@ SUBROUTINE CheckInterPlaneSides(EnlargeBGM)
END IF
END DO
IF(InInterPlaneRegion) THEN
-! (2) Loop over all elements that are NOT on the compute node and add them as halo elements if they are within the corresponding
+! (2) Loop over all elements that are NOT on the compute node and add them as halo elements if they are within the corresponding
! InterplaneRegion
DO iElem = firstElem,lastElem
! only consider elements that are not already flagged
diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90
index a5a21aacd..5dbdc1fd5 100644
--- a/src/particles/particle_mesh/particle_mesh.f90
+++ b/src/particles/particle_mesh/particle_mesh.f90
@@ -75,18 +75,23 @@ SUBROUTINE DefineParametersParticleMesh()
CALL prms%CreateLogicalOption( 'TriaSurfaceFlux'&
, 'Using Triangle-aproximation [T] or (bi-)linear and bezier (curved) description [F] of sides for surfaceflux.'//&
' Default is set to TriaTracking')
-CALL prms%CreateLogicalOption( 'DisplayLostParticles'&
- , 'Display position, velocity, species and host element of particles lost during particle tracking (TrackingMethod = '//&
- 'triatracking, tracing)','.FALSE.')
+CALL prms%CreateLogicalOption( 'DisplayLostParticles' , 'Display position, velocity, species and host element of particles lost during particle tracking (TrackingMethod = triatracking, tracing)','.FALSE.')
CALL prms%CreateLogicalOption( 'CountNbrOfLostParts'&
, 'Count the number of lost particles during tracking that cannot be found with fallbacks. Additionally, the lost particle '//&
'information is stored in a PartStateLost*.h5 file. When particles are not found during restart in their host cell '//&
'(sanity check), they are marked missing and are also written to PartStateLost*.h5 file even if they are re-located '//&
'on a different processor.','.TRUE.')
+CALL prms%CreateIntOption( 'PhotonModeBPO' , 'Output mode to store position, direction, host element etc. of rays/photons in PartStateBoundary.h5 (only radiation transport or ray tracing solver):\n'&
+ '0: Output nothing to PartStateBoundary.h5\n'&
+ '1: Output the initial position of the rays and their direction vector\n'&
+ '2: Output initial position and all calculated intersection points calculated in radtrans tracking\n'&
+ ,'0')
+ CALL prms%CreateLogicalOption( 'UsePhotonTriaTracking', 'Activates usage of TriaTracking methods for photon tracking or Bilinear methods (default is True). Can only be selected when ray tracing is actually performed.','.TRUE.')
+CALL prms%CreateLogicalOption( 'DoBoundaryParticleOutputRay', 'Activates output of emission particles by ray tracing SEE and ray tracing volume ionization to PartStateBoundary.h5 (with negative species IDs to indicate creation)','.FALSE.')
CALL prms%CreateIntOption( 'PartOut'&
, 'If compiled with CODE_ANALYZE flag: For This particle number every tracking information is written as STDOUT.','0')
CALL prms%CreateIntOption( 'MPIRankOut'&
- , 'If compiled with CODE_ANALYZE flag: This MPI-Proc writes the tracking information for the defined PartOut.','0')
+ , 'If compiled with CODE_ANALYZE flag: This MPI-Proc writes the tracking information for the defined PartOut.','-1')
CALL prms%CreateLogicalOption( 'MeasureTrackTime'&
, 'If .TRUE. then the time how long the tracking routines are called are sampled and written for each MPI-Proc.','.FALSE.')
CALL prms%CreateLogicalOption( 'CartesianPeriodic'&
@@ -146,7 +151,7 @@ SUBROUTINE InitParticleMesh()
USE MOD_Preproc
USE MOD_Mesh_Tools ,ONLY: InitGetGlobalElemID,InitGetCNElemID,GetCNElemID
USE MOD_Mesh_Tools ,ONLY: InitGetGlobalSideID,InitGetCNSideID,GetGlobalSideID,InitElemNodeIDs
-USE MOD_Mesh_Vars ,ONLY: deleteMeshPointer,NodeCoords
+USE MOD_Mesh_Vars ,ONLY: deleteMeshPointer!,NodeCoords
USE MOD_Mesh_Vars ,ONLY: NGeo,NGeoElevated
USE MOD_Mesh_Vars ,ONLY: useCurveds
#if USE_MPI
@@ -157,11 +162,8 @@ SUBROUTINE InitParticleMesh()
USE MOD_Particle_Mesh_Tools ,ONLY: InitPEM_LocalElemID,InitPEM_CNElemID,GetMeshMinMax,IdentifyElemAndSideType
USE MOD_Particle_Mesh_Tools ,ONLY: CalcParticleMeshMetrics,InitParticleGeometry,CalcBezierControlPoints
USE MOD_Particle_Mesh_Tools ,ONLY: CalcXCL_NGeo
-USE MOD_Particle_Surfaces ,ONLY: GetSideSlabNormalsAndIntervals
USE MOD_Particle_Surfaces_Vars ,ONLY: BezierSampleN,BezierSampleXi,SurfFluxSideSize,TriaSurfaceFlux
USE MOD_Particle_Surfaces_Vars ,ONLY: BezierElevation
-USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D,BezierControlPoints3DElevated,SideSlabNormals,SideSlabIntervals
-USE MOD_Particle_Surfaces_Vars ,ONLY: BoundingBoxIsEmpty
USE MOD_Particle_Tracking_Vars ,ONLY: MeasureTrackTime,FastPeriodic,CountNbrOfLostParts,CartesianPeriodic
USE MOD_Particle_Tracking_Vars ,ONLY: NbrOfLostParticles,NbrOfLostParticlesTotal,NbrOfLostParticlesTotal_old
USE MOD_Particle_Tracking_Vars ,ONLY: PartStateLostVecLength,PartStateLost,PartLostDataSize
@@ -178,6 +180,8 @@ SUBROUTINE InitParticleMesh()
! USE MOD_MPI_Vars ,ONLY: offsetMPISides_YOUR
#endif /*CODE_ANALYZE*/
#if USE_MPI
+USE MOD_IO_HDF5 ,ONLY: AddToElemData,ElementOut
+USE MOD_Mesh_Vars ,ONLY: nElems
USE MOD_Particle_BGM ,ONLY: WriteHaloInfo
USE MOD_MPI_Shared
USE MOD_MPI_Shared_Vars
@@ -185,13 +189,16 @@ SUBROUTINE InitParticleMesh()
#endif /* USE_MPI */
USE MOD_Particle_Mesh_Build ,ONLY: BuildElementRadiusTria,BuildElemTypeAndBasisTria,BuildEpsOneCell,BuildBCElemDistance
USE MOD_Particle_Mesh_Build ,ONLY: BuildNodeNeighbourhood,BuildElementOriginShared,BuildElementBasisAndRadius
-USE MOD_Particle_Mesh_Build ,ONLY: BuildSideOriginAndRadius,BuildLinearSideBaseVectors
+USE MOD_Particle_Mesh_Build ,ONLY: BuildSideOriginAndRadius,BuildLinearSideBaseVectors,BuildSideSlabAndBoundingBox
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
USE MOD_PICDepo_Shapefunction_Tools, ONLY:InitShapeFunctionDimensionalty
-USE MOD_IO_HDF5 ,ONLY: AddToElemData,ElementOut
-USE MOD_Mesh_Vars ,ONLY: nElems
+USE MOD_Particle_Boundary_Init ,ONLY: InitPartStateBoundary
+USE MOD_Particle_Boundary_Vars ,ONLY: DoBoundaryParticleOutputHDF5,nSurfSample,DoBoundaryParticleOutputRay
+USE MOD_Photon_TrackingVars ,ONLY: PhotonModeBPO,UsePhotonTriaTracking
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing
+USE MOD_RayTracing_Vars ,ONLY: PerformRayTracing
!USE MOD_DSMC_Vars ,ONLY: DSMC
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -203,7 +210,6 @@ SUBROUTINE InitParticleMesh()
! LOCAL VARIABLES
INTEGER :: RefMappingGuessProposal
INTEGER :: iSample
-INTEGER :: firstSide,lastSide,iSide,SideID
CHARACTER(LEN=2) :: tmpStr
#if !USE_MPI
INTEGER :: ALLOCSTAT
@@ -212,12 +218,16 @@ SUBROUTINE InitParticleMesh()
! TODO
! REAL :: dx,dy,dz
#endif /*CODE_ANALYZE*/
+CHARACTER(3) :: hilf
!===================================================================================================================================
LBWRITE(UNIT_StdOut,'(132("-"))')
LBWRITE(UNIT_stdOut,'(A)')' INIT PARTICLE MESH ...'
IF(ParticleMeshInitIsDone) CALL abort(__STAMP__, ' Particle-Mesh is already initialized.')
+WRITE(UNIT=hilf,FMT='(I0)') NGeo
+nSurfSample = GETINT('DSMC-nSurfSample',TRIM(hilf))
+
#if USE_MPI
IF(DoParticleLatencyHiding)THEN
! Exchange elements may receive particles during MPI communication and cannot be used for latency hiding
@@ -227,15 +237,22 @@ SUBROUTINE InitParticleMesh()
END IF ! DoParticleLatencyHiding
#endif /*USE_MPI*/
+! Check if Bezier control points are required for high-order surface sampling
+nSurfSampleAndTriaTracking = .FALSE. ! default
+IF((TrackingMethod.EQ.TRIATRACKING).AND.(Symmetry%Order.EQ.3).AND.(nSurfSample.GT.1)) nSurfSampleAndTriaTracking = .TRUE.
+
! Potentially curved elements. FIBGM needs to be built on BezierControlPoints rather than NodeCoords to avoid missing elements
-IF (TrackingMethod.EQ.TRACING .OR. TrackingMethod.EQ.REFMAPPING) THEN
+IF (TrackingMethod.EQ.TRACING .OR. TrackingMethod.EQ.REFMAPPING .OR. nSurfSampleAndTriaTracking .OR. UseRayTracing) THEN
+ UseBezierControlPoints = .TRUE.
! Bezier elevation now more important than ever, also determines size of FIBGM extent
BezierElevation = GETINT('BezierElevation')
NGeoElevated = NGeo + BezierElevation
CALL CalcParticleMeshMetrics() ! Required for Elem_xGP_Shared and dXCL_NGeo_Shared
CALL CalcXCL_NGeo() ! Required for XCL_NGeo_Shared
- CALL CalcBezierControlPoints() ! Required for BezierControlPoints3D and BezierControlPoints3DElevated
+ CALL CalcBezierControlPoints() ! Required for BezierControlPoints3D and BezierControlPoints3DElevated (requires XCL_NGeo_Shared)
+ELSE
+ UseBezierControlPoints = .FALSE.
END IF
! Mesh min/max must be built on BezierControlPoint for possibly curved elements
@@ -291,11 +308,27 @@ SUBROUTINE InitParticleMesh()
#if USE_LOADBALANCE
END IF
#endif
-DisplayLostParticles = GETLOGICAL('DisplayLostParticles')
+DisplayLostParticles = GETLOGICAL('DisplayLostParticles')
+
+! Ray tracing information to .h5 for debugging when using the radiation transport model or pure ray tracing
+PhotonModeBPO = GETINT('PhotonModeBPO')
+! Use TriaTracking methods for photon tracking or Bilinear methods (default is UsePhotonTriaTracking=T)
+IF(PerformRayTracing)THEN
+ UsePhotonTriaTracking = GETLOGICAL('UsePhotonTriaTracking')
+ELSE
+ UsePhotonTriaTracking = .TRUE.
+END IF ! PerformRayTracing
+! Activate output of emission particles by ray tracing SEE and ray tracing volume ionization to PartStateBoundary.h5 (with negative species IDs to indicate creation
+DoBoundaryParticleOutputRay = GETLOGICAL('DoBoundaryParticleOutputRay')
+! Check if DoBoundaryParticleOutputHDF5 is already activated and PartStateBoundary therefore already allocated
+IF((PhotonModeBPO.GE.1) .AND.(.NOT.DoBoundaryParticleOutputHDF5)) DoBoundaryParticleOutputHDF5 = .TRUE.
+IF((DoBoundaryParticleOutputRay).AND.(.NOT.DoBoundaryParticleOutputHDF5)) DoBoundaryParticleOutputHDF5 = .TRUE.
+
+IF(DoBoundaryParticleOutputHDF5) CALL InitPartStateBoundary()
#ifdef CODE_ANALYZE
-PARTOUT = GETINT('PartOut','0')
-MPIRankOut = GETINT('MPIRankOut','0')
+PARTOUT = GETINT('PartOut')
+MPIRankOut = GETINT('MPIRankOut')
#endif /*CODE_ANALYZE*/
MeasureTrackTime = GETLOGICAL('MeasureTrackTime')
@@ -326,9 +359,7 @@ SUBROUTINE InitParticleMesh()
epsInCell = SQRT(3.0*RefMappingEps)
IF((RefMappingGuess.LT.1).OR.(RefMappingGuess.GT.4))THEN
- CALL abort(&
-__STAMP__ &
-,'Wrong guessing method for mapping from physical space in reference space.',RefMappingGuess,999.)
+ CALL abort(__STAMP__,'Wrong guessing method for mapping from physical space in reference space.',RefMappingGuess,999.)
END IF
WRITE(tmpStr,'(L1)') (TrackingMethod.EQ.TRIATRACKING)
@@ -353,117 +384,57 @@ SUBROUTINE InitParticleMesh()
IF(DoVirtualCellMerge) FindNeighbourElems = .TRUE.
+! Build ConcaveElemSide_Shared, ElemSideNodeID_Shared, ElemMidPoint_Shared
+CALL InitParticleGeometry()
+
SELECT CASE(TrackingMethod)
CASE(TRIATRACKING)
- CALL InitParticleGeometry()
CALL InitElemNodeIDs()
! Compute convex element radius^2
- CALL BuildElementRadiusTria()
+ CALL BuildElementRadiusTria() ! Required for ElemBaryNGeo_Shared, ElemRadius2NGEO_Shared, ElemRadiusNGEO_Shared (only for shape function)
! Interpolation needs coordinates in reference system
!IF (DoInterpolation.OR.DSMC%UseOctree) THEN ! use this in future if possible
- IF (DoInterpolation.OR.DoDeposition) THEN
- CALL CalcParticleMeshMetrics() ! Required for Elem_xGP_Shared and dXCL_NGeo_Shared
- CALL CalcXCL_NGeo() ! Required for XCL_NGeo_Shared
- CALL BuildElemTypeAndBasisTria() ! Required for ElemCurved, XiEtaZetaBasis and slenXiEtaZetaBasis. Needs XCL_NGeo_Shared
+ IF (DoInterpolation.OR.DoDeposition.OR.UseRayTracing) THEN
+ ! Do not call these functions twice. This is already done above
+ IF(.NOT.UseBezierControlPoints)THEN
+ CALL CalcParticleMeshMetrics() ! Required for Elem_xGP_Shared and dXCL_NGeo_Shared
+ CALL CalcXCL_NGeo() ! Required for XCL_NGeo_Shared
+ END IF ! .NOT.UseBezierControlPoints
+ CALL BuildElemTypeAndBasisTria() ! Required for ElemCurved_Shared, XiEtaZetaBasis_Shared, slenXiEtaZetaBasis_Shared. Needs XCL_NGeo_Shared
END IF ! DoInterpolation.OR.DSMC%UseOctree
IF (DoDeposition) CALL BuildEpsOneCell()
+ IF(.NOT.UsePhotonTriaTracking)THEN
+ ! Build stuff required for bilinear tracing algorithms
+ CALL BuildSideSlabAndBoundingBox() ! Required for SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared
+
+ ! Check the side type (planar, bilinear, curved)
+ CALL IdentifyElemAndSideType() ! Builds ElemCurved_Shared, SideType_Shared, SideDistance_Shared, SideNormVec_Shared
+
+ ! Get basevectors for (bi-)linear sides
+ CALL BuildLinearSideBaseVectors() ! Required for BaseVectors0_Shared, BaseVectors1_Shared, BaseVectors2_Shared, BaseVectors3_Shared, BaseVectorsScale_Shared
+ END IF ! UsePhotonTriaTracking
+
CASE(TRACING,REFMAPPING)
- ! ElemMidPoint_Shared required
- IF(TriaSurfaceFlux.OR.TRIM(DepositionType).EQ.'shape_function_adaptive') CALL InitParticleGeometry()
+ ! Build stuff required for tracing algorithms
+ CALL BuildSideSlabAndBoundingBox() ! Required for SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared
+
! ElemNodeID_Shared required
IF(FindNeighbourElems) CALL InitElemNodeIDs()
-#if USE_MPI
- CALL Allocate_Shared((/3,3,nComputeNodeTotalSides/),SideSlabNormals_Shared_Win,SideSlabNormals_Shared)
- CALL MPI_WIN_LOCK_ALL(0,SideSlabNormals_Shared_Win,IERROR)
- CALL Allocate_Shared((/6,nComputeNodeTotalSides/),SideSlabIntervals_Shared_Win,SideSlabIntervals_Shared)
- CALL MPI_WIN_LOCK_ALL(0,SideSlabIntervals_Shared_Win,IERROR)
- CALL Allocate_Shared((/nComputeNodeTotalSides/),BoundingBoxIsEmpty_Shared_Win,BoundingBoxIsEmpty_Shared)
- CALL MPI_WIN_LOCK_ALL(0,BoundingBoxIsEmpty_Shared_Win,IERROR)
- firstSide = INT(REAL (myComputeNodeRank )*REAL(nComputeNodeTotalSides)/REAL(nComputeNodeProcessors))+1
- lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeTotalSides)/REAL(nComputeNodeProcessors))
- SideSlabNormals => SideSlabNormals_Shared
- SideSlabIntervals => SideSlabIntervals_Shared
- BoundingBoxIsEmpty => BoundingBoxIsEmpty_Shared
- CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
-#else
- ALLOCATE(SideSlabNormals(1:3,1:3,1:nNonUniqueGlobalSides) &
- ,SideSlabIntervals( 1:6,1:nNonUniqueGlobalSides) &
- ,BoundingBoxIsEmpty( 1:nNonUniqueGlobalSides) &
- ,STAT=ALLOCSTAT)
- IF (ALLOCSTAT.NE.0) CALL ABORT(__STAMP__,' Cannot allocate SideMetrics arrays!')
- firstSide = 1
- lastSide = nNonUniqueGlobalSides
-#endif /* USE_MPI */
-! TODO: bounding box volumes must be calculated for all unique sides.
-!#ifdef CODE_ANALYZE
-! ALLOCATE(SideBoundingBoxVolume(nSides))
-!#endif /*CODE_ANALYZE*/
-
- IF (BezierElevation.GT.0) THEN
- DO iSide = firstSide,LastSide
- ! ignore sides that are not on the compute node
- ! IF (GetCNElemID(SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.-1) CYCLE
-
- SideID = GetGlobalSideID(iSide)
-
- ! Ignore small mortar sides attached to big mortar sides
- IF (SideInfo_Shared(SIDE_LOCALID,SideID).LT.1 .OR. SideInfo_Shared(SIDE_LOCALID,SideID).GT.6) CYCLE
-
- ! BezierControlPoints are always on nonUniqueGlobalSide
- CALL GetSideSlabNormalsAndIntervals(BezierControlPoints3DElevated(1:3,0:NGeoElevated,0:NGeoElevated,SideID) &
- ,SideSlabNormals( 1:3,1:3,iSide) &
- ,SideSlabInterVals( 1:6 ,iSide) &
- ,BoundingBoxIsEmpty(iSide))
- END DO
- ELSE
- DO iSide=firstSide,LastSide
- ! ignore sides that are not on the compute node
- ! IF (GetCNElemID(SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.-1) CYCLE
-
- SideID = GetGlobalSideID(iSide)
-
- ! Ignore small mortar sides attached to big mortar sides
- IF (SideInfo_Shared(SIDE_LOCALID,SideID).LT.1 .OR. SideInfo_Shared(SIDE_LOCALID,SideID).GT.6) CYCLE
-
- ! BezierControlPoints are always on nonUniqueGlobalSide
- CALL GetSideSlabNormalsAndIntervals(BezierControlPoints3D(1:3,0:NGeo,0:NGeo,SideID) &
- ,SideSlabNormals( 1:3,1:3,iSide) &
- ,SideSlabInterVals( 1:6 ,iSide) &
- ,BoundingBoxIsEmpty(iSide))
- END DO
- END IF
-#if USE_MPI
- CALL BARRIER_AND_SYNC(SideSlabNormals_Shared_Win ,MPI_COMM_SHARED)
- CALL BARRIER_AND_SYNC(SideSlabIntervals_Shared_Win ,MPI_COMM_SHARED)
- CALL BARRIER_AND_SYNC(BoundingBoxIsEmpty_Shared_Win,MPI_COMM_SHARED)
-#endif /* USE_MPI */
- !#ifdef CODE_ANALYZE
- ! TODO: bounding box volumes must be calculated for all unique sides.
- ! offsetSideID = ElemInfo_Shared(SideIf
- ! DO iSide=offsetMPISides_YOUR,LastSide
- ! dx=ABS(SideSlabIntervals(2)-SideSlabIntervals(1))
- ! dy=ABS(SideSlabIntervals(4)-SideSlabIntervals(3))
- ! dz=ABS(SideSlabIntervals(6)-SideSlabIntervals(5))
- ! SideID = SideInfo
- ! SideBoundingBoxVolume(SideID)=dx*dy*dz
- ! END DO
- !#endif /*CODE_ANALYZE*/
-
! Compute element bary and element radius for node elements (with halo region)
CALL BuildElementOriginShared()
! Check the side type (planar, bilinear, curved)
- CALL IdentifyElemAndSideType()
+ CALL IdentifyElemAndSideType() ! Required for ElemCurved_Shared, SideType_Shared, SideDistance_Shared, SideNormVec_Shared
! Compute the element XiEtaZetaBasis and the radius of the convex hull
- CALL BuildElementBasisAndRadius()
+ CALL BuildElementBasisAndRadius() ! Required for ElemRadiusNGeo_Shared, ElemRadius2NGeo_Shared, XiEtaZetaBasis_Shared, slenXiEtaZetaBasis_Shared
! Get basevectors for (bi-)linear sides
- CALL BuildLinearSideBaseVectors()
+ CALL BuildLinearSideBaseVectors() ! Required for BaseVectors0_Shared, BaseVectors1_Shared, BaseVectors2_Shared, BaseVectors3_Shared, BaseVectorsScale_Shared
IF (TrackingMethod.EQ.REFMAPPING) THEN
! Identify BCSides and build side origin and radius
@@ -499,9 +470,9 @@ SUBROUTINE InitParticleMesh()
ParticleMeshInitIsDone=.TRUE.
-LBWRITE(UNIT_stdOut,'(A)') " NOW CALLING deleteMeshPointer..."
+LBWRITE(UNIT_stdOut,'(A)') " InitParticleMesh: NOW CALLING deleteMeshPointer..."
CALL deleteMeshPointer()
-DEALLOCATE(NodeCoords)
+!DEALLOCATE(NodeCoords)
LBWRITE(UNIT_stdOut,'(A)')' INIT PARTICLE MESH DONE!'
LBWRITE(UNIT_StdOut,'(132("-"))')
@@ -516,13 +487,14 @@ SUBROUTINE FinalizeParticleMesh()
! MODULES
USE MOD_Globals
USE MOD_Particle_Mesh_Vars
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing
#if USE_MPI
USE MOD_Particle_Surfaces_Vars ,ONLY: BezierElevation
USE MOD_PICDepo_Vars ,ONLY: DepositionType
USE MOD_PICInterpolation_Vars ,ONLY: DoInterpolation
#endif /*USE_MPI*/
USE MOD_Particle_BGM ,ONLY: FinalizeBGM
-USE MOD_Particle_Mesh_Readin ,ONLY: FinalizeMeshReadin
+USE MOD_Mesh_ReadIn ,ONLY: FinalizeMeshReadin
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod,Distance,ListDistance,PartStateLost
#if USE_MPI
USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED
@@ -535,6 +507,7 @@ SUBROUTINE FinalizeParticleMesh()
USE MOD_LoadBalance_Vars ,ONLY: ElemTime
#endif /*USE_LOADBALANCE*/
#endif /*USE_MPI*/
+USE MOD_Photon_TrackingVars ,ONLY: UsePhotonTriaTracking
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -548,24 +521,24 @@ SUBROUTINE FinalizeParticleMesh()
!===================================================================================================================================
! Particle mesh readin happens during mesh readin, finalize with gathered routine here
-CALL FinalizeMeshReadin()
+CALL FinalizeMeshReadin(2)
CALL FinalizeBGM()
SELECT CASE (TrackingMethod)
+ ! =============================================================================
! RefMapping, Tracing
CASE(REFMAPPING,TRACING)
+ ! =============================================================================
! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
#if USE_MPI
CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
! InitParticleGeometry()
- IF(TRIM(DepositionType).EQ.'shape_function_adaptive')THEN
- CALL UNLOCK_AND_FREE(ConcaveElemSide_Shared_Win)
- CALL UNLOCK_AND_FREE(ElemSideNodeID_Shared_Win)
- CALL UNLOCK_AND_FREE(ElemMidPoint_Shared_Win)
- END IF ! TRIM(DepositionType).EQ.'shape_function_adaptive'
+ CALL UNLOCK_AND_FREE(ConcaveElemSide_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemSideNodeID_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemMidPoint_Shared_Win)
! BuildSideOriginAndRadius()
IF (TrackingMethod.EQ.REFMAPPING) THEN
@@ -589,7 +562,7 @@ SUBROUTINE FinalizeParticleMesh()
END IF !PerformLoadBalance
#endif /*USE_LOADBALANCE*/
- ! GetSideSlabNormalsAndIntervals() (allocated in particle_mesh.f90)
+ ! BuildSideSlabAndBoundingBox() builds SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared
CALL UNLOCK_AND_FREE(SideSlabNormals_Shared_Win)
CALL UNLOCK_AND_FREE(SideSlabIntervals_Shared_Win)
CALL UNLOCK_AND_FREE(BoundingBoxIsEmpty_Shared_Win)
@@ -658,7 +631,7 @@ SUBROUTINE FinalizeParticleMesh()
END IF !PerformLoadBalance
#endif /*USE_LOADBALANCE*/
- ! GetSideSlabNormalsAndIntervals() (allocated in particle_mesh.f90)
+ ! BuildSideSlabAndBoundingBox() builds SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared
ADEALLOCATE(SideSlabNormals_Shared)
ADEALLOCATE(SideSlabIntervals_Shared)
ADEALLOCATE(BoundingBoxIsEmpty_Shared)
@@ -699,8 +672,10 @@ SUBROUTINE FinalizeParticleMesh()
! ! Tracing
! CASE(TRACING)
+ ! =============================================================================
! TriaTracking
CASE(TRIATRACKING)
+ ! =============================================================================
! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
#if USE_MPI
CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
@@ -710,6 +685,25 @@ SUBROUTINE FinalizeParticleMesh()
CALL UNLOCK_AND_FREE(ElemSideNodeID_Shared_Win)
CALL UNLOCK_AND_FREE(ElemMidPoint_Shared_Win)
+ IF(.NOT.UsePhotonTriaTracking)THEN
+ ! GetSideSlabNormalsAndIntervals()
+ CALL UNLOCK_AND_FREE(SideSlabNormals_Shared_Win)
+ CALL UNLOCK_AND_FREE(SideSlabIntervals_Shared_Win)
+ CALL UNLOCK_AND_FREE(BoundingBoxIsEmpty_Shared_Win)
+
+ ! IdentifyElemAndSideType()
+ CALL UNLOCK_AND_FREE(SideType_Shared_Win)
+ CALL UNLOCK_AND_FREE(SideDistance_Shared_Win)
+ CALL UNLOCK_AND_FREE(SideNormVec_Shared_Win)
+
+ ! BuildLinearSideBaseVectors()
+ CALL UNLOCK_AND_FREE(BaseVectors0_Shared_Win)
+ CALL UNLOCK_AND_FREE(BaseVectors1_Shared_Win)
+ CALL UNLOCK_AND_FREE(BaseVectors2_Shared_Win)
+ CALL UNLOCK_AND_FREE(BaseVectors3_Shared_Win)
+ CALL UNLOCK_AND_FREE(BaseVectorsScale_Shared_Win)
+ END IF ! .NOT.UsePhotonTriaTracking
+
! BuildElementRadiusTria()
CALL UNLOCK_AND_FREE(ElemBaryNGeo_Shared_Win)
CALL UNLOCK_AND_FREE(ElemRadius2NGeo_Shared_Win)
@@ -719,7 +713,7 @@ SUBROUTINE FinalizeParticleMesh()
END IF
!IF (DoInterpolation.OR.DSMC%UseOctree) THEN ! use this in future if possible
- IF (DoInterpolation.OR.DoDeposition) THEN
+ IF (DoInterpolation.OR.DoDeposition.OR.UseRayTracing.OR.nSurfSampleAndTriaTracking) THEN
#if USE_LOADBALANCE
IF (.NOT.PerformLoadBalance) THEN
#endif /*USE_LOADBALANCE*/
@@ -731,15 +725,29 @@ SUBROUTINE FinalizeParticleMesh()
END IF !PerformLoadBalance
#endif /*USE_LOADBALANCE*/
- ! BuildElemTypeAndBasisTria()
- CALL UNLOCK_AND_FREE(ElemCurved_Shared_Win)
- CALL UNLOCK_AND_FREE(XiEtaZetaBasis_Shared_Win)
- CALL UNLOCK_AND_FREE(slenXiEtaZetaBasis_Shared_Win)
- END IF ! DoInterpolation
+ IF (DoInterpolation.OR.DoDeposition.OR.UseRayTracing) THEN
+ ! BuildElemTypeAndBasisTria()
+ CALL UNLOCK_AND_FREE(ElemCurved_Shared_Win)
+ CALL UNLOCK_AND_FREE(XiEtaZetaBasis_Shared_Win)
+ CALL UNLOCK_AND_FREE(slenXiEtaZetaBasis_Shared_Win)
+ END IF ! DoInterpolation.OR.DoDeposition.OR.UseRayTracing
+ END IF ! DoInterpolation.OR.DoDeposition.OR.UseRayTracing.OR.nSurfSampleAndTriaTracking
! BuildEpsOneCell()
IF (DoDeposition) CALL UNLOCK_AND_FREE(ElemsJ_Shared_Win)
+#if USE_LOADBALANCE
+ IF (.NOT.PerformLoadBalance) THEN
+#endif /*USE_LOADBALANCE*/
+ IF(UseBezierControlPoints)THEN
+ ! CalcBezierControlPoints()
+ CALL UNLOCK_AND_FREE(BezierControlPoints3D_Shared_Win)
+ IF (BezierElevation.GT.0) CALL UNLOCK_AND_FREE(BezierControlPoints3DElevated_Shared_Win)
+ END IF ! UseBezierControlPoints
+#if USE_LOADBALANCE
+ END IF !PerformLoadBalance
+#endif /*USE_LOADBALANCE*/
+
CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
! Then, free the pointers or arrays
@@ -750,6 +758,10 @@ SUBROUTINE FinalizeParticleMesh()
ADEALLOCATE(XCL_NGeo_Array)
ADEALLOCATE(Elem_xGP_Array)
ADEALLOCATE(dXCL_NGeo_Array)
+
+ ! CalcBezierControlPoints()
+ ADEALLOCATE(BezierControlPoints3D_Shared)
+ ADEALLOCATE(BezierControlPoints3DElevated_Shared)
#if USE_LOADBALANCE
END IF !PerformLoadBalance
#endif /*USE_LOADBALANCE*/
@@ -767,6 +779,25 @@ SUBROUTINE FinalizeParticleMesh()
END IF !PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+ IF(.NOT.UsePhotonTriaTracking)THEN
+ ! GetSideSlabNormalsAndIntervals()
+ ADEALLOCATE(SideSlabNormals_Shared)
+ ADEALLOCATE(SideSlabIntervals_Shared)
+ ADEALLOCATE(BoundingBoxIsEmpty_Shared)
+
+ ! IdentifyElemAndSideType()
+ ADEALLOCATE(SideType_Shared)
+ ADEALLOCATE(SideDistance_Shared)
+ ADEALLOCATE(SideNormVec_Shared)
+
+ ! BuildLinearSideBaseVectors()
+ ADEALLOCATE(BaseVectors0_Shared)
+ ADEALLOCATE(BaseVectors1_Shared)
+ ADEALLOCATE(BaseVectors2_Shared)
+ ADEALLOCATE(BaseVectors3_Shared)
+ ADEALLOCATE(BaseVectorsScale_Shared)
+ END IF ! .NOT.UsePhotonTriaTracking
+
! BuildElementRadiusTria
ADEALLOCATE(ElemBaryNGeo_Shared)
ADEALLOCATE(ElemRadius2NGEO_Shared)
@@ -830,6 +861,7 @@ SUBROUTINE FinalizeParticleMesh()
SDEALLOCATE(GEO%PeriodicVectors)
SDEALLOCATE(GEO%FIBGM)
SDEALLOCATE(GEO%TFIBGM)
+SDEALLOCATE(GEO%XMinMax)
#if USE_MPI
SDEALLOCATE(IsExchangeElem)
#endif /*USE_MPI*/
diff --git a/src/particles/particle_mesh/particle_mesh_build.f90 b/src/particles/particle_mesh/particle_mesh_build.f90
index a79d9ed5e..e49103c4c 100644
--- a/src/particles/particle_mesh/particle_mesh_build.f90
+++ b/src/particles/particle_mesh/particle_mesh_build.f90
@@ -27,11 +27,115 @@ MODULE MOD_Particle_Mesh_Build
PUBLIC:: BuildElementRadiusTria,BuildElemTypeAndBasisTria,BuildEpsOneCell,BuildBCElemDistance
PUBLIC:: BuildNodeNeighbourhood,BuildElementOriginShared,BuildElementBasisAndRadius
-PUBLIC:: BuildSideOriginAndRadius,BuildLinearSideBaseVectors
+PUBLIC:: BuildSideOriginAndRadius,BuildLinearSideBaseVectors, BuildMesh2DInfo
+PUBLIC:: BuildSideSlabAndBoundingBox
!===================================================================================================================================
CONTAINS
+SUBROUTINE BuildMesh2DInfo()
+!===================================================================================================================================
+!> Routine determines a symmetry side and calculates the 2D (area faces in symmetry plane) and axisymmetric volumes (cells are
+!> revolved around the symmetry axis). The symmetry side will be used later on to determine in which two directions the quadtree
+!> shall refine the mesh, skipping the z-dimension to avoid an unnecessary refinement.
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
+USE MOD_Particle_Mesh_Vars ,ONLY: GEO
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemBaryNGeo
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,ElemSideNodeID_Shared, SideInfo_Shared
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED, nComputeNodeTotalElems
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID2D_Shared_Win, SideNormalEdge2D_Shared_Win
+USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank, nComputeNodeProcessors
+#else
+USE MOD_Mesh_Vars ,ONLY: nElems
+#endif /*USE_MPI*/
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID2D_Shared, SideNormalEdge2D_Shared
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: SideID, iLocSide, iNode, iELem
+REAL :: VecCell(2), FaceMidPoint(2), NormVec(2), EdgeVec(2), nVal
+INTEGER :: firstElem,lastElem, GlobalElemID, tmpNode
+LOGICAL :: DefineSide
+!===================================================================================================================================
+#if USE_MPI
+CALL Allocate_Shared((/2,6,nComputeNodeTotalElems/),ElemSideNodeID2D_Shared_Win,ElemSideNodeID2D_Shared)
+CALL MPI_WIN_LOCK_ALL(0,ElemSideNodeID2D_Shared_Win,IERROR)
+CALL Allocate_Shared((/4,6,nComputeNodeTotalElems/),SideNormalEdge2D_Shared_Win,SideNormalEdge2D_Shared)
+CALL MPI_WIN_LOCK_ALL(0,SideNormalEdge2D_Shared_Win,IERROR)
+
+firstElem = INT(REAL( myComputeNodeRank *nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))+1
+lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))
+#else
+ALLOCATE(ElemSideNodeID2D_Shared(1:2,1:6,1:nElems))
+ALLOCATE(SideNormalEdge2D_Shared(1:4,1:6,1:nElems))
+firstElem = 1
+lastElem = nElems
+#endif
+
+DO iElem = firstElem, lastElem
+ GlobalElemID = GetGlobalElemID(iElem)
+ DO iLocSide = 1, 6
+ DefineSide = .TRUE.
+ SideID=GetGlobalNonUniqueSideID(GlobalElemID,iLocSide)
+ IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN
+ IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%SymmetryBC) THEN
+ ElemSideNodeID2D_Shared(:,iLocSide, iElem) = -1
+ SideNormalEdge2D_Shared(:,iLocSide, iElem) = 0.
+ DefineSide = .FALSE.
+ END IF
+ END IF
+
+ IF (DefineSide) THEN
+ tmpNode = 0
+ DO iNode = 1, 4
+ IF(NodeCoords_Shared(3,ElemSideNodeID_Shared(iNode,iLocSide,iElem)+1).GT.(GEO%zmaxglob+GEO%zminglob)/2.) THEN
+ tmpNode = tmpNode + 1
+ ElemSideNodeID2D_Shared(tmpNode,iLocSide, iElem) = ElemSideNodeID_Shared(iNode,iLocSide,iElem)+1
+ END IF
+ END DO
+ EdgeVec(1:2) = NodeCoords_Shared(1:2,ElemSideNodeID2D_Shared(2,ilocSide,iElem))-NodeCoords_Shared(1:2,ElemSideNodeID2D_Shared(1,ilocSide,iElem))
+ NormVec(1) = -EdgeVec(2)
+ NormVec(2) = EdgeVec(1)
+ FaceMidPoint(1:2) = (NodeCoords_Shared(1:2,ElemSideNodeID_Shared(1,iLocSide,iElem)+1) &
+ + NodeCoords_Shared(1:2,ElemSideNodeID_Shared(2,iLocSide,iElem)+1)&
+ + NodeCoords_Shared(1:2,ElemSideNodeID_Shared(3,iLocSide,iElem)+1) &
+ + NodeCoords_Shared(1:2,ElemSideNodeID_Shared(4,iLocSide,iElem)+1)) / 4.
+ VecCell(1:2) = FaceMidPoint(1:2) - ElemBaryNGeo(1:2,iElem) ! vector from elem bary to side
+ IF (DOT_PRODUCT(VecCell,NormVec).GT.0.0) THEN
+ SideNormalEdge2D_Shared(1:2,iLocSide, iElem) = NormVec(1:2)
+ ELSE
+ SideNormalEdge2D_Shared(1,iLocSide, iElem) = EdgeVec(2)
+ SideNormalEdge2D_Shared(2,iLocSide, iElem) = -EdgeVec(1)
+ END IF
+ nVal = SQRT(SideNormalEdge2D_Shared(1,iLocSide,iElem)**2. + SideNormalEdge2D_Shared(2,iLocSide,iElem)**2.)
+ SideNormalEdge2D_Shared(1,iLocSide,iElem)= SideNormalEdge2D_Shared(1,iLocSide,iElem)/ nVal
+ SideNormalEdge2D_Shared(2,iLocSide,iElem)= SideNormalEdge2D_Shared(2,iLocSide,iElem) / nVal
+ nVal = SQRT(EdgeVec(1)**2. + EdgeVec(2)**2.)
+ SideNormalEdge2D_Shared(3,iLocSide,iElem) = EdgeVec(1) / nVal
+ SideNormalEdge2D_Shared(4,iLocSide,iElem) = EdgeVec(2) / nVal
+ END IF
+ END DO
+END DO
+
+#if USE_MPI
+CALL BARRIER_AND_SYNC(ElemSideNodeID2D_Shared_Win,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(SideNormalEdge2D_Shared_Win,MPI_COMM_SHARED)
+#endif
+
+END SUBROUTINE BuildMesh2DInfo
SUBROUTINE BuildElementRadiusTria()
!================================================================================================================================
@@ -159,6 +263,7 @@ SUBROUTINE BuildElemTypeAndBasisTria()
#if USE_LOADBALANCE
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
+USE MOD_Photon_TrackingVars ,ONLY: UsePhotonTriaTracking
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -179,32 +284,40 @@ SUBROUTINE BuildElemTypeAndBasisTria()
! elements
#if USE_MPI
-CALL Allocate_Shared((/nComputeNodeTotalElems/),ElemCurved_Shared_Win,ElemCurved_Shared)
-CALL MPI_WIN_LOCK_ALL(0,ElemCurved_Shared_Win,IERROR)
+IF(UsePhotonTriaTracking)THEN
+ CALL Allocate_Shared((/nComputeNodeTotalElems/),ElemCurved_Shared_Win,ElemCurved_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,ElemCurved_Shared_Win,IERROR)
+END IF ! UsePhotonTriaTracking
CALL Allocate_Shared((/3,6,nComputeNodeTotalElems/),XiEtaZetaBasis_Shared_Win,XiEtaZetaBasis_Shared)
CALL MPI_WIN_LOCK_ALL(0,XiEtaZetaBasis_Shared_Win,IERROR)
CALL Allocate_Shared((/6,nComputeNodeTotalElems/),slenXiEtaZetaBasis_Shared_Win,slenXiEtaZetaBasis_Shared)
CALL MPI_WIN_LOCK_ALL(0,slenXiEtaZetaBasis_Shared_Win,IERROR)
-ElemCurved => ElemCurved_Shared
+IF(UsePhotonTriaTracking)THEN
+ ElemCurved => ElemCurved_Shared
+END IF ! UsePhotonTriaTracking
XiEtaZetaBasis => XiEtaZetaBasis_Shared
slenXiEtaZetaBasis => slenXiEtaZetaBasis_Shared
ASSOCIATE(XCL_NGeo => XCL_NGeo_Shared)
#else
-ALLOCATE(ElemCurved( 1:nElems) &
- ,XiEtaZetaBasis(1:3,1:6,1:nElems) &
- ,slenXiEtaZetaBasis(1:6,1:nElems))
+IF(UsePhotonTriaTracking)THEN
+ ALLOCATE(ElemCurved( 1:nElems))
+END IF ! UsePhotonTriaTracking
+ALLOCATE(XiEtaZetaBasis(1:3,1:6,1:nElems))
+ALLOCATE(slenXiEtaZetaBasis(1:6,1:nElems))
#endif /*USE_MPI*/
-! only CN root nullifies
+IF(UsePhotonTriaTracking)THEN
+ ! only CN root nullifies
#if USE_MPI
-IF (myComputeNodeRank.EQ.0) THEN
+ IF (myComputeNodeRank.EQ.0) THEN
#endif /*USE_MPI*/
- ElemCurved = .FALSE.
+ ElemCurved = .FALSE.
#if USE_MPI
-END IF
+ END IF
#endif /*USE_MPI*/
+END IF ! UsePhotonTriaTracking
#if USE_MPI
firstElem = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))+1
@@ -244,7 +357,9 @@ SUBROUTINE BuildElemTypeAndBasisTria()
#if USE_MPI
END ASSOCIATE
-CALL BARRIER_AND_SYNC(ElemCurved_Shared_Win ,MPI_COMM_SHARED)
+IF(UsePhotonTriaTracking)THEN
+ CALL BARRIER_AND_SYNC(ElemCurved_Shared_Win ,MPI_COMM_SHARED)
+END IF ! UsePhotonTriaTracking
CALL BARRIER_AND_SYNC(XiEtaZetaBasis_Shared_Win ,MPI_COMM_SHARED)
CALL BARRIER_AND_SYNC(slenXiEtaZetaBasis_Shared_Win,MPI_COMM_SHARED)
#endif /*USE_MPI*/
@@ -379,7 +494,14 @@ SUBROUTINE BuildEpsOneCell()
ElemsJ => sJ
#endif /* USE_MPI*/
-IF (TrackingMethod.EQ.TRIATRACKING) RETURN
+! Exit routine here if TriaTracking is active
+IF (TrackingMethod.EQ.TRIATRACKING)THEN
+ IF(MPIRoot)THEN
+ GETTIME(EndT)
+ CALL DisplayMessageAndTime(EndT-StartT, 'DONE!')
+ END IF ! MPIRoot
+ RETURN
+END IF
! allocate epsOneCell
#if USE_MPI
@@ -888,11 +1010,12 @@ SUBROUTINE BuildNodeNeighbourhood()
!----------------------------------------------------------------------------------------------------------------------------------!
! MODULES !
!----------------------------------------------------------------------------------------------------------------------------------!
-USE MOD_Globals ,ONLY: abort
+USE MOD_Globals ,ONLY: abort,UNIT_stdOUt,DisplayMessageAndTime!,myRank
USE MOD_Particle_Mesh_Vars ,ONLY: nUniqueGlobalNodes
USE MOD_Particle_Mesh_Vars ,ONLY: ElemNodeID_Shared,NodeInfo_Shared
USE MOD_Particle_Mesh_Vars ,ONLY: NodeToElemMapping,NodeToElemInfo,ElemToElemMapping,ElemToElemInfo
#if USE_MPI
+USE MOD_Globals ,ONLY: MPIRoot
USE MPI
USE MOD_MPI_Shared
USE MOD_MPI_Shared_Vars ,ONLY: nComputeNodeTotalElems
@@ -904,6 +1027,9 @@ SUBROUTINE BuildNodeNeighbourhood()
#else
USE MOD_Mesh_Vars ,ONLY: nElems
#endif /*USE_MPI*/
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
+#endif /*USE_LOADBALANCE*/
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT / OUTPUT VARIABLES
@@ -917,7 +1043,10 @@ SUBROUTINE BuildNodeNeighbourhood()
#if USE_MPI
INTEGER :: sendbuf,recvbuf,iError
#endif /*USE_MPI*/
+REAL :: StartT,EndT
!===================================================================================================================================
+LBWRITE(UNIT_StdOut,'(A)',ADVANCE='NO') ' Building node neighbourhood ...'
+GETTIME(StartT)
! 1.1 Get number of CN elements attached to each UNIQUE node and store in NbrOfElemsOnUniqueNode(UniqueNodeID)
! 1.2 Store the total number of counted elements in nNodeToElemMapping = SUM(NbrOfElemsOnUniqueNode)
@@ -1137,9 +1266,7 @@ SUBROUTINE BuildNodeNeighbourhood()
CountElems = CountElems + 1
OffsetElemToElemCounter = OffsetElemToElemCounter + 1
- IF(CountElems.GT.500) CALL abort(&
- __STAMP__&
- ,'CountElems > 500. Inrease the number and try again!')
+ IF(CountElems.GT.500) CALL abort(__STAMP__,'CountElems > 500. Inrease the number and try again!')
CheckedElemIDs(CountElems) = TestElemID
ElemToElemInfo(OffsetElemToElemCounter) = TestElemID
@@ -1154,6 +1281,9 @@ SUBROUTINE BuildNodeNeighbourhood()
CALL BARRIER_AND_SYNC(ElemToElemMapping_Shared_Win,MPI_COMM_SHARED)
#endif /*USE_MPI*/
+GETTIME(EndT)
+CALL DisplayMessageAndTime(EndT-StartT, 'DONE!')
+
END SUBROUTINE BuildNodeNeighbourhood
@@ -1642,4 +1772,117 @@ SUBROUTINE BuildLinearSideBaseVectors()
END SUBROUTINE BuildLinearSideBaseVectors
+!===================================================================================================================================
+!> Builds SideSlabNormals_Shared, SideSlabIntervals_Shared and BoundingBoxIsEmpty_Shared from Bezier control points
+!===================================================================================================================================
+SUBROUTINE BuildSideSlabAndBoundingBox()
+! MODULES
+USE MOD_Globals
+USE MOD_Preproc
+USE MOD_Particle_Mesh_Vars
+USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D,BezierControlPoints3DElevated,SideSlabNormals,SideSlabIntervals
+USE MOD_Particle_Surfaces_Vars ,ONLY: BoundingBoxIsEmpty,BezierElevation
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID,GetGlobalSideID
+USE MOD_Mesh_Vars ,ONLY: NGeo,NGeoElevated
+USE MOD_Particle_Surfaces ,ONLY: GetSideSlabNormalsAndIntervals
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars
+#endif /* USE_MPI */
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: firstSide,lastSide,iSide,SideID
+#if !USE_MPI
+INTEGER :: ALLOCSTAT
+#endif
+#ifdef CODE_ANALYZE
+! TODO
+! REAL :: dx,dy,dz
+#endif /*CODE_ANALYZE*/
+!===================================================================================================================================
+
+#if USE_MPI
+CALL Allocate_Shared((/3,3,nComputeNodeTotalSides/),SideSlabNormals_Shared_Win,SideSlabNormals_Shared)
+CALL MPI_WIN_LOCK_ALL(0,SideSlabNormals_Shared_Win,IERROR)
+CALL Allocate_Shared((/6,nComputeNodeTotalSides/),SideSlabIntervals_Shared_Win,SideSlabIntervals_Shared)
+CALL MPI_WIN_LOCK_ALL(0,SideSlabIntervals_Shared_Win,IERROR)
+CALL Allocate_Shared((/nComputeNodeTotalSides/),BoundingBoxIsEmpty_Shared_Win,BoundingBoxIsEmpty_Shared)
+CALL MPI_WIN_LOCK_ALL(0,BoundingBoxIsEmpty_Shared_Win,IERROR)
+firstSide = INT(REAL (myComputeNodeRank )*REAL(nComputeNodeTotalSides)/REAL(nComputeNodeProcessors))+1
+lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeTotalSides)/REAL(nComputeNodeProcessors))
+SideSlabNormals => SideSlabNormals_Shared
+SideSlabIntervals => SideSlabIntervals_Shared
+BoundingBoxIsEmpty => BoundingBoxIsEmpty_Shared
+CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
+#else
+ALLOCATE(SideSlabNormals(1:3,1:3,1:nNonUniqueGlobalSides) &
+ ,SideSlabIntervals( 1:6,1:nNonUniqueGlobalSides) &
+ ,BoundingBoxIsEmpty( 1:nNonUniqueGlobalSides) &
+ ,STAT=ALLOCSTAT)
+IF (ALLOCSTAT.NE.0) CALL ABORT(__STAMP__,' Cannot allocate SideMetrics arrays!')
+firstSide = 1
+lastSide = nNonUniqueGlobalSides
+#endif /* USE_MPI */
+! TODO: bounding box volumes must be calculated for all unique sides.
+!#ifdef CODE_ANALYZE
+! ALLOCATE(SideBoundingBoxVolume(nSides))
+!#endif /*CODE_ANALYZE*/
+
+IF (BezierElevation.GT.0) THEN
+ DO iSide = firstSide,LastSide
+ ! ignore sides that are not on the compute node
+ ! IF (GetCNElemID(SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.-1) CYCLE
+
+ SideID = GetGlobalSideID(iSide)
+
+ ! Ignore small mortar sides attached to big mortar sides
+ IF (SideInfo_Shared(SIDE_LOCALID,SideID).LT.1 .OR. SideInfo_Shared(SIDE_LOCALID,SideID).GT.6) CYCLE
+
+ ! BezierControlPoints are always on nonUniqueGlobalSide
+ CALL GetSideSlabNormalsAndIntervals(BezierControlPoints3DElevated(1:3,0:NGeoElevated,0:NGeoElevated,SideID) &
+ ,SideSlabNormals( 1:3,1:3,iSide) &
+ ,SideSlabInterVals( 1:6 ,iSide) &
+ ,BoundingBoxIsEmpty(iSide))
+ END DO
+ELSE
+ DO iSide=firstSide,LastSide
+ ! ignore sides that are not on the compute node
+ ! IF (GetCNElemID(SideInfo_Shared(SIDE_ELEMID,iSide)).EQ.-1) CYCLE
+
+ SideID = GetGlobalSideID(iSide)
+
+ ! Ignore small mortar sides attached to big mortar sides
+ IF (SideInfo_Shared(SIDE_LOCALID,SideID).LT.1 .OR. SideInfo_Shared(SIDE_LOCALID,SideID).GT.6) CYCLE
+
+ ! BezierControlPoints are always on nonUniqueGlobalSide
+ CALL GetSideSlabNormalsAndIntervals(BezierControlPoints3D(1:3,0:NGeo,0:NGeo,SideID) &
+ ,SideSlabNormals( 1:3,1:3,iSide) &
+ ,SideSlabInterVals( 1:6 ,iSide) &
+ ,BoundingBoxIsEmpty(iSide))
+ END DO
+END IF
+#if USE_MPI
+CALL BARRIER_AND_SYNC(SideSlabNormals_Shared_Win ,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(SideSlabIntervals_Shared_Win ,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(BoundingBoxIsEmpty_Shared_Win,MPI_COMM_SHARED)
+#endif /* USE_MPI */
+!#ifdef CODE_ANALYZE
+! TODO: bounding box volumes must be calculated for all unique sides.
+! offsetSideID = ElemInfo_Shared(SideIf
+! DO iSide=offsetMPISides_YOUR,LastSide
+! dx=ABS(SideSlabIntervals(2)-SideSlabIntervals(1))
+! dy=ABS(SideSlabIntervals(4)-SideSlabIntervals(3))
+! dz=ABS(SideSlabIntervals(6)-SideSlabIntervals(5))
+! SideID = SideInfo
+! SideBoundingBoxVolume(SideID)=dx*dy*dz
+! END DO
+!#endif /*CODE_ANALYZE*/
+
+
+END SUBROUTINE BuildSideSlabAndBoundingBox
+
+
END MODULE MOD_Particle_Mesh_Build
diff --git a/src/particles/particle_mesh/particle_mesh_readin.f90 b/src/particles/particle_mesh/particle_mesh_readin.f90
index 4ad065c6d..ee66383fc 100644
--- a/src/particles/particle_mesh/particle_mesh_readin.f90
+++ b/src/particles/particle_mesh/particle_mesh_readin.f90
@@ -39,15 +39,10 @@ MODULE MOD_Particle_Mesh_Readin
MODULE PROCEDURE FinishCommunicateMeshReadin
END INTERFACE
-INTERFACE FinalizeMeshReadin
- MODULE PROCEDURE FinalizeMeshReadin
-END INTERFACE
-
PUBLIC :: ReadMeshBasics
PUBLIC :: ReadMeshSideNeighbors
PUBLIC :: StartCommunicateMeshReadin
PUBLIC :: FinishCommunicateMeshReadin
-PUBLIC :: FinalizeMeshReadin
!===================================================================================================================================
CONTAINS
@@ -432,82 +427,4 @@ SUBROUTINE FinishCommunicateMeshReadin()
END SUBROUTINE FinishCommunicateMeshReadin
-SUBROUTINE FinalizeMeshReadin()
-!===================================================================================================================================
-! Finalizes the shared mesh readin
-!===================================================================================================================================
-! MODULES
-USE MOD_Globals
-USE MOD_Mesh_Vars
-USE MOD_Particle_Mesh_Vars
-#if USE_MPI
-USE MOD_MPI_Shared
-USE MOD_MPI_Shared_Vars
-#endif
-#if USE_LOADBALANCE
-USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
-#endif /*USE_LOADBALANCE*/
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT/OUTPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-!===================================================================================================================================
-
-! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
-#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-
-! volumes
-CALL UNLOCK_AND_FREE(ElemVolume_Shared_Win)
-CALL UNLOCK_AND_FREE(ElemCharLength_Shared_Win)
-#endif /*USE_MPI*/
-
-! Then, free the pointers or arrays
-ADEALLOCATE(SideIsSymSide_Shared)
-ADEALLOCATE(ElemVolume_Shared)
-ADEALLOCATE(ElemCharLength_Shared)
-
-#if USE_MPI
-! Free communication arrays
-SDEALLOCATE(displsElem)
-SDEALLOCATE(recvcountElem)
-SDEALLOCATE(displsSide)
-SDEALLOCATE(recvcountSide)
-
-#if USE_LOADBALANCE
-IF (PerformLoadBalance) THEN
- CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
- RETURN
-END IF
-#endif /*USE_LOADBALANCE*/
-
-! elems
-CALL UNLOCK_AND_FREE(ElemInfo_Shared_Win)
-
-! sides
-CALL UNLOCK_AND_FREE(SideInfo_Shared_Win)
-
-! nodes
-CALL UNLOCK_AND_FREE(NodeInfo_Shared_Win)
-CALL UNLOCK_AND_FREE(NodeCoords_Shared_Win)
-
-CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
-#endif /*USE_MPI*/
-
-ADEALLOCATE(ElemInfo_Shared)
-ADEALLOCATE(SideInfo_Shared)
-ADEALLOCATE(NodeInfo_Shared)
-ADEALLOCATE(NodeCoords_Shared)
-
-! Free communication arrays
-#if USE_MPI
-SDEALLOCATE(displsNode)
-SDEALLOCATE(recvcountNode)
-#endif /*USE_MPI*/
-
-END SUBROUTINE FinalizeMeshReadin
-
-
END MODULE MOD_Particle_Mesh_Readin
diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90
index 808e2db3e..a9589f075 100644
--- a/src/particles/particle_mesh/particle_mesh_tools.f90
+++ b/src/particles/particle_mesh/particle_mesh_tools.f90
@@ -1050,13 +1050,13 @@ SUBROUTINE IdentifyElemAndSideType()
END DO
#if USE_MPI
-CALL MPI_REDUCE(nPlanarRectangular ,nPlanarRectangularTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nPlanarNonRectangular,nPlanarNonRectangularTot,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nBilinear ,nBilinearTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nPlanarCurved ,nPlanarCurvedTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nCurved ,nCurvedTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nLinearElems ,nLinearElemsTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
-CALL MPI_REDUCE(nCurvedElems ,nCurvedElemsTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,IERROR)
+CALL MPI_REDUCE(nPlanarRectangular ,nPlanarRectangularTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nPlanarNonRectangular,nPlanarNonRectangularTot,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nBilinear ,nBilinearTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nPlanarCurved ,nPlanarCurvedTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nCurved ,nCurvedTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nLinearElems ,nLinearElemsTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+CALL MPI_REDUCE(nCurvedElems ,nCurvedElemsTot ,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
#else
nPlanarRectangularTot = nPlanarRectangular
nPlanarNonRectangularTot = nPlanarNonRectangular
@@ -1372,10 +1372,10 @@ SUBROUTINE CalcParticleMeshMetrics()
USE MOD_Globals
USE MOD_PreProc
USE MOD_Mesh_Vars ,ONLY: Elem_xGP
-USE MOD_Mesh_Vars ,ONLY: NGeo,dXCL_NGeo
+USE MOD_Mesh_Vars ,ONLY: dXCL_NGeo
USE MOD_Particle_Mesh_Vars
#if USE_MPI
-USE MOD_Mesh_Vars ,ONLY: nGlobalElems,offsetElem,nElems
+USE MOD_Mesh_Vars ,ONLY: NGeo,nGlobalElems,offsetElem,nElems
USE MOD_MPI_Shared
USE MOD_MPI_Shared_Vars
#endif
@@ -1788,10 +1788,17 @@ SUBROUTINE ComputePeriodicVec()
REAL :: sendbuf
REAL,ALLOCATABLE :: recvbuf(:)
#endif
+INTEGER :: nPeriodicVectorsParameterIni
!-----------------------------------------------------------------------------------------------------------------------------------
! Find number of periodic vectors
+nPeriodicVectorsParameterIni = GEO%nPeriodicVectors
GEO%nPeriodicVectors = MERGE(MAXVAL(BoundaryType(:,BC_ALPHA)),0,PartMeshHasPeriodicBCs)
+IF(nPeriodicVectorsParameterIni.GT.GEO%nPeriodicVectors)THEN
+ SWRITE (*,*) "Number of periodic vectors in parameter file: ", nPeriodicVectorsParameterIni
+ SWRITE (*,*) "Number of periodic vectors in mesh file: ", GEO%nPeriodicVectors
+ CALL CollectiveStop(__STAMP__,'Wrong number of periodic vectors!')
+END IF
IF (GEO%nPeriodicVectors.EQ.0) RETURN
firstElem = offsetElem+1
@@ -1868,11 +1875,11 @@ SUBROUTINE ComputePeriodicVec()
! https://stackoverflow.com/questions/56307320/mpi-allreduce-not-synchronizing-properly
!CALL MPI_ALLREDUCE(MPI_IN_PLACE,sendbuf,GEO%nPeriodicVectors,MPI_2DOUBLE_PRECISION,MPI_MINLOC,MPI_COMM_SHARED,iERROR)
- CALL MPI_ALLGATHER(sendbuf,1,MPI_DOUBLE_PRECISION,recvbuf(:),1,MPI_DOUBLE_PRECISION,MPI_COMM_WORLD,iERROR)
+ CALL MPI_ALLGATHER(sendbuf,1,MPI_DOUBLE_PRECISION,recvbuf(:),1,MPI_DOUBLE_PRECISION,MPI_COMM_PICLAS,iERROR)
IF (ALL(recvbuf(:).EQ.HUGE(1.))) CALL CollectiveStop(__STAMP__,'No periodic vector for BC_ALPHA found!',IntInfo=iVec)
! MINLOC does not follow array bounds, so root rank = 1
- CALL MPI_BCAST(GEO%PeriodicVectors(:,iVec),3,MPI_DOUBLE_PRECISION,MINLOC(recvbuf(:),1)-1,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(GEO%PeriodicVectors(:,iVec),3,MPI_DOUBLE_PRECISION,MINLOC(recvbuf(:),1)-1,MPI_COMM_PICLAS,iError)
END DO
#endif /*USE_MPI*/
diff --git a/src/particles/particle_mesh/particle_mesh_vars.f90 b/src/particles/particle_mesh/particle_mesh_vars.f90
index 895f0c43a..89638d622 100644
--- a/src/particles/particle_mesh/particle_mesh_vars.f90
+++ b/src/particles/particle_mesh/particle_mesh_vars.f90
@@ -26,6 +26,7 @@ MODULE MOD_Particle_Mesh_Vars
!-----------------------------------------------------------------------------------------------------------------------------------
! GLOBAL VARIABLES
+LOGICAL :: nSurfSampleAndTriaTracking
LOGICAL :: ParticleMeshInitIsDone
REAL :: meshScale
LOGICAL :: MeshWasCurved =.FALSE.
@@ -44,6 +45,7 @@ MODULE MOD_Particle_Mesh_Vars
INTEGER :: offsetComputeNodeSide !> side offset of compute-node root
INTEGER :: offsetComputeNodeNode !> node offset of compute-node root
INTEGER :: nUniqueGlobalNodes !> MAXVAL(NodeInfo_Shared)
+LOGICAL :: UseBezierControlPoints !> Flag is automatically set when BezierControlPoints3D are built
#if USE_MPI
LOGICAL, ALLOCATABLE :: IsExchangeElem(:) !> Exchange elements may receive particles during MPI communication and cannot be used for latency hiding
@@ -186,7 +188,14 @@ MODULE MOD_Particle_Mesh_Vars
REAL,ALLOCPOINT :: ElemCharLengthZ_Shared(:)
LOGICAL,ALLOCPOINT :: SideIsSymSide_Shared(:)
+
+INTEGER,ALLOCPOINT :: ElemSideNodeID2D_Shared(:,:,:) !> Contains the 4 corner nodes of the local sides in an element
+LOGICAL,ALLOCPOINT :: SideIsSymSide(:)
+REAL,ALLOCPOINT :: SideNormalEdge2D_Shared(:,:,:)
+
#if USE_MPI
+INTEGER :: SideNormalEdge2D_Shared_Win
+INTEGER :: ElemSideNodeID2D_Shared_Win
INTEGER :: SideIsSymSide_Shared_Win
! integers to hold shared memory windows
INTEGER :: NodeToElemMapping_Shared_Win
@@ -214,7 +223,7 @@ MODULE MOD_Particle_Mesh_Vars
INTEGER :: FIBGMToProc_Shared_Win
INTEGER :: FIBGMToProcFlag_Shared_Win
-INTEGER :: FIBGMToProcExtent_Shared_Win
+INTEGER :: FIBGMToProcExtent_Shared_Win
INTEGER :: FIBGMProcs_Shared_Win
INTEGER :: CNTotalElem2GlobalElem_Shared_Win
diff --git a/src/particles/particle_mpi/particle_mpi.f90 b/src/particles/particle_mpi/particle_mpi.f90
index b82cb41d1..755267e1e 100644
--- a/src/particles/particle_mpi/particle_mpi.f90
+++ b/src/particles/particle_mpi/particle_mpi.f90
@@ -123,21 +123,6 @@ SUBROUTINE InitParticleMPI()
IF(DoParticleLatencyHiding) CALL abort(__STAMP__,'DoParticleLatencyHiding=T not imeplemented for this time disc!')
#endif /*!(PP_TimeDiscMethod==400)*/
-#if USE_MPI
-CALL MPI_COMM_DUP (MPI_COMM_WORLD,PartMPI%COMM,iError)
-CALL MPI_COMM_RANK(PartMPI%COMM,PartMPI%myRank,iError)
-CALL MPI_COMM_SIZE(PartMPI%COMM,PartMPI%nProcs,iError)
-
-IF(PartMPI%nProcs.NE.nProcessors) CALL ABORT(__STAMP__,' MPI Communicater-size does not match!', IERROR)
-PartCommSize = 0
-PartMPI%MPIRoot = .FALSE.
-IF(PartMPI%MyRank.EQ.0) PartMPI%MPIRoot=.TRUE.
-#else
-PartMPI%myRank = 0
-PartMPI%nProcs = 1
-PartMPI%MPIRoot = .TRUE.
-#endif /*USE_MPI*/
-
ParticleMPIInitIsDone=.TRUE.
LBWRITE(UNIT_stdOut,'(A)')' INIT PARTICLE MPI DONE!'
LBWRITE(UNIT_StdOut,'(132("-"))')
@@ -261,7 +246,7 @@ SUBROUTINE IRecvNbOfParticles()
! MODULES
USE MOD_Globals
USE MOD_Preproc
-USE MOD_Particle_MPI_Vars, ONLY:PartMPI,PartMPIExchange
+USE MOD_Particle_MPI_Vars, ONLY:PartMPIExchange
USE MOD_Particle_MPI_Vars, ONLY:nExchangeProcessors,ExchangeProcToGlobalProc
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -279,7 +264,7 @@ SUBROUTINE IRecvNbOfParticles()
, MPI_INTEGER &
, ExchangeProcToGlobalProc(EXCHANGE_PROC_RANK,iProc) &
, 1001 &
- , PartMPI%COMM &
+ , MPI_COMM_PICLAS &
, PartMPIExchange%RecvRequest(1,iProc) &
, IERROR )
! IF(IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__&
@@ -289,7 +274,11 @@ SUBROUTINE IRecvNbOfParticles()
END SUBROUTINE IRecvNbOfParticles
+#if defined(IMPA)
SUBROUTINE SendNbOfParticles(doParticle_In)
+#else
+SUBROUTINE SendNbOfParticles()
+#endif /*defined(IMPA)*/
!===================================================================================================================================
! This routine sends the number of send particles, for which the following steps are performed:
! 1) Compute number of Send Particles
@@ -306,7 +295,7 @@ SUBROUTINE SendNbOfParticles(doParticle_In)
USE MOD_Part_Tools ,ONLY: isDepositParticle
USE MOD_DSMC_Vars ,ONLY: DSMC,SpecDSMC, useDSMC, PolyatomMolDSMC
USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI,PartMPIExchange,PartTargetProc
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIExchange,PartTargetProc
USE MOD_Particle_MPI_Vars, ONLY: nExchangeProcessors,ExchangeProcToGlobalProc,GlobalProcToExchangeProc, halo_eps_velo
USE MOD_Particle_Vars ,ONLY: PartState,PartSpecies,PEM,PDM,Species
! variables for parallel deposition
@@ -314,17 +303,23 @@ SUBROUTINE SendNbOfParticles(doParticle_In)
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
+#if defined(IMPA)
LOGICAL,INTENT(IN),OPTIONAL :: doParticle_In(1:PDM%ParticleVecLength)
+#endif /*defined(IMPA)*/
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
+#if defined(IMPA)
LOGICAL :: doPartInExists
+#endif /*defined(IMPA)*/
INTEGER :: iPart,ElemID, iPolyatMole
INTEGER :: iProc,ProcID
!===================================================================================================================================
+#if defined(IMPA)
doPartInExists=.FALSE.
IF(PRESENT(DoParticle_IN)) doPartInExists=.TRUE.
+#endif /*defined(IMPA)*/
! 1) get number of send particles
!--- Count number of particles in cells in the halo region and add them to the message
@@ -335,12 +330,15 @@ SUBROUTINE SendNbOfParticles(doParticle_In)
! ! Activate phantom/ghost particles
! IF(PartSpecies(iPart).LT.0) PDM%ParticleInside(iPart) = .TRUE.
- ! TODO: Info why and under which conditions the following 'CYCLE' is called
+#if defined(IMPA)
IF(doPartInExists)THEN
IF (.NOT.(PDM%ParticleInside(iPart).AND.DoParticle_In(iPart))) CYCLE
ELSE
+#endif /*defined(IMPA)*/
IF (.NOT.PDM%ParticleInside(iPart)) CYCLE
+#if defined(IMPA)
END IF
+#endif /*defined(IMPA)*/
! This is already the global ElemID
ElemID = PEM%GlobalElemID(iPart)
@@ -397,7 +395,7 @@ SUBROUTINE SendNbOfParticles(doParticle_In)
, MPI_INTEGER &
, ExchangeProcToGlobalProc(EXCHANGE_PROC_RANK,iProc) &
, 1001 &
- , PartMPI%COMM &
+ , MPI_COMM_PICLAS &
, PartMPIExchange%SendRequest(1,iProc) &
, IERROR )
IF(IERROR.NE.MPI_SUCCESS) CALL ABORT(&
@@ -428,11 +426,13 @@ SUBROUTINE MPIParticleSend(UseOldVecLength)
USE MOD_Preproc
USE MOD_DSMC_Vars, ONLY:useDSMC, CollisMode, DSMC, PartStateIntEn, SpecDSMC, PolyatomMolDSMC, VibQuantsPar
USE MOD_DSMC_Vars, ONLY:ElectronicDistriPart, AmbipolElecVelo
-USE MOD_Particle_MPI_Vars, ONLY:PartMPI,PartMPIExchange,PartCommSize,PartSendBuf,PartRecvBuf,PartTargetProc!,PartHaloElemToProc
+USE MOD_Particle_MPI_Vars, ONLY:PartMPIExchange,PartCommSize,PartSendBuf,PartRecvBuf,PartTargetProc!,PartHaloElemToProc
USE MOD_Particle_MPI_Vars, ONLY:nExchangeProcessors,ExchangeProcToGlobalProc
USE MOD_Particle_Tracking_Vars, ONLY:TrackingMethod
USE MOD_Particle_Vars, ONLY:PartState,PartSpecies,usevMPF,PartMPF,PEM,PDM,PartPosRef,Species
USE MOD_Particle_Vars, ONLY:UseRotRefFrame,PartVeloRotRef
+USE MOD_part_operations ,ONLY: RemoveParticle
+USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition
#if defined(LSERK)
USE MOD_Particle_Vars, ONLY:Pt_temp
#endif
@@ -735,13 +735,7 @@ SUBROUTINE MPIParticleSend(UseOldVecLength)
! increment message position to next element, PartCommSize.EQ.jPos
iPos=iPos+PartCommSize
! particle is ready for send, now it can deleted
- PDM%ParticleInside(iPart) = .FALSE.
-
-#ifdef IMPA
- DoPartInNewton( iPart) = .FALSE.
- PartLambdaAccept(iPart) = .TRUE.
- PartIsImplicit( iPart) = .FALSE.
-#endif /*IMPA*/
+ CALL RemoveParticle(iPart)
END IF ! Particle is particle with target proc-id equals local proc id
END DO ! iPart
@@ -827,7 +821,7 @@ SUBROUTINE MPIParticleSend(UseOldVecLength)
, MPI_DOUBLE_PRECISION &
, ExchangeProcToGlobalProc(EXCHANGE_PROC_RANK,iProc) &
, 1002 &
- , PartMPI%COMM &
+ , MPI_COMM_PICLAS &
, PartMPIExchange%RecvRequest(2,iProc) &
, IERROR )
IF(IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error', IERROR)
@@ -858,7 +852,7 @@ SUBROUTINE MPIParticleSend(UseOldVecLength)
, MPI_DOUBLE_PRECISION &
, ExchangeProcToGlobalProc(EXCHANGE_PROC_RANK,iProc) &
, 1002 &
- , PartMPI%COMM &
+ , MPI_COMM_PICLAS &
, PartMPIExchange%SendRequest(2,iProc) &
, IERROR )
IF(IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error', IERROR)
@@ -866,6 +860,8 @@ SUBROUTINE MPIParticleSend(UseOldVecLength)
! Deallocate sendBuffer after send was successful, see MPIParticleRecv
END DO ! iProc
+IF(PDM%UNFPafterMPIPartSend) CALL UpdateNextFreePosition()
+
END SUBROUTINE MPIParticleSend
@@ -882,7 +878,7 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos)
USE MOD_Preproc
USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, DSMC, PartStateIntEn, SpecDSMC, PolyatomMolDSMC, VibQuantsPar
USE MOD_DSMC_Vars ,ONLY: ElectronicDistriPart, AmbipolElecVelo
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPIExchange,PartCommSize,PartRecvBuf,PartSendBuf!,PartMPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIExchange,PartCommSize,PartRecvBuf,PartSendBuf
USE MOD_Particle_MPI_Vars ,ONLY: nExchangeProcessors
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_Particle_Vars ,ONLY: PartState,PartSpecies,usevMPF,PartMPF,PEM,PDM, PartPosRef, Species, LastPartPos
@@ -892,6 +888,7 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos)
USE MOD_Particle_Mesh_Vars ,ONLY: IsExchangeElem
USE MOD_Particle_MPI_Vars ,ONLY: ExchangeProcToGlobalProc,DoParticleLatencyHiding
USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
#if defined(LSERK)
USE MOD_Particle_Vars ,ONLY: Pt_temp
#endif
@@ -928,7 +925,7 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos)
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iProc, iPos, nRecv, PartID,jPos, iPart, TempNextFreePosition, ElemID
+INTEGER :: iProc, iPos, nRecv, PartID,jPos, iPart, ElemID
INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,0:nExchangeProcessors-1)
INTEGER :: MessageSize, nRecvParticles
#if defined(ROS) || defined(IMPA)
@@ -1022,9 +1019,7 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos)
DO iPos=0,MessageSize-1-MsgLengthPoly - MsgLengthElec - MsgLengthAmbi,PartCommSize
! find free position in particle array
nRecv = nRecv+1
- PartID = PDM%nextFreePosition(nRecv+PDM%CurrentNextFreePosition)
- IF(PartID.EQ.0) CALL ABORT(__STAMP__,&
- ' Error in ParticleExchange_parallel. PDM%nextFreePosition=0. Increase Part-MaxParticleNumber! ', nRecv)
+ PartID = GetNextFreePosition(nRecv)
!>> particle position in physical space
PartState(1:6,PartID) = PartRecvBuf(iProc)%content(1+iPos: 6+iPos)
@@ -1306,21 +1301,28 @@ SUBROUTINE MPIParticleRecv(DoMPIUpdateNextFreePos)
END DO ! iProc
-TempNextFreePosition = PDM%CurrentNextFreePosition
-PDM%ParticleVecLength = PDM%ParticleVecLength + PartMPIExchange%nMPIParticles
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + PartMPIExchange%nMPIParticles
-PartMPIExchange%nMPIParticles = 0
-IF(PDM%ParticleVecLength.GT.PDM%MaxParticleNumber) CALL ABORT(__STAMP__&
- ,' ParticleVecLegnth>MaxParticleNumber due to MPI-communication! Increase Part-maxParticleNumber or use more processors.')
+IF(PartMPIExchange%nMPIParticles.GT.0) THEN
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + PartMPIExchange%nMPIParticles
+ PDM%ParticleVecLength = MAX(PDM%ParticleVecLength,GetNextFreePosition(0))
+END IF
+#ifdef CODE_ANALYZE
+IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+DO PartID=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(PartID)) THEN
+ IPWRITE(*,*) PartID,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=PartID)
+ END IF
+END DO
+#endif
IF(RadialWeighting%PerformCloning) THEN
! Checking whether received particles have to be cloned or deleted
DO iPart = 1,nrecv
- PartID = PDM%nextFreePosition(iPart+TempNextFreePosition)
+ PartID = GetNextFreePosition(iPart-PartMPIExchange%nMPIParticles)
IF(ParticleOnProc(PartID)) CALL DSMC_2D_RadialWeighting(PartID,PEM%GlobalElemID(PartID))
END DO
END IF
-
+PartMPIExchange%nMPIParticles = 0
! deallocate send,receive buffer
DO iProc=0,nExchangeProcessors-1
SDEALLOCATE(PartRecvBuf(iProc)%content)
@@ -1356,18 +1358,17 @@ SUBROUTINE FinalizeParticleMPI()
END DO ! iSpec
IF(nInitRegions.GT.0) THEN
DO iInitRegions=1,nInitRegions
- IF(PartMPI%InitGroup(iInitRegions)%COMM.NE.MPI_COMM_NULL) THEN
- CALL MPI_COMM_FREE(PartMPI%InitGroup(iInitRegions)%Comm,iERROR)
+ IF(PartMPIInitGroup(iInitRegions)%COMM.NE.MPI_COMM_NULL) THEN
+ CALL MPI_COMM_FREE(PartMPIInitGroup(iInitRegions)%Comm,iERROR)
END IF
END DO ! iInitRegions
END IF
-IF(PartMPI%COMM.NE.MPI_COMM_NULL) CALL MPI_COMM_FREE(PartMPI%COMM,iERROR)
SDEALLOCATE( PartMPIExchange%nPartsSend)
SDEALLOCATE( PartMPIExchange%nPartsRecv)
SDEALLOCATE( PartMPIExchange%RecvRequest)
SDEALLOCATE( PartMPIExchange%SendRequest)
-SDEALLOCATE( PartMPI%InitGroup)
+SDEALLOCATE( PartMPIInitGroup)
SDEALLOCATE( PartSendBuf)
SDEALLOCATE( PartRecvBuf)
SDEALLOCATE( ExchangeProcToGlobalProc)
diff --git a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90 b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90
index 151588f88..9cef34a80 100644
--- a/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90
+++ b/src/particles/particle_mpi/particle_mpi_boundary_sampling.f90
@@ -54,9 +54,9 @@ SUBROUTINE InitSurfCommunication()
USE MOD_MPI_Shared_Vars ,ONLY: MPIRankSharedLeader,MPIRankSurfLeader
USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank,nSurfLeaders
USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,nComputeNodeSurfTotalSides,offsetComputeNodeSurfSide
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode,SurfSampSize,nSurfSample,CalcSurfaceImpact
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode,SurfSampSize,nSurfSample,CalcSurfaceImpact
USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfTotalSides, nOutputSides
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides, nGlobalOutputSides
USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,offsetComputeNodeSurfOutputSide
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide
USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf
@@ -86,6 +86,7 @@ SUBROUTINE InitSurfCommunication()
INTEGER :: NbGlobalElemID, GlobalSideID, NbGlobalSideID, NbElemRank, NbLeaderID, GlobalElemID, ElemRank
INTEGER :: TestCounter(2),iCNinnerBC
INTEGER :: SwitchGlobalSideID(1:3,1:SUM(nComputeNodeInnerBCs)),nSideTmp
+INTEGER :: allocstat
!===================================================================================================================================
nRecvSurfSidesTmp = 0
@@ -206,13 +207,13 @@ SUBROUTINE InitSurfCommunication()
END DO
!--- Split communicator from MPI_COMM_LEADER_SHARED
-color = MERGE(1201,MPI_UNDEFINED,SurfOnNode)
+color = MERGE(1201,MPI_UNDEFINED,SurfTotalSideOnNode)
-! create new SurfMesh communicator for SurfMesh communication. Pass MPI_INFO_NULL as rank to follow the original ordering
+! create new communicator between node leaders with surfaces. Pass MPI_INFO_NULL as rank to follow the original ordering
CALL MPI_COMM_SPLIT(MPI_COMM_LEADERS_SHARED, color, MPI_INFO_NULL, MPI_COMM_LEADERS_SURF, IERROR)
! Do not participate in remainder of communication if no surf sides on node
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
! Find my rank on the shared communicator, comm size and proc name
CALL MPI_COMM_RANK(MPI_COMM_LEADERS_SURF, mySurfRank , IERROR)
@@ -321,8 +322,10 @@ SUBROUTINE InitSurfCommunication()
END DO ! iSide = 1, nComputeNodeInnerBCs
!--- Allocate send and recv buffer for each surf leader
-ALLOCATE(SurfSendBuf(0:nSurfLeaders-1))
-ALLOCATE(SurfRecvBuf(0:nSurfLeaders-1))
+ALLOCATE(SurfSendBuf(0:nSurfLeaders-1),STAT=allocstat)
+IF(allocstat.ne.0) CALL abort(__STAMP__,'Could not allocate SurfSendBuf')
+ALLOCATE(SurfRecvBuf(0:nSurfLeaders-1),STAT=allocstat)
+IF(allocstat.ne.0) CALL abort(__STAMP__,'Could not allocate SurfRecvBuf')
DO iProc = 0,nSurfLeaders-1
! Get message size
@@ -332,13 +335,15 @@ SUBROUTINE InitSurfCommunication()
! Only allocate send buffer if we are expecting sides from this leader node
IF (SurfMapping(iProc)%nSendSurfSides.GT.0) THEN
- ALLOCATE(SurfSendBuf(iProc)%content(SampSizeAllocate*(nSurfSample**2)*SurfMapping(iProc)%nSendSurfSides))
+ ALLOCATE(SurfSendBuf(iProc)%content(SampSizeAllocate*(nSurfSample**2)*SurfMapping(iProc)%nSendSurfSides),STAT=allocstat)
+ IF(allocstat.ne.0) CALL abort(__STAMP__,'Could not allocate SurfSendBuf(iProc)%content')
SurfSendBuf(iProc)%content = 0.
END IF
! Only allocate recv buffer if we are expecting sides from this leader node
IF (SurfMapping(iProc)%nRecvSurfSides.GT.0) THEN
- ALLOCATE(SurfRecvBuf(iProc)%content(SampSizeAllocate*(nSurfSample**2)*SurfMapping(iProc)%nRecvSurfSides))
+ ALLOCATE(SurfRecvBuf(iProc)%content(SampSizeAllocate*(nSurfSample**2)*SurfMapping(iProc)%nRecvSurfSides),STAT=allocstat)
+ IF(allocstat.ne.0) CALL abort(__STAMP__,'Could not allocate SurfRecvBuf(iProc)%content')
SurfRecvBuf(iProc)%content = 0.
END IF
END DO ! iProc
@@ -346,7 +351,7 @@ SUBROUTINE InitSurfCommunication()
!--- Save number of output sides per node (inner BCs are only included once here)
IF (nSurfLeaders.EQ.1) THEN
offsetComputeNodeSurfOutputSide = 0
- nOutputSides = nComputeNodeSurfOutputSides
+ nGlobalOutputSides = nComputeNodeSurfOutputSides
ELSE
sendbuf = nComputeNodeSurfOutputSides
recvbuf = 0
@@ -355,14 +360,14 @@ SUBROUTINE InitSurfCommunication()
! last proc knows CN total number of BC elems
sendbuf = offsetComputeNodeSurfOutputSide + nComputeNodeSurfOutputSides
CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nSurfLeaders-1,MPI_COMM_LEADERS_SURF,iError)
- nOutputSides = sendbuf
+ nGlobalOutputSides = sendbuf
END IF
!--- Save number of total surf sides
IF (nSurfLeaders.EQ.1) THEN
offsetComputeNodeSurfSide = 0
- nSurfTotalSides = nComputeNodeSurfSides
+ nGlobalSurfSides = nComputeNodeSurfSides
ELSE
sendbuf = nComputeNodeSurfSides
recvbuf = 0
@@ -371,9 +376,15 @@ SUBROUTINE InitSurfCommunication()
! last proc knows CN total number of BC elems
sendbuf = offsetComputeNodeSurfSide + nComputeNodeSurfSides
CALL MPI_BCAST(sendbuf,1,MPI_INTEGER,nSurfLeaders-1,MPI_COMM_LEADERS_SURF,iError)
- nSurfTotalSides = sendbuf
+ nGlobalSurfSides = sendbuf
END IF
+IF (mySurfRank.EQ.0) THEN
+#if USE_LOADBALANCE
+ IF(.NOT.PerformLoadBalance)&
+#endif /*USE_LOADBALANCE*/
+ WRITE(UNIT_stdOUt,'(A,I0,A)') ' Starting surface communication between ', nSurfLeaders, ' compute nodes... DONE!'
+END IF
END SUBROUTINE InitSurfCommunication
@@ -391,7 +402,7 @@ SUBROUTINE ExchangeSurfData()
USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF
USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSampSize,nSurfSample
USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides
USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide
@@ -418,11 +429,9 @@ SUBROUTINE ExchangeSurfData()
INTEGER :: MessageSize,iSurfSide,SurfSideID
INTEGER :: nValues
INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1)
-!INTEGER :: iPos,p,q,iProc,iReact
-!INTEGER :: recv_status_list(1:MPI_STATUS_SIZE,1:SurfCOMM%nMPINeighbors)
!===================================================================================================================================
! nodes without sampling surfaces do not take part in this routine
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
! collect the information from the proc-local shadow arrays in the compute-node shared array
MessageSize = SurfSampSize*nSurfSample*nSurfSample*nComputeNodeSurfTotalSides
@@ -690,7 +699,7 @@ SUBROUTINE FinalizeSurfCommunication()
! Deallocated arrays used for sampling surface communication
!----------------------------------------------------------------------------------------------------------------------------------!
! MODULES
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping
USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf
USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,mySurfRank
@@ -708,7 +717,7 @@ SUBROUTINE FinalizeSurfCommunication()
IF (myComputeNodeRank.NE.0) RETURN
! nodes without sampling surfaces do not take part in this routine
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
SDEALLOCATE(MPIRankSharedLeader)
SDEALLOCATE(MPIRankSurfLeader)
diff --git a/src/particles/particle_mpi/particle_mpi_emission.f90 b/src/particles/particle_mpi/particle_mpi_emission.f90
index 805067cd8..ce750a9b6 100644
--- a/src/particles/particle_mpi/particle_mpi_emission.f90
+++ b/src/particles/particle_mpi/particle_mpi_emission.f90
@@ -42,7 +42,7 @@ SUBROUTINE InitEmissionComm()
! MODULES
USE MOD_Globals
USE MOD_Preproc
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI,MPI_halo_eps
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIInitGroup,MPI_halo_eps
USE MOD_Particle_Vars ,ONLY: Species,nSpecies
USE MOD_Particle_Mesh_Vars ,ONLY: GEO,SideInfo_Shared
USE MOD_Mesh_Vars ,ONLY: nElems,BoundaryName
@@ -79,7 +79,7 @@ SUBROUTINE InitEmissionComm()
IF(nInitRegions.EQ.0) RETURN
! allocate communicators
-ALLOCATE( PartMPI%InitGroup(1:nInitRegions))
+ALLOCATE( PartMPIInitGroup(1:nInitRegions))
! Default value for neutralization regions (Landmark and Liu2010)
nNeutralizationElems = -1
@@ -361,10 +361,10 @@ SUBROUTINE InitEmissionComm()
lineVector = UNITVECTOR(normal)
END IF ! VECNORM(lineVector).LE.0.
- xCoords(1:3,1)=O
- xCoords(1:3,2)=O+v2
- xCoords(1:3,3)=O+v3
- xCoords(1:3,4)=O+v2+v3
+ xCoords(1:3,1)=O(1:3)
+ xCoords(1:3,2)=O(1:3)+v2(1:3)
+ xCoords(1:3,3)=O(1:3)+v3(1:3)
+ xCoords(1:3,4)=O(1:3)+v2(1:3)+v3(1:3)
height= Species(iSpec)%Init(iInit)%CuboidHeightIC
DO iNode=1,4
@@ -403,11 +403,11 @@ SUBROUTINE InitEmissionComm()
! 1. Check if inside outer radius
radius = Species(iSpec)%Init(iInit)%RadiusIC
! here no radius, already included
- xCoords(1:3,1)=Species(iSpec)%Init(iInit)%BasePointIC -v1 -v2
+ xCoords(1:3,1)=Species(iSpec)%Init(iInit)%BasePointIC -v1(1:3) -v2(1:3)
- xCoords(1:3,2)=xCoords(1:3,1)+2.0*v1
- xCoords(1:3,3)=xCoords(1:3,1)+2.0*v2
- xCoords(1:3,4)=xCoords(1:3,1)+2.0*v1+2.0*v2
+ xCoords(1:3,2)=xCoords(1:3,1)+2.0*v1(1:3)
+ xCoords(1:3,3)=xCoords(1:3,1)+2.0*v2(1:3)
+ xCoords(1:3,4)=xCoords(1:3,1)+2.0*v1(1:3)+2.0*v2(1:3)
height= Species(iSpec)%Init(iInit)%CylinderHeightIC
DO iNode=1,4
@@ -507,18 +507,18 @@ SUBROUTINE InitEmissionComm()
END SELECT
! Sanity check if at least one proc will be on the new emission communicator
- CALL MPI_ALLREDUCE(RegionOnProc,RegionExists,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLREDUCE(RegionOnProc,RegionExists,1,MPI_LOGICAL,MPI_LOR,MPI_COMM_PICLAS,iError)
IF (.NOT. RegionExists) THEN
WRITE(hilf,'(A,I0,A,I0)') 'Species',iSpec,'-Init',iInit
CALL CollectiveStop(__STAMP__,'The emission region was not found on any processor. No processor in range for '//TRIM(hilf))
END IF
- ! Add PartMPI%MPIRoot to specific inits automatically for output of analysis data to disk
+ ! Add MPIRoot to specific inits automatically for output of analysis data to disk
! The root sometimes also reads data during restart and broadcasts it to the other processors in the communicator
SELECT CASE(TRIM(Species(iSpec)%Init(iInit)%SpaceIC))
CASE('2D_landmark_neutralization','2D_Liu2010_neutralization','3D_Liu2010_neutralization','2D_Liu2010_neutralization_Szabo',&
'3D_Liu2010_neutralization_Szabo')
- IF(PartMPI%MPIRoot) RegionOnProc=.TRUE.
+ IF(MPIRoot) RegionOnProc=.TRUE.
END SELECT
! create new communicator
@@ -527,37 +527,37 @@ SUBROUTINE InitEmissionComm()
! set communicator id
Species(iSpec)%Init(iInit)%InitCOMM=nInitRegions
! create new emission communicator for emission communication. Pass MPI_INFO_NULL as rank to follow the original ordering
- CALL MPI_COMM_SPLIT(PartMPI%COMM,color,MPI_INFO_NULL,PartMPI%InitGroup(nInitRegions)%COMM,iError)
+ CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,MPI_INFO_NULL,PartMPIInitGroup(nInitRegions)%COMM,iError)
! Find my rank on the shared communicator, comm size and proc name
IF (RegionOnProc) THEN
- CALL MPI_COMM_RANK(PartMPI%InitGroup(nInitRegions)%COMM,PartMPI%InitGroup(nInitRegions)%MyRank,iError)
- CALL MPI_COMM_SIZE(PartMPI%InitGroup(nInitRegions)%COMM,PartMPI%InitGroup(nInitRegions)%nProcs,iError)
+ CALL MPI_COMM_RANK(PartMPIInitGroup(nInitRegions)%COMM,PartMPIInitGroup(nInitRegions)%MyRank,iError)
+ CALL MPI_COMM_SIZE(PartMPIInitGroup(nInitRegions)%COMM,PartMPIInitGroup(nInitRegions)%nProcs,iError)
! inform about size of emission communicator
- IF (PartMPI%InitGroup(nInitRegions)%MyRank.EQ.0) THEN
+ IF (PartMPIInitGroup(nInitRegions)%MyRank.EQ.0) THEN
#if USE_LOADBALANCE
IF(.NOT.PerformLoadBalance)&
#endif /*USE_LOADBALANCE*/
WRITE(UNIT_StdOut,'(A,I0,A,I0,A,I0,A)') ' Emission-Region,Emission-Communicator: ',nInitRegions,' on ',&
- PartMPI%InitGroup(nInitRegions)%nProcs,' procs ('//TRIM(Species(iSpec)%Init(iInit)%SpaceIC)//', iSpec=',iSpec,')'
+ PartMPIInitGroup(nInitRegions)%nProcs,' procs ('//TRIM(Species(iSpec)%Init(iInit)%SpaceIC)//', iSpec=',iSpec,')'
END IF
END IF
! build mapping for procs on emission communicator
- IF(PartMPI%InitGroup(nInitRegions)%COMM.NE.MPI_COMM_NULL) THEN
- PartMPI%InitGroup(nInitRegions)%MPIRoot=MERGE(.TRUE.,.FALSE.,PartMPI%InitGroup(nInitRegions)%MyRank.EQ.0)
-
- ALLOCATE(PartMPI%InitGroup(nInitRegions)%GroupToComm(0:PartMPI%InitGroup(nInitRegions)%nProcs-1))
- PartMPI%InitGroup(nInitRegions)%GroupToComm(PartMPI%InitGroup(nInitRegions)%MyRank) = PartMPI%MyRank
- CALL MPI_ALLGATHER(PartMPI%MyRank,1,MPI_INTEGER&
- ,PartMPI%InitGroup(nInitRegions)%GroupToComm(0:PartMPI%InitGroup(nInitRegions)%nProcs-1)&
- ,1,MPI_INTEGER,PartMPI%InitGroup(nInitRegions)%COMM,iERROR)
-
- ALLOCATE(PartMPI%InitGroup(nInitRegions)%CommToGroup(0:PartMPI%nProcs-1))
- PartMPI%InitGroup(nInitRegions)%CommToGroup(0:PartMPI%nProcs-1) = -1
- DO iRank = 0,PartMPI%InitGroup(nInitRegions)%nProcs-1
- PartMPI%InitGroup(nInitRegions)%CommToGroup(PartMPI%InitGroup(nInitRegions)%GroupToComm(iRank))=iRank
+ IF(PartMPIInitGroup(nInitRegions)%COMM.NE.MPI_COMM_NULL) THEN
+ PartMPIInitGroup(nInitRegions)%MPIRoot=MERGE(.TRUE.,.FALSE.,PartMPIInitGroup(nInitRegions)%MyRank.EQ.0)
+
+ ALLOCATE(PartMPIInitGroup(nInitRegions)%GroupToComm(0:PartMPIInitGroup(nInitRegions)%nProcs-1))
+ PartMPIInitGroup(nInitRegions)%GroupToComm(PartMPIInitGroup(nInitRegions)%MyRank) = myRank
+ CALL MPI_ALLGATHER(myRank,1,MPI_INTEGER&
+ ,PartMPIInitGroup(nInitRegions)%GroupToComm(0:PartMPIInitGroup(nInitRegions)%nProcs-1)&
+ ,1,MPI_INTEGER,PartMPIInitGroup(nInitRegions)%COMM,iERROR)
+
+ ALLOCATE(PartMPIInitGroup(nInitRegions)%CommToGroup(0:nProcessors-1))
+ PartMPIInitGroup(nInitRegions)%CommToGroup(0:nProcessors-1) = -1
+ DO iRank = 0,PartMPIInitGroup(nInitRegions)%nProcs-1
+ PartMPIInitGroup(nInitRegions)%CommToGroup(PartMPIInitGroup(nInitRegions)%GroupToComm(iRank))=iRank
END DO ! iRank
END IF
@@ -582,10 +582,11 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
!USE MOD_Mesh_Tools ,ONLY: GetCNElemID
!USE MOD_Particle_Mesh_Vars ,ONLY: FIBGM_nElems, FIBGM_offsetElem, FIBGM_Element
USE MOD_Particle_Mesh_Vars ,ONLY: FIBGM_nElems,FIBGM_nTotalElems
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI,PartMPIInsert,PartMPILocate
+USE MOD_Particle_MPI_Vars ,ONLY: PartMPIInitGroup,PartMPIInsert,PartMPILocate
USE MOD_Particle_MPI_Vars ,ONLY: EmissionSendBuf,EmissionRecvBuf
USE MOD_Particle_Vars ,ONLY: PDM,PEM,PartState,PartPosRef,Species
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
#if defined(MEASURE_MPI_WAIT)
USE MOD_Particle_MPI_Vars ,ONLY: MPIW8TimePart,MPIW8CountPart
#endif /*defined(MEASURE_MPI_WAIT)*/
@@ -623,11 +624,11 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
InitGroup = Species(FractNbr)%Init(iInit)%InitCOMM
! Arrays for communication of particles not located in final element
-ALLOCATE( PartMPIInsert%nPartsSend (2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPIInsert%nPartsRecv (1,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPIInsert%SendRequest (2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPIInsert%RecvRequest (2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPIInsert%send_message( 0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
+ALLOCATE( PartMPIInsert%nPartsSend (2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPIInsert%nPartsRecv (1,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPIInsert%SendRequest (2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPIInsert%RecvRequest (2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPIInsert%send_message( 0:PartMPIInitGroup(InitGroup)%nProcs-1) &
, STAT=ALLOCSTAT)
IF (ALLOCSTAT.NE.0) &
CALL ABORT(__STAMP__,' Cannot allocate particle emission MPI arrays! ALLOCSTAT',ALLOCSTAT)
@@ -636,12 +637,12 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
PartMPIInsert%nPartsRecv=0
! Inter-CN communication
-ALLOCATE( PartMPILocate%nPartsSend (2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPILocate%nPartsRecv (1,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPILocate%SendRequest(2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , PartMPILocate%RecvRequest(2,0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , EmissionRecvBuf ( 0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
- , EmissionSendBuf ( 0:PartMPI%InitGroup(InitGroup)%nProcs-1) &
+ALLOCATE( PartMPILocate%nPartsSend (2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPILocate%nPartsRecv (1,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPILocate%SendRequest(2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , PartMPILocate%RecvRequest(2,0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , EmissionRecvBuf ( 0:PartMPIInitGroup(InitGroup)%nProcs-1) &
+ , EmissionSendBuf ( 0:PartMPIInitGroup(InitGroup)%nProcs-1) &
, STAT=ALLOCSTAT)
IF (ALLOCSTAT.NE.0) &
CALL ABORT(__STAMP__,' Cannot allocate particle emission MPI arrays! ALLOCSTAT',ALLOCSTAT)
@@ -665,8 +666,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
chunkState = -1
!--- 1/10 Open receive buffer (located and non-located particles)
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
!--- MPI_IRECV lengths of lists of particles entering local mesh
CALL MPI_IRECV( PartMPIInsert%nPartsRecv(:,iProc) &
@@ -674,7 +675,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_INTEGER &
, iProc &
, 1011 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPIInsert%RecvRequest(1,iProc) &
, IERROR)
@@ -684,7 +685,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_INTEGER &
, iProc &
, 1111 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPILocate%RecvRequest(1,iProc) &
, IERROR)
END DO
@@ -749,7 +750,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
ProcID = FIBGMProcs(iProc)
IF (ProcID.EQ.myRank) CYCLE
- tProc=PartMPI%InitGroup(InitGroup)%CommToGroup(ProcID)
+ tProc=PartMPIInitGroup(InitGroup)%CommToGroup(ProcID)
! Processor is not on emission communicator
IF(tProc.EQ.-1) CYCLE
@@ -761,8 +762,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
END DO ! i = 1, chunkSize
!--- 2/10 Send number of non-located particles
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
! send particles
!--- MPI_ISEND lengths of lists of particles leaving local mesh
@@ -771,7 +772,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_INTEGER &
, iProc &
, 1011 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPIInsert%SendRequest(1,iProc) &
, IERROR)
IF (PartMPIInsert%nPartsSend(1,iProc).GT.0) THEN
@@ -806,7 +807,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
ProcID = FIBGMProcs(iProc)
IF (ProcID.EQ.myRank) CYCLE
- tProc=PartMPI%InitGroup(InitGroup)%CommToGroup(ProcID)
+ tProc=PartMPIInitGroup(InitGroup)%CommToGroup(ProcID)
! Processor is not on emission communicator
IF (tProc.EQ.-1) CYCLE
@@ -827,8 +828,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
CALL MPI_WAIT(PartMPIInsert%SendRequest(1,iProc),msg_status(:),IERROR)
IF (IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,' MPI Communication error', IERROR)
@@ -845,8 +846,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
! Inter-CN communication
ALLOCATE(recvPartPos(1:SUM(PartMPIInsert%nPartsRecv(1,:)*DimSend)), STAT=ALLOCSTAT)
TotalNbrOfRecvParts = 0
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
IF (PartMPIInsert%nPartsRecv(1,iProc).GT.0) THEN
!--- MPI_IRECV lengths of lists of particles entering local mesh
@@ -855,7 +856,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_DOUBLE_PRECISION &
, iProc &
, 1022 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPIInsert%RecvRequest(2,iProc) &
, IERROR)
TotalNbrOfRecvParts = TotalNbrOfRecvParts + PartMPIInsert%nPartsRecv(1,iProc)
@@ -867,7 +868,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_DOUBLE_PRECISION &
, iProc &
, 1022 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPIInsert%SendRequest(2,iProc) &
, IERROR)
END IF
@@ -894,7 +895,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
IF (.NOT.InsideMyBGM(2,i)) CYCLE
! ProcID on emission communicator
- tProc=PartMPI%InitGroup(InitGroup)%CommToGroup(ProcID)
+ tProc=PartMPIInitGroup(InitGroup)%CommToGroup(ProcID)
! Processor is not on emission communicator
IF(tProc.EQ.-1) CALL ABORT(__STAMP__,'Error in particle_mpi_emission: proc not on emission communicator')
@@ -911,21 +912,14 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
! Located particle on local proc.
ELSE
! Get the next free position in the PDM array
- ParticleIndexNbr = PDM%nextFreePosition(mySumOfMatchedParticles + 1 + PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr.NE.0) THEN
- ! Fill the PartState manually to avoid a second localization
- PartState(1:DimSend,ParticleIndexNbr) = particle_positions(DimSend*(i-1)+1:DimSend*(i-1)+DimSend)
- PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
- IF (TrackingMethod.EQ.REFMAPPING) THEN
- CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),ElemID)
- END IF ! TrackingMethod.EQ.REFMAPPING
- PEM%GlobalElemID(ParticleIndexNbr) = ElemID
- ELSE
- IPWRITE(UNIT_StdOut,'(I0,A,I0,A,I0,A)') " PDM%MaxParticleNumber = ", PDM%MaxParticleNumber," for each processor (",&
- PDM%MaxParticleNumber*nProcessors," in total)"
- IPWRITE(UNIT_StdOut,'(I0,A)') " Increase value for [Part-maxParticleNumber]!"
- CALL ABORT(__STAMP__,'ERROR in ParticleMPIEmission:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
- END IF
+ ParticleIndexNbr = GetNextFreePosition(mySumOfMatchedParticles+1)
+ ! Fill the PartState manually to avoid a second localization
+ PartState(1:DimSend,ParticleIndexNbr) = particle_positions(DimSend*(i-1)+1:DimSend*(i-1)+DimSend)
+ PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
+ IF (TrackingMethod.EQ.REFMAPPING) THEN
+ CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),ElemID)
+ END IF ! TrackingMethod.EQ.REFMAPPING
+ PEM%GlobalElemID(ParticleIndexNbr) = ElemID
mySumOfMatchedParticles = mySumOfMatchedParticles + 1
END IF ! ElemID.EQ.-1
END IF ! InsideMyBGM(i)
@@ -933,8 +927,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
!--- / Send number of located particles
! Inter-CN communication
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
! send particles
!--- MPI_ISEND lengths of lists of particles leaving local mesh
@@ -943,7 +937,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_INTEGER &
, iProc &
, 1111 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPILocate%SendRequest(1,iProc) &
, IERROR)
IF (PartMPILocate%nPartsSend(1,iProc).GT.0) THEN
@@ -963,7 +957,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
ProcID = ElemInfo_Shared(ELEM_RANK,ElemID)
IF (ProcID.NE.myRank) THEN
! ProcID on emission communicator
- tProc=PartMPI%InitGroup(InitGroup)%CommToGroup(ProcID)
+ tProc=PartMPIInitGroup(InitGroup)%CommToGroup(ProcID)
! Processor is not on emission communicator
IF(tProc.EQ.-1) CYCLE
@@ -980,8 +974,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
CALL MPI_WAIT(PartMPILocate%SendRequest(1,iProc),msg_status(:),IERROR)
IF(IERROR.NE.MPI_SUCCESS) CALL abort(__STAMP__,' MPI Communication error', IERROR)
@@ -994,8 +988,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
MPIW8CountPart(5) = MPIW8CountPart(5) + 1_8
#endif /*defined(MEASURE_MPI_WAIT)*/
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
! Allocate receive array and open receive buffer if expecting particles from iProc
IF (PartMPILocate%nPartsRecv(1,iProc).GT.0) THEN
@@ -1011,7 +1005,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_DOUBLE_PRECISION &
, iProc &
, 1122 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPILocate%RecvRequest(2,iProc) &
, IERROR )
IF(IERROR.NE.MPI_SUCCESS) &
@@ -1026,7 +1020,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
, MPI_DOUBLE_PRECISION &
, iProc &
, 1122 &
- , PartMPI%InitGroup(InitGroup)%COMM &
+ , PartMPIInitGroup(InitGroup)%COMM &
, PartMPILocate%SendRequest(2,iProc) &
, IERROR )
IF(IERROR.NE.MPI_SUCCESS) &
@@ -1038,8 +1032,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
IF (PartMPIInsert%nPartsSend(1,iProc).GT.0) THEN
CALL MPI_WAIT(PartMPIInsert%SendRequest(2,iProc),msg_status(:),IERROR)
@@ -1069,21 +1063,14 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
IF (ElemInfo_Shared(ELEM_RANK,ElemID).NE.myRank) CYCLE
! Find a free position in the PDM array
- ParticleIndexNbr = PDM%nextFreePosition(mySumOfMatchedParticles + 1 + PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr.NE.0) THEN
- ! Fill the PartState manually to avoid a second localization
- PartState(1:3,ParticleIndexNbr) = recvPartPos(DimSend*(i-1)+1:DimSend*(i-1)+3)
- PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
- IF (TrackingMethod.EQ.REFMAPPING) THEN
- CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),ElemID)
- END IF ! TrackingMethod.EQ.REFMAPPING
- PEM%GlobalElemID(ParticleIndexNbr) = ElemID
- ELSE
- IPWRITE(UNIT_StdOut,'(I0,A,I0,A,I0,A)') " PDM%MaxParticleNumber = ", PDM%MaxParticleNumber," for each processor (",&
- PDM%MaxParticleNumber*nProcessors," in total)"
- IPWRITE(UNIT_StdOut,'(I0,A)') " Increase value for [Part-maxParticleNumber]!"
- CALL ABORT(__STAMP__,'ERROR in ParticleMPIEmission:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
- END IF
+ ParticleIndexNbr = GetNextFreePosition(mySumOfMatchedParticles+1)
+ ! Fill the PartState manually to avoid a second localization
+ PartState(1:3,ParticleIndexNbr) = recvPartPos(DimSend*(i-1)+1:DimSend*(i-1)+3)
+ PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
+ IF (TrackingMethod.EQ.REFMAPPING) THEN
+ CALL GetPositionInRefElem(PartState(1:3,ParticleIndexNbr),PartPosRef(1:3,ParticleIndexNbr),ElemID)
+ END IF ! TrackingMethod.EQ.REFMAPPING
+ PEM%GlobalElemID(ParticleIndexNbr) = ElemID
mySumOfMatchedParticles = mySumOfMatchedParticles + 1
END DO
@@ -1091,8 +1078,8 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
#if defined(MEASURE_MPI_WAIT)
CALL SYSTEM_CLOCK(count=CounterStart)
#endif /*defined(MEASURE_MPI_WAIT)*/
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
IF (PartMPILocate%nPartsSend(1,iProc).GT.0) THEN
CALL MPI_WAIT(PartMPILocate%SendRequest(2,iProc),msg_status(:),IERROR)
@@ -1110,27 +1097,20 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
#endif /*defined(MEASURE_MPI_WAIT)*/
!--- 10/10 Write located particles
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
- IF (iProc.EQ.PartMPI%InitGroup(InitGroup)%myRank) CYCLE
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
+ IF (iProc.EQ.PartMPIInitGroup(InitGroup)%myRank) CYCLE
IF (PartMPILocate%nPartsRecv(1,iProc).EQ.0) CYCLE
DO i = 1,PartMPILocate%nPartsRecv(1,iProc)
! Find a free position in the PDM array
- ParticleIndexNbr = PDM%nextFreePosition(mySumOfMatchedParticles + 1 + PDM%CurrentNextFreePosition)
- IF (ParticleIndexNbr.NE.0) THEN
- ! Fill the PartState manually to avoid a second localization
- PartState(1:3,ParticleIndexNbr) = EmissionRecvBuf(iProc)%content(PartCommSize*(i-1)+1:PartCommSize*(i-1)+3)
- IF (TrackingMethod.EQ.REFMAPPING) THEN
- PartPosRef(1:3,ParticleIndexNbr) = EmissionRecvBuf(iProc)%content(PartCommSize*(i-1)+4:PartCommSize*(i-1)+6)
- END IF ! TrackingMethod.EQ.REFMAPPING
- PEM%GlobalElemID(ParticleIndexNbr) = INT(EmissionRecvBuf(iProc)%content(PartCommSize*(i)),KIND=4)
- PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
- ELSE
- IPWRITE(UNIT_StdOut,'(I0,A,I0,A,I0,A)') " PDM%MaxParticleNumber = ", PDM%MaxParticleNumber," for each processor (",&
- PDM%MaxParticleNumber*nProcessors," in total)"
- IPWRITE(UNIT_StdOut,'(I0,A)') " Increase value for [Part-maxParticleNumber]!"
- CALL ABORT(__STAMP__,'ERROR in ParticleMPIEmission:ParticleIndexNbr.EQ.0 - maximum nbr of particles reached?')
- END IF
+ ParticleIndexNbr = GetNextFreePosition(mySumOfMatchedParticles+1)
+ ! Fill the PartState manually to avoid a second localization
+ PartState(1:3,ParticleIndexNbr) = EmissionRecvBuf(iProc)%content(PartCommSize*(i-1)+1:PartCommSize*(i-1)+3)
+ IF (TrackingMethod.EQ.REFMAPPING) THEN
+ PartPosRef(1:3,ParticleIndexNbr) = EmissionRecvBuf(iProc)%content(PartCommSize*(i-1)+4:PartCommSize*(i-1)+6)
+ END IF ! TrackingMethod.EQ.REFMAPPING
+ PEM%GlobalElemID(ParticleIndexNbr) = INT(EmissionRecvBuf(iProc)%content(PartCommSize*(i)),KIND=4)
+ PDM%ParticleInside( ParticleIndexNbr) = .TRUE.
mySumOfMatchedParticles = mySumOfMatchedParticles + 1
END DO
END DO
@@ -1138,7 +1118,7 @@ SUBROUTINE SendEmissionParticlesToProcs(chunkSize,DimSend,FractNbr,iInit,mySumOf
!--- Clean up
SDEALLOCATE(recvPartPos)
SDEALLOCATE(chunkState)
-DO iProc=0,PartMPI%InitGroup(InitGroup)%nProcs-1
+DO iProc=0,PartMPIInitGroup(InitGroup)%nProcs-1
SDEALLOCATE(EmissionRecvBuf(iProc)%content)
SDEALLOCATE(EmissionSendBuf(iProc)%content)
END DO
diff --git a/src/particles/particle_mpi/particle_mpi_halo.f90 b/src/particles/particle_mpi/particle_mpi_halo.f90
index 5b4d3ec05..0073b0b96 100644
--- a/src/particles/particle_mpi/particle_mpi_halo.f90
+++ b/src/particles/particle_mpi/particle_mpi_halo.f90
@@ -37,7 +37,7 @@ MODULE MOD_Particle_MPI_Halo
CONTAINS
-SUBROUTINE IdentifyPartExchangeProcs
+SUBROUTINE IdentifyPartExchangeProcs()
!===================================================================================================================================
! Identifies processors in physical range for particle exchange communication. This communication has to occur at every RK step and
! would be too costly if done as an all-to-all communication
@@ -167,7 +167,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_LOGICAL &
, iProc &
, 1999 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -591,25 +591,26 @@ SUBROUTINE IdentifyPartExchangeProcs
! Check rot periodic Elems and if iSide is on rot periodic BC
IF(PartBound%UseRotPeriodicBC) THEN
DO iPartBound = 1, nPartBound
+ ! skip no rot periodic BCs
IF(PartBound%TargetBoundCond(iPartBound).NE.PartBound%RotPeriodicBC) CYCLE
- alpha = PartBound%RotPeriodicAngle(iPartBound) * PartBound%RotPeriodicTol
+ alpha = PartBound%RotPeriodicAngle(iPartBound) * PartBound%RotPeriodicTol
ASSOCIATE(RotBoundMin => PartBound%RotPeriodicMin(iPartBound)-MPI_halo_eps_woshape, &
RotBoundMax => PartBound%RotPeriodicMax(iPartBound)+MPI_halo_eps_woshape)
+ ! in which plane of rotation (i.e. iPartBound) is the iElem
IF( (BoundsOfElemCenter(PartBound%RotPeriodicAxis)-BoundsOfElemCenter(4).GE.RotBoundMax).OR. &
(BoundsOfElemCenter(PartBound%RotPeriodicAxis)+BoundsOfElemCenter(4).LE.RotBoundMin) ) CYCLE
+ ! skip sides that are not in the same plane of rotation as iElem and iPartBound
IF( (MPISideBoundsOfNbElemCenter(PartBound%RotPeriodicAxis,iSide)-MPISideBoundsOfNbElemCenter(4,iSide).GE.RotBoundMax).OR. &
(MPISideBoundsOfNbElemCenter(PartBound%RotPeriodicAxis,iSide)+MPISideBoundsOfNbElemCenter(4,iSide).LE.RotBoundMin) ) CYCLE
END ASSOCIATE
RotBoundsOfElemCenter(1:3) = RotateVectorAroundAxis(BoundsOfElemCenter(1:3),PartBound%RotPeriodicAxis,alpha)
! check if element is within halo_eps of rotationally displaced element
- IF (VECNORM( RotBoundsOfElemCenter(1:3) &
- - MPISideBoundsOfNbElemCenter(1:3,iSide)) &
- .LE. MPI_halo_eps_woshape+BoundsOfElemCenter(4) & !-BoundsOfElemCenter(5) &
- + MPISideBoundsOfNbElemCenter(4,iSide) ) THEN
+ IF ( VECNORM(RotBoundsOfElemCenter(1:3) - MPISideBoundsOfNbElemCenter(1:3,iSide)) &
+ .LE.(MPI_halo_eps_woshape+BoundsOfElemCenter(4) + MPISideBoundsOfNbElemCenter(4,iSide)) ) THEN
! flag the proc as exchange proc (in halo region)
IsExchangeElem(localElem) = .TRUE.
CYCLE ElemLoop
- END IF
+ END IF ! VECNORM( RotBoundsOfElemCenter ...
END DO ! nPartBound
! End check rot periodic Elems and if iSide is on rot periodic BC
END IF ! PartBound%UseRotPeriodicBC
@@ -632,60 +633,65 @@ SUBROUTINE IdentifyPartExchangeProcs
SELECT CASE(GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc))
! Proc not previously encountered, check if possibly in range
CASE(-1)
- IF(PartBound%UseRotPeriodicBC) THEN
- GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc) = 0
+ firstElem = offsetElemMPI(HaloProc)+1
+ lastElem = offsetElemMPI(HaloProc +1)
+
+ SELECT CASE(TrackingMethod)
+ ! Build mesh min/max on BezierControlPoints for possibly curved elements
+ CASE(REFMAPPING,TRACING)
+ firstSide = ElemInfo_Shared(ELEM_FIRSTSIDEIND,firstElem)+1
+ lastSide = ElemInfo_Shared(ELEM_LASTSIDEIND ,lastElem)
+
+ xCoordsOrigin(1) = MINVAL(BezierControlPoints3D(1,:,:,firstSide:lastSide))
+ xCoordsOrigin(2) = MAXVAL(BezierControlPoints3D(1,:,:,firstSide:lastSide))
+ xCoordsOrigin(3) = MINVAL(BezierControlPoints3D(2,:,:,firstSide:lastSide))
+ xCoordsOrigin(4) = MAXVAL(BezierControlPoints3D(2,:,:,firstSide:lastSide))
+ xCoordsOrigin(5) = MINVAL(BezierControlPoints3D(3,:,:,firstSide:lastSide))
+ xCoordsOrigin(6) = MAXVAL(BezierControlPoints3D(3,:,:,firstSide:lastSide))
+
+ ! TriaTracking does not have curved elements, nodeCoords are sufficient
+ CASE(TRIATRACKING)
+ xCoordsOrigin(1) = MINVAL(NodeCoords_Shared(1,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ xCoordsOrigin(2) = MAXVAL(NodeCoords_Shared(1,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ xCoordsOrigin(3) = MINVAL(NodeCoords_Shared(2,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ xCoordsOrigin(4) = MAXVAL(NodeCoords_Shared(2,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ xCoordsOrigin(5) = MINVAL(NodeCoords_Shared(3,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ xCoordsOrigin(6) = MAXVAL(NodeCoords_Shared(3,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
+ :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
+ END SELECT
+
+ ! Keep direction to account for accuracy issues
+ IF (myRank.LT.HaloProc) THEN
+ ProcInRange = HaloBoxInProc(xCoordsOrigin,xCoordsProc ,MPI_halo_eps,GEO%nPeriodicVectors,GEO%PeriodicVectors)
ELSE
- firstElem = offsetElemMPI(HaloProc)+1
- lastElem = offsetElemMPI(HaloProc +1)
-
- SELECT CASE(TrackingMethod)
- ! Build mesh min/max on BezierControlPoints for possibly curved elements
- CASE(REFMAPPING,TRACING)
- firstSide = ElemInfo_Shared(ELEM_FIRSTSIDEIND,firstElem)+1
- lastSide = ElemInfo_Shared(ELEM_LASTSIDEIND ,lastElem)
-
- xCoordsOrigin(1) = MINVAL(BezierControlPoints3D(1,:,:,firstSide:lastSide))
- xCoordsOrigin(2) = MAXVAL(BezierControlPoints3D(1,:,:,firstSide:lastSide))
- xCoordsOrigin(3) = MINVAL(BezierControlPoints3D(2,:,:,firstSide:lastSide))
- xCoordsOrigin(4) = MAXVAL(BezierControlPoints3D(2,:,:,firstSide:lastSide))
- xCoordsOrigin(5) = MINVAL(BezierControlPoints3D(3,:,:,firstSide:lastSide))
- xCoordsOrigin(6) = MAXVAL(BezierControlPoints3D(3,:,:,firstSide:lastSide))
-
- ! TriaTracking does not have curved elements, nodeCoords are sufficient
- CASE(TRIATRACKING)
- xCoordsOrigin(1) = MINVAL(NodeCoords_Shared(1,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- xCoordsOrigin(2) = MAXVAL(NodeCoords_Shared(1,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- xCoordsOrigin(3) = MINVAL(NodeCoords_Shared(2,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- xCoordsOrigin(4) = MAXVAL(NodeCoords_Shared(2,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- xCoordsOrigin(5) = MINVAL(NodeCoords_Shared(3,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- xCoordsOrigin(6) = MAXVAL(NodeCoords_Shared(3,ElemInfo_Shared(ELEM_FIRSTNODEIND,firstElem) + 1 &
- :ElemInfo_Shared(ELEM_LASTNODEIND ,lastElem)))
- END SELECT
-
- ! Keep direction to account for accuracy issues
- IF (myRank.LT.HaloProc) THEN
- ProcInRange = HaloBoxInProc(xCoordsOrigin,xCoordsProc,MPI_halo_eps,GEO%nPeriodicVectors,GEO%PeriodicVectors)
- ELSE
- ProcInRange = HaloBoxInProc(xCoordsProc,xCoordsOrigin,MPI_halo_eps,GEO%nPeriodicVectors,GEO%PeriodicVectors)
- END IF
+ ProcInRange = HaloBoxInProc(xCoordsProc ,xCoordsOrigin,MPI_halo_eps,GEO%nPeriodicVectors,GEO%PeriodicVectors)
+ END IF
- ! Check if proc is in range
- IF (.NOT.ProcInRange) THEN
- ! Proc definitely not in range
- GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc) = -2
+ ! Check if proc is in range
+ IF (ProcInRange) THEN
+ ! Check if single-node + rot-periodic BCs
+ IF ((nLeaderGroupProcs.EQ.1).AND.PartBound%UseRotPeriodicBC) THEN
+ ! Assume process in range based on bounding box check. Skip exact element check only for single-node + rot-periodic BCs
+ GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc) = 1
+ GlobalProcToExchangeProc(EXCHANGE_PROC_RANK,HaloProc) = nExchangeProcessors
+ nExchangeProcessors = nExchangeProcessors + 1
CYCLE
ELSE
- ! Proc possible in range
+ ! Process possible in range
GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc) = 0
- END IF
- END IF
- ! Proc definitely not in range or already flagged
- CASE(-2,1,2)
+ END IF ! (nLeaderGroupProcs.EQ.1).AND.PartBound%UseRotPeriodicBC
+ ELSE ! .NOT.ProcInRange
+ ! Proc definitely not in range
+ GlobalProcToExchangeProc(EXCHANGE_PROC_TYPE,HaloProc) = -2
+ CYCLE
+ END IF ! ProcInRange
+
+ CASE(-2,1,2) ! Proc definitely not in range or already flagged
CYCLE
END SELECT
END IF
@@ -847,6 +853,8 @@ SUBROUTINE IdentifyPartExchangeProcs
! Check rot periodic Elems and if iSide is on rot periodic BC
IF(PartBound%UseRotPeriodicBC) THEN
DO iPartBound = 1, nPartBound
+ ! skip no rot periodic BCs
+ IF(PartBound%TargetBoundCond(iPartBound).NE.PartBound%RotPeriodicBC) CYCLE
alpha = PartBound%RotPeriodicAngle(iPartBound) * PartBound%RotPeriodicTol
RotBoundsOfElemCenter(1:3) = RotateVectorAroundAxis(BoundsOfElemCenter(1:3),PartBound%RotPeriodicAxis,alpha)
! check if element is within halo_eps of rotationally displaced element
@@ -970,7 +978,7 @@ SUBROUTINE IdentifyPartExchangeProcs
END IF
END DO
IF(InInterPlaneRegion) THEN
-! (2) Loop over all elements on the compute node and add the procs as halo_procs if they are within the corresponding
+! (2) Loop over all elements on the compute node and add the procs as halo_procs if they are within the corresponding
! InterplaneRegion
DO iElem = 1,nComputeNodeTotalElems
ElemID = GetGlobalElemID(iElem)
@@ -1010,7 +1018,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_LOGICAL &
, iProc &
, 1999 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -1050,15 +1058,15 @@ SUBROUTINE IdentifyPartExchangeProcs
END DO
! On smooth grids, nNonSymmetricExchangeProcs should be zero. Only output if previously missing particle exchange procs are found
- CALL MPI_ALLREDUCE(nNonSymmetricExchangeProcs, nNonSymmetricExchangeProcsGlob, 1, MPI_INTEGER, MPI_SUM, MPI_COMM_WORLD, IERROR)
+ CALL MPI_ALLREDUCE(nNonSymmetricExchangeProcs, nNonSymmetricExchangeProcsGlob, 1, MPI_INTEGER, MPI_SUM, MPI_COMM_PICLAS, IERROR)
! Check sum of nNonSymmetricExchangeProcs over all processors
IF(nNonSymmetricExchangeProcsGlob.GT.0)THEN
- SWRITE(UNIT_StdOut,'(X,131("~"))')
+ SWRITE(UNIT_StdOut,'(1X,131("~"))')
SWRITE(Unit_StdOut,'(A,I0,A)') ' | Found ',nNonSymmetricExchangeProcsGlob, ' previously missing non-symmetric particle exchange procs'
SWRITE(Unit_StdOut,'(A)')" | See ElemData container 'myInvisibleRank' for more information on which MPI ranks are non-symmetric"
SWRITE(Unit_StdOut,'(A)')" | This information is written to "//TRIM(ProjectName)//"_MyInvisibleRank.h5 (only when CheckExchangeProcs=T)"
SWRITE(Unit_StdOut,'(A)')" | This check is optional. You can disable it via CheckExchangeProcs = F"
- SWRITE(UNIT_StdOut,'(X,131("~"))')
+ SWRITE(UNIT_StdOut,'(1X,131("~"))')
CALL AddToElemData(ElementOut,'myInvisibleRank',LongIntArray=myInvisibleRank)
CALL WriteMyInvisibleRankToHDF5()
! Only root aborts
@@ -1097,7 +1105,7 @@ SUBROUTINE IdentifyPartExchangeProcs
END DO
! -- Average number of exchange processors
-CALL MPI_REDUCE(nExchangeProcessors,nExchangeProcessorsGlobal,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,iError)
+CALL MPI_REDUCE(nExchangeProcessors,nExchangeProcessorsGlobal,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,iError)
LBWRITE(UNIT_stdOut,'(A,I0,A)') ' | Started particle exchange communication with average ', &
nExchangeProcessorsGlobal/nProcessors_Global , &
' partners per proc'
@@ -1448,7 +1456,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_INTEGER &
, ShapeMapping(iProc)%Rank &
, 2003 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -1459,7 +1467,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_INTEGER &
, ShapeMapping(iProc)%Rank &
, 2003 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -1479,7 +1487,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_INTEGER &
, ShapeMapping(iProc)%Rank &
, 2003 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -1489,7 +1497,7 @@ SUBROUTINE IdentifyPartExchangeProcs
, MPI_INTEGER &
, ShapeMapping(iProc)%Rank &
, 2003 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -1539,9 +1547,11 @@ END SUBROUTINE FinalizePartExchangeProcs
PPURE FUNCTION HaloBoxInProc(CartNodes,CartProc,halo_eps,nPeriodicVectors,PeriodicVectors)
!===================================================================================================================================
-! Check if bounding box is on proc by comparing against the other bounding box extended by halo_eps
+! Check if bounding box is on process by comparing against the other bounding box extended by halo_eps
!===================================================================================================================================
! MODULES
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound,nPartBound
+USE MOD_part_tools ,ONLY: RotateVectorAroundAxis
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1557,8 +1567,11 @@ PPURE FUNCTION HaloBoxInProc(CartNodes,CartProc,halo_eps,nPeriodicVectors,Period
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER,DIMENSION(2),PARAMETER :: DirPeriodicVector = [-1,1]
-INTEGER :: iPeriodicVector,jPeriodicVector,iPeriodicDir,jPeriodicDir,kPeriodicDir
+INTEGER :: iPeriodicVector,jPeriodicVector,iPeriodicDir,jPeriodicDir,kPeriodicDir,i,iPartBound
REAL,DIMENSION(1:6) :: xCordsPeri
+REAL,DIMENSION(1:8,1:3) :: x
+REAL,DIMENSION(1:3) :: xRot
+REAL :: alpha
!===================================================================================================================================
HaloBoxInProc = .FALSE.
@@ -1696,6 +1709,58 @@ PPURE FUNCTION HaloBoxInProc(CartNodes,CartProc,halo_eps,nPeriodicVectors,Period
END SELECT
+! Check rot periodic elements
+IF(PartBound%UseRotPeriodicBC) THEN
+
+ ! Define 8 corner nodes of the bounding box
+ x(1,1:3) = (/CartNodes(1),CartNodes(3),CartNodes(5)/)
+ x(2,1:3) = (/CartNodes(1),CartNodes(4),CartNodes(5)/)
+ x(3,1:3) = (/CartNodes(1),CartNodes(3),CartNodes(6)/)
+ x(4,1:3) = (/CartNodes(1),CartNodes(4),CartNodes(6)/)
+ x(5,1:3) = (/CartNodes(2),CartNodes(3),CartNodes(5)/)
+ x(6,1:3) = (/CartNodes(2),CartNodes(4),CartNodes(5)/)
+ x(7,1:3) = (/CartNodes(2),CartNodes(3),CartNodes(6)/)
+ x(8,1:3) = (/CartNodes(2),CartNodes(4),CartNodes(6)/)
+
+ ! Loop over all particle boundaries
+ DO iPartBound = 1, nPartBound
+
+ ! Skip irrelevant boundaries
+ IF(PartBound%TargetBoundCond(iPartBound).NE.PartBound%RotPeriodicBC) CYCLE
+
+ ! Get rotation angle
+ alpha = PartBound%RotPeriodicAngle(iPartBound) * PartBound%RotPeriodicTol
+
+ ! Initialize min/max in each spatial direction
+ xCordsPeri(1) = HUGE(1.0)
+ xCordsPeri(2) = -HUGE(1.0)
+ xCordsPeri(3) = HUGE(1.0)
+ xCordsPeri(4) = -HUGE(1.0)
+ xCordsPeri(5) = HUGE(1.0)
+ xCordsPeri(6) = -HUGE(1.0)
+
+ ! Calculate rotated coordinates
+ DO i = 1, 8
+ xRot(1:3) = RotateVectorAroundAxis(x(i,1:3),PartBound%RotPeriodicAxis,alpha)
+ xCordsPeri(1) = MIN(xCordsPeri(1), xRot(1))
+ xCordsPeri(2) = MAX(xCordsPeri(2), xRot(1))
+ xCordsPeri(3) = MIN(xCordsPeri(3), xRot(2))
+ xCordsPeri(4) = MAX(xCordsPeri(4), xRot(2))
+ xCordsPeri(5) = MIN(xCordsPeri(5), xRot(3))
+ xCordsPeri(6) = MAX(xCordsPeri(6), xRot(3))
+ END DO ! i = 1, 8
+
+ ! Check whether the bounding boxes intersect
+ IF ( ((xCordsPeri(1).LE.CartProc(2)+halo_eps).AND.(xCordsPeri(2).GE.CartProc(1)-halo_eps)) &
+ .AND.((xCordsPeri(3).LE.CartProc(4)+halo_eps).AND.(xCordsPeri(4).GE.CartProc(3)-halo_eps)) &
+ .AND.((xCordsPeri(5).LE.CartProc(6)+halo_eps).AND.(xCordsPeri(6).GE.CartProc(5)-halo_eps))) THEN
+ HaloBoxInProc = .TRUE.
+ RETURN
+ END IF
+
+ END DO ! nPartBound
+END IF ! PartBound%UseRotPeriodicBC
+
END FUNCTION HaloBoxInProc
#endif /*USE_MPI*/
diff --git a/src/particles/particle_mpi/particle_mpi_vars.f90 b/src/particles/particle_mpi/particle_mpi_vars.f90
index 0d0603107..8c4ef23c2 100644
--- a/src/particles/particle_mpi/particle_mpi_vars.f90
+++ b/src/particles/particle_mpi/particle_mpi_vars.f90
@@ -17,7 +17,7 @@ MODULE MOD_Particle_MPI_Vars
! Contains global variables provided by the particle surfaces routines
!===================================================================================================================================
! MODULES
-!USE mpi
+USE MOD_Globals
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
PUBLIC
@@ -35,7 +35,9 @@ MODULE MOD_Particle_MPI_Vars
LOGICAL :: AbortExchangeProcs ! Terminate run if proc communication is non-symmetric
TYPE tPartMPIGROUP
- INTEGER :: COMM ! MPI communicator for PIC GTS region
+#if USE_MPI
+ INTEGER :: COMM=MPI_COMM_NULL ! MPI communicator for PIC GTS region
+#endif /*USE_MPI*/
INTEGER :: Request ! MPI request for asynchronous communication
INTEGER :: nProcs ! number of MPI processes for particles
INTEGER :: MyRank ! MyRank of PartMPIVAR%COMM
@@ -44,32 +46,7 @@ MODULE MOD_Particle_MPI_Vars
INTEGER,ALLOCATABLE :: CommToGroup(:) ! list containing the rank in PartMPI%COMM
END TYPE
-TYPE tPeriodicPtr
- INTEGER , ALLOCATABLE :: BGMPeriodicBorder(:,:) ! indices of periodic border nodes
-END TYPE
-
-#if USE_MPI
-TYPE tPartMPIConnect
- TYPE(tPeriodicPtr) , ALLOCATABLE :: Periodic(:) ! data for different periodic borders for process
- LOGICAL :: isBGMNeighbor ! Flag: which process is neighber wrt. bckgrnd mesh
- LOGICAL :: isBGMPeriodicNeighbor ! Flag: which process is neighber wrt. bckgrnd mesh
- INTEGER , ALLOCATABLE :: BGMBorder(:,:) ! indices of border nodes (1=min 2=max,xyz)
- INTEGER :: BGMPeriodicBorderCount ! Number(#) of overlapping areas due to periodic bc
-END TYPE
-#endif /*USE_MPI*/
-
-TYPE tPartMPIVAR
-#if USE_MPI
- TYPE(tPartMPIConnect) , ALLOCATABLE :: DepoBGMConnect(:) ! MPI connect for each process
-#endif /*USE_MPI*/
- TYPE(tPartMPIGROUP),ALLOCATABLE :: InitGroup(:) ! small communicator for initialization
- INTEGER :: COMM ! MPI communicator for PIC GTS region
- INTEGER :: nProcs ! number of MPI processes for particles
- INTEGER :: MyRank ! MyRank of PartMPIVAR%COMM
- LOGICAL :: MPIRoot ! Root, MPIRank=0
-END TYPE
-
-TYPE (tPartMPIVAR) :: PartMPI
+TYPE(tPartMPIGROUP),ALLOCATABLE :: PartMPIInitGroup(:) ! small communicator for initialization
REAL :: SafetyFactor ! Factor to scale the halo region with MPI
REAL :: halo_eps_velo ! halo_eps_velo
diff --git a/src/particles/particle_operations.f90 b/src/particles/particle_operations.f90
index e30c4cfb0..ce4a39cde 100644
--- a/src/particles/particle_operations.f90
+++ b/src/particles/particle_operations.f90
@@ -46,7 +46,7 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele
USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
USE MOD_part_tools ,ONLY: CalcRadWeightMPF
USE MOD_Particle_TimeStep ,ONLY: GetParticleTimeStep
-USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck
+USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck, GetNextFreePosition
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT / OUTPUT VARIABLES
@@ -64,15 +64,7 @@ SUBROUTINE CreateParticle(SpecID,Pos,GlobElemID,Velocity,RotEnergy,VibEnergy,Ele
INTEGER :: newParticleID
!===================================================================================================================================
-! Do not increase the ParticleVecLength for Phantom particles!
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
-newParticleID = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
-IF(newParticleID.GT.PDM%ParticleVecLength) PDM%ParticleVecLength = PDM%ParticleVecLength + 1
-
-IF(newParticleID.GT.PDM%MaxParticleNumber)THEN
- CALL abort(__STAMP__,'CreateParticle: newParticleID.GT.PDM%MaxParticleNumber. '//&
- 'Increase Part-maxParticleNumber or use more processors. newParticleID=',IntInfoOpt=newParticleID)
-END IF
+newParticleID = GetNextFreePosition()
PartSpecies(newParticleID) = SpecID
LastPartPos(1:3,newParticleID) = Pos(1:3)
@@ -140,23 +132,27 @@ END SUBROUTINE CreateParticle
SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC)
!===================================================================================================================================
!> Removes a single particle "PartID" by setting the required variables.
-!> If CalcPartBalance/UseAdaptive/CalcSurfFluxInfo = T: adds/substracts the particle to/from the respective counter
+!> If CalcPartBalance/UseAdaptiveBC/CalcSurfFluxInfo = T: adds/substracts the particle to/from the respective counter
!> !!!NOTE!!! This routine is inside particle analyze because of circular definition of modules (CalcEkinPart)
!===================================================================================================================================
! MODULES
USE MOD_Globals_Vars ,ONLY: ElementaryCharge
-USE MOD_Particle_Vars ,ONLY: PDM, PartSpecies, Species, PartMPF, usevMPF
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive, AdaptBCPartNumOut
+USE MOD_Particle_Vars ,ONLY: PDM, PartSpecies, Species, PartMPF, usevMPF, PartState, PartPosRef, Pt
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC, AdaptBCPartNumOut
USE MOD_Particle_Vars ,ONLY: UseNeutralization, NeutralizationSource, NeutralizationBalance,nNeutralizationElems
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPartBalance,nPartOut,PartEkinOut,CalcSurfFluxInfo
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcBoundaryParticleOutput,BPO
+USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
#if defined(IMPA)
-USE MOD_Particle_Vars ,ONLY: PartIsImplicit,DoPartInNewton
+USE MOD_Particle_Vars ,ONLY: PartIsImplicit,DoPartInNewton, PEM, PartLambdaAccept
#endif /*IMPA*/
+#if defined(LSERK)
+USE MOD_Particle_Vars ,ONLY: Pt_temp
+#endif
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart
USE MOD_part_tools ,ONLY: GetParticleWeight
-USE MOD_DSMC_Vars ,ONLY: CollInf
+USE MOD_DSMC_Vars ,ONLY: CollInf, AmbipolElecVelo, ElectronicDistriPart, VibQuantsPar
USE MOD_Mesh_Vars ,ONLY: BoundaryName
#if USE_HDG
USE MOD_Globals ,ONLY: abort
@@ -179,11 +175,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC)
#endif /*USE_HDG*/
!===================================================================================================================================
-PDM%ParticleInside(PartID) = .FALSE.
-#ifdef IMPA
-PartIsImplicit(PartID) = .FALSE.
-DoPartInNewton(PartID) = .FALSE.
-#endif /*IMPA*/
+! Set default values of part arrays
iSpec = PartSpecies(PartID)
! Count the number of particles per species and the kinetic energy per species
@@ -193,12 +185,43 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC)
nPartOut(iSpec)=nPartOut(iSpec) + 1
PartEkinOut(iSpec)=PartEkinOut(iSpec)+CalcEkinPart(PartID)
END IF
- ELSE
- nPartOut(iSpec)=nPartOut(iSpec) + 1
- PartEkinOut(iSpec)=PartEkinOut(iSpec)+CalcEkinPart(PartID)
+ ! ELSE
+ ! nPartOut(iSpec)=nPartOut(iSpec) + 1
+ ! PartEkinOut(iSpec)=PartEkinOut(iSpec)+CalcEkinPart(PartID)
END IF
END IF ! CalcPartBalance
+PDM%ParticleInside(PartID) = .FALSE.
+PDM%IsNewPart(PartID) = .FALSE.
+PDM%dtFracPush(PartID) = .FALSE.
+PDM%InRotRefFrame(PartID) = .FALSE.
+PartState(1:6,PartID) = 0.
+IF(TrackingMethod.EQ.REFMAPPING) PartPosRef(1:3,PartID) = -888.
+PartSpecies(PartID) = 0
+Pt(1:3,PartID) = 0.
+
+IF(ALLOCATED(AmbipolElecVelo)) THEN
+ SDEALLOCATE(AmbipolElecVelo(PartID)%ElecVelo)
+END IF
+IF(ALLOCATED(ElectronicDistriPart)) THEN
+ SDEALLOCATE(ElectronicDistriPart(PartID)%DistriFunc)
+END IF
+IF(ALLOCATED(VibQuantsPar)) THEN
+ SDEALLOCATE(VibQuantsPar(PartID)%Quants)
+END IF
+
+#ifdef IMPA
+PartIsImplicit(PartID) = .FALSE.
+DoPartInNewton(PartID) = .FALSE.
+PartLambdaAccept(PartID) = .TRUE.
+PEM%PeriodicMoved(PartID) = .FALSE.
+#endif /*IMPA*/
+
+#if defined(LSERK)
+Pt_temp(1:6,PartID) = 0.
+#endif
+
+
! If a BCID is given (e.g. when a particle is removed at a boundary), check if it is
! - an adaptive surface flux BC or
! - the mass flow through the boundary shall be calculated or
@@ -206,7 +229,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC)
IF(PRESENT(BCID)) THEN
! Check if adaptive BC or surface flux info
- IF(UseAdaptive.OR.CalcSurfFluxInfo) THEN
+ IF(UseAdaptiveBC.OR.CalcSurfFluxInfo) THEN
DO iSF=1,Species(iSpec)%nSurfacefluxBCs
IF(Species(iSpec)%Surfaceflux(iSF)%BC.EQ.BCID) THEN
Species(iSpec)%Surfaceflux(iSF)%SampledMassflow = Species(iSpec)%Surfaceflux(iSF)%SampledMassflow &
@@ -214,7 +237,7 @@ SUBROUTINE RemoveParticle(PartID,BCID,alpha,crossedBC)
IF(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) AdaptBCPartNumOut(iSpec,iSF) = AdaptBCPartNumOut(iSpec,iSF) + 1
END IF
END DO
- END IF ! UseAdaptive.OR.CalcSurfFluxInfo
+ END IF ! UseAdaptiveBC.OR.CalcSurfFluxInfo
! Ion thruster simulations: Landmark and Liu2010 (SPT-100) if neutralization current is determined from the particle flux over the
! neutralization boundary condition instead of looking into the first row of elements along that BC
@@ -321,7 +344,7 @@ SUBROUTINE RemoveAllElectrons()
END DO
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,NbrOfElectronsRemoved,1,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,NbrOfElectronsRemoved,1,MPI_INTEGER,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
IF(NbrOfElectronsRemoved.GT.0.AND.MPIRoot) WRITE(UNIT_StdOut,'(A,I0,A)') ' Removed a total of ',NbrOfElectronsRemoved,' electrons.'
diff --git a/src/particles/particle_timestep.f90 b/src/particles/particle_timestep.f90
index cb5a09c59..6c95a5849 100644
--- a/src/particles/particle_timestep.f90
+++ b/src/particles/particle_timestep.f90
@@ -210,7 +210,7 @@ SUBROUTINE VarTimeStep_InitDistribution()
IF(DoRestart) THEN
! Try to get the time step factor distribution directly from state file
- CALL OpenDataFile(TRIM(RestartFile),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(TRIM(RestartFile),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,'ElemTimeStep',TimeStepExists)
IF(TimeStepExists) THEN
! Allocate the array for the element-wise time step factor
@@ -247,7 +247,7 @@ SUBROUTINE VarTimeStep_InitDistribution()
'ERROR: It is required to use a restart and macroscopic restart when adapting the time step distribution!')
END IF
! Open DSMC state file
- CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL GetDataProps('ElemData',nVar_HDF5,N_HDF5,nGlobalElems)
@@ -404,7 +404,7 @@ END SUBROUTINE VarTimeStep_InitDistribution
REAL FUNCTION GetParticleTimeStep(xPos, yPos, iElem)
!===================================================================================================================================
-!> Calculates/determines the time step
+!> Calculates/determines the time step
!> a) at a position x/y (only in 2D/Axi) [VarTimeStep%UseLinearScaling]
!> b) of the given element number (3D and VTS distribution) [VarTimeStep%UseDistribution]
!===================================================================================================================================
@@ -565,4 +565,4 @@ SUBROUTINE VarTimeStep_CalcElemFacs()
END SUBROUTINE VarTimeStep_CalcElemFacs
-END MODULE MOD_Particle_TimeStep
+END MODULE MOD_Particle_TimeStep
diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90
index 94b31e45a..41b5f27db 100644
--- a/src/particles/particle_tools.f90
+++ b/src/particles/particle_tools.f90
@@ -77,7 +77,9 @@ MODULE MOD_part_tools
PUBLIC :: InterpolateEmissionDistribution2D
PUBLIC :: MergeCells,InRotRefFrameCheck
PUBLIC :: CalcPartSymmetryPos
+PUBLIC :: StoreLostPhotonProperties
PUBLIC :: RotateVectorAroundAxis
+PUBLIC :: IncreaseMaxParticleNumber, GetNextFreePosition, ReduceMaxParticleNumber
!===================================================================================================================================
CONTAINS
@@ -214,12 +216,17 @@ SUBROUTINE UpdateNextFreePosition(WithOutMPIParts)
IF (CollInf%ProhibitDoubleColl) CollInf%OldCollPartner(i) = 0
counter = counter + 1
PDM%nextFreePosition(counter) = i
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleInside(i)) CALL ABORT(&
+ __STAMP__&
+ ,'Particle Inside is true but outside of PDM%ParticleVecLength',IntInfoOpt=i)
+#endif
END DO
! Set nextFreePosition for occupied slots to zero
PDM%nextFreePosition(counter+1:PDM%maxParticleNumber) = 0
! If maxParticleNumber are inside, counter is greater than maxParticleNumber
-IF (counter+1.GT.PDM%MaxParticleNumber) PDM%nextFreePosition(PDM%MaxParticleNumber) = 0
+! IF (counter+1.GT.PDM%MaxParticleNumber) PDM%nextFreePosition(PDM%MaxParticleNumber) = 0
#if USE_LOADBALANCE
CALL LBPauseTime(LB_UNFP,tLBStart)
@@ -228,6 +235,105 @@ SUBROUTINE UpdateNextFreePosition(WithOutMPIParts)
END SUBROUTINE UpdateNextFreePosition
+SUBROUTINE StoreLostPhotonProperties(ElemID,CallingFileName,LineNbrOfCall,ErrorCode)
+!----------------------------------------------------------------------------------------------------------------------------------!
+! Store information of a lost photons during tracking
+!----------------------------------------------------------------------------------------------------------------------------------!
+! MODULES !
+USE MOD_Globals ,ONLY: abort,myrank
+USE MOD_Particle_Tracking_Vars ,ONLY: PartStateLost,PartLostDataSize,PartStateLostVecLength
+USE MOD_TimeDisc_Vars ,ONLY: time
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Particle_Tracking_Vars ,ONLY: NbrOfLostParticles,DisplayLostParticles
+!----------------------------------------------------------------------------------------------------------------------------------!
+! insert modules here
+!----------------------------------------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+! INPUT / OUTPUT VARIABLES
+CHARACTER(LEN=*),INTENT(IN) :: CallingFileName ! Name of calling file
+INTEGER,INTENT(IN) :: LineNbrOfCall ! Line number from which this function was called from CallingFileName
+INTEGER,INTENT(IN) :: ElemID ! Global element index
+INTEGER,INTENT(IN) :: ErrorCode ! Code for identifying the type of error that was encountered.
+! ! 999: lost during tracking
+! ! 9999: lost during tracking but reached MaxIterPhoton(1) (bilinear tracking)
+! ! 99999: lost during tracking but reached MaxIterPhoton(2) (TriaTracking)
+INTEGER :: dims(2)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+! Temporary arrays
+REAL, ALLOCATABLE :: PartStateLost_tmp(:,:) ! (1:11,1:NParts) 1st index: x,y,z,vx,vy,vz,SpecID,MPF,time,ElemID,iPart
+! ! 2nd index: 1 to number of lost particles
+INTEGER :: ALLOCSTAT
+CHARACTER(LEN=60) :: hilf
+!===================================================================================================================================
+
+! Increment counter for lost particle per process
+NbrOfLostParticles=NbrOfLostParticles+1
+
+! Output in terminal if activated
+IF(DisplayLostParticles)THEN
+ WRITE(UNIT=hilf,FMT='(I0)') LineNbrOfCall
+ IPWRITE(*,*) 'Error in photon tracking in '//TRIM(CallingFileName)//' in line '//TRIM(hilf)//'! Photon lost. Element:', ElemID
+ IPWRITE(*,*) 'LastPos: ', PhotonProps%PhotonLastPos(1:3)
+ IPWRITE(*,*) 'Pos: ', PhotonProps%PhotonPos(1:3)
+ IPWRITE(*,*) 'Direction:', PhotonProps%PhotonDirection(1:3)
+ IPWRITE(*,*) 'Photon deleted!'
+END IF ! DisplayLostParticles
+
+! Check if size of the array must be increased
+dims = SHAPE(PartStateLost)
+
+ASSOCIATE( iMax => PartStateLostVecLength , &
+ LastPhotPos => PhotonProps%PhotonLastPos(1:3) , &
+ PhotPos => PhotonProps%PhotonPos(1:3) , &
+ Dir => PhotonProps%PhotonDirection(1:3) )
+ ! Increase maximum number of boundary-impact particles
+ iMax = iMax + 1
+
+ ! Check if array maximum is reached.
+ ! If this happens, re-allocate the arrays and increase their size (every time this barrier is reached, double the size)
+ IF(iMax.GT.dims(2))THEN
+
+ ! --- PartStateLost ---
+ ALLOCATE(PartStateLost_tmp(1:PartLostDataSize,1:dims(2)), STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_boundary_tools.f90: Cannot allocate PartStateLost_tmp array!')
+ ! Save old data
+ PartStateLost_tmp(1:PartLostDataSize,1:dims(2)) = PartStateLost(1:PartLostDataSize,1:dims(2))
+
+ ! Re-allocate PartStateLost to twice the size
+ DEALLOCATE(PartStateLost)
+ ALLOCATE(PartStateLost(1:PartLostDataSize,1:2*dims(2)), STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_boundary_tools.f90: Cannot allocate PartStateLost array!')
+ PartStateLost(1:PartLostDataSize, 1: dims(2)) = PartStateLost_tmp(1:PartLostDataSize,1:dims(2))
+ PartStateLost(1:PartLostDataSize,dims(2)+1:2*dims(2)) = 0.
+
+ END IF
+
+ ! 1-3: Particle position (current position)
+ PartStateLost(1:3,iMax) = PhotPos(1:3)
+ ! 4-6: Particle velocity
+ PartStateLost(4:6 ,iMax) = Dir(1:3)
+ ! 7: SpeciesID
+ PartStateLost(7 ,iMax) = REAL(ErrorCode)
+ ! 8: Macro particle factor
+ PartStateLost(8 ,iMax) = 0.0
+ ! 9: time of loss
+ PartStateLost(9 ,iMax) = time
+ ! 10: Global element ID
+ PartStateLost(10 ,iMax) = REAL(ElemID)
+ ! 11: Particle ID
+ PartStateLost(11 ,iMax) = REAL(0)
+ ! 12-14: Particle position (starting point or last valid position)
+ PartStateLost(12:14,iMax) = LastPhotPos(1:3)
+ ! 15: myrank
+ PartStateLost(15,iMax) = myrank
+ ! 16: missing type, i.e., 0: lost, 1: missing & found once, >1: missing & multiply found
+ PartStateLost(16,iMax) = 0
+END ASSOCIATE
+
+END SUBROUTINE StoreLostPhotonProperties
+
+
SUBROUTINE StoreLostParticleProperties(iPart,ElemID,UsePartState_opt,PartMissingType_opt)
!----------------------------------------------------------------------------------------------------------------------------------!
! Store information of a lost particle (during restart and during the simulation)
@@ -1038,7 +1144,7 @@ END FUNCTION CalcEElec_particle
SUBROUTINE MergeCells()
!===================================================================================================================================
-!> Routine for virtual merging of neighbouring cells.
+!> Routine for virtual merging of neighbouring cells.
!> Currently, the merging is only done via the number of particles within the cells.
!===================================================================================================================================
! MODULES
@@ -1062,7 +1168,7 @@ SUBROUTINE MergeCells()
!Nullify every value
DO iElem = 1, nElems
VirtMergedCells(iElem)%isMerged = .FALSE.
- VirtMergedCells(iElem)%MasterCell = 0
+ VirtMergedCells(iElem)%MasterCell = 0
VirtMergedCells(iElem)%MergedVolume = 0.0
IF (VirtMergedCells(iElem)%NumOfMergedCells.GT.0) THEN
DEALLOCATE(VirtMergedCells(iElem)%MergedCellID)
@@ -1088,7 +1194,7 @@ SUBROUTINE MergeCells()
IF(VirtualCellMergeSpread.GT.1) THEN
IF (VirtMergedCells(iElem)%NumOfMergedCells.GT.0) THEN
MasterCellID = VirtMergedCells(LocNBElem)%MasterCell-offSetElem
- IF(VirtMergedCells(MasterCellID)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE NBElemLoop
+ IF(VirtMergedCells(MasterCellID)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE NBElemLoop
ALLOCATE(tempCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells))
tempCellID = VirtMergedCells(MasterCellID)%MergedCellID
DEALLOCATE(VirtMergedCells(MasterCellID)%MergedCellID)
@@ -1121,9 +1227,9 @@ SUBROUTINE MergeCells()
VirtMergedCells(MasterCellID)%MergedCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) = &
tempCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1)
VirtMergedCells(MasterCellID)%MergedCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells) = iElem
- VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID)
+ VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID)
VirtMergedCells(iElem)%MasterCell = VirtMergedCells(LocNBElem)%MasterCell
- VirtMergedCells(iElem)%isMerged = .TRUE.
+ VirtMergedCells(iElem)%isMerged = .TRUE.
DEALLOCATE(tempCellID)
CYCLE ElemLoop
END IF
@@ -1167,7 +1273,7 @@ SUBROUTINE MergeCells()
VirtMergedCells(MasterCellID)%MergedCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1) = &
tempCellID(1:VirtMergedCells(MasterCellID)%NumOfMergedCells-1)
VirtMergedCells(MasterCellID)%MergedCellID(VirtMergedCells(MasterCellID)%NumOfMergedCells) = iElem
- VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID)
+ VirtMergedCells(MasterCellID)%MergedVolume=VirtMergedCells(MasterCellID)%MergedVolume+ElemVolume_Shared(CNElemID)
VirtMergedCells(iElem)%MasterCell = MasterCellID + offSetElem
VirtMergedCells(iElem)%isMerged = .TRUE.
DEALLOCATE(tempCellID)
@@ -1188,8 +1294,8 @@ SUBROUTINE MergeCells()
ALLOCATE(VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells))
VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells) = LocNBElem
VirtMergedCells(iElem)%MergedVolume = VirtMergedCells(iElem)%MergedVolume + ElemVolume_Shared(CNNbElem)
- VirtMergedCells(iElem)%MasterCell = iElem + offSetElem
- VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem
+ VirtMergedCells(iElem)%MasterCell = iElem + offSetElem
+ VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem
VirtMergedCells(LocNBElem)%isMerged = .TRUE.
ELSE
IF(VirtMergedCells(iElem)%NumOfMergedCells.GE.(MaxNumOfMergedCells-1)) CYCLE ElemLoop
@@ -1202,14 +1308,14 @@ SUBROUTINE MergeCells()
tempCellID(1:VirtMergedCells(iElem)%NumOfMergedCells-1)
VirtMergedCells(iElem)%MergedCellID(VirtMergedCells(iElem)%NumOfMergedCells) = LocNBElem
VirtMergedCells(iElem)%MergedVolume = VirtMergedCells(iElem)%MergedVolume + ElemVolume_Shared(CNNbElem)
- VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem
+ VirtMergedCells(LocNBElem)%MasterCell = iElem + offSetElem
VirtMergedCells(LocNBElem)%isMerged = .TRUE.
DEALLOCATE(tempCellID)
END IF
nPartMerged = nPartMerged + PEM%pNumber(LocNBElem)
IF (nPartMerged.GT.MinPartNumCellMerge) CYCLE ElemLoop
END IF
- END DO NBElemLoop
+ END DO NBElemLoop
END IF
END DO ElemLoop
@@ -1321,6 +1427,7 @@ SUBROUTINE InitializeParticleMaxwell(iPart,iSpec,iElem,Mode,iInit)
PEM%GlobalElemID(iPart) = iElem+offSetElem
PEM%LastGlobalElemID(iPart) = iElem+offSetElem
PDM%ParticleInside(iPart) = .TRUE.
+PDM%isNewPart(iPart) = .TRUE.
! 4) Set particle time step and weights (if required)
IF (UseVarTimeStep) THEN
@@ -1608,4 +1715,661 @@ PPURE FUNCTION RotateVectorAroundAxis(VecIn,Axis,Angle)
END FUNCTION RotateVectorAroundAxis
+
+FUNCTION GetNextFreePosition(Offset)
+!===================================================================================================================================
+!> Returns the next free position in the particle vector, if no space is available it increases the maximum particle number
+!> ATTENTION: If optional argument is used, the PDM%CurrentNextFreePosition will not be updated
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Particle_Vars ,ONLY: PDM
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,OPTIONAL,INTENT(IN) :: Offset
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+INTEGER :: GetNextFreePosition
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: i
+!===================================================================================================================================
+IF(PRESENT(Offset)) THEN
+ ! IF(PDM%CurrentNextFreePosition+Offset.GT.PDM%MaxParticleNumber) CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition+Offset)*(1+PDM%MaxPartNumIncrease)-PDM%MaxParticleNumber))
+ IF(PDM%CurrentNextFreePosition+Offset.GT.PDM%MaxParticleNumber) THEN
+ CALL IncreaseMaxParticleNumber()
+ IF(PDM%CurrentNextFreePosition.GT.PDM%MaxParticleNumber) THEN
+ ! This only happens if PDM%CurrentNextFreePosition+Offset is way off (which shouldn't happen)
+ IPWRITE(UNIT_stdOut,*) "WARNING: PDM%CurrentNextFreePosition+Offset is way off in particle_tools.f90 GetNextFreePosition(Offset), 1"
+ CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition+Offset)*(1+PDM%MaxPartNumIncrease)-PDM%MaxParticleNumber))
+ END IF
+ END IF
+
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition+Offset)
+ ! If next free position is equal 0, determine how much more particles are needed to get a position within the particle vector
+ IF(GetNextFreePosition.EQ.0) THEN
+ CALL IncreaseMaxParticleNumber()
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition+Offset)
+ IF(GetNextFreePosition.EQ.0) THEN
+ ! This only happens if PDM%CurrentNextFreePosition+Offset is way off (which shouldn't happen)
+ IPWRITE(UNIT_stdOut,*) "WARNING: PDM%CurrentNextFreePosition+Offset is way off in particle_tools.f90 GetNextFreePosition(Offset), 2"
+ IF(PDM%nextFreePosition(1).EQ.0) THEN
+ i = 0
+ ELSE
+ i = PDM%CurrentNextFreePosition+Offset
+ DO WHILE(PDM%nextFreePosition(i).EQ.0.AND.i.GT.0)
+ i = i - 1
+ END DO
+ END IF
+ ! Increase the maxpartnum + margin
+ CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition+Offset-i)*(1+PDM%MaxPartNumIncrease)+PDM%maxParticleNumber*PDM%MaxPartNumIncrease))
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition+Offset)
+ END IF
+ END IF
+ELSE
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
+ ! IF(PDM%CurrentNextFreePosition.GT.PDM%MaxParticleNumber) CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition)*(1+PDM%MaxPartNumIncrease)-PDM%MaxParticleNumber))
+ IF(PDM%CurrentNextFreePosition.GT.PDM%MaxParticleNumber) THEN
+ CALL IncreaseMaxParticleNumber()
+ IF(PDM%CurrentNextFreePosition.GT.PDM%MaxParticleNumber) THEN
+ ! This only happens if PDM%CurrentNextFreePosition is way off (which shouldn't happen)
+ IPWRITE(UNIT_stdOut,*) "WARNING: PDM%CurrentNextFreePosition is way off in particle_tools.f90 GetNextFreePosition(), 1"
+ CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition)*(1+PDM%MaxPartNumIncrease)-PDM%MaxParticleNumber))
+ END IF
+ END IF
+
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
+ ! If next free position is equal 0, determine how much more particles are needed to get a position within the particle vector
+ IF(GetNextFreePosition.EQ.0) THEN
+ CALL IncreaseMaxParticleNumber()
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
+ IF(GetNextFreePosition.EQ.0) THEN
+ ! This only happens if PDM%CurrentNextFreePosition is way off (which shouldn't happen)
+ IPWRITE(UNIT_stdOut,*) "WARNING: PDM%CurrentNextFreePosition is way off in particle_tools.f90 GetNextFreePosition(), 2"
+ IF(PDM%nextFreePosition(1).EQ.0) THEN
+ i = 0
+ ELSE
+ i = PDM%CurrentNextFreePosition
+ DO WHILE(PDM%nextFreePosition(i).EQ.0.AND.i.GT.0)
+ i = i - 1
+ END DO
+ END IF
+ ! Increase the maxpartnum + margin
+ CALL IncreaseMaxParticleNumber(CEILING((PDM%CurrentNextFreePosition-i)*(1+PDM%MaxPartNumIncrease)+PDM%maxParticleNumber*PDM%MaxPartNumIncrease))
+ GetNextFreePosition = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
+ END IF
+ END IF
+
+ IF(PDM%ParticleInside(GetNextFreePosition)) CALL ABORT(__STAMP__,'This Particle is already in use',IntInfoOpt=GetNextFreePosition)
+ IF(GetNextFreePosition.GT.PDM%ParticleVecLength) PDM%ParticleVecLength = GetNextFreePosition
+END IF
+IF(GetNextFreePosition.EQ.0) CALL ABORT(__STAMP__,'This should not happen, PDM%MaxParticleNumber reached',IntInfoOpt=PDM%MaxParticleNumber)
+
+END FUNCTION GetNextFreePosition
+
+
+SUBROUTINE IncreaseMaxParticleNumber(Amount)
+!===================================================================================================================================
+! Increases MaxParticleNumber and increases size of all depended arrays
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Array_Operations ,ONLY: ChangeSizeArray
+USE MOD_Particle_Vars
+USE MOD_DSMC_Vars
+#if USE_MPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartShiftVector, PartTargetProc
+#endif
+USE MOD_PICInterpolation_Vars ,ONLY: FieldAtParticle
+#if defined(IMPA) || defined(ROS)
+USE MOD_LinearSolver_Vars ,ONLY: PartXK, R_PartXK
+USE MOD_TimeDisc_Vars ,ONLY: nRKStages
+#endif
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,INTENT(IN),OPTIONAL :: Amount
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NewSize, i, ii, ALLOCSTAT
+TYPE (tAmbipolElecVelo), ALLOCATABLE :: AmbipolElecVelo_New(:)
+TYPE (tElectronicDistriPart), ALLOCATABLE :: ElectronicDistriPart_New(:)
+TYPE (tPolyatomMolVibQuant), ALLOCATABLE :: VibQuantsPar_New(:)
+! REAL ::
+!===================================================================================================================================
+IF(PRESENT(Amount)) THEN
+ IF(Amount.EQ.0) RETURN
+ NewSize=PDM%MaxParticleNumber+Amount
+ ! IPWRITE(*,*) "Increase by amount",PDM%MaxParticleNumber,NewSize
+ IF(NewSize.GT.PDM%maxAllowedParticleNumber)CALL ABORT(&
+ __STAMP__&
+ ,'More Particles needed than allowed in PDM%maxAllowedParticleNumber',IntInfoOpt=NewSize)
+ELSE
+ NewSize=MAX(CEILING(PDM%MaxParticleNumber*(1+PDM%MaxPartNumIncrease)),PDM%MaxParticleNumber+1)
+ IF(PDM%MaxParticleNumber.GE.PDM%maxAllowedParticleNumber) CALL ABORT(&
+ __STAMP__&
+ ,'More Particles needed than allowed in PDM%maxAllowedParticleNumber',IntInfoOpt=NewSize)
+ NewSize=MIN(NewSize,PDM%maxAllowedParticleNumber)
+ ! IPWRITE(*,*) "Increase by percent",PDM%MaxParticleNumber,NewSize
+END IF
+
+IF(ALLOCATED(PEM%GlobalElemID)) CALL ChangeSizeArray(PEM%GlobalElemID,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%pNext)) CALL ChangeSizeArray(PEM%pNext,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%LastGlobalElemID)) CALL ChangeSizeArray(PEM%LastGlobalElemID,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(PDM%ParticleInside)) CALL ChangeSizeArray(PDM%ParticleInside,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%IsNewPart)) CALL ChangeSizeArray(PDM%IsNewPart,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%dtFracPush)) CALL ChangeSizeArray(PDM%dtFracPush,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%InRotRefFrame)) CALL ChangeSizeArray(PDM%InRotRefFrame,PDM%maxParticleNumber,NewSize,.FALSE.)
+
+IF(ALLOCATED(PartState)) CALL ChangeSizeArray(PartState,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(LastPartPos)) CALL ChangeSizeArray(LastPartPos,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartPosRef)) CALL ChangeSizeArray(PartPosRef,PDM%maxParticleNumber,NewSize,-888.)
+IF(ALLOCATED(PartSpecies)) CALL ChangeSizeArray(PartSpecies,PDM%maxParticleNumber,NewSize,0)
+IF(ALLOCATED(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(Pt_temp)) CALL ChangeSizeArray(Pt_temp,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(Pt)) CALL ChangeSizeArray(Pt,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(FieldAtParticle)) CALL ChangeSizeArray(FieldAtParticle,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(InterPlanePartIndx)) CALL ChangeSizeArray(InterPlanePartIndx,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(BGGas%PairingPartner)) CALL ChangeSizeArray(BGGas%PairingPartner,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(CollInf%OldCollPartner)) CALL ChangeSizeArray(CollInf%OldCollPartner,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(ElecRelaxPart)) CALL ChangeSizeArray(ElecRelaxPart,PDM%maxParticleNumber,NewSize,.TRUE.)
+
+#if (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509)
+IF(ALLOCATED(velocityAtTime)) CALL ChangeSizeArray(velocityAtTime,PDM%maxParticleNumber,NewSize)
+#endif
+
+#if USE_MPI
+IF(ALLOCATED(PartTargetProc)) CALL ChangeSizeArray(PartTargetProc,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartShiftVector)) CALL ChangeSizeArray(PartShiftVector,PDM%maxParticleNumber,NewSize)
+#endif
+
+#if defined(IMPA) || defined(ROS)
+IF(ALLOCATED(PartXK)) CALL ChangeSizeArray(PartXK,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(R_PartXK)) CALL ChangeSizeArray(R_PartXK,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartStage)) CALL ChangeSizeArray(PartStage,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartStateN)) CALL ChangeSizeArray(PartStateN,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartQ)) CALL ChangeSizeArray(PartQ,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%NormVec)) CALL ChangeSizeArray(PEM%NormVec,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(PEM%PeriodicMoved)) CALL ChangeSizeArray(PEM%PeriodicMoved,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PartDtFrac)) CALL ChangeSizeArray(PartDtFrac,PDM%maxParticleNumber,NewSize,1.)
+#endif
+
+#ifdef IMPA
+IF(ALLOCATED(F_PartX0)) CALL ChangeSizeArray(F_PartX0,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(F_PartXk)) CALL ChangeSizeArray(F_PartXk,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartX0)) CALL ChangeSizeArray(Norm_F_PartX0,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartXk)) CALL ChangeSizeArray(Norm_F_PartXk,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartXk_old)) CALL ChangeSizeArray(Norm_F_PartXk_old,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartDeltaX)) CALL ChangeSizeArray(PartDeltaX,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartLambdaAccept)) CALL ChangeSizeArray(PartLambdaAccept,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(DoPartInNewton)) CALL ChangeSizeArray(DoPartInNewton,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartIsImplicit)) CALL ChangeSizeArray(PartIsImplicit,PDM%maxParticleNumber,NewSize,.FALSE.)
+#endif /* IMPA */
+
+! __ __ __ __ ________ ______ ___________ ___
+! / / / /___ ____/ /___ _/ /____ /_ __/\ \/ / __ \/ ____/ ___/ / | ______________ ___ _______
+! / / / / __ \/ __ / __ `/ __/ _ \ / / \ / /_/ / __/ \__ \ / /| | / ___/ ___/ __ `/ / / / ___/
+! / /_/ / /_/ / /_/ / /_/ / /_/ __/ / / / / ____/ /___ ___/ / / ___ |/ / / / / /_/ / /_/ (__ )
+! \____/ .___/\__,_/\__,_/\__/\___/ /_/ /_/_/ /_____//____/ /_/ |_/_/ /_/ \__,_/\__, /____/
+! /_/ /____/
+
+IF(ALLOCATED(AmbipolElecVelo)) THEN
+ ALLOCATE(AmbipolElecVelo_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in IncreaseMaxParticleNumber')
+ DO i=1,PDM%maxParticleNumber
+ CALL MOVE_ALLOC(AmbipolElecVelo(i)%ElecVelo,AmbipolElecVelo_New(i)%ElecVelo)
+ END DO
+ DEALLOCATE(AmbipolElecVelo)
+ CALL MOVE_ALLOC(AmbipolElecVelo_New,AmbipolElecVelo)
+END IF
+
+IF(ALLOCATED(ElectronicDistriPart)) THEN
+ ALLOCATE(ElectronicDistriPart_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in IncreaseMaxParticleNumber')
+ DO i=1,PDM%maxParticleNumber
+ CALL MOVE_ALLOC(ElectronicDistriPart(i)%DistriFunc,ElectronicDistriPart_New(i)%DistriFunc)
+ END DO
+ DEALLOCATE(ElectronicDistriPart)
+ CALL MOVE_ALLOC(ElectronicDistriPart_New,ElectronicDistriPart)
+END IF
+
+IF(ALLOCATED(VibQuantsPar)) THEN
+ ALLOCATE(VibQuantsPar_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in IncreaseMaxParticleNumber')
+ DO i=1,PDM%maxParticleNumber
+ CALL MOVE_ALLOC(VibQuantsPar(i)%Quants,VibQuantsPar_New(i)%Quants)
+ END DO
+ DEALLOCATE(VibQuantsPar)
+ CALL MOVE_ALLOC(VibQuantsPar_New,VibQuantsPar)
+END IF
+
+IF(ALLOCATED(PDM%nextFreePosition)) THEN
+ CALL ChangeSizeArray(PDM%nextFreePosition,PDM%maxParticleNumber,NewSize,0)
+
+ !Search for first entry where new poition is available
+ i=1
+ DO WHILE(PDM%nextFreePosition(i).NE.0)
+ i=i+1
+ END DO
+ i=i-1
+ ! Fill the free spots with the new entrys
+ DO ii=1,NewSize-PDM%MaxParticleNumber
+ PDM%nextFreePosition(i+ii)=ii+PDM%MaxParticleNumber
+ END DO
+END IF
+
+PDM%MaxParticleNumber=NewSize
+
+END SUBROUTINE IncreaseMaxParticleNumber
+
+
+SUBROUTINE ReduceMaxParticleNumber()
+!===================================================================================================================================
+! Reduces MaxParticleNumber and increases size of all depended arrays
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Array_Operations ,ONLY: ChangeSizeArray
+USE MOD_Particle_Vars
+USE MOD_DSMC_Vars
+#if USE_MPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartShiftVector, PartTargetProc
+#endif
+USE MOD_PICInterpolation_Vars ,ONLY: FieldAtParticle
+#if defined(IMPA) || defined(ROS)
+USE MOD_LinearSolver_Vars ,ONLY: PartXK, R_PartXK
+USE MOD_TimeDisc_Vars ,ONLY: nRKStages
+#endif
+USE MOD_MCC_Vars ,ONLY: UseMCC
+USE MOD_DSMC_Vars ,ONLY: BGGas
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NewSize, i, ii, ALLOCSTAT, nPart
+TYPE (tAmbipolElecVelo), ALLOCATABLE :: AmbipolElecVelo_New(:)
+TYPE (tElectronicDistriPart), ALLOCATABLE :: ElectronicDistriPart_New(:)
+TYPE (tPolyatomMolVibQuant), ALLOCATABLE :: VibQuantsPar_New(:)
+! REAL ::
+!===================================================================================================================================
+
+nPart=0
+DO i=1,PDM%ParticleVecLength
+ IF(PDM%ParticleInside(i)) nPart = nPart + 1
+END DO
+
+IF(DSMC%DoAmbipolarDiff) THEN
+ DO i=1,PDM%ParticleVecLength
+ IF(PDM%ParticleInside(i).AND.ALLOCATED(AmbipolElecVelo(i)%ElecVelo)) nPart = nPart + 1
+ END DO
+END IF
+
+IF(BGGas%NumberOfSpecies.GT.0.AND..NOT.UseMCC) nPart=nPart*2
+
+! Reduce Arrays only for at least PDM%maxParticleNumber*PDM%MaxPartNumIncrease free spots
+IF (nPart.GE.PDM%maxParticleNumber/(1.+PDM%MaxPartNumIncrease)**2) RETURN
+
+! Maintain nPart*PDM%MaxPartNumIncrease free spots
+Newsize=MAX(CEILING(nPart*(1.+PDM%MaxPartNumIncrease)),1)
+IF (Newsize.EQ.PDM%maxParticleNumber) RETURN
+
+! IPWRITE(*,*) "Decrease",PDM%maxParticleNumber,nPart,NewSize
+IF(.NOT.PDM%RearrangePartIDs) THEN
+ ! Search for highest occupied particle index and set Newsize to this Value
+ i=PDM%maxParticleNumber
+ DO WHILE(.NOT.PDM%ParticleInside(i).OR.i.EQ.NewSize)
+ i=i-1
+ END DO
+ NewSize=i
+ELSE
+ ! Rearrange particles with IDs>NewSize to lower IDs
+ DO i=NewSize+1,PDM%maxParticleNumber
+ IF(PDM%ParticleInside(i)) THEN
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
+ ii = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
+ IF(ii.EQ.0.OR.ii.GT.NewSize) THEN
+ CALL UpdateNextFreePosition()
+ PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
+ ii = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
+ IF(ii.EQ.0.OR.ii.GT.NewSize) CALL ABORT(&
+ __STAMP__&
+ ,'This should not happen')
+ END IF
+ IF(PDM%ParticleVecLength.LT.ii) PDM%ParticleVecLength = ii
+ CALL ChangePartID(i,ii)
+ END IF
+ END DO
+END IF
+
+
+
+IF(ALLOCATED(PEM%GlobalElemID)) CALL ChangeSizeArray(PEM%GlobalElemID,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%pNext)) CALL ChangeSizeArray(PEM%pNext,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%LastGlobalElemID)) CALL ChangeSizeArray(PEM%LastGlobalElemID,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(PDM%ParticleInside)) CALL ChangeSizeArray(PDM%ParticleInside,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%IsNewPart)) CALL ChangeSizeArray(PDM%IsNewPart,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%dtFracPush)) CALL ChangeSizeArray(PDM%dtFracPush,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PDM%InRotRefFrame)) CALL ChangeSizeArray(PDM%InRotRefFrame,PDM%maxParticleNumber,NewSize,.FALSE.)
+
+IF(ALLOCATED(PartState)) CALL ChangeSizeArray(PartState,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(LastPartPos)) CALL ChangeSizeArray(LastPartPos,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartPosRef)) CALL ChangeSizeArray(PartPosRef,PDM%maxParticleNumber,NewSize,-888.)
+IF(ALLOCATED(PartSpecies)) CALL ChangeSizeArray(PartSpecies,PDM%maxParticleNumber,NewSize,0)
+IF(ALLOCATED(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(Pt_temp)) CALL ChangeSizeArray(Pt_temp,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(Pt)) CALL ChangeSizeArray(Pt,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(FieldAtParticle)) CALL ChangeSizeArray(FieldAtParticle,PDM%maxParticleNumber,NewSize)
+
+IF(ALLOCATED(InterPlanePartIndx)) CALL ChangeSizeArray(InterPlanePartIndx,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(BGGas%PairingPartner)) CALL ChangeSizeArray(BGGas%PairingPartner,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(CollInf%OldCollPartner)) CALL ChangeSizeArray(CollInf%OldCollPartner,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(ElecRelaxPart)) CALL ChangeSizeArray(ElecRelaxPart,PDM%maxParticleNumber,NewSize,.TRUE.)
+
+#if (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509)
+IF(ALLOCATED(velocityAtTime)) CALL ChangeSizeArray(velocityAtTime,PDM%maxParticleNumber,NewSize)
+#endif
+
+#if USE_MPI
+IF(ALLOCATED(PartTargetProc)) CALL ChangeSizeArray(PartTargetProc,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartShiftVector)) CALL ChangeSizeArray(PartShiftVector,PDM%maxParticleNumber,NewSize)
+#endif
+
+#if defined(IMPA) || defined(ROS)
+IF(ALLOCATED(PartXK)) CALL ChangeSizeArray(PartXK,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(R_PartXK)) CALL ChangeSizeArray(R_PartXK,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartStage)) CALL ChangeSizeArray(PartStage,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartStateN)) CALL ChangeSizeArray(PartStateN,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartQ)) CALL ChangeSizeArray(PartQ,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PEM%NormVec)) CALL ChangeSizeArray(PEM%NormVec,PDM%maxParticleNumber,NewSize,0.)
+IF(ALLOCATED(PEM%PeriodicMoved)) CALL ChangeSizeArray(PEM%PeriodicMoved,PDM%maxParticleNumber,NewSize,.FALSE.)
+IF(ALLOCATED(PartDtFrac)) CALL ChangeSizeArray(PartDtFrac,PDM%maxParticleNumber,NewSize,1.)
+#endif
+
+#ifdef IMPA
+IF(ALLOCATED(F_PartX0)) CALL ChangeSizeArray(F_PartX0,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(F_PartXk)) CALL ChangeSizeArray(F_PartXk,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartX0)) CALL ChangeSizeArray(Norm_F_PartX0,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartXk)) CALL ChangeSizeArray(Norm_F_PartXk,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(Norm_F_PartXk_old)) CALL ChangeSizeArray(Norm_F_PartXk_old,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartDeltaX)) CALL ChangeSizeArray(PartDeltaX,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartLambdaAccept)) CALL ChangeSizeArray(PartLambdaAccept,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(DoPartInNewton)) CALL ChangeSizeArray(DoPartInNewton,PDM%maxParticleNumber,NewSize)
+IF(ALLOCATED(PartIsImplicit)) CALL ChangeSizeArray(PartIsImplicit,PDM%maxParticleNumber,NewSize,.FALSE.)
+#endif /* IMPA */
+
+! __ __ __ __ ________ ______ ___________ ___
+! / / / /___ ____/ /___ _/ /____ /_ __/\ \/ / __ \/ ____/ ___/ / | ______________ ___ _______
+! / / / / __ \/ __ / __ `/ __/ _ \ / / \ / /_/ / __/ \__ \ / /| | / ___/ ___/ __ `/ / / / ___/
+! / /_/ / /_/ / /_/ / /_/ / /_/ __/ / / / / ____/ /___ ___/ / / ___ |/ / / / / /_/ / /_/ (__ )
+! \____/ .___/\__,_/\__,_/\__/\___/ /_/ /_/_/ /_____//____/ /_/ |_/_/ /_/ \__,_/\__, /____/
+! /_/ /____/
+
+IF(ALLOCATED(AmbipolElecVelo)) THEN
+ ALLOCATE(AmbipolElecVelo_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in ReduceMaxParticleNumber')
+ DO i=1,NewSize
+ CALL MOVE_ALLOC(AmbipolElecVelo(i)%ElecVelo,AmbipolElecVelo_New(i)%ElecVelo)
+ END DO
+ DO i=NewSize+1,PDM%maxParticleNumber
+ SDEALLOCATE(AmbipolElecVelo(i)%ElecVelo)
+ END DO
+ DEALLOCATE(AmbipolElecVelo)
+ CALL MOVE_ALLOC(AmbipolElecVelo_New,AmbipolElecVelo)
+END IF
+
+IF(ALLOCATED(ElectronicDistriPart)) THEN
+ ALLOCATE(ElectronicDistriPart_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in ReduceMaxParticleNumber')
+ DO i=1,NewSize
+ CALL MOVE_ALLOC(ElectronicDistriPart(i)%DistriFunc,ElectronicDistriPart_New(i)%DistriFunc)
+ END DO
+ DO i=NewSize+1,PDM%maxParticleNumber
+ SDEALLOCATE(ElectronicDistriPart(i)%DistriFunc)
+ END DO
+ DEALLOCATE(ElectronicDistriPart)
+ CALL MOVE_ALLOC(ElectronicDistriPart_New,ElectronicDistriPart)
+END IF
+
+IF(ALLOCATED(VibQuantsPar)) THEN
+ ALLOCATE(VibQuantsPar_New(NewSize),STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL ABORT(&
+__STAMP__&
+,'Cannot allocate increased Array in ReduceMaxParticleNumber')
+ DO i=1,NewSize
+ CALL MOVE_ALLOC(VibQuantsPar(i)%Quants,VibQuantsPar_New(i)%Quants)
+ END DO
+ DO i=NewSize+1,PDM%maxParticleNumber
+ SDEALLOCATE(VibQuantsPar(i)%Quants)
+ END DO
+ DEALLOCATE(VibQuantsPar)
+ CALL MOVE_ALLOC(VibQuantsPar_New,VibQuantsPar)
+END IF
+
+IF(ALLOCATED(PDM%nextFreePosition)) THEN
+ CALL ChangeSizeArray(PDM%nextFreePosition,PDM%maxParticleNumber,NewSize,0)
+
+ !Set all NextFreePositions to zero which points to a partID>NewSize
+ DO i=1,NewSize
+ IF(PDM%nextFreePosition(i).GT.NewSize) PDM%nextFreePosition(i)=0
+ END DO
+END IF
+
+IF(PDM%ParticleVecLength.GT.NewSize) PDM%ParticleVecLength = NewSize
+PDM%MaxParticleNumber=NewSize
+
+CALL UpdateNextFreePosition()
+
+END SUBROUTINE ReduceMaxParticleNumber
+
+
+SUBROUTINE ChangePartID(OldID,NewID)
+!===================================================================================================================================
+! Change PartID from OldID to NewID
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Particle_Vars
+USE MOD_DSMC_Vars
+#if USE_MPI
+USE MOD_Particle_MPI_Vars ,ONLY: PartShiftVector, PartTargetProc
+#endif
+USE MOD_PICInterpolation_Vars ,ONLY: FieldAtParticle
+#if defined(IMPA) || defined(ROS)
+USE MOD_LinearSolver_Vars ,ONLY: PartXK, R_PartXK
+#endif
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,INTENT(IN) :: OldID
+INTEGER,INTENT(IN) :: NewID
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: i,TempPartID
+!===================================================================================================================================
+
+IF(ALLOCATED(PEM%GlobalElemID)) PEM%GlobalElemID(NewID)=PEM%GlobalElemID(OldID)
+IF(ALLOCATED(PEM%pNext)) THEN
+ PEM%pNext(NewID)=PEM%pNext(OldID)
+ ! Update pNext onto this particle
+ TempPartID = PEM%pStart(PEM%LocalElemID(OldID))
+ IF (TempPartID.EQ.OldID) THEN
+ PEM%pStart(PEM%LocalElemID(OldID)) = NewID
+ ELSE
+ DO i=1,PEM%pNumber(PEM%LocalElemID(OldID))
+ IF(PEM%pNext(TempPartID).EQ.OldID) THEN
+ PEM%pNext(TempPartID) = NewID
+ EXIT
+ END IF
+ TempPartID = PEM%pNext(TempPartID)
+ END DO
+ END IF
+END IF
+IF(ALLOCATED(PEM%LastGlobalElemID)) PEM%LastGlobalElemID(NewID)=PEM%LastGlobalElemID(OldID)
+
+IF(ALLOCATED(PDM%ParticleInside)) THEN
+ PDM%ParticleInside(NewID)=PDM%ParticleInside(OldID)
+ PDM%ParticleInside(OldID)=.FALSE.
+END IF
+IF(ALLOCATED(PDM%IsNewPart)) THEN
+ PDM%IsNewPart(NewID)=PDM%IsNewPart(OldID)
+ PDM%IsNewPart(OldID)=.FALSE.
+END IF
+IF(ALLOCATED(PDM%dtFracPush)) THEN
+ PDM%dtFracPush(NewID)=PDM%dtFracPush(OldID)
+ PDM%dtFracPush(OldID)=.FALSE.
+END IF
+IF(ALLOCATED(PDM%InRotRefFrame)) THEN
+ PDM%InRotRefFrame(NewID)=PDM%InRotRefFrame(OldID)
+ PDM%InRotRefFrame(OldID)=.FALSE.
+END IF
+
+IF(ALLOCATED(PartState)) THEN
+ PartState(:,NewID)=PartState(:,OldID)
+ PartState(:,OldID) = 0.0
+END IF
+IF(ALLOCATED(LastPartPos)) LastPartPos(:,NewID)=LastPartPos(:,OldID)
+IF(ALLOCATED(PartPosRef)) THEN
+ PartPosRef(:,NewID)=PartPosRef(:,OldID)
+ PartPosRef(:,OldID) = -888.
+END IF
+IF(ALLOCATED(PartSpecies)) THEN
+ PartSpecies(NewID)=PartSpecies(OldID)
+ PartSpecies(OldID) = 0
+END IF
+IF(ALLOCATED(PartTimeStep)) PartTimeStep(NewID)=PartTimeStep(OldID)
+IF(ALLOCATED(PartMPF)) PartMPF(NewID)=PartMPF(OldID)
+IF(ALLOCATED(PartVeloRotRef)) THEN
+ PartVeloRotRef(:,NewID)=PartVeloRotRef(:,OldID)
+ PartVeloRotRef(:,OldID) = 0.0
+END IF
+IF(ALLOCATED(PartStateIntEn)) PartStateIntEn(:,NewID)=PartStateIntEn(:,OldID)
+
+IF(ALLOCATED(Pt_temp)) THEN
+ Pt_temp(:,NewID)=Pt_temp(:,OldID)
+ Pt_temp(:,OldID) = 0.0
+END IF
+IF(ALLOCATED(Pt)) THEN
+ Pt(:,NewID)=Pt(:,OldID)
+ Pt(:,OldID) = 0
+END IF
+IF(ALLOCATED(FieldAtParticle)) FieldAtParticle(:,NewID)=FieldAtParticle(:,OldID)
+
+IF(ALLOCATED(InterPlanePartIndx)) InterPlanePartIndx(NewID)=InterPlanePartIndx(OldID)
+IF(ALLOCATED(BGGas%PairingPartner)) BGGas%PairingPartner(NewID)=BGGas%PairingPartner(OldID)
+IF(ALLOCATED(CollInf%OldCollPartner)) THEN
+ CollInf%OldCollPartner(NewID)=CollInf%OldCollPartner(OldID)
+ IF(CollInf%OldCollPartner(NewID).GT.0.AND.CollInf%OldCollPartner(NewID).LE.PDM%maxParticleNumber) THEN
+ IF(CollInf%OldCollPartner(CollInf%OldCollPartner(NewID)).EQ.OldID) CollInf%OldCollPartner(CollInf%OldCollPartner(NewID))=NewID
+ END IF
+END IF
+IF(ALLOCATED(ElecRelaxPart)) ElecRelaxPart(NewID)=ElecRelaxPart(OldID)
+
+#if (PP_TimeDiscMethod==508) || (PP_TimeDiscMethod==509)
+IF(ALLOCATED(velocityAtTime)) velocityAtTime(:,NewID)=velocityAtTime(:,OldID)
+#endif
+
+#if USE_MPI
+IF(ALLOCATED(PartTargetProc)) PartTargetProc(NewID)=PartTargetProc(OldID)
+IF(ALLOCATED(PartShiftVector)) PartShiftVector(:,NewID)=PartShiftVector(:,OldID)
+#endif
+
+#if defined(IMPA) || defined(ROS)
+IF(ALLOCATED(PartXK)) PartXK(:,NewID)=PartXK(:,OldID)
+IF(ALLOCATED(R_PartXK)) R_PartXK(:,NewID)=R_PartXK(:,OldID)
+IF(ALLOCATED(PartStage)) PartStage(:,:,NewID)=PartStage(:,:,OldID)
+IF(ALLOCATED(PartStateN)) PartStateN(:,NewID)=PartStateN(:,OldID)
+IF(ALLOCATED(PartQ)) PartQ(:,NewID)=PartQ(:,OldID)
+IF(ALLOCATED(PEM%NormVec)) THEN
+ PEM%NormVec(:,NewID)=PEM%NormVec(:,OldID)
+ PEM%NormVec(:,OldID) = 0.
+END IF
+IF(ALLOCATED(PEM%PeriodicMoved)) THEN
+ PEM%PeriodicMoved(NewID)=PEM%PeriodicMoved(OldID)
+ PEM%PeriodicMoved(OldID) = .FALSE.
+END IF
+IF(ALLOCATED(PartDtFrac)) THEN
+ PartDtFrac(NewID)=PartDtFrac(OldID)
+ PartDtFrac(OldID) = 1.
+END IF
+#endif
+
+#ifdef IMPA
+IF(ALLOCATED(F_PartX0)) F_PartX0(:,NewID)=F_PartX0(:,OldID)
+IF(ALLOCATED(F_PartXk)) F_PartXk(:,NewID)=F_PartXk(:,OldID)
+IF(ALLOCATED(Norm_F_PartX0)) Norm_F_PartX0(NewID)=Norm_F_PartX0(OldID)
+IF(ALLOCATED(Norm_F_PartXk)) Norm_F_PartXk(NewID)=Norm_F_PartXk(OldID)
+IF(ALLOCATED(Norm_F_PartXk_old)) Norm_F_PartXk_old(NewID)=Norm_F_PartXk_old(OldID)
+IF(ALLOCATED(PartDeltaX)) PartDeltaX(:,NewID)=PartDeltaX(:,OldID)
+IF(ALLOCATED(PartLambdaAccept)) PartLambdaAccept(NewID)=PartLambdaAccept(OldID)
+IF(ALLOCATED(DoPartInNewton)) DoPartInNewton(NewID)=DoPartInNewton(OldID)
+IF(ALLOCATED(PartIsImplicit)) PartIsImplicit(NewID)=PartIsImplicit(OldID)
+#endif /* IMPA */
+
+
+! __ __ __ __ ________ ______ ___________ ___
+! / / / /___ ____/ /___ _/ /____ /_ __/\ \/ / __ \/ ____/ ___/ / | ______________ ___ _______
+! / / / / __ \/ __ / __ `/ __/ _ \ / / \ / /_/ / __/ \__ \ / /| | / ___/ ___/ __ `/ / / / ___/
+! / /_/ / /_/ / /_/ / /_/ / /_/ __/ / / / / ____/ /___ ___/ / / ___ |/ / / / / /_/ / /_/ (__ )
+! \____/ .___/\__,_/\__,_/\__/\___/ /_/ /_/_/ /_____//____/ /_/ |_/_/ /_/ \__,_/\__, /____/
+! /_/ /____/
+
+IF(ALLOCATED(AmbipolElecVelo)) THEN
+ IF(ALLOCATED(AmbipolElecVelo(OldID)%ElecVelo)) THEN
+ IF(ALLOCATED(AmbipolElecVelo(NewID)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(NewID)%ElecVelo)
+ CALL MOVE_ALLOC(AmbipolElecVelo(OldID)%ElecVelo,AmbipolElecVelo(NewID)%ElecVelo)
+ ELSE
+ IF(ALLOCATED(AmbipolElecVelo(NewID)%ElecVelo)) DEALLOCATE(AmbipolElecVelo(NewID)%ElecVelo)
+ END IF
+END IF
+
+IF(ALLOCATED(ElectronicDistriPart)) THEN
+ IF(ALLOCATED(ElectronicDistriPart(OldID)%DistriFunc)) THEN
+ IF(ALLOCATED(ElectronicDistriPart(NewID)%DistriFunc)) DEALLOCATE(ElectronicDistriPart(NewID)%DistriFunc)
+ CALL MOVE_ALLOC(ElectronicDistriPart(OldID)%DistriFunc,ElectronicDistriPart(NewID)%DistriFunc)
+ ELSE
+ IF(ALLOCATED(ElectronicDistriPart(NewID)%DistriFunc)) DEALLOCATE(ElectronicDistriPart(NewID)%DistriFunc)
+ END IF
+END IF
+
+IF(ALLOCATED(VibQuantsPar)) THEN
+ IF(ALLOCATED(VibQuantsPar(OldID)%Quants)) THEN
+ IF(ALLOCATED(VibQuantsPar(NewID)%Quants)) DEALLOCATE(VibQuantsPar(NewID)%Quants)
+ CALL MOVE_ALLOC(VibQuantsPar(OldID)%Quants,VibQuantsPar(NewID)%Quants)
+ ELSE
+ IF(ALLOCATED(VibQuantsPar(NewID)%Quants)) DEALLOCATE(VibQuantsPar(NewID)%Quants)
+ END IF
+END IF
+
+END SUBROUTINE ChangePartID
+
+
+
END MODULE MOD_part_tools
diff --git a/src/particles/particle_vMPF.f90 b/src/particles/particle_vMPF.f90
index e948dbf3d..500ededf3 100644
--- a/src/particles/particle_vMPF.f90
+++ b/src/particles/particle_vMPF.f90
@@ -40,9 +40,12 @@ MODULE MOD_vMPF
!===================================================================================================================================
SUBROUTINE SplitAndMerge()
! MODULES
-USE MOD_PARTICLE_Vars ,ONLY: vMPFMergeThreshold, vMPFSplitThreshold, PEM, nSpecies, PartSpecies,PDM
-USE MOD_Mesh_Vars ,ONLY: nElems
-USE MOD_part_tools ,ONLY: UpdateNextFreePosition
+USE MOD_PARTICLE_Vars ,ONLY: vMPFMergeThreshold, vMPFSplitThreshold, PEM, nSpecies, PartSpecies,PDM
+USE MOD_Mesh_Vars ,ONLY: nElems
+USE MOD_part_tools ,ONLY: UpdateNextFreePosition
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime
+#endif /*USE_LOADBALANCE*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -52,15 +55,21 @@ SUBROUTINE SplitAndMerge()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iElem, iLoop, iPart, nPartCell, iSpec
-INTEGER, ALLOCATABLE :: iPartIndx_Node(:), nPart(:),iPartIndx_Node_Temp(:,:)
+INTEGER, ALLOCATABLE :: iPartIndx_Node(:,:), nPart(:)
+#if USE_LOADBALANCE
+REAL :: tLBStart
+#endif /*USE_LOADBALANCE*/
!===================================================================================================================================
+#if USE_LOADBALANCE
+CALL LBStartTime(tLBStart)
+#endif /*USE_LOADBALANCE*/
ALLOCATE(nPart(nSpecies))
DO iElem = 1, nElems
nPart(:) = 0
nPartCell = PEM%pNumber(iElem)
- ALLOCATE(iPartIndx_Node_Temp(nSpecies,nPartCell))
+ ALLOCATE(iPartIndx_Node(nSpecies,nPartCell))
DO iSpec = 1, nSpecies
- iPartIndx_Node_Temp(iSpec,1:nPartCell) = 0
+ iPartIndx_Node(iSpec,1:nPartCell) = 0
END DO
iPart = PEM%pStart(iElem)
@@ -72,29 +81,29 @@ SUBROUTINE SplitAndMerge()
END IF
iSpec = PartSpecies(iPart)
nPart(iSpec) = nPart(iSpec) + 1
- iPartIndx_Node_Temp(iSpec,nPart(iSpec)) = iPart
+ iPartIndx_Node(iSpec,nPart(iSpec)) = iPart
iPart = PEM%pNext(iPart)
END DO
DO iSpec = 1, nSpecies
- IF((vMPFMergeThreshold(iSpec).EQ.0).AND.(vMPFSplitThreshold(iSpec).EQ.0)) CYCLE ! Skip default values
- IF(nPart(iSpec).EQ.0) CYCLE ! Skip when no particles are present
+ ! Skip default values
+ IF((vMPFMergeThreshold(iSpec).EQ.0).AND.(vMPFSplitThreshold(iSpec).EQ.0)) CYCLE
+ ! Skip when no particles are present
+ IF(nPart(iSpec).EQ.0) CYCLE
- ! 2.) build partindx list for species
- ALLOCATE(iPartIndx_Node(nPart(iSpec)))
- iPartIndx_Node(1:nPart(iSpec)) = iPartIndx_Node_Temp(iSpec,1:nPart(iSpec))
-
- ! 3.) Call split or merge routine
+ ! 2.) Call split or merge routine
IF(nPart(iSpec).GT.vMPFMergeThreshold(iSpec).AND.(vMPFMergeThreshold(iSpec).NE.0)) THEN ! Merge
- CALL MergeParticles(iPartIndx_Node, nPart(iSpec), vMPFMergeThreshold(iSpec),iElem)
+ CALL MergeParticles(iPartIndx_Node(iSpec,1:nPart(iSpec)), nPart(iSpec), vMPFMergeThreshold(iSpec),iElem)
ELSE IF(nPart(iSpec).LT.vMPFSplitThreshold(iSpec)) THEN ! Split
- CALL SplitParticles(iPartIndx_Node, nPart(iSpec), vMPFSplitThreshold(iSpec))
+ CALL SplitParticles(iPartIndx_Node(iSpec,1:nPart(iSpec)), nPart(iSpec), vMPFSplitThreshold(iSpec))
END IF
- DEALLOCATE(iPartIndx_Node)
END DO
- DEALLOCATE(iPartIndx_Node_Temp)
+ DEALLOCATE(iPartIndx_Node)
+#if USE_LOADBALANCE
+ CALL LBElemSplitTime(iElem,tLBStart)
+#endif /*USE_LOADBALANCE*/
END DO
CALL UpdateNextFreePosition()
DEALLOCATE(nPart)
@@ -265,7 +274,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
END IF
END IF
DOF_rot = SpecDSMC(iSpec)%Xi_Rot
- T_rot = 2.*E_rot/(DOF_rot*totalWeight*BoltzmannConst)
+ T_rot = 2.*E_rot/(DOF_rot*totalWeight*BoltzmannConst)
END IF
IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN
T_elec = CalcTelec(E_elec/totalWeight, iSpec)
@@ -323,7 +332,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
IF(DSMC%ElectronicModel.GT.0.AND.SpecDSMC(iSpec)%InterID.NE.4) THEN
Energy_Sum = E_elec
IF (E_elec.GT.0.0) THEN
- IF (E_elec_new.EQ.0.0) THEN
+ IF (E_elec_new.EQ.0.0) THEN
! E_elec_new = 0.0
DO iLoop = 1, nPartNew ! temporal continuous energy distribution
iPart = iPartIndx_Node(iLoop)
@@ -333,7 +342,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
partWeight = GetParticleWeight(iPart)
E_elec_new = E_elec_new + partWeight * PartStateIntEn(3,iPart)
END DO
- END IF
+ END IF
alpha = E_elec/E_elec_new
DO iLoop = 1, nPartNew
! alpha = E_elec/E_elec_new
@@ -371,7 +380,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
Energy_Sum = Energy_Sum + E_vib
IF (E_vib.GT.0.0) THEN
IF (E_vib_new.EQ.0.0) THEN
- IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
DO iLoop = 1, nPartNew ! temporal continuous energy distribution
iPart = iPartIndx_Node(iLoop)
PartStateIntEn(1,iPart) = 0.0
@@ -402,7 +411,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
END DO
END DO
END IF
- END IF
+ END IF
alpha = E_vib/E_vib_new
DO iLoop = 1, nPartNew
iPart = iPartIndx_Node(iLoop)
@@ -445,7 +454,7 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
Energy_Sum = 0.0
! 6.3) ensuring rotational excitation
- alpha = E_rot/E_rot_new
+ alpha = E_rot/E_rot_new
DO iLoop = 1, nPartNew
iPart = iPartIndx_Node(iLoop)
partWeight = GetParticleWeight(iPart)
@@ -457,7 +466,10 @@ SUBROUTINE MergeParticles(iPartIndx_Node_in, nPart, nPartNew, iElem)
! 6.4) new translation energy
! Sanity check: catch problem when bulk of particles consists solely of clones (all have the same velocity vector)
alpha = 0.! Initialize
-IF((E_trans.GT.0.).AND.(E_trans_new.GT.0.)) alpha = MERGE(SQRT(E_trans/E_trans_new), 0., ISFINITE(SQRT(E_trans/E_trans_new)))
+IF (E_trans.GT.0. .AND. E_trans_new.GT.0. ) THEN
+ IF (ISFINITE(SQRT(E_trans/E_trans_new))) THEN; alpha = SQRT(E_trans/E_trans_new)
+ ELSE ; alpha = 0.; END IF
+END IF
#ifdef CODE_ANALYZE
Energy_new = CellEvib_vMPF(iSpec, iElem) + CellEelec_vMPF(iSpec, iElem)
#endif /* CODE_ANALYZE */
@@ -558,6 +570,7 @@ SUBROUTINE SplitParticles(iPartIndx_Node, nPartIn, nPartNew)
USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep
USE MOD_DSMC_Vars ,ONLY: PartStateIntEn, CollisMode, SpecDSMC, DSMC, PolyatomMolDSMC, VibQuantsPar
USE MOD_Particle_Tracking_Vars,ONLY: TrackingMethod
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
!#ifdef CODE_ANALYZE
!USE MOD_Globals ,ONLY: unit_stdout,myrank,abort
!USE MOD_Particle_Vars ,ONLY: Symmetry
@@ -579,13 +592,13 @@ SUBROUTINE SplitParticles(iPartIndx_Node, nPartIn, nPartNew)
iNewPart = 0
nPart = nPartIn
nSplit = nPartNew - nPart
-DO WHILE(iNewPart.LT.nSplit)
+DO iNewPart=1,nSplit
! Get a random particle (only from the initially available)
CALL RANDOM_NUMBER(iRan)
iPart = INT(iRan*nPart) + 1
PartIndx = iPartIndx_Node(iPart)
! Check whether the weighting factor would drop below vMPFSplitLimit (can be below one)
- ! If the resulting MPF is less than 1 you go sub-atomic where the concept of time and space become irrelevant...
+ ! If the resulting MPF is less than 1 you go sub-atomic where the concept of time and space become irrelevant...
IF((PartMPF(PartIndx) / 2.).LT.vMPFSplitLimit) THEN
! Skip this particle
iPartIndx_Node(iPart) = iPartIndx_Node(nPart)
@@ -598,9 +611,7 @@ SUBROUTINE SplitParticles(iPartIndx_Node, nPartIn, nPartNew)
IF((PartMPF(PartIndx) / 2.).LT.vMPFSplitLimit) CALL abort(__STAMP__,'Particle split below limit: PartMPF(PartIndx) / 2.=',&
RealInfoOpt=PartMPF(PartIndx) / 2.)
PartMPF(PartIndx) = PartMPF(PartIndx) / 2. ! split particle
- iNewPart = iNewPart + 1
- PositionNbr = PDM%nextFreePosition(iNewPart+PDM%CurrentNextFreePosition)
- IF (PositionNbr.EQ.0) CALL Abort(__STAMP__,'ERROR in particle split: MaxParticleNumber reached!')
+ PositionNbr = GetNextFreePosition()
PartState(1:6,PositionNbr) = PartState(1:6,PartIndx)
IF(TrackingMethod.EQ.REFMAPPING) PartPosRef(1:3,PositionNbr)=PartPosRef(1:3,PartIndx)
PartSpecies(PositionNbr) = PartSpecies(PartIndx)
@@ -626,9 +637,6 @@ SUBROUTINE SplitParticles(iPartIndx_Node, nPartIn, nPartNew)
PEM%pNumber(LocalElemID) = PEM%pNumber(LocalElemID) + 1
END DO
-! Advance particle vector length and the current next free position with newly created particles
-PDM%ParticleVecLength = PDM%ParticleVecLength + iNewPart
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + iNewPart
END SUBROUTINE SplitParticles
diff --git a/src/particles/particle_vars.f90 b/src/particles/particle_vars.f90
index 313c01b56..97745e149 100644
--- a/src/particles/particle_vars.f90
+++ b/src/particles/particle_vars.f90
@@ -195,10 +195,14 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart)
TYPE tParticleDataManagement
INTEGER :: CurrentNextFreePosition ! Index of nextfree index in nextFreePosition-Array
INTEGER :: maxParticleNumber ! Maximum Number of all Particles
+ INTEGER :: maxAllowedParticleNumber ! Maximum allowed number of PDM%maxParticleNumber
+ LOGICAL :: RearrangePartIDs ! Rearrange PartIDs during shrinking maxPartNum
+#if USE_MPI
+ LOGICAL :: UNFPafterMPIPartSend ! UpdateNextFreePosition after MPI Part Send
+#endif
INTEGER :: ParticleVecLength ! Vector Length for Particle Push Calculation
INTEGER :: ParticleVecLengthOld ! Vector Length for Particle Push Calculation
- INTEGER , ALLOCATABLE :: PartInit(:) ! (1:NParts), initial emission condition number
- ! the calculation area
+ REAL :: MaxPartNumIncrease ! How much shall the PDM%MaxParticleNumber be increased if it is full
INTEGER ,ALLOCATABLE :: nextFreePosition(:) ! =>NULL() ! next_free_Position(1:maxParticleNumber)
! List of free Positon
LOGICAL ,ALLOCATABLE :: ParticleInside(:) ! Particle_inside (1:maxParticleNumber)
@@ -218,19 +222,23 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart)
LOGICAL :: WriteMacroSurfaceValues=.FALSE. ! Output of macroscopic values on surface
INTEGER :: MacroValSamplIterNum ! Number of iterations for sampling
! macroscopic values
-LOGICAL :: SampleElecExcitation ! Sampling the electronic excitation rate per species
-INTEGER :: ExcitationLevelCounter !
-REAL, ALLOCATABLE :: ExcitationSampleData(:,:) !
-INTEGER, ALLOCATABLE :: ExcitationLevelMapping(:,:) !
-
+REAL :: MacroValSampTime ! Sampling time for WriteMacroVal. (e.g., for td201)
+! Sampling of electronic excitation rates
+LOGICAL :: SampleElecExcitation ! Enable sampling the electronic excitation rate per level
+INTEGER :: ExcitationLevelCounter ! Counter of electronic levels to be sampled (for all species)
+REAL, ALLOCATABLE :: ExcitationSampleData(:,:) ! Sampled rates [1:ExcitationLevelCounter,1:nElems]
+INTEGER, ALLOCATABLE :: ExcitationLevelMapping(:,:) ! Mapping of collision case and level to the total electronic
+ ! number of levels [1:CollInf%NumCase,1:MAXVAL(SpecXSec(:)%NumElecLevel)]
+! Variable particle weighting (vMPF)
+LOGICAL :: usevMPF ! use the vMPF per particle
INTEGER, ALLOCATABLE :: vMPFMergeThreshold(:) ! Max particle number per cell and (iSpec)
INTEGER, ALLOCATABLE :: vMPFSplitThreshold(:) ! Min particle number per cell and (iSpec)
REAL :: vMPFSplitLimit ! Do not split particles below this MPF threshold
LOGICAL :: UseSplitAndMerge ! Flag for particle merge
REAL, ALLOCATABLE :: CellEelec_vMPF(:,:)
REAL, ALLOCATABLE :: CellEvib_vMPF(:,:)
-REAL :: MacroValSampTime ! Sampling time for WriteMacroVal. (e.g., for td201)
-LOGICAL :: usevMPF ! use the vMPF per particle
+
+! Surface flux flags
LOGICAL :: DoSurfaceFlux ! Flag for emitting by SurfaceFluxBCs
LOGICAL :: DoPoissonRounding ! Perform Poisson sampling instead of random rounding
LOGICAL :: DoTimeDepInflow ! Insertion and SurfaceFlux w simple random rounding
@@ -284,7 +292,7 @@ PPURE INTEGER FUNCTION ElemID_INTERFACE(iPart)
REAL :: RotRefFrameFreq ! frequency of rotational frame of reference
REAL :: RotRefFrameOmega(3) ! angular velocity of rotational frame of reference
INTEGER :: nRefFrameRegions ! number of rotational frame of reference regions
-REAL, ALLOCATABLE :: RotRefFramRegion(:,:) ! MIN/MAX defintion for multiple rotational frame of reference region
+REAL, ALLOCATABLE :: RotRefFramRegion(:,:) ! MIN/MAX defintion for multiple rotational frame of reference region
! (i,RegionNumber), MIN:i=1, MAX:i=2
!===================================================================================================================================
END MODULE MOD_Particle_Vars
diff --git a/src/particles/pic/analyze/pic_analyze.f90 b/src/particles/pic/analyze/pic_analyze.f90
index bcb83f108..31bc00bc6 100644
--- a/src/particles/pic/analyze/pic_analyze.f90
+++ b/src/particles/pic/analyze/pic_analyze.f90
@@ -55,9 +55,6 @@ SUBROUTINE VerifyDepositedCharge()
#else
USE MOD_PICDepo_Vars ,ONLY: PartSource
#endif
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
USE MOD_ChangeBasis ,ONLY: ChangeBasis3D
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -82,7 +79,7 @@ SUBROUTINE VerifyDepositedCharge()
DO iElem=1,nElems
! Interpolate the physical position Elem_xGP to the analyze position, needed for exact function
CALL ChangeBasis3D(3,PP_N,NAnalyze,Vdm_GaussN_NAnalyze,Elem_xGP(1:3,:,:,:,iElem),Coords_NAnalyze(1:3,:,:,:))
- ! Interpolate the Jacobian to the analyze grid: be careful we interpolate the inverse of the inverse of the jacobian ;-)
+ ! Interpolate the Jacobian to the analyze grid: be careful we interpolate the inverse of the inverse of the Jacobian ;-)
J_N(1,0:PP_N,0:PP_N,0:PP_N)=1./sJ(:,:,:,iElem)
CALL ChangeBasis3D(1,PP_N,NAnalyze,Vdm_GaussN_NAnalyze,J_N(1:1,0:PP_N,0:PP_N,0:PP_N),J_NAnalyze(1:1,:,:,:))
! Interpolate the solution to the analyze grid
@@ -117,12 +114,12 @@ SUBROUTINE VerifyDepositedCharge()
! Collect info on MPI root process
#if USE_MPI
- IF(PartMPI%MPIRoot) THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , ChargeAnalytical , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE , ChargeNumerical , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ IF(MPIRoot) THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , ChargeAnalytical , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE , ChargeNumerical , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
ELSE
- CALL MPI_REDUCE(ChargeAnalytical , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
- CALL MPI_REDUCE(ChargeNumerical , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , PartMPI%COMM , IERROR)
+ CALL MPI_REDUCE(ChargeAnalytical , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
+ CALL MPI_REDUCE(ChargeNumerical , 0 , 1 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , IERROR)
END IF
#endif
@@ -164,7 +161,6 @@ SUBROUTINE CalcDepositedCharge()
#else
USE MOD_PICDepo_Vars, ONLY:PartSource
#endif
-USE MOD_Particle_MPI_Vars, ONLY:PartMPI
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -213,14 +209,14 @@ SUBROUTINE CalcDepositedCharge()
! MPI Communication
#if USE_MPI
-IF (PartMPI%MPIRoot) THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,Charge , 2 , MPI_DOUBLE_PRECISION, MPI_SUM,0, PartMPI%COMM, IERROR)
+IF (MPIRoot) THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,Charge , 2 , MPI_DOUBLE_PRECISION, MPI_SUM,0, MPI_COMM_PICLAS, IERROR)
ELSE ! no Root
- CALL MPI_REDUCE(Charge,RECBR ,2,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(Charge,RECBR ,2,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif
-IF (PartMPI%MPIRoot) THEN
+IF (MPIRoot) THEN
PartCharge(1)=Charge(1)
! absolute error
PartCharge(2)=ABS(Charge(2)-Charge(1))
diff --git a/src/particles/pic/deposition/pic_depo.f90 b/src/particles/pic/deposition/pic_depo.f90
index b258b5d6a..8725e04a0 100644
--- a/src/particles/pic/deposition/pic_depo.f90
+++ b/src/particles/pic/deposition/pic_depo.f90
@@ -382,7 +382,7 @@ SUBROUTINE InitializeDeposition()
, MPI_INTEGER &
, iProc &
, 1999 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END DO
@@ -395,7 +395,7 @@ SUBROUTINE InitializeDeposition()
, MPI_INTEGER &
, iProc &
, 1999 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END DO
@@ -437,7 +437,7 @@ SUBROUTINE InitializeDeposition()
, MPI_INTEGER &
, NodeRecvDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -464,7 +464,7 @@ SUBROUTINE InitializeDeposition()
, MPI_INTEGER &
, NodeSendDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -981,7 +981,7 @@ SUBROUTINE ExchangeNodeSourceExtTmp()
, MPI_DOUBLE_PRECISION &
, NodeRecvDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -997,7 +997,7 @@ SUBROUTINE ExchangeNodeSourceExtTmp()
, MPI_DOUBLE_PRECISION &
, NodeSendDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -1298,7 +1298,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
CALL MPI_ISEND( SendPeriodicNodes(iProc) &
@@ -1306,7 +1306,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END DO
@@ -1329,7 +1329,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1339,7 +1339,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1437,7 +1437,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
CALL MPI_ISEND( SendPeriodicNodes(iProc) &
@@ -1445,7 +1445,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END DO
@@ -1468,7 +1468,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1478,7 +1478,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1520,7 +1520,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1530,7 +1530,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1648,7 +1648,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
CALL MPI_ISEND( SendPeriodicNodes(iProc) &
@@ -1656,7 +1656,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 1667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END DO
@@ -1679,7 +1679,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1689,7 +1689,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1733,7 +1733,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1743,7 +1743,7 @@ SUBROUTINE InitializePeriodicNodes(&
, MPI_INTEGER &
, iProc &
, 667 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequestNonSymDepo(iProc) &
, IERROR)
END IF
@@ -1786,7 +1786,7 @@ SUBROUTINE InitializePeriodicNodes(&
IF (ANY(PeriodicNodeMap(iNode)%Mapping.EQ.0)) THEN
DO jNode = 1, PeriodicNodeMap(iNode)%nPeriodicNodes
IF (PeriodicNodeMap(iNode)%Mapping(jNode).EQ.0) THEN
- DO kNode =1, jNode - 1
+ DO kNode =1, jNode - 1
zGlobalNode = PeriodicNodeMap(iNode)%Mapping(kNode)
DO zNode = 1, PeriodicNodeMap(zGlobalNode)%nPeriodicNodes
IF ((PeriodicNodeMap(zGlobalNode)%Mapping(zNode).NE.0).AND.(PeriodicNodeMap(zGlobalNode)%Mapping(zNode).NE.iNode)) THEN
@@ -1920,7 +1920,7 @@ SUBROUTINE FinalizeDeposition()
USE MOD_LoadBalance_Vars ,ONLY: PartSourceLB,NodeSourceExtEquiLB
USE MOD_Mesh_Vars ,ONLY: nElems
USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge
-USE MOD_Particle_Mesh_Vars ,ONLY: ElemNodeID_Shared,NodeInfo_Shared
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemNodeID_Shared,NodeInfo_Shared,ElemNodeID_Shared_Win
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
USE MOD_Mesh_Vars ,ONLY: offsetElem
USE MOD_Particle_Mesh_Vars ,ONLY: GlobalElem2CNTotalElem,GlobalElem2CNTotalElem_Shared,GlobalElem2CNTotalElem_Shared_Win
@@ -2034,15 +2034,21 @@ SUBROUTINE FinalizeDeposition()
NodeSourceExtEquiLB(1,1,1,1,iElem) = NodeSourceExt(NodeID(7))
NodeSourceExtEquiLB(1,0,1,1,iElem) = NodeSourceExt(NodeID(8))
END DO!iElem
- ADEALLOCATE(ElemNodeID_Shared)
END IF ! DoDielectricSurfaceCharge
+ ! Finalize here because GetCNElemID() is required in this routine for load balancing of NodeSourceExtEquiLB = NodeSourceExt
IF (nComputeNodeProcessors.NE.nProcessors_Global) THEN
CALL UNLOCK_AND_FREE(GlobalElem2CNTotalElem_Shared_Win)
ADEALLOCATE(GlobalElem2CNTotalElem)
ADEALLOCATE(GlobalElem2CNTotalElem_Shared)
END IF ! nComputeNodeProcessors.NE.nProcessors_Global
END IF
+! This step was skipped in particle_mesh.f90: FinalizeParticleMesh()
+IF(PerformLoadBalance.AND.DoDielectricSurfaceCharge)THEN
+ ! From InitElemNodeIDs
+ CALL UNLOCK_AND_FREE(ElemNodeID_Shared_Win)
+ ADEALLOCATE(ElemNodeID_Shared)
+END IF
#endif /*USE_LOADBALANCE*/
SDEALLOCATE(PartSource)
diff --git a/src/particles/pic/deposition/pic_depo_method.f90 b/src/particles/pic/deposition/pic_depo_method.f90
index 895e9e54e..5052a9f3f 100644
--- a/src/particles/pic/deposition/pic_depo_method.f90
+++ b/src/particles/pic/deposition/pic_depo_method.f90
@@ -69,7 +69,10 @@ SUBROUTINE DefineParametersDepositionMethod()
! LOCAL VARIABLES
!==================================================================================================================================
CALL prms%SetSection("PIC Deposition")
-CALL prms%CreateLogicalOption('PIC-DoDeposition', 'Switch deposition of charge (and current density) on/off', '.TRUE.')
+CALL prms%CreateLogicalOption('PIC-DoDeposition' , 'Switch deposition of charge (and current density) on/off', '.TRUE.')
+#if USE_HDG
+CALL prms%CreateLogicalOption('PIC-DoDirichletDeposition', 'Switch deposition of charge (and current density) on Dirichlet sides on/off. Implemented for HDG only.', '.TRUE.')
+#endif /*USE_HDG*/
CALL prms%CreateIntFromStringOption('PIC-Deposition-Type', "Type/Method used in the deposition step: \n" //&
'1.1) shape_function ('//TRIM(int2strf(PRM_DEPO_SF))//')\n' //&
@@ -95,6 +98,9 @@ SUBROUTINE InitDepositionMethod()
USE MOD_Globals
USE MOD_ReadInTools ,ONLY: GETINTFROMSTR
USE MOD_PICDepo_Vars ,ONLY: DepositionType,r_sf,dim_sf,dim_sf_dir,SFAdaptiveSmoothing,alpha_sf,sfDepo3D,VerifyChargeStr
+#if USE_HDG
+USE MOD_PICDepo_Vars ,ONLY: DoDirichletDeposition
+#endif /*USE_HDG*/
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
USE MOD_ReadInTools ,ONLY: GETREAL,PrintOption,GETINT,GETLOGICAL
!----------------------------------------------------------------------------------------------------------------------------------
@@ -102,13 +108,16 @@ SUBROUTINE InitDepositionMethod()
! INPUT / OUTPUT VARIABLES
!----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: DepositionType_loc
+INTEGER :: DepositionType_loc
CHARACTER(32) :: hilf_geo
CHARACTER(1) :: hilf_dim
!==================================================================================================================================
r_sf=-1.0 ! default
VerifyChargeStr='' ! Initialize
-DepositionType_loc = GETINTFROMSTR('PIC-Deposition-Type')
+DepositionType_loc = GETINTFROMSTR('PIC-Deposition-Type')
+#if USE_HDG
+DoDirichletDeposition = GETLOGICAL('PIC-DoDirichletDeposition')
+#endif /*USE_HDG*/
! check for interpolation type incompatibilities (cannot be done at interpolation_init
! because DepositionType_loc is not known yet)
@@ -121,15 +130,27 @@ SUBROUTINE InitDepositionMethod()
Case(PRM_DEPO_SF) ! shape_function
DepositionMethod => DepositionMethod_SF
DepositionType = 'shape_function'
+#if USE_HDG
+ IF(.NOT.DoDirichletDeposition) CALL CollectiveStop(__STAMP__,'PIC-DoDirichletDeposition=F not implemented for shape_function')
+#endif /*USE_HDG*/
Case(PRM_DEPO_SF_CC) ! shape_function
DepositionMethod => DepositionMethod_SF
DepositionType = 'shape_function_cc'
+#if USE_HDG
+ IF(.NOT.DoDirichletDeposition) CALL CollectiveStop(__STAMP__,'PIC-DoDirichletDeposition=F not implemented for shape_function_cc')
+#endif /*USE_HDG*/
Case(PRM_DEPO_SF_ADAPTIVE) ! shape_function
DepositionMethod => DepositionMethod_SF
DepositionType = 'shape_function_adaptive'
+#if USE_HDG
+ IF(.NOT.DoDirichletDeposition) CALL CollectiveStop(__STAMP__,'PIC-DoDirichletDeposition=F not implemented for shape_function_adaptive')
+#endif /*USE_HDG*/
Case(PRM_DEPO_CVW) ! cell_volweight
DepositionType = 'cell_volweight'
DepositionMethod => DepositionMethod_CVW
+#if USE_HDG
+ IF(.NOT.DoDirichletDeposition) CALL CollectiveStop(__STAMP__,'PIC-DoDirichletDeposition=F not implemented for cell_volweight')
+#endif /*USE_HDG*/
Case(PRM_DEPO_CVWM) ! cell_volweight_mean
DepositionType = 'cell_volweight_mean'
DepositionMethod => DepositionMethod_CVWM
@@ -261,7 +282,7 @@ SUBROUTINE DepositionMethod_CVW(doParticle_In, stage_opt)
ALLOCATE(BGMSourceCellVol(SourceDim:4,0:1,0:1,0:1,1:nElems))
BGMSourceCellVol(:,:,:,:,:) = 0.0
DO iPart = 1,PDM%ParticleVecLength
- ! TODO: Info why and under which conditions the following 'CYCLE' is called
+ ! TODO: The cycle with .AND.doParticle_In is used for analysis or IMPA
IF(PRESENT(doParticle_In))THEN
IF (.NOT.(PDM%ParticleInside(iPart).AND.doParticle_In(iPart))) CYCLE
ELSE
@@ -361,6 +382,9 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
USE MOD_Particle_Mesh_Vars ,ONLY: ElemNodeID_Shared, NodeInfo_Shared, NodeCoords_Shared, GEO
USE MOD_PICDepo_Vars ,ONLY: PartSource,CellVolWeightFac,NodeSourceExt,NodeVolume,NodeSource, nDepoNodes, DepoNodetoGlobalNode
USE MOD_PICDepo_Vars ,ONLY: nDepoNodesTotal,Periodic_Nodes,Periodic_nNodes,Periodic_offsetNode
+#if USE_HDG
+USE MOD_PICDepo_Vars ,ONLY: DoDirichletDeposition
+#endif /*USE_HDG*/
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
USE MOD_Part_Tools ,ONLY: isDepositParticle
#if USE_MPI
@@ -545,7 +569,7 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, NodeRecvDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -561,7 +585,7 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, NodeSendDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -593,7 +617,7 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, NodeRecvDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
END DO
@@ -608,7 +632,7 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, NodeSendDepoRankToGlobalRank(iProc) &
, 666 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
END DO
@@ -670,6 +694,11 @@ SUBROUTINE DepositionMethod_CVWM(doParticle_In, stage_opt)
IF(NodeVolume(globalNode).GT.0.) NodeSource(SourceDim:4,globalNode) = NodeSource(SourceDim:4,globalNode)/NodeVolume(globalNode)
END DO
+#if USE_HDG
+! Nullify Dirichlet Nodes
+IF(.NOT.DoDirichletDeposition) CALL NullifyNodeSourceDirichletSides(SourceDim)
+#endif /*USE_HDG*/
+
#if USE_LOADBALANCE
CALL LBElemPauseTime_avg(tLBStart) ! Average over the number of elems
#endif /*USE_LOADBALANCE*/
@@ -794,7 +823,7 @@ SUBROUTINE DepositionMethod_SF(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, ShapeMapping(iProc)%Rank &
, 2001 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, RecvRequest(iProc) &
, IERROR)
! IF (myComputeNodeRank.NE.0) THEN
@@ -803,7 +832,7 @@ SUBROUTINE DepositionMethod_SF(doParticle_In, stage_opt)
, MPI_DOUBLE_PRECISION &
, ShapeMapping(iProc)%Rank &
, 2001 &
- , MPI_COMM_WORLD &
+ , MPI_COMM_PICLAS &
, SendRequest(iProc) &
, IERROR)
! END IF
@@ -841,8 +870,53 @@ SUBROUTINE DepositionMethod_SF(doParticle_In, stage_opt)
END IF
+END SUBROUTINE DepositionMethod_SF
-END SUBROUTINE DepositionMethod_SF
+#if USE_HDG
+!===================================================================================================================================
+!> Set NodeSource to zero on Dirichlet sides to account for mirror charges
+!===================================================================================================================================
+SUBROUTINE NullifyNodeSourceDirichletSides(SourceDim )
+! MODULES
+USE MOD_HDG_Vars ,ONLY: nDirichletBCSides,DirichletBC
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared,NodeInfo_Shared
+USE MOD_Mesh_Vars ,ONLY: SideToElem,ElemToSide
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_Mesh_Vars ,ONLY: offsetElem
+USE MOD_PICDepo_Vars ,ONLY: NodeSource
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: SourceDim
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iDirichletBCID,SideID,CNElemID,iLocSide,UniqueNodeID,NonUniqueNodeID,ElemID,iLocSideTest,iNode
+!===================================================================================================================================
+! Loop over all Dirichlet sides (process-local)
+DO iDirichletBCID = 1,nDirichletBCSides
+ ! Get local Side and element index
+ SideID = DirichletBC(iDirichletBCID)
+ ElemID = SideToElem(S2E_ELEM_ID,SideID)
+ ! Get compute-node element index
+ CNElemID = GetCNElemID(ElemID+offsetElem)
+ ! Loop over all six sides and find the local side index that matches the Dirichlet side
+ DO iLocSideTest=1,6
+ iLocSide = iLocSideTest
+ IF(SideID.EQ.ElemToSide(E2S_SIDE_ID,iLocSideTest,ElemID)) EXIT
+ END DO
+ ! Loop over the four side nodes
+ DO iNode = 1, 4
+ ! Get the non-unique node index
+ NonUniqueNodeID = ElemSideNodeID_Shared(iNode,iLocSide,CNElemID) + 1
+ ! Get the unique node index
+ UniqueNodeID = NodeInfo_Shared(NonUniqueNodeID)
+ ! Set the node source on the Dirichlet side to zero (do not compensate the loss)
+ NodeSource(SourceDim:4,UniqueNodeID) = 0.
+ END DO ! iNode = 1, 4
+END DO ! iDirichletBCID = 1,nDirichletBCSides
+END SUBROUTINE NullifyNodeSourceDirichletSides
+#endif /*USE_HDG*/
+
END MODULE MOD_PICDepo_Method
diff --git a/src/particles/pic/deposition/pic_depo_tools.f90 b/src/particles/pic/deposition/pic_depo_tools.f90
index 10440aa81..72051ca13 100644
--- a/src/particles/pic/deposition/pic_depo_tools.f90
+++ b/src/particles/pic/deposition/pic_depo_tools.f90
@@ -53,7 +53,8 @@ SUBROUTINE DepositPhotonSEEHoles(iBC,NbrOfParticle)
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_PICDepo_Vars ,ONLY: DoDeposition
USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge
-USE MOD_Particle_Vars ,ONLY: PEM, PDM, PartSpecies, PartState, Species, usevMPF, PartMPF
+USE MOD_Particle_Vars ,ONLY: PEM, PartSpecies, PartState, Species, usevMPF, PartMPF
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------!
! INPUT / OUTPUT VARIABLES
@@ -72,7 +73,7 @@ SUBROUTINE DepositPhotonSEEHoles(iBC,NbrOfParticle)
IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC))THEN
DO iPart = 1, NbrOfParticle
! Get index from next free position array
- ParticleIndex = PDM%nextFreePosition(iPart+PDM%CurrentNextFreePosition)
+ ParticleIndex = GetNextFreePosition(iPart)
! Get charge
IF(usevMPF)THEN
@@ -378,7 +379,7 @@ SUBROUTINE ReadTimeAverage(FileName)
IF(.NOT.FILEEXISTS(FileName)) CALL abort(__STAMP__, &
'TimeAverage-File "'//TRIM(FileName)//'" does not exist',999,999.)
END IF
-CALL OpenDataFile(TRIM(FileName),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(TRIM(FileName),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! get attributes
CALL DatasetExists(File_ID,'DG_Solution',SolutionExists)
diff --git a/src/particles/pic/deposition/pic_depo_vars.f90 b/src/particles/pic/deposition/pic_depo_vars.f90
index 8aa2d886a..bf0019fb9 100644
--- a/src/particles/pic/deposition/pic_depo_vars.f90
+++ b/src/particles/pic/deposition/pic_depo_vars.f90
@@ -24,6 +24,9 @@ MODULE MOD_PICDepo_Vars
! GLOBAL VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
LOGICAL :: DoDeposition ! flag to switch deposition on/off
+#if USE_HDG
+LOGICAL :: DoDirichletDeposition ! flag to switch deposition on Dirichlet sides on/off
+#endif /*USE_HDG*/
LOGICAL :: RelaxDeposition ! relaxation of current PartSource with RelaxFac into PartSourceOld
LOGICAL :: DoHaloDepo ! Flag for enlarging the deposition region (implicit and dielectric)
REAL :: RelaxFac
diff --git a/src/particles/pic/interpolation/init_BGField.f90 b/src/particles/pic/interpolation/init_BGField.f90
index c4cbc6338..df2504d1f 100644
--- a/src/particles/pic/interpolation/init_BGField.f90
+++ b/src/particles/pic/interpolation/init_BGField.f90
@@ -129,7 +129,7 @@ SUBROUTINE InitializeBackgroundField
ELSE
BGFieldScaling = GETREAL('PIC-BGFieldScaling','1.')
! 2b) Read-in the parameters from the BGField file
- CALL OpenDataFile(BGFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(BGFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,'BGField',BGFieldExists) ! backward compatibility
CALL DatasetExists(File_ID,'DG_Solution',DG_SolutionExists)
IF(BGFieldExists) THEN
diff --git a/src/particles/pic/models/pic_models.f90 b/src/particles/pic/models/pic_models.f90
index 69954f8f2..3ab8b989b 100644
--- a/src/particles/pic/models/pic_models.f90
+++ b/src/particles/pic/models/pic_models.f90
@@ -70,6 +70,7 @@ SUBROUTINE ADK_Bruhwiler2003()
USE MOD_Particle_Vars ,ONLY: PDM, Species, PartSpecies, usevMPF, PartState, PEM, PartMPF
USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC
USE MOD_PICInterpolation_Vars ,ONLY: FieldAtParticle
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -78,7 +79,7 @@ SUBROUTINE ADK_Bruhwiler2003()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iPart, MaxElecQua, ChargedNum, SumOfFormedParticles, ElectronIndex
+INTEGER :: iPart, MaxElecQua, ChargedNum, ElectronIndex
REAL :: IonizationEnergy_eV, iRan, QuantumTunnelProb, EffQuantNum
REAL :: CriticalValue_GV
REAL :: E_GV
@@ -90,7 +91,6 @@ SUBROUTINE ADK_Bruhwiler2003()
REAL(KIND=8) :: b(KK) = (/(ii, ii=1,KK, 1)/)
#endif /* CODE_ANALYZE */
!===================================================================================================================================
-SumOfFormedParticles = 0
DO iPart = 1, PDM%ParticleVecLength
IF(PDM%ParticleInside(iPart)) THEN
@@ -139,14 +139,10 @@ SUBROUTINE ADK_Bruhwiler2003()
CALL RANDOM_NUMBER(iRan)
IF(QuantumTunnelProb.GT.iRan) THEN
!.... Get free particle index for the 3rd particle produced
- SumOfFormedParticles = SumOfFormedParticles + 1
- ElectronIndex = PDM%nextFreePosition(SumOfFormedParticles+PDM%CurrentNextFreePosition)
- IF (ElectronIndex.EQ.0) THEN
- CALL abort(__STAMP__,&
- 'New Particle Number greater max Part Num in Field Ionization.')
- END IF
+ ElectronIndex = GetNextFreePosition()
!Set new Species of new particle
PDM%ParticleInside(ElectronIndex) = .TRUE.
+ PDM%isNewPart(ElectronIndex) = .TRUE.
PartSpecies(ElectronIndex) = DSMC%ElectronSpecies
PartState(1:3,ElectronIndex) = PartState(1:3,iPart)
PartState(4:6,ElectronIndex) = Species(DSMC%ElectronSpecies)%MassIC / Species(oldSpec)%MassIC * PartState(4:6,iPart)
@@ -162,9 +158,6 @@ SUBROUTINE ADK_Bruhwiler2003()
END IF
END DO
-PDM%ParticleVecLength = PDM%ParticleVecLength + SumOfFormedParticles
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + SumOfFormedParticles
-
END SUBROUTINE ADK_Bruhwiler2003
@@ -182,6 +175,7 @@ SUBROUTINE ADK_Yu2018()
USE MOD_Particle_Vars ,ONLY: PDM, Species, PartSpecies, usevMPF, PartState, PEM, PartMPF
USE MOD_DSMC_Vars ,ONLY: DSMC, SpecDSMC
USE MOD_PICInterpolation_Vars ,ONLY: FieldAtParticle
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -190,7 +184,7 @@ SUBROUTINE ADK_Yu2018()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iPart, MaxElecQua, SumOfFormedParticles, ElectronIndex
+INTEGER :: iPart, MaxElecQua, ElectronIndex
REAL :: IonizationEnergy_eV, iRan, QuantumTunnelProb
REAL :: n
#ifdef CODE_ANALYZE
@@ -202,7 +196,6 @@ SUBROUTINE ADK_Yu2018()
REAL :: E
#endif /* CODE_ANALYZE */
!===================================================================================================================================
-SumOfFormedParticles = 0
DO iPart = 1, PDM%ParticleVecLength
IF(PDM%ParticleInside(iPart)) THEN
@@ -240,14 +233,14 @@ SUBROUTINE ADK_Yu2018()
CALL RANDOM_NUMBER(iRan)
IF(QuantumTunnelProb.GT.iRan) THEN
!.... Get free particle index for the 3rd particle produced
- SumOfFormedParticles = SumOfFormedParticles + 1
- ElectronIndex = PDM%nextFreePosition(SumOfFormedParticles+PDM%CurrentNextFreePosition)
+ ElectronIndex = GetNextFreePosition()
IF (ElectronIndex.EQ.0) THEN
CALL abort(__STAMP__,&
'New Particle Number greater max Part Num in Field Ionization.')
END IF
!Set new Species of new particle
PDM%ParticleInside(ElectronIndex) = .TRUE.
+ PDM%isNewPart(ElectronIndex) = .TRUE.
PartSpecies(ElectronIndex) = DSMC%ElectronSpecies
PartState(1:3,ElectronIndex) = PartState(1:3,iPart)
PartState(4:6,ElectronIndex) = Species(DSMC%ElectronSpecies)%MassIC / Species(oldSpec)%MassIC * PartState(4:6,iPart)
@@ -263,9 +256,6 @@ SUBROUTINE ADK_Yu2018()
END IF
END DO
-PDM%ParticleVecLength = PDM%ParticleVecLength + SumOfFormedParticles
-PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + SumOfFormedParticles
-
END SUBROUTINE ADK_Yu2018
diff --git a/src/particles/restart/particle_readin.f90 b/src/particles/restart/particle_readin.f90
index 529cc4cda..6a612fbf7 100644
--- a/src/particles/restart/particle_readin.f90
+++ b/src/particles/restart/particle_readin.f90
@@ -21,9 +21,6 @@ MODULE MOD_Particle_Readin
IMPLICIT NONE
PRIVATE
!-----------------------------------------------------------------------------------------------------------------------------------
-INTERFACE ParticleReadin
- MODULE PROCEDURE ParticleReadin
-END INTERFACE
PUBLIC :: ParticleReadin
!===================================================================================================================================
@@ -46,7 +43,7 @@ SUBROUTINE ParticleReadin()
! Mesh
USE MOD_Mesh_Vars ,ONLY: OffsetElem
! DSMC
-USE MOD_DSMC_Vars ,ONLY: UseDSMC,DSMC,PolyatomMolDSMC,SpecDSMC
+USE MOD_DSMC_Vars ,ONLY: UseDSMC,DSMC,PolyatomMolDSMC,SpecDSMC,RadialWeighting
! Particles
USE MOD_Dielectric_Vars ,ONLY: DoDielectricSurfaceCharge
USE MOD_HDF5_Input_Particles ,ONLY: ReadEmissionVariablesFromHDF5,ReadNodeSourceExtFromHDF5
@@ -156,7 +153,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT,iError)
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
- CALL MPI_ALLTOALLV(PartSourceLB,counts_send,disp_send,MPI_STRUCT,PartSource_HDF5,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(PartSourceLB,counts_send,disp_send,MPI_STRUCT,PartSource_HDF5,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
DEALLOCATE(PartSourceLB)
@@ -212,7 +210,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT,iError)
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
- CALL MPI_ALLTOALLV(NodeSourceExtEquiLB,counts_send,disp_send,MPI_STRUCT,NodeSourceExtEquiLBTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(NodeSourceExtEquiLB,counts_send,disp_send,MPI_STRUCT,NodeSourceExtEquiLBTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
DEALLOCATE(NodeSourceExtEquiLB)
! Loop over all elements and store absolute charge values in equidistantly distributed nodes of PP_N=1
@@ -285,7 +284,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
! Communicate PartInt over MPI
- CALL MPI_ALLTOALLV(PartInt,counts_send,disp_send,MPI_STRUCT,PartIntTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(PartInt,counts_send,disp_send,MPI_STRUCT,PartIntTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
! Calculate the PartInt deltas
@@ -336,7 +336,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
! Communicate PartData over MPI
- CALL MPI_ALLTOALLV(PartData,counts_send,disp_send,MPI_STRUCT,PartDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(PartData,counts_send,disp_send,MPI_STRUCT,PartDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
CALL MOVE_ALLOC(PartDataTmp,PartData)
PartDataExists = .TRUE.
@@ -361,7 +362,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
! Communicate VibQuantData over MPI
- CALL MPI_ALLTOALLV(VibQuantData,counts_send,disp_send,MPI_STRUCT,VibQuantDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(VibQuantData,counts_send,disp_send,MPI_STRUCT,VibQuantDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
CALL MOVE_ALLOC(VibQuantDataTmp,VibQuantData)
END IF
@@ -383,7 +385,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
! Communicate ElecDistriData over MPI
- CALL MPI_ALLTOALLV(ElecDistriData,counts_send,disp_send,MPI_STRUCT,ElecDistriDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(ElecDistriData,counts_send,disp_send,MPI_STRUCT,ElecDistriDataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
CALL MOVE_ALLOC(ElecDistriDataTmp,ElecDistriData)
END IF
@@ -405,7 +408,8 @@ SUBROUTINE ParticleReadin()
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
! Communicate AD_Data over MPI
- CALL MPI_ALLTOALLV(AD_Data,counts_send,disp_send,MPI_STRUCT,AD_DataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(AD_Data,counts_send,disp_send,MPI_STRUCT,AD_DataTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
CALL MOVE_ALLOC(AD_DataTmp,AD_Data)
END IF
@@ -426,7 +430,7 @@ SUBROUTINE ParticleReadin()
IF(.NOT.RestartNullifySolution)THEN ! Use the solution in the restart file
!-- read PartSource if relaxation is performed (might be needed for RestartHDG)
IF (DoDeposition .AND. RelaxDeposition) THEN
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL DatasetExists(File_ID,'DG_Source',DGSourceExists)
IF(DGSourceExists)THEN
IF(.NOT.InterpolateSolution)THEN! No interpolation needed, read solution directly from file
@@ -482,7 +486,7 @@ SUBROUTINE ParticleReadin()
END DO
END IF
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! ------------------------------------------------
! NodeSourceExt (external/additional charge source terms)
! ------------------------------------------------
@@ -637,6 +641,9 @@ SUBROUTINE ParticleReadin()
CALL ReadArray('ADVeloData',2,(/INT(3,IK),locnPart/),offsetnPart,2,RealArray=AD_Data)
!+1 is real number of necessary vib quants for the particle
END IF
+
+ ! Radial weighting in 2D axisymmetric simulations: Cloned particles due to the time delay
+ IF (RadialWeighting%PerformCloning) CALL ClonesReadin()
END IF ! useDSMC
END IF ! PartDataExists
END IF ! PartIntExits
@@ -648,4 +655,242 @@ SUBROUTINE ParticleReadin()
END SUBROUTINE ParticleReadin
+
+SUBROUTINE ClonesReadin()
+!===================================================================================================================================
+! Axisymmetric 2D simulation with particle weighting: Read-in of clone particles saved during output of particle data
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_HDF5_input
+USE MOD_io_hdf5
+USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep
+USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems
+USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, DSMC, PolyatomMolDSMC, SpecDSMC
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles
+USE MOD_Particle_Vars ,ONLY: nSpecies, usevMPF, Species
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
+#endif /*USE_LOADBALANCE*/
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: nDimsClone, CloneDataSize, ClonePartNum, iPart, iDelay, maxDelay, iElem, tempDelay, iPos
+INTEGER(HSIZE_T), POINTER :: SizeClone(:)
+REAL,ALLOCATABLE :: CloneData(:,:)
+INTEGER :: iPolyatmole, MaxQuantNum, iSpec, compareDelay, MaxElecQuant
+INTEGER,ALLOCATABLE :: pcount(:), VibQuantData(:,:)
+REAL, ALLOCATABLE :: ElecDistriData(:,:), AD_Data(:,:)
+LOGICAL :: ClonesExist,ParameterExists,ResetClones
+REAL :: OldParameter
+!===================================================================================================================================
+ClonesExist = .FALSE.
+ParameterExists = .FALSE.
+ResetClones = .FALSE.
+
+! Determining whether clones have been written to State file
+CALL DatasetExists(File_ID,'CloneData',ClonesExist)
+IF(.NOT.ClonesExist) THEN
+ LBWRITE(*,*) 'No clone data found! Restart without cloning.'
+ ResetClones = .TRUE.
+END IF
+
+! Determining the old time step
+CALL DatasetExists(File_ID,'ManualTimeStep',ParameterExists,attrib=.TRUE.,DSetName_attrib='CloneData')
+IF(ParameterExists) THEN
+ CALL ReadAttribute(File_ID,'ManualTimeStep',1,RealScalar=OldParameter,DatasetName='CloneData')
+ IF(OldParameter.NE.ManualTimeStep) THEN
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Changed timestep of read-in CloneData. Resetting the array to avoid wrong cloning due to different time steps.'
+ END IF
+ELSE
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Unknown timestep of read-in CloneData. Resetting the array to avoid wrong cloning due to different time steps.'
+END IF
+ParameterExists = .FALSE.
+
+! Determining the old weighting factor
+CALL DatasetExists(File_ID,'WeightingFactor',ParameterExists,attrib=.TRUE.,DSetName_attrib='CloneData')
+IF(ParameterExists) THEN
+ CALL ReadAttribute(File_ID,'WeightingFactor',1,RealScalar=OldParameter,DatasetName='CloneData')
+ ! Only checking the weighting factor of the first species
+ IF(OldParameter.NE.Species(1)%MacroParticleFactor) THEN
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Changed weighting factor of read-in CloneData. Resetting the array.'
+ END IF
+ELSE
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Unknown weighting factor of read-in CloneData. Resetting the array.'
+END IF
+ParameterExists = .FALSE.
+
+! Determining the old radial weighting factor
+CALL DatasetExists(File_ID,'RadialWeightingFactor',ParameterExists,attrib=.TRUE.,DSetName_attrib='CloneData')
+IF(ParameterExists) THEN
+ CALL ReadAttribute(File_ID,'RadialWeightingFactor',1,RealScalar=OldParameter,DatasetName='CloneData')
+ IF(OldParameter.NE.RadialWeighting%PartScaleFactor) THEN
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Changed radial weighting factor of read-in CloneData. Resetting the array.'
+ END IF
+ELSE
+ ResetClones = .TRUE.
+ LBWRITE(*,*) 'Unknown radial weighting factor of read-in CloneData. Resetting the array.'
+END IF
+
+! Reset the clones if the time step/weighting factor has changed and leave the routine (also if no CloneData was found)
+IF(ResetClones) THEN
+ IF(RadialWeighting%CloneMode.EQ.1) THEN
+ RadialWeighting%CloneDelayDiff = 1
+ ELSEIF (RadialWeighting%CloneMode.EQ.2) THEN
+ RadialWeighting%CloneDelayDiff = 0
+ END IF ! RadialWeighting%CloneMode.EQ.1
+ RETURN
+END IF
+
+CALL GetDataSize(File_ID,'CloneData',nDimsClone,SizeClone)
+
+CloneDataSize = INT(SizeClone(1),4)
+ClonePartNum = INT(SizeClone(2),4)
+DEALLOCATE(SizeClone)
+
+! Allocate ClonedParticles array
+IF(ClonePartNum.GT.RadialWeighting%CloneVecLength) THEN
+ RadialWeighting%CloneVecLength = ClonePartNum + 10
+ SDEALLOCATE(ClonedParticles)
+ SELECT CASE(RadialWeighting%CloneMode)
+ CASE(1)
+ ALLOCATE(ClonedParticles(1:RadialWeighting%CloneVecLength,0:(RadialWeighting%CloneInputDelay-1)))
+ CASE(2)
+ ALLOCATE(ClonedParticles(1:RadialWeighting%CloneVecLength,0:RadialWeighting%CloneInputDelay))
+ END SELECT
+END IF
+
+IF(ClonePartNum.GT.0) THEN
+ ALLOCATE(CloneData(1:CloneDataSize,1:ClonePartNum))
+ ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK) ,&
+ CloneDataSize => INT(CloneDataSize,IK) )
+ CALL ReadArray('CloneData',2,(/CloneDataSize,ClonePartNum/),0_IK,2,RealArray=CloneData)
+ END ASSOCIATE
+ LBWRITE(*,*) 'Read-in of cloned particles complete. Total clone number: ', ClonePartNum
+ ! Determing the old clone delay
+ maxDelay = INT(MAXVAL(CloneData(9,:)))
+ IF(RadialWeighting%CloneMode.EQ.1) THEN
+ ! Array is allocated from 0 to maxDelay
+ compareDelay = maxDelay + 1
+ ELSE
+ compareDelay = maxDelay
+ END IF
+ IF(compareDelay.GT.RadialWeighting%CloneInputDelay) THEN
+ LBWRITE(*,*) 'Old clone delay is greater than the new delay. Old delay:', compareDelay
+ RadialWeighting%CloneDelayDiff = RadialWeighting%CloneInputDelay + 1
+ ELSEIF(compareDelay.EQ.RadialWeighting%CloneInputDelay) THEN
+ LBWRITE(*,*) 'The clone delay has not been changed.'
+ RadialWeighting%CloneDelayDiff = RadialWeighting%CloneInputDelay + 1
+ ELSE
+ LBWRITE(*,*) 'New clone delay is greater than the old delay. Old delay:', compareDelay
+ RadialWeighting%CloneDelayDiff = compareDelay + 1
+ END IF
+ IF(RadialWeighting%CloneMode.EQ.1) THEN
+ tempDelay = RadialWeighting%CloneInputDelay - 1
+ ELSE
+ tempDelay = RadialWeighting%CloneInputDelay
+ END IF
+ ALLOCATE(pcount(0:tempDelay))
+ pcount(0:tempDelay) = 0
+ ! Polyatomic clones: determining the size of the VibQuant array
+ IF (UseDSMC.AND.(DSMC%NumPolyatomMolecs.GT.0)) THEN
+ MaxQuantNum = 0
+ DO iSpec = 1, nSpecies
+ IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ IF (PolyatomMolDSMC(iPolyatMole)%VibDOF.GT.MaxQuantNum) MaxQuantNum = PolyatomMolDSMC(iPolyatMole)%VibDOF
+ END IF
+ END DO
+ ALLOCATE(VibQuantData(1:MaxQuantNum,1:ClonePartNum))
+ ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK),MaxQuantNum => INT(MaxQuantNum,IK))
+ CALL ReadArray('CloneVibQuantData',2,(/MaxQuantNum,ClonePartNum/),0_IK,2,IntegerArray_i4=VibQuantData)
+ END ASSOCIATE
+ END IF
+ IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN
+ MaxElecQuant = 0
+ DO iSpec = 1, nSpecies
+ IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN
+ IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant
+ END IF
+ END DO
+ ALLOCATE(ElecDistriData(1:MaxElecQuant,1:ClonePartNum))
+ ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK),MaxElecQuant => INT(MaxElecQuant,IK))
+ CALL ReadArray('CloneElecDistriData',2,(/MaxElecQuant,ClonePartNum/),0_IK,2,RealArray=ElecDistriData)
+ END ASSOCIATE
+ END IF
+ IF (UseDSMC.AND.DSMC%DoAmbipolarDiff) THEN
+ ALLOCATE(AD_Data(1:3,1:ClonePartNum))
+ ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK))
+ CALL ReadArray('CloneADVeloData',2,(/INT(3,IK),ClonePartNum/),0_IK,2,RealArray=AD_Data)
+ END ASSOCIATE
+ END IF
+ ! Copying particles into ClonedParticles array
+ DO iPart = 1, ClonePartNum
+ iDelay = INT(CloneData(9,iPart))
+ iElem = INT(CloneData(8,iPart)) - offsetElem
+ IF((iElem.LE.nElems).AND.(iElem.GT.0)) THEN
+ IF(iDelay.LE.tempDelay) THEN
+ iSpec = NINT(CloneData(7,iPart))
+ pcount(iDelay) = pcount(iDelay) + 1
+ RadialWeighting%ClonePartNum(iDelay) = pcount(iDelay)
+ ClonedParticles(pcount(iDelay),iDelay)%PartState(1:6) = CloneData(1:6,iPart)
+ ClonedParticles(pcount(iDelay),iDelay)%Species = iSpec
+ ClonedParticles(pcount(iDelay),iDelay)%Element = INT(CloneData(8,iPart))
+ ClonedParticles(pcount(iDelay),iDelay)%lastPartPos(1:3) = CloneData(1:3,iPart)
+ iPos = 9
+ IF(UseDSMC) THEN
+ IF(CollisMode.GT.1) THEN
+ ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(1:2) = CloneData(1+iPos:2+iPos,iPart)
+ iPos = iPos + 2
+ IF(DSMC%ElectronicModel.GT.0) THEN
+ ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(3)= CloneData(1+iPos,iPart)
+ iPos = iPos + 1
+ END IF
+ END IF
+ END IF
+ IF (usevMPF) THEN
+ ClonedParticles(pcount(iDelay),iDelay)%WeightingFactor = CloneData(1+iPos,iPart)
+ iPos = iPos + 1
+ END IF
+ IF (UseDSMC.AND.(DSMC%NumPolyatomMolecs.GT.0)) THEN
+ IF (SpecDSMC(iSpec)%PolyatomicMol) THEN
+ iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
+ ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%VibQuants(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))
+ ClonedParticles(pcount(iDelay),iDelay)%VibQuants(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) &
+ = VibQuantData(1:PolyatomMolDSMC(iPolyatMole)%VibDOF,iPart)
+ END IF
+ END IF
+ IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN
+ IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN
+ ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%DistriFunc(1:SpecDSMC(iSpec)%MaxElecQuant))
+ ClonedParticles(pcount(iDelay),iDelay)%DistriFunc(1:SpecDSMC(iSpec)%MaxElecQuant) &
+ = ElecDistriData(1:SpecDSMC(iSpec)%MaxElecQuant,iPart)
+ END IF
+ END IF
+ IF (UseDSMC.AND.DSMC%DoAmbipolarDiff) THEN
+ IF (Species(iSpec)%ChargeIC.GT.0.0) THEN
+ ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%AmbiPolVelo(1:3))
+ ClonedParticles(pcount(iDelay),iDelay)%AmbiPolVelo(1:3) = AD_Data(1:3,iPart)
+ END IF
+ END IF
+ END IF
+ END IF
+ END DO
+ELSE
+ LBWRITE(*,*) 'Read-in of cloned particles complete. No clones detected.'
+END IF
+
+END SUBROUTINE ClonesReadin
+
+
END MODULE MOD_Particle_Readin
diff --git a/src/particles/restart/particle_restart.f90 b/src/particles/restart/particle_restart.f90
index aec9ecfac..291b63b6f 100644
--- a/src/particles/restart/particle_restart.f90
+++ b/src/particles/restart/particle_restart.f90
@@ -45,10 +45,10 @@ SUBROUTINE ParticleRestart()
USE MOD_Particle_Readin
USE MOD_Particle_Restart_Vars
! DSMC
-USE MOD_DSMC_Vars ,ONLY: UseDSMC,CollisMode,PartStateIntEn,DSMC,VibQuantsPar,PolyatomMolDSMC,SpecDSMC,RadialWeighting
+USE MOD_DSMC_Vars ,ONLY: UseDSMC,CollisMode,PartStateIntEn,DSMC,VibQuantsPar,PolyatomMolDSMC,SpecDSMC
USE MOD_DSMC_Vars ,ONLY: ElectronicDistriPart, AmbipolElecVelo
! Localization
-USE MOD_Particle_Localization ,ONLY: LocateParticleInElement
+USE MOD_Particle_Localization ,ONLY: LocateParticleInElement,SinglePointToElement
USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D
USE MOD_Particle_Mesh_Vars ,ONLY: ElemEpsOneCell
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod,NbrOfLostParticles,CountNbrOfLostParts
@@ -61,13 +61,15 @@ SUBROUTINE ParticleRestart()
USE MOD_Mesh_Vars ,ONLY: offsetElem
! Particles
USE MOD_HDF5_Input_Particles ,ONLY: ReadEmissionVariablesFromHDF5
-USE MOD_Part_Operations ,ONLY: RemoveAllElectrons
+USE MOD_Part_Operations ,ONLY: RemoveAllElectrons, RemoveParticle
USE MOD_Part_Tools ,ONLY: UpdateNextFreePosition,StoreLostParticleProperties, MergeCells
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_Particle_Vars ,ONLY: PartInt,PartData,PartState,PartSpecies,PEM,PDM,usevMPF,PartMPF,PartPosRef,SpecReset,Species
USE MOD_Particle_Vars ,ONLY: DoVirtualCellMerge
+USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
! Restart
-USE MOD_Restart_Vars ,ONLY: DoMacroscopicRestart
+USE MOD_Restart_Vars ,ONLY: DoMacroscopicRestart, MacroRestartValues
! HDG
#if USE_HDG
USE MOD_HDG_Vars ,ONLY: UseBRElectronFluid,BRConvertElectronsToFluid,BRConvertFluidToElectrons
@@ -75,7 +77,6 @@ SUBROUTINE ParticleRestart()
#endif /*USE_HDG*/
! MPI
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
USE MOD_Particle_Vars ,ONLY: PartDataSize
#endif /*USE_MPI*/
USE MOD_Particle_Vars ,ONLY: VibQuantData,ElecDistriData,AD_Data
@@ -84,7 +85,7 @@ SUBROUTINE ParticleRestart()
#endif /*USE_LOADBALANCE*/
! Rotational frame of reference
USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, PartVeloRotRef, RotRefFrameOmega
-USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck
+USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck, IncreaseMaxParticleNumber
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -112,14 +113,14 @@ SUBROUTINE ParticleRestart()
INTEGER,ALLOCATABLE :: IndexOfFoundParticles(:),CompleteIndexOfFoundParticles(:)
INTEGER :: CompleteNbrOfLost,CompleteNbrOfFound,CompleteNbrOfDuplicate
REAL, ALLOCATABLE :: RecBuff(:,:)
-INTEGER :: TotalNbrOfMissingParticles(0:PartMPI%nProcs-1), Displace(0:PartMPI%nProcs-1),CurrentPartNum
-INTEGER :: OffsetTotalNbrOfMissingParticles(0:PartMPI%nProcs-1)
-INTEGER :: NbrOfFoundParts, RecCount(0:PartMPI%nProcs-1)
+INTEGER :: TotalNbrOfMissingParticles(0:nProcessors-1), Displace(0:nProcessors-1),CurrentPartNum
+INTEGER :: OffsetTotalNbrOfMissingParticles(0:nProcessors-1)
+INTEGER :: NbrOfFoundParts, RecCount(0:nProcessors-1)
INTEGER, ALLOCATABLE :: SendBuffPoly(:), RecBuffPoly(:)
REAL, ALLOCATABLE :: SendBuffAmbi(:), RecBuffAmbi(:), SendBuffElec(:), RecBuffElec(:)
-INTEGER :: LostPartsPoly(0:PartMPI%nProcs-1), DisplacePoly(0:PartMPI%nProcs-1)
-INTEGER :: LostPartsElec(0:PartMPI%nProcs-1), DisplaceElec(0:PartMPI%nProcs-1)
-INTEGER :: LostPartsAmbi(0:PartMPI%nProcs-1), DisplaceAmbi(0:PartMPI%nProcs-1)
+INTEGER :: LostPartsPoly(0:nProcessors-1), DisplacePoly(0:nProcessors-1)
+INTEGER :: LostPartsElec(0:nProcessors-1), DisplaceElec(0:nProcessors-1)
+INTEGER :: LostPartsAmbi(0:nProcessors-1), DisplaceAmbi(0:nProcessors-1)
INTEGER :: iProc
#endif /*USE_MPI*/
!===================================================================================================================================
@@ -137,6 +138,7 @@ SUBROUTINE ParticleRestart()
LastElemInd = offsetElem+PP_nElems
locnPart = PartInt(ELEM_LastPartInd,LastElemInd)-PartInt(ELEM_FirstPartInd,FirstElemInd)
offsetnPart = PartInt(ELEM_FirstPartInd,FirstElemInd)
+ CALL IncreaseMaxParticleNumber(INT(locnPart))
DO iLoop = 1_IK,locnPart
! Sanity check: SpecID > 0
@@ -279,17 +281,18 @@ SUBROUTINE ParticleRestart()
SDEALLOCATE(MapPartDataToReadin)
PDM%ParticleVecLength = PDM%ParticleVecLength + iPart
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+ DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+ END DO
+#endif
CALL UpdateNextFreePosition()
LBWRITE(UNIT_stdOut,*)' DONE!'
- ! if ParticleVecLength GT maxParticleNumber: Stop
- IF (PDM%ParticleVecLength.GT.PDM%maxParticleNumber) THEN
- SWRITE (UNIT_stdOut,*) "PDM%ParticleVecLength =", PDM%ParticleVecLength
- SWRITE (UNIT_stdOut,*) "PDM%maxParticleNumber =", PDM%maxParticleNumber
- CALL abort(__STAMP__&
- ,' Number of Particles in Restart file is higher than MaxParticleNumber! Increase MaxParticleNumber!')
- END IF ! PDM%ParticleVecLength.GT.PDM%maxParticleNumber
-
! Since the elementside-local node number are NOT persistant and dependent on the location
! of the MPI borders, all particle-element mappings need to be checked after a restart
! Step 1: Identify particles that are not in the element in which they were before the restart
@@ -308,10 +311,15 @@ SUBROUTINE ParticleRestart()
! Particle not in correct element, try to find them within MyProc
IF (.NOT.InElementCheck) THEN
NbrOfMissingParticles = NbrOfMissingParticles + 1
- CALL LocateParticleInElement(iPart,doHALO=.FALSE.)
+ PEM%GlobalElemID(iPart) = SinglePointToElement(PartState(1:3,iPart),doHALO=.FALSE.)
! Particle not found within MyProc
- IF (.NOT.PDM%ParticleInside(iPart)) THEN
+ IF (PEM%GlobalElemID(iPart).GT.0) THEN
+ PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
+ PDM%ParticleInside(iPart)=.TRUE.
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,iPart),PartPosRef(1:3,iPart),PEM%GlobalElemID(iPart))
+ ELSE
+ PDM%ParticleInside(iPart)=.FALSE.
NbrOfLostParticles = NbrOfLostParticles + 1
#if !(USE_MPI)
IF (CountNbrOfLostParts) CALL StoreLostParticleProperties(iPart, PEM%GlobalElemID(iPart), UsePartState_opt=.TRUE.)
@@ -336,8 +344,6 @@ SUBROUTINE ParticleRestart()
CounterAmbi = CounterAmbi + 3
END IF
END IF ! useDSMC
- ELSE
- PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
END IF
END IF
END DO ! iPart = 1,PDM%ParticleVecLength
@@ -356,10 +362,15 @@ SUBROUTINE ParticleRestart()
! Particle not in correct element, try to find them within MyProc
IF (.NOT.InElementCheck) THEN
NbrOfMissingParticles = NbrOfMissingParticles + 1
- CALL LocateParticleInElement(iPart,doHALO=.FALSE.)
+ PEM%GlobalElemID(iPart) = SinglePointToElement(PartState(1:3,iPart),doHALO=.FALSE.)
! Particle not found within MyProc
- IF (.NOT.PDM%ParticleInside(iPart)) THEN
+ IF (PEM%GlobalElemID(iPart).GT.0) THEN
+ PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
+ PDM%ParticleInside(iPart)=.TRUE.
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,iPart),PartPosRef(1:3,iPart),PEM%GlobalElemID(iPart))
+ ELSE
+ PDM%ParticleInside(iPart)=.FALSE.
NbrOfLostParticles = NbrOfLostParticles + 1
#if !(USE_MPI)
IF (CountNbrOfLostParts) CALL StoreLostParticleProperties(iPart, PEM%GlobalElemID(iPart), UsePartState_opt=.TRUE.)
@@ -384,8 +395,6 @@ SUBROUTINE ParticleRestart()
CounterAmbi = CounterAmbi + 3
END IF
END IF ! useDSMC
- ELSE
- PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
END IF ! .NOT.PDM%ParticleInside(iPart)
END IF ! .NOT.InElementCheck
END DO ! iPart = 1,PDM%ParticleVecLength
@@ -404,10 +413,15 @@ SUBROUTINE ParticleRestart()
! Particle not in correct element, try to find them within MyProc
IF (.NOT.InElementCheck) THEN
NbrOfMissingParticles = NbrOfMissingParticles + 1
- CALL LocateParticleInElement(iPart,doHALO=.FALSE.)
+ PEM%GlobalElemID(iPart) = SinglePointToElement(PartState(1:3,iPart),doHALO=.FALSE.)
! Particle not found within MyProc
- IF (.NOT.PDM%ParticleInside(iPart)) THEN
+ IF (PEM%GlobalElemID(iPart).GT.0) THEN
+ PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
+ PDM%ParticleInside(iPart)=.TRUE.
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,iPart),PartPosRef(1:3,iPart),PEM%GlobalElemID(iPart))
+ ELSE
+ PDM%ParticleInside(iPart)=.FALSE.
NbrOfLostParticles = NbrOfLostParticles + 1
#if !(USE_MPI)
IF (CountNbrOfLostParts) CALL StoreLostParticleProperties(iPart, PEM%GlobalElemID(iPart), UsePartState_opt=.TRUE.)
@@ -433,8 +447,6 @@ SUBROUTINE ParticleRestart()
END IF
END IF ! useDSMC
PartPosRef(1:3,iPart) = -888.
- ELSE
- PEM%LastGlobalElemID(iPart) = PEM%GlobalElemID(iPart)
END IF
END IF
END DO ! iPart = 1,PDM%ParticleVecLength
@@ -444,12 +456,12 @@ SUBROUTINE ParticleRestart()
! Step 2: All particles that are not found within MyProc need to be communicated to the others and located there
! Combine number of lost particles of all processes and allocate variables
! Note: Particles that are lost on MyProc are also searched for here again
- CALL MPI_ALLGATHER(NbrOfLostParticles, 1, MPI_INTEGER, TotalNbrOfMissingParticles, 1, MPI_INTEGER, PartMPI%COMM, IERROR)
+ CALL MPI_ALLGATHER(NbrOfLostParticles, 1, MPI_INTEGER, TotalNbrOfMissingParticles, 1, MPI_INTEGER, MPI_COMM_PICLAS, IERROR)
NbrOfLostParticles=0
IF (useDSMC) THEN
- IF (DSMC%NumPolyatomMolecs.GT.0) CALL MPI_ALLGATHER(CounterPoly, 1, MPI_INTEGER, LostPartsPoly, 1, MPI_INTEGER, PartMPI%COMM, IERROR)
- IF (DSMC%ElectronicModel.EQ.2) CALL MPI_ALLGATHER(CounterElec, 1, MPI_INTEGER, LostPartsElec, 1, MPI_INTEGER, PartMPI%COMM, IERROR)
- IF (DSMC%DoAmbipolarDiff) CALL MPI_ALLGATHER(CounterAmbi, 1, MPI_INTEGER, LostPartsAmbi, 1, MPI_INTEGER, PartMPI%COMM, IERROR)
+ IF (DSMC%NumPolyatomMolecs.GT.0) CALL MPI_ALLGATHER(CounterPoly, 1, MPI_INTEGER, LostPartsPoly, 1, MPI_INTEGER, MPI_COMM_PICLAS, IERROR)
+ IF (DSMC%ElectronicModel.EQ.2) CALL MPI_ALLGATHER(CounterElec, 1, MPI_INTEGER, LostPartsElec, 1, MPI_INTEGER, MPI_COMM_PICLAS, IERROR)
+ IF (DSMC%DoAmbipolarDiff) CALL MPI_ALLGATHER(CounterAmbi, 1, MPI_INTEGER, LostPartsAmbi, 1, MPI_INTEGER, MPI_COMM_PICLAS, IERROR)
END IF ! useDSMC
!TotalNbrOfMissingParticlesSum = SUM(INT(TotalNbrOfMissingParticles,8))
@@ -460,9 +472,9 @@ SUBROUTINE ParticleRestart()
! Set offsets
OffsetTotalNbrOfMissingParticles(0) = 0
- DO iProc = 1, PartMPI%nProcs-1
+ DO iProc = 1, nProcessors-1
OffsetTotalNbrOfMissingParticles(iProc) = OffsetTotalNbrOfMissingParticles(iProc-1) + TotalNbrOfMissingParticles(iProc-1)
- END DO ! iProc = 0, PartMPI%nProcs-1
+ END DO ! iProc = 0, nProcessors-1
ALLOCATE(RecBuff(PartDataSize,1:TotalNbrOfMissingParticlesSum))
IF (useDSMC) THEN
@@ -484,7 +496,7 @@ SUBROUTINE ParticleRestart()
END IF ! useDSMC
! Fill SendBuffer
- NbrOfMissingParticles = OffsetTotalNbrOfMissingParticles(PartMPI%MyRank) + 1
+ NbrOfMissingParticles = OffsetTotalNbrOfMissingParticles(myRank) + 1
CounterPoly = 0
CounterAmbi = 0
CounterElec = 0
@@ -550,7 +562,7 @@ SUBROUTINE ParticleRestart()
CounterElec = 0
CounterAmbi = 0
- DO iProc = 0, PartMPI%nProcs-1
+ DO iProc = 0, nProcessors-1
RecCount(iProc) = TotalNbrOfMissingParticles(iProc)
Displace(iProc) = NbrOfMissingParticles
NbrOfMissingParticles = NbrOfMissingParticles + TotalNbrOfMissingParticles(iProc)
@@ -572,7 +584,7 @@ SUBROUTINE ParticleRestart()
CounterAmbi = CounterAmbi + LostPartsAmbi(iProc)
END IF
END IF ! useDSMC
- END DO ! iProc = 0, PartMPI%nProcs-1
+ END DO ! iProc = 0, nProcessors-1
CALL MPI_ALLGATHERV( MPI_IN_PLACE &
, 0 &
@@ -581,19 +593,19 @@ SUBROUTINE ParticleRestart()
, PartDataSize*TotalNbrOfMissingParticles(:) &
, PartDataSize*OffsetTotalNbrOfMissingParticles(:) &
, MPI_DOUBLE_PRECISION &
- , PartMPI%COMM &
+ , MPI_COMM_PICLAS &
, IERROR)
IF (useDSMC) THEN
! Polyatomic
- IF (DSMC%NumPolyatomMolecs.GT.0) CALL MPI_ALLGATHERV(SendBuffPoly, LostPartsPoly(PartMPI%MyRank), MPI_INTEGER, &
- RecBuffPoly, LostPartsPoly, DisplacePoly, MPI_INTEGER, PartMPI%COMM, IERROR)
+ IF (DSMC%NumPolyatomMolecs.GT.0) CALL MPI_ALLGATHERV(SendBuffPoly, LostPartsPoly(myRank), MPI_INTEGER, &
+ RecBuffPoly, LostPartsPoly, DisplacePoly, MPI_INTEGER, MPI_COMM_PICLAS, IERROR)
! Electronic
- IF (DSMC%ElectronicModel.EQ.2) CALL MPI_ALLGATHERV(SendBuffElec, LostPartsElec(PartMPI%MyRank), MPI_INTEGER, &
- RecBuffElec, LostPartsElec, DisplaceElec, MPI_DOUBLE_PRECISION, PartMPI%COMM, IERROR)
+ IF (DSMC%ElectronicModel.EQ.2) CALL MPI_ALLGATHERV(SendBuffElec, LostPartsElec(myRank), MPI_INTEGER, &
+ RecBuffElec, LostPartsElec, DisplaceElec, MPI_DOUBLE_PRECISION, MPI_COMM_PICLAS, IERROR)
! Ambipolar Diffusion
- IF (DSMC%DoAmbipolarDiff) CALL MPI_ALLGATHERV(SendBuffAmbi, LostPartsAmbi(PartMPI%MyRank), MPI_INTEGER, &
- RecBuffAmbi, LostPartsAmbi, DisplaceAmbi, MPI_DOUBLE_PRECISION, PartMPI%COMM, IERROR)
+ IF (DSMC%DoAmbipolarDiff) CALL MPI_ALLGATHERV(SendBuffAmbi, LostPartsAmbi(myRank), MPI_INTEGER, &
+ RecBuffAmbi, LostPartsAmbi, DisplaceAmbi, MPI_DOUBLE_PRECISION, MPI_COMM_PICLAS, IERROR)
END IF
! Keep track which particles are found on the current proc
@@ -622,8 +634,8 @@ SUBROUTINE ParticleRestart()
! Do not search particles twice: Skip my own particles, because these have already been searched for before they are
! sent to all other procs
- ASSOCIATE( myFirst => OffsetTotalNbrOfMissingParticles(PartMPI%MyRank) + 1 ,&
- myLast => OffsetTotalNbrOfMissingParticles(PartMPI%MyRank) + TotalNbrOfMissingParticles(PartMPI%MyRank))
+ ASSOCIATE( myFirst => OffsetTotalNbrOfMissingParticles(myRank) + 1 ,&
+ myLast => OffsetTotalNbrOfMissingParticles(myRank) + TotalNbrOfMissingParticles(myRank))
IF((iPart.GE.myFirst).AND.(iPart.LE.myLast))THEN
IndexOfFoundParticles(iPart) = 0
CYCLE
@@ -631,10 +643,13 @@ SUBROUTINE ParticleRestart()
END ASSOCIATE
PartState( 1:6,CurrentPartNum) = RecBuff(1:6,iPart)
- PDM%ParticleInside(CurrentPartNum) = .true.
- CALL LocateParticleInElement(CurrentPartNum,doHALO=.FALSE.)
- IF (PDM%ParticleInside(CurrentPartNum)) THEN
+ PEM%GlobalElemID(CurrentPartNum) = SinglePointToElement(PartState(1:3,CurrentPartNum),doHALO=.FALSE.)
+
+ IF (PEM%GlobalElemID(CurrentPartNum).GT.0) THEN
+ PEM%LastGlobalElemID(CurrentPartNum) = PEM%GlobalElemID(CurrentPartNum)
+ PDM%ParticleInside(CurrentPartNum)=.TRUE.
+ IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,CurrentPartNum),PartPosRef(1:3,CurrentPartNum),PEM%GlobalElemID(iPart))
IndexOfFoundParticles(iPart) = 1
PEM%LastGlobalElemID(CurrentPartNum) = PEM%GlobalElemID(CurrentPartNum)
@@ -706,6 +721,7 @@ SUBROUTINE ParticleRestart()
CurrentPartNum = CurrentPartNum + 1
ELSE ! Lost
+ PDM%ParticleInside(iPart)=.FALSE.
IndexOfFoundParticles(iPart) = 0
END IF
@@ -718,12 +734,22 @@ SUBROUTINE ParticleRestart()
END DO ! iPart = 1, TotalNbrOfMissingParticlesSum
PDM%ParticleVecLength = PDM%ParticleVecLength + NbrOfFoundParts
+#ifdef CODE_ANALYZE
+ IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL Abort(__STAMP__,'PDM%ParticleVeclength exceeds PDM%maxParticleNumber, Difference:',IntInfoOpt=PDM%ParticleVeclength-PDM%maxParticleNumber)
+ DO iPart=PDM%ParticleVecLength+1,PDM%maxParticleNumber
+ IF (PDM%ParticleInside(iPart)) THEN
+ IPWRITE(*,*) iPart,PDM%ParticleVecLength,PDM%maxParticleNumber
+ CALL Abort(__STAMP__,'Particle outside PDM%ParticleVeclength',IntInfoOpt=iPart)
+ END IF
+ END DO
+#endif
+ ! IF(PDM%ParticleVecLength.GT.PDM%maxParticleNumber) CALL IncreaseMaxParticleNumber(PDM%ParticleVecLength*CEILING(1+0.5*PDM%MaxPartNumIncrease)-PDM%maxParticleNumber)
! Combine number of found particles to make sure none are lost completely or found twice
IF(MPIroot)THEN
- CALL MPI_REDUCE(IndexOfFoundParticles,CompleteIndexOfFoundParticles,TotalNbrOfMissingParticlesSum,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(IndexOfFoundParticles,CompleteIndexOfFoundParticles,TotalNbrOfMissingParticlesSum,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
ELSE
- CALL MPI_REDUCE(IndexOfFoundParticles,0 ,TotalNbrOfMissingParticlesSum,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(IndexOfFoundParticles,0 ,TotalNbrOfMissingParticlesSum,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
END IF
CompleteNbrOfFound = 0
@@ -754,6 +780,7 @@ SUBROUTINE ParticleRestart()
CALL StoreLostParticleProperties(CurrentPartNum, PEM%GlobalElemID(CurrentPartNum), &
UsePartState_opt=.TRUE., PartMissingType_opt=CompleteIndexOfFoundParticles(iPart))
+ CALL RemoveParticle(CurrentPartNum)
END IF ! CountNbrOfLostParts
END DO
@@ -766,7 +793,7 @@ SUBROUTINE ParticleRestart()
DEALLOCATE(CompleteIndexOfFoundParticles)
END IF ! MPIRoot
- CALL MPI_BCAST(NbrOfLostParticlesTotal,1,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+ CALL MPI_BCAST(NbrOfLostParticlesTotal,1,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
NbrOfLostParticlesTotal_old = NbrOfLostParticlesTotal
END IF ! TotalNbrOfMissingParticlesSum.GT.0
@@ -783,9 +810,6 @@ SUBROUTINE ParticleRestart()
#endif /*USE_MPI*/
CALL UpdateNextFreePosition()
-
- ! Read-in the stored cloned particles
- IF (RadialWeighting%PerformCloning) CALL RestartClones()
ELSE ! not PartIntExists
SWRITE(UNIT_stdOut,*)'PartInt does not exists in restart file'
END IF ! PartIntExists
@@ -797,6 +821,9 @@ SUBROUTINE ParticleRestart()
! Read-in the cell-local wall temperature
IF (ANY(PartBound%UseAdaptedWallTemp)) CALL RestartAdaptiveWallTemp()
+! Read-in of adaptive BC sampling values
+IF(UseAdaptiveBC.OR.nPorousBC.GT.0) CALL RestartAdaptiveBCSampling()
+
#if USE_HDG
! Remove electron species when using BR electron fluid model
IF(UseBRElectronFluid.AND.BRConvertElectronsToFluid) CALL RemoveAllElectrons()
@@ -815,193 +842,10 @@ SUBROUTINE ParticleRestart()
IF(BRConvertFluidToElectrons) CALL CreateElectronsFromBRFluid(.TRUE.)
#endif /*USE_HDG*/
-END SUBROUTINE ParticleRestart
-
-
-SUBROUTINE RestartClones()
-!===================================================================================================================================
-! Axisymmetric 2D simulation with particle weighting: Read-in of clone particles saved during output of particle data
-!===================================================================================================================================
-! MODULES
-USE MOD_Globals
-USE MOD_HDF5_input
-USE MOD_io_hdf5
-USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems
-USE MOD_DSMC_Vars ,ONLY: useDSMC, CollisMode, DSMC, PolyatomMolDSMC, SpecDSMC
-USE MOD_DSMC_Vars ,ONLY: RadialWeighting, ClonedParticles
-USE MOD_Particle_Vars ,ONLY: nSpecies, usevMPF, Species
-#if USE_LOADBALANCE
-USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
-#endif /*USE_LOADBALANCE*/
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! OUTPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-INTEGER :: nDimsClone, CloneDataSize, ClonePartNum, iPart, iDelay, maxDelay, iElem, tempDelay
-INTEGER(HSIZE_T), POINTER :: SizeClone(:)
-REAL,ALLOCATABLE :: CloneData(:,:)
-INTEGER :: iPolyatmole, MaxQuantNum, iSpec, compareDelay, MaxElecQuant
-INTEGER,ALLOCATABLE :: pcount(:), VibQuantData(:,:)
-REAL, ALLOCATABLE :: ElecDistriData(:,:), AD_Data(:,:)
-LOGICAL :: CloneExists
-!===================================================================================================================================
-
-CALL DatasetExists(File_ID,'CloneData',CloneExists)
-IF(.NOT.CloneExists) THEN
- LBWRITE(*,*) 'No clone data found! Restart without cloning.'
- IF(RadialWeighting%CloneMode.EQ.1) THEN
- RadialWeighting%CloneDelayDiff = 1
- ELSEIF (RadialWeighting%CloneMode.EQ.2) THEN
- RadialWeighting%CloneDelayDiff = 0
- END IF ! RadialWeighting%CloneMode.EQ.1
- RETURN
-END IF ! CloneExists
-
-CALL GetDataSize(File_ID,'CloneData',nDimsClone,SizeClone)
-
-CloneDataSize = INT(SizeClone(1),4)
-ClonePartNum = INT(SizeClone(2),4)
-DEALLOCATE(SizeClone)
-
-IF(ClonePartNum.GT.0) THEN
- ALLOCATE(CloneData(1:CloneDataSize,1:ClonePartNum))
- ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK) ,&
- CloneDataSize => INT(CloneDataSize,IK) )
- CALL ReadArray('CloneData',2,(/CloneDataSize,ClonePartNum/),0_IK,2,RealArray=CloneData)
- END ASSOCIATE
- LBWRITE(*,*) 'Read-in of cloned particles complete. Total clone number: ', ClonePartNum
- ! Determing the old clone delay
- maxDelay = INT(MAXVAL(CloneData(9,:)))
- IF(RadialWeighting%CloneMode.EQ.1) THEN
- ! Array is allocated from 0 to maxDelay
- compareDelay = maxDelay + 1
- ELSE
- compareDelay = maxDelay
- END IF
- IF(compareDelay.GT.RadialWeighting%CloneInputDelay) THEN
- LBWRITE(*,*) 'Old clone delay is greater than the new delay. Old delay:', compareDelay
- RadialWeighting%CloneDelayDiff = RadialWeighting%CloneInputDelay + 1
- ELSEIF(compareDelay.EQ.RadialWeighting%CloneInputDelay) THEN
- LBWRITE(*,*) 'The clone delay has not been changed.'
- RadialWeighting%CloneDelayDiff = RadialWeighting%CloneInputDelay + 1
- ELSE
- LBWRITE(*,*) 'New clone delay is greater than the old delay. Old delay:', compareDelay
- RadialWeighting%CloneDelayDiff = compareDelay + 1
- END IF
- IF(RadialWeighting%CloneMode.EQ.1) THEN
- tempDelay = RadialWeighting%CloneInputDelay - 1
- ELSE
- tempDelay = RadialWeighting%CloneInputDelay
- END IF
- ALLOCATE(pcount(0:tempDelay))
- pcount(0:tempDelay) = 0
- ! Polyatomic clones: determining the size of the VibQuant array
- IF (UseDSMC.AND.(DSMC%NumPolyatomMolecs.GT.0)) THEN
- MaxQuantNum = 0
- DO iSpec = 1, nSpecies
- IF(SpecDSMC(iSpec)%PolyatomicMol) THEN
- iPolyatMole = SpecDSMC(iSpec)%SpecToPolyArray
- IF (PolyatomMolDSMC(iPolyatMole)%VibDOF.GT.MaxQuantNum) MaxQuantNum = PolyatomMolDSMC(iPolyatMole)%VibDOF
- END IF
- END DO
- ALLOCATE(VibQuantData(1:MaxQuantNum,1:ClonePartNum))
- ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK),MaxQuantNum => INT(MaxQuantNum,IK))
- CALL ReadArray('CloneVibQuantData',2,(/MaxQuantNum,ClonePartNum/),0_IK,2,IntegerArray_i4=VibQuantData)
- END ASSOCIATE
- END IF
- IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN
- MaxElecQuant = 0
- DO iSpec = 1, nSpecies
- IF (.NOT.((SpecDSMC(iSpec)%InterID.EQ.4).OR.SpecDSMC(iSpec)%FullyIonized)) THEN
- IF (SpecDSMC(iSpec)%MaxElecQuant.GT.MaxElecQuant) MaxElecQuant = SpecDSMC(iSpec)%MaxElecQuant
- END IF
- END DO
- ALLOCATE(ElecDistriData(1:MaxElecQuant,1:ClonePartNum))
- ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK),MaxElecQuant => INT(MaxElecQuant,IK))
- CALL ReadArray('CloneElecDistriData',2,(/MaxElecQuant,ClonePartNum/),0_IK,2,RealArray=ElecDistriData)
- END ASSOCIATE
- END IF
- IF (UseDSMC.AND.DSMC%DoAmbipolarDiff) THEN
- ALLOCATE(AD_Data(1:3,1:ClonePartNum))
- ASSOCIATE(ClonePartNum => INT(ClonePartNum,IK))
- CALL ReadArray('CloneADVeloData',2,(/INT(3,IK),ClonePartNum/),0_IK,2,RealArray=AD_Data)
- END ASSOCIATE
- END IF
- ! Copying particles into ClonedParticles array
- DO iPart = 1, ClonePartNum
- iDelay = INT(CloneData(9,iPart))
- iElem = INT(CloneData(8,iPart)) - offsetElem
- IF((iElem.LE.nElems).AND.(iElem.GT.0)) THEN
- IF(iDelay.LE.tempDelay) THEN
- pcount(iDelay) = pcount(iDelay) + 1
- RadialWeighting%ClonePartNum(iDelay) = pcount(iDelay)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(1) = CloneData(1,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(2) = CloneData(2,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(3) = CloneData(3,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(4) = CloneData(4,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(5) = CloneData(5,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartState(6) = CloneData(6,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%Species = INT(CloneData(7,iPart))
- ClonedParticles(pcount(iDelay),iDelay)%Element = INT(CloneData(8,iPart))
- ClonedParticles(pcount(iDelay),iDelay)%lastPartPos(1:3) = CloneData(1:3,iPart)
- IF (UseDSMC) THEN
- IF ((CollisMode.GT.1).AND.(usevMPF) .AND. (DSMC%ElectronicModel.GT.0) ) THEN
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(1) = CloneData(10,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(2) = CloneData(11,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(3) = CloneData(12,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%WeightingFactor = CloneData(13,iPart)
- ELSE IF ( (CollisMode .GT. 1) .AND. (usevMPF) ) THEN
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(1) = CloneData(10,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(2) = CloneData(11,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%WeightingFactor = CloneData(12,iPart)
- ELSE IF ( (CollisMode .GT. 1) .AND. (DSMC%ElectronicModel.GT.0) ) THEN
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(1) = CloneData(10,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(2) = CloneData(11,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(3) = CloneData(12,iPart)
- ELSE IF (CollisMode.GT.1) THEN
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(1) = CloneData(10,iPart)
- ClonedParticles(pcount(iDelay),iDelay)%PartStateIntEn(2) = CloneData(11,iPart)
- ELSE IF (usevMPF) THEN
- ClonedParticles(pcount(iDelay),iDelay)%WeightingFactor = CloneData(10,iPart)
- END IF
- ELSE IF (usevMPF) THEN
- ClonedParticles(pcount(iDelay),iDelay)%WeightingFactor = CloneData(10,iPart)
- END IF
- IF (UseDSMC.AND.(DSMC%NumPolyatomMolecs.GT.0)) THEN
- IF (SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%PolyatomicMol) THEN
- iPolyatMole = SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%SpecToPolyArray
- ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%VibQuants(1:PolyatomMolDSMC(iPolyatMole)%VibDOF))
- ClonedParticles(pcount(iDelay),iDelay)%VibQuants(1:PolyatomMolDSMC(iPolyatMole)%VibDOF) &
- = VibQuantData(1:PolyatomMolDSMC(iPolyatMole)%VibDOF,iPart)
- END IF
- END IF
- IF (UseDSMC.AND.(DSMC%ElectronicModel.EQ.2)) THEN
- IF (.NOT.((SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%InterID.EQ.4) &
- .OR.SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%FullyIonized)) THEN
- ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%DistriFunc( &
- 1:SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%MaxElecQuant))
- ClonedParticles(pcount(iDelay),iDelay)%DistriFunc(1:SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%MaxElecQuant) &
- = ElecDistriData(1:SpecDSMC(ClonedParticles(pcount(iDelay),iDelay)%Species)%MaxElecQuant,iPart)
- END IF
- END IF
- IF (UseDSMC.AND.DSMC%DoAmbipolarDiff) THEN
- IF (Species(ClonedParticles(pcount(iDelay),iDelay)%Species)%ChargeIC.GT.0.0) THEN
- ALLOCATE(ClonedParticles(pcount(iDelay),iDelay)%AmbiPolVelo(1:3))
- ClonedParticles(pcount(iDelay),iDelay)%AmbiPolVelo(1:3) = AD_Data(1:3,iPart)
- END IF
- END IF
- END IF
- END IF
- END DO
-ELSE
- LBWRITE(*,*) 'Read-in of cloned particles complete. No clones detected.'
-END IF
+! Deallocate the read-in macroscopic values (might have been utilized in RestartAdaptiveBCSampling)
+SDEALLOCATE(MacroRestartValues)
-END SUBROUTINE RestartClones
+END SUBROUTINE ParticleRestart
SUBROUTINE RestartAdaptiveWallTemp()
@@ -1012,7 +856,8 @@ SUBROUTINE RestartAdaptiveWallTemp()
USE MOD_Globals
USE MOD_HDF5_input
USE MOD_io_hdf5
-USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, nSurfTotalSides
+USE MOD_Restart_Vars ,ONLY: RestartFile
+USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample, nGlobalSurfSides
USE MOD_Particle_Boundary_Vars ,ONLY: BoundaryWallTemp, GlobalSide2SurfSide
#if USE_MPI
USE MOD_MPI_Shared
@@ -1033,53 +878,57 @@ SUBROUTINE RestartAdaptiveWallTemp()
LOGICAL :: AdaptiveWallTempExists
!===================================================================================================================================
-CALL DatasetExists(File_ID,'AdaptiveBoundaryWallTemp',AdaptiveWallTempExists)
-IF (.NOT.AdaptiveWallTempExists) THEN
- SWRITE(*,*) 'No side-local temperature found. The wall temperature will be adapted during the next macroscopic output.'
- RETURN
-END IF
+! Leave routine if no surface sides have been defined in the domain
+IF (nGlobalSurfSides.EQ.0) RETURN
-CALL DatasetExists(File_ID,'AdaptiveBoundaryGlobalSideIndx',AdaptiveWallTempExists)
-IF (.NOT.AdaptiveWallTempExists) THEN
- CALL Abort(__STAMP__,&
- 'ERROR during Restart: AdaptiveBoundaryWallTemp was found in the restart file but not the GlobalSideIndx array!')
+#if USE_MPI
+! Only the surface leaders open the file
+IF (MPI_COMM_LEADERS_SURF.NE.MPI_COMM_NULL) THEN
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_LEADERS_SURF)
END IF
+#else
+CALL OpenDataFile(RestartFile,create=.FALSE.,single=.TRUE.,readOnly=.TRUE.)
+#endif
-IF (nSurfTotalSides.EQ.0) RETURN
-
-ALLOCATE(tmpGlobalSideInx(nSurfTotalSides), &
- tmpWallTemp(nSurfSample,nSurfSample,nSurfTotalSides))
! Associate construct for integer KIND=8 possibility
#if USE_MPI
-! Return if not a sampling leader
+! Only the surface leaders read the array
IF (MPI_COMM_LEADERS_SURF.NE.MPI_COMM_NULL) THEN
#endif
- ASSOCIATE (&
- nSurfSample => INT(nSurfSample,IK) , &
- nGlobalSides => INT(nSurfTotalSides,IK))
+ CALL DatasetExists(File_ID,'AdaptiveBoundaryWallTemp',AdaptiveWallTempExists)
+ IF (.NOT.AdaptiveWallTempExists) THEN
+ SWRITE(*,*) 'No side-local temperature found. The wall temperature will be adapted during the next macroscopic output.'
+ RETURN
+ END IF
+
+ CALL DatasetExists(File_ID,'AdaptiveBoundaryGlobalSideIndx',AdaptiveWallTempExists)
+ IF (.NOT.AdaptiveWallTempExists) THEN
+ CALL Abort(__STAMP__,&
+ 'ERROR during Restart: AdaptiveBoundaryWallTemp was found in the restart file but not the GlobalSideIndx array!')
+ END IF
+
+ ALLOCATE(tmpGlobalSideInx(nGlobalSurfSides),tmpWallTemp(nSurfSample,nSurfSample,nGlobalSurfSides))
+
+ ASSOCIATE (nSurfSample => INT(nSurfSample,IK), &
+ nGlobalSides => INT(nGlobalSurfSides,IK))
CALL ReadArray('AdaptiveBoundaryGlobalSideIndx',1,(/nGlobalSides/),0_IK,1,IntegerArray_i4=tmpGlobalSideInx)
CALL ReadArray('AdaptiveBoundaryWallTemp',3,(/nSurfSample, nSurfSample, nGlobalSides/),0_IK,1,RealArray=tmpWallTemp)
END ASSOCIATE
-
- DO iSide = 1, nSurfTotalSides
+ ! Mapping of the temperature on the global side to the node-local surf side
+ DO iSide = 1, nGlobalSurfSides
tmpSide = tmpGlobalSideInx(iSide)
IF (GlobalSide2SurfSide(SURF_SIDEID,tmpSide).EQ.-1) CYCLE
iSurfSide = GlobalSide2SurfSide(SURF_SIDEID,tmpSide)
BoundaryWallTemp(:,:,iSurfSide) = tmpWallTemp(:,:,iSide)
END DO
#if USE_MPI
-ELSE
- ASSOCIATE (&
- nSurfSample => INT(0,IK) , &
- nGlobalSides => INT(0,IK))
- CALL ReadArray('AdaptiveBoundaryGlobalSideIndx',1,(/nGlobalSides/),0_IK,1,IntegerArray_i4=tmpGlobalSideInx)
- CALL ReadArray('AdaptiveBoundaryWallTemp',3,(/nSurfSample, nSurfSample, nGlobalSides/),0_IK,1,RealArray=tmpWallTemp)
- END ASSOCIATE
END IF
-
+! Distribute the temperature distribution onto the shared array
CALL BARRIER_AND_SYNC(BoundaryWallTemp_Shared_Win,MPI_COMM_SHARED)
#endif
+CALL CloseDataFile()
+
END SUBROUTINE RestartAdaptiveWallTemp
@@ -1112,7 +961,7 @@ SUBROUTINE MacroscopicRestart()
SWRITE(UNIT_stdOut,*) 'Using macroscopic values from file: ',TRIM(MacroRestartFileName)
-CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(MacroRestartFileName,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Check if the provided file is a DSMC state file.
CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type)
@@ -1137,6 +986,8 @@ SUBROUTINE MacroscopicRestart()
CALL ReadArray('ElemData',2,(/nVar_HDF5,nElems/),offsetElem,2,RealArray=ElemData_HDF5(:,:))
END ASSOCIATE
+CALL CloseDataFile()
+
iVar = 1
DO iSpec = 1, nSpecies
DO iElem = 1, nElems
@@ -1145,14 +996,271 @@ SUBROUTINE MacroscopicRestart()
iVar = iVar + DSMC_NVARS
END DO
+! Insert simulation particles based on the macroscopic values
CALL MacroRestart_InsertParticles()
-DEALLOCATE(MacroRestartValues)
DEALLOCATE(ElemData_HDF5)
END SUBROUTINE MacroscopicRestart
+SUBROUTINE RestartAdaptiveBCSampling()
+!===================================================================================================================================
+!> 1) If a restart is performed,
+!> 1a) Check if AdaptiveInfo exists in state, read it in and write to AdaptBCMacroValues
+!> 1b) If TruncateRunningAverage: read-in of AdaptiveRunningAverage to continue the sample
+!> 1c) SurfaceFlux, Type=4: read-in of AdaptBCPartNumOut to avoid mass flux jumps
+!> 2) Adaptive Type = 4: Read-in of the number of particles leaving the domain through the BC (required for the calculation of the massflow)
+!> 3) Fall-back: Initialize the macroscopic values from the macroscopic values or surface flux parameter input values (if no values have been read-in)
+!> 4) Approximation of particles leaving the domain, assuming zero bulk velocity, using the macrorestart values or init sampling
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_IO_HDF5
+USE MOD_HDF5_INPUT ,ONLY: ReadArray, ReadAttribute, DatasetExists, GetDataSize
+USE MOD_Particle_Sampling_Adapt ,ONLY: AdaptiveBCSampling
+USE MOD_Particle_Sampling_Vars
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi
+USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep, RKdtFrac
+USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems, SideToElem
+USE MOD_Particle_Vars ,ONLY: Species, nSpecies, VarTimeStep
+USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData
+USE MOD_Restart_Vars ,ONLY: RestartFile, DoMacroscopicRestart, MacroRestartValues, MacroRestartFileName
+USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
+USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+LOGICAL :: AdaptiveDataExists, RunningAverageExists, UseAdaptiveType4, AdaptBCPartNumOutExists
+REAL :: TimeStepOverWeight, v_thermal, dtVar, WeightingFactor(1:nSpecies)
+REAL,ALLOCATABLE :: ElemData_HDF5(:,:), ElemData2_HDF5(:,:,:,:)
+INTEGER :: iElem, iSpec, iSF, iSide, ElemID, SampleElemID, nVar, GlobalElemID, currentBC
+INTEGER :: jSample, iSample, BCSideID, nElemReadin, nVarTotal, iVar, nVarArrayStart, nVarArrayEnd
+INTEGER :: SampIterEnd, nSurfacefluxBCs
+INTEGER,ALLOCATABLE :: GlobalElemIndex(:)
+!===================================================================================================================================
+
+AdaptiveDataExists = .FALSE.
+RunningAverageExists = .FALSE.
+UseAdaptiveType4 = .FALSE.
+AdaptBCPartNumOutExists = .FALSE.
+
+DO iSpec=1,nSpecies
+ DO iSF=1,Species(iSpec)%nSurfacefluxBCs
+ IF(Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) UseAdaptiveType4 = .TRUE.
+ END DO
+END DO
+
+! 1) Check if AdaptiveInfo exists in state, read it in and write to AdaptBCMacroValues
+CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
+! read local ParticleInfo from HDF5
+CALL DatasetExists(File_ID,'AdaptiveInfo',AdaptiveDataExists)
+IF(AdaptiveDataExists)THEN
+ CALL GetDataSize(File_ID,'AdaptiveInfo',nDims,HSize)
+ nVarTotal=INT(HSize(1),4)
+ DEALLOCATE(HSize)
+ ALLOCATE(ElemData_HDF5(1:nVarTotal,1:nElems))
+ ! Associate construct for integer KIND=8 possibility
+ ASSOCIATE (&
+ offsetElem => INT(offsetElem,IK),&
+ nElems => INT(nElems,IK) ,&
+ nVarTotal => INT(nVarTotal,IK) )
+ CALL ReadArray('AdaptiveInfo',2,(/nVarTotal, nElems/),offsetElem,2,RealArray=ElemData_HDF5(:,:))
+ END ASSOCIATE
+ nVar = 7
+ iVar = 1
+ DO iSpec = 1,nSpecies
+ DO SampleElemID = 1,AdaptBCSampleElemNum
+ ElemID = AdaptBCMapSampleToElem(SampleElemID)
+ AdaptBCMacroVal(1:7,SampleElemID,iSpec) = ElemData_HDF5(iVar:iVar-1+nVar,ElemID)
+ END DO
+ iVar = iVar + nVar
+ END DO
+ SDEALLOCATE(ElemData_HDF5)
+ LBWRITE(*,*) '| Macroscopic values successfully read-in from restart file.'
+END IF
+! Read-in the running average values from the state file
+IF(AdaptBCTruncAverage) THEN
+ ! Avoid deleting the sampling iteration after a restart during a later load balacing step
+ IF(.NOT.PerformLoadBalance) AdaptBCSampIterReadIn = 0
+ CALL DatasetExists(File_ID,'AdaptiveRunningAverage',RunningAverageExists)
+ IF(RunningAverageExists)THEN
+ ! Read-in the number of sampling iterations from the restart file (might differ from the current number)
+ IF(.NOT.PerformLoadBalance) CALL ReadAttribute(File_ID,'AdaptBCSampIter',1,IntScalar=AdaptBCSampIterReadIn)
+ ! Get the data size of the read-in array
+ CALL GetDataSize(File_ID,'AdaptiveRunningAverage',nDims,HSize)
+ nVar=INT(HSize(2),4)
+ nElemReadin = INT(HSize(3),4)
+ DEALLOCATE(HSize)
+ ! Skip the read-in if the array size does not correspond to the current adaptive BC configuration (e.g. a new adaptive BC was added)
+ IF(AdaptBCSampleElemNumGlobal.NE.nElemReadin) THEN
+ CALL abort(__STAMP__,&
+ 'TruncateRunningAverage: Number of read-in elements does not correspond to current number of sample elements!')
+ END IF
+ ! Treatment of different number of iterations between read-in and parameter input
+ IF(AdaptBCSampIter.EQ.nVar) THEN
+ nVarArrayStart = 1
+ nVarArrayEnd = nVar
+ SampIterEnd = AdaptBCSampIter
+ IF(AdaptBCSampIterReadIn.LT.nVar.AND..NOT.PerformLoadBalance) THEN
+ LBWRITE(*,*) '| TruncateRunningAverage: Array not filled in previous simulation run. Continuing at: ', AdaptBCSampIterReadIn + 1
+ END IF
+ ELSE IF(AdaptBCSampIter.GT.nVar) THEN
+ nVarArrayStart = 1
+ nVarArrayEnd = nVar
+ SampIterEnd = nVar
+ LBWRITE(*,*) '| TruncateRunningAverage: Smaller number of sampling iterations in restart file. Continuing at: ', AdaptBCSampIterReadIn + 1
+ ELSE
+ nVarArrayStart = nVar - AdaptBCSampIter + 1
+ nVarArrayEnd = nVar
+ SampIterEnd = AdaptBCSampIter
+ AdaptBCSampIterReadIn = AdaptBCSampIter
+ LBWRITE(*,*) '| TruncateRunningAverage: Greater number of sampling iterations in restart file. Using the last ', AdaptBCSampIterReadIn, ' sample iterations.'
+ END IF
+ ALLOCATE(ElemData2_HDF5(1:8,1:nVar,1:nElemReadin,1:nSpecies))
+ ALLOCATE(GlobalElemIndex(1:nElemReadin))
+ ! Associate construct for integer KIND=8 possibility
+ ASSOCIATE (&
+ nSpecies => INT(nSpecies,IK) ,&
+ nElemReadin => INT(nElemReadin,IK) ,&
+ nVar => INT(nVar,IK) )
+ CALL ReadArray('AdaptiveRunningAverage',4,(/8_IK, nVar, nElemReadin, nSpecies/),0_IK,3,RealArray=ElemData2_HDF5(:,:,:,:))
+ CALL ReadArray('AdaptiveRunningAverageIndex',1,(/nElemReadin/),0_IK,1,IntegerArray_i4=GlobalElemIndex(:))
+ END ASSOCIATE
+ ! Map the read-in values to the sampling array (GlobalElemID -> LocalElemID -> SampleElemID)
+ IF(AdaptBCSampleElemNum.GT.0) THEN
+ DO iElem = 1,nElemReadin
+ GlobalElemID = GlobalElemIndex(iElem)
+ ! Skip elements outside my local region
+ IF((GlobalElemID.LT.1+offsetElem).OR.(GlobalElemID.GT.nElems+offsetElem)) CYCLE
+ ! Get the sample element ID
+ SampleElemID = AdaptBCMapElemToSample(GlobalElemID-offsetElem)
+ IF(SampleElemID.GT.0) AdaptBCAverage(1:8,1:SampIterEnd,SampleElemID,1:nSpecies) = ElemData2_HDF5(1:8,nVarArrayStart:nVarArrayEnd,iElem,1:nSpecies)
+ END DO
+ ! Scaling of the weighted particle number in case of a macroscopic restart with a particle weighting change
+ IF(DoMacroscopicRestart.AND..NOT.PerformLoadBalance) THEN
+ CALL ReadAttribute(File_ID,'AdaptBCWeightingFactor',nSpecies,RealArray=WeightingFactor)
+ DO iSpec = 1, nSpecies
+ IF(WeightingFactor(iSpec).NE.Species(iSpec)%MacroParticleFactor) THEN
+ AdaptBCAverage(7:8,1:SampIterEnd,:,iSpec) = AdaptBCAverage(7:8,1:SampIterEnd,:,iSpec) * WeightingFactor(iSpec) &
+ / Species(iSpec)%MacroParticleFactor
+ END IF
+ END DO
+ LBWRITE(*,*) '| TruncateRunningAverage: Sample successfully initiliazed from restart file and scaled due to MacroscopicRestart.'
+ ELSE
+ LBWRITE(*,*) '| TruncateRunningAverage: Sample successfully initiliazed from restart file.'
+ END IF
+ END IF
+ IF(.NOT.AdaptiveDataExists) THEN
+ ! Calculate the macro values initially from the sample for the first iteration
+ CALL AdaptiveBCSampling(initTruncAverage_opt=.TRUE.)
+ ! Avoid overwriting it with the intial sampling from the current particle state
+ AdaptiveDataExists = .TRUE.
+ LBWRITE(*,*) '| TruncateRunningAverage: AdaptiveInfo not found in state file. Macroscopic values calculated from sample.'
+ END IF
+ SDEALLOCATE(ElemData2_HDF5)
+ SDEALLOCATE(GlobalElemIndex)
+ ELSE
+ LBWRITE(*,*) '| TruncateRunningAverage: No running average values found. Values initiliazed with zeros.'
+ END IF
+END IF
+CALL CloseDataFile()
+
+! 2) Adaptive Type = 4: Read-in of the number of particles leaving the domain through the BC (required for the calculation of the massflow)
+IF(UseAdaptiveType4) THEN
+ IF(PerformLoadBalance) THEN
+ ! Array is not deallocated during loadbalance
+ AdaptBCPartNumOutExists = .TRUE.
+ ELSE IF(DoMacroscopicRestart) THEN
+ ! Reset of the number due to a potentially new weighting factor
+ AdaptBCPartNumOutExists = .FALSE.
+ ELSE
+ ! Read-in array during restart only with the root as it is distributed onto all procs later
+ IF(MPIRoot)THEN
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.TRUE.,readOnly=.TRUE.)
+ CALL DatasetExists(File_ID,'AdaptBCPartNumOut',AdaptBCPartNumOutExists)
+ IF(AdaptBCPartNumOutExists) THEN
+ ! Associate construct for integer KIND=8 possibility
+ ASSOCIATE (&
+ nSpecies => INT(nSpecies,IK) ,&
+ nSurfFluxBCs => INT(nSurfacefluxBCs,IK) )
+ CALL ReadArray('AdaptBCPartNumOut',2,(/nSpecies,nSurfFluxBCs/),0_IK,1,IntegerArray_i4=AdaptBCPartNumOut(:,:))
+ END ASSOCIATE
+ LBWRITE(*,*) '| Surface Flux, Type=4: Number of particles leaving the domain successfully read-in from restart file.'
+ END IF
+ CALL CloseDataFile()
+ END IF
+#if USE_MPI
+ CALL MPI_BCAST(AdaptBCPartNumOutExists,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,IERROR)
+#endif /*USE_MPI*/
+ END IF
+END IF
+
+! 3) Fall-back: Initialize the macroscopic values from the macroscopic values or surface flux parameter input values (if no values have been read-in)
+IF(.NOT.AdaptiveDataExists) THEN
+ IF (DoMacroscopicRestart) THEN
+ DO SampleElemID = 1,AdaptBCSampleElemNum
+ ElemID = AdaptBCMapSampleToElem(SampleElemID)
+ AdaptBCMacroVal(DSMC_VELOX,SampleElemID,1:nSpecies) = MacroRestartValues(ElemID,1:nSpecies,DSMC_VELOX)
+ AdaptBCMacroVal(DSMC_VELOY,SampleElemID,1:nSpecies) = MacroRestartValues(ElemID,1:nSpecies,DSMC_VELOY)
+ AdaptBCMacroVal(DSMC_VELOZ,SampleElemID,1:nSpecies) = MacroRestartValues(ElemID,1:nSpecies,DSMC_VELOZ)
+ AdaptBCMacroVal(4,SampleElemID,1:nSpecies) = MacroRestartValues(ElemID,1:nSpecies,DSMC_NUMDENS)
+ END DO
+ LBWRITE(*,*) '| Marcroscopic values have been initialized from: ', TRIM(MacroRestartFileName)
+ IF(nPorousBC.GT.0) THEN
+ CALL abort(__STAMP__,&
+ 'Macroscopic restart with porous BC and without state file including adaptive BC info not implemented!')
+ END IF
+ ELSE
+ IF(.NOT.PerformLoadBalance) THEN
+ CALL AdaptiveBCSampling(initSampling_opt=.TRUE.)
+ LBWRITE(*,*) '| Sampling of inserted particles has been performed for an initial distribution.'
+ END IF
+ END IF
+END IF
+
+! 4) Adaptive Type = 4: Approximation of particles leaving the domain, using the values from AdaptBCMacroVal for velocity and number density
+IF(UseAdaptiveType4.AND..NOT.AdaptBCPartNumOutExists) THEN
+ DO iSpec=1,nSpecies
+ ! Species-specific time step
+ IF(VarTimeStep%UseSpeciesSpecific) THEN
+ dtVar = ManualTimeStep * RKdtFrac * Species(iSpec)%TimeStepFactor
+ ELSE
+ dtVar = ManualTimeStep * RKdtFrac
+ END IF
+ DO iSF=1,Species(iSpec)%nSurfacefluxBCs
+ currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
+ ! Skip processors without a surface flux
+ IF (BCdata_auxSF(currentBC)%SideNumber.EQ.0) CYCLE
+ ! Skip other regular surface flux and other types
+ IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) CYCLE
+ ! Calculate the velocity for the particles leaving the domain with the thermal velocity assuming a zero bulk velocity
+ v_thermal = SQRT(2.*BoltzmannConst*Species(iSpec)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) / (2.0*SQRT(PI))
+ TimeStepOverWeight = dtVar / Species(iSpec)%MacroParticleFactor
+ ! Loop over sides on the surface flux
+ DO iSide=1,BCdata_auxSF(currentBC)%SideNumber
+ BCSideID=BCdata_auxSF(currentBC)%SideList(iSide)
+ ElemID = SideToElem(S2E_ELEM_ID,BCSideID)
+ SampleElemID = AdaptBCMapElemToSample(ElemID)
+ IF(SampleElemID.GT.0) THEN
+ DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1)
+ AdaptBCPartNumOut(iSpec,iSF) = AdaptBCPartNumOut(iSpec,iSF) + INT(AdaptBCMacroVal(4,SampleElemID,iSpec) &
+ * TimeStepOverWeight * SurfMeshSubSideData(iSample,jSample,BCSideID)%area * v_thermal)
+ END DO; END DO
+ END IF ! SampleElemID.GT.0
+ END DO ! iSide=1,BCdata_auxSF(currentBC)%SideNumber
+ END DO ! iSF=1,Species(iSpec)%nSurfacefluxBCs
+ END DO ! iSpec=1,nSpecies
+END IF
+
+END SUBROUTINE RestartAdaptiveBCSampling
+
+
SUBROUTINE FinalizeParticleRestart()
!===================================================================================================================================
! Finalizes variables necessary for analyse subroutines
diff --git a/src/particles/sampling/particle_sampling_adaptive.f90 b/src/particles/sampling/particle_sampling_adaptive.f90
index 157ebc19d..8cb720198 100644
--- a/src/particles/sampling/particle_sampling_adaptive.f90
+++ b/src/particles/sampling/particle_sampling_adaptive.f90
@@ -56,34 +56,25 @@ SUBROUTINE InitAdaptiveBCSampling()
!> 2) Allocate the sampling arrays and create mapping from SampleElemID to ElemID
!> 2a) Initializing the array with the given velocity vector and magnitude
!> 3) Read-in of the additional variables for sampling and and array allocation
-!> 4) If a restart is performed,
-!> 4a) Check if adaptiveinfo exists in state, read it in and write to AdaptBCMacroValues
-!> 4b) If TruncateRunningAverage: read-in of AdaptiveRunningAverage to continue the sample
-!> 4c) SurfaceFlux, Type=4: read-in of AdaptBCPartNumOut to avoid mass flux jumps
-!> 5) Initialize the macroscopic values from either the macroscopic restart or the surface flux (if no values have been read-in)
-!> 6) Sampling of near adaptive boundary element values in the first time step to get initial distribution
-!> 7) Approximation of particles leaving the domain, assuming zero bulk velocity, using the macrorestart values or init sampling
+!> 4) Sampling of near adaptive boundary element values in the first time step to get initial distribution
!===================================================================================================================================
! MODULES
USE MOD_Globals
-USE MOD_IO_HDF5
USE MOD_ReadInTools
USE MOD_Particle_Sampling_Vars
-USE MOD_Globals_Vars ,ONLY: BoltzmannConst, Pi
-USE MOD_TimeDisc_Vars ,ONLY: ManualTimeStep, RKdtFrac
USE MOD_HDF5_INPUT ,ONLY: ReadArray, ReadAttribute, DatasetExists, GetDataSize
USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems, SideToElem
-USE MOD_Particle_Vars ,ONLY: Species, nSpecies, UseCircularInflow, VarTimeStep
+USE MOD_Particle_Vars ,ONLY: Species, nSpecies, UseCircularInflow
USE MOD_Particle_Surfaces_Vars ,ONLY: BCdata_auxSF, SurfFluxSideSize, SurfMeshSubSideData
-USE MOD_Restart_Vars ,ONLY: DoRestart,RestartFile, DoMacroscopicRestart, MacroRestartValues, MacroRestartFileName
+USE MOD_Restart_Vars ,ONLY: DoRestart
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_Particle_Boundary_Vars ,ONLY: nPorousSides, PorousBCInfo_Shared, SurfSide2GlobalSide
USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared, ElemVolume_Shared
-USE MOD_LoadBalance_Vars ,ONLY: DoLoadBalance, PerformLoadBalance, UseH5IOLoadBalance
+USE MOD_LoadBalance_Vars ,ONLY: DoLoadBalance, PerformLoadBalance
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
+#if USE_LOADBALANCE
+USE MOD_LoadBalance_Vars ,ONLY: UseH5IOLoadBalance
+#endif /*USE_LOADBALANCE*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -92,13 +83,10 @@ SUBROUTINE InitAdaptiveBCSampling()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-LOGICAL :: AdaptiveDataExists, RunningAverageExists, UseAdaptiveType4, AdaptBCPartNumOutExists
-REAL :: TimeStepOverWeight, v_thermal, dtVar
-REAL,ALLOCATABLE :: ElemData_HDF5(:,:), ElemData2_HDF5(:,:,:,:)
-INTEGER :: iElem, iSpec, iSF, iSide, ElemID, SampleElemID, nVar, GlobalSideID, GlobalElemID, currentBC
-INTEGER :: jSample, iSample, BCSideID, nElemReadin, nVarTotal, iVar, nVarArrayStart, nVarArrayEnd
-INTEGER :: SampIterArrayEnd, nSurfacefluxBCs
-INTEGER,ALLOCATABLE :: GlobalElemIndex(:)
+LOGICAL :: UseAdaptiveType4
+INTEGER :: iElem, iSpec, iSF, iSide, ElemID, SampleElemID, GlobalSideID, GlobalElemID, currentBC
+INTEGER :: jSample, iSample, BCSideID
+INTEGER :: nSurfacefluxBCs
#if USE_MPI
INTEGER :: offSetElemAdaptBCSampleMPI(0:nProcessors-1)
#endif
@@ -113,7 +101,7 @@ SUBROUTINE InitAdaptiveBCSampling()
END IF
#endif /*USE_LOADBALANCE*/
-AdaptiveDataExists = .FALSE.; RunningAverageExists = .FALSE.; UseAdaptiveType4 = .FALSE.
+UseAdaptiveType4 = .FALSE.
AdaptBCSampleElemNum = 0
ALLOCATE(AdaptBCMapElemToSample(nElems))
AdaptBCMapElemToSample = 0
@@ -166,16 +154,16 @@ SUBROUTINE InitAdaptiveBCSampling()
#if USE_MPI
IF(UseCircularInflow) THEN
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,AdaptBCAreaSurfaceFlux,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,iError)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,AdaptBCAreaSurfaceFlux,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,iError)
ELSE
- CALL MPI_REDUCE(AdaptBCAreaSurfaceFlux,0,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,iError)
+ CALL MPI_REDUCE(AdaptBCAreaSurfaceFlux,0,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,iError)
END IF
END IF
#endif /*USE_MPI*/
#if USE_MPI
-CALL MPI_ALLREDUCE(MPI_IN_PLACE,AdaptBCVolSurfaceFlux,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,PartMPI%COMM,iError)
+CALL MPI_ALLREDUCE(MPI_IN_PLACE,AdaptBCVolSurfaceFlux,nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
! 1b) Add elements for the porous BCs
@@ -214,9 +202,9 @@ SUBROUTINE InitAdaptiveBCSampling()
#if USE_MPI
! Gather the number of sampling elements per proc
-CALL MPI_GATHER(AdaptBCSampleElemNum,1,MPI_INTEGER_INT_KIND,offSetElemAdaptBCSampleMPI,1,MPI_INTEGER_INT_KIND,0,MPI_COMM_WORLD,iError)
+CALL MPI_GATHER(AdaptBCSampleElemNum,1,MPI_INTEGER_INT_KIND,offSetElemAdaptBCSampleMPI,1,MPI_INTEGER_INT_KIND,0,MPI_COMM_PICLAS,iError)
! Distribute the number of elements per proc to each each proc
-CALL MPI_BCAST(offSetElemAdaptBCSampleMPI,nProcessors,MPI_INTEGER,0,MPI_COMM_WORLD,iERROR)
+CALL MPI_BCAST(offSetElemAdaptBCSampleMPI,nProcessors,MPI_INTEGER,0,MPI_COMM_PICLAS,iERROR)
! Determine the offset for the sampling elements
IF(myRank.EQ.0) THEN
offSetElemAdaptBCSample = 0
@@ -290,140 +278,8 @@ SUBROUTINE InitAdaptiveBCSampling()
END IF
END IF
-! 4) If restart is done, check if adaptiveinfo exists in state, read it in and write to AdaptBCMacroValues
-IF (DoRestart) THEN
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
- ! read local ParticleInfo from HDF5
- CALL DatasetExists(File_ID,'AdaptiveInfo',AdaptiveDataExists)
- IF(AdaptiveDataExists)THEN
- CALL GetDataSize(File_ID,'AdaptiveInfo',nDims,HSize)
- nVarTotal=INT(HSize(1),4)
- DEALLOCATE(HSize)
- ALLOCATE(ElemData_HDF5(1:nVarTotal,1:nElems))
- ! Associate construct for integer KIND=8 possibility
- ASSOCIATE (&
- offsetElem => INT(offsetElem,IK),&
- nElems => INT(nElems,IK) ,&
- nVarTotal => INT(nVarTotal,IK) )
- CALL ReadArray('AdaptiveInfo',2,(/nVarTotal, nElems/),offsetElem,2,RealArray=ElemData_HDF5(:,:))
- END ASSOCIATE
- nVar = 7
- iVar = 1
- DO iSpec = 1,nSpecies
- DO SampleElemID = 1,AdaptBCSampleElemNum
- ElemID = AdaptBCMapSampleToElem(SampleElemID)
- AdaptBCMacroVal(1:7,SampleElemID,iSpec) = ElemData_HDF5(iVar:iVar-1+nVar,ElemID)
- END DO
- iVar = iVar + nVar
- END DO
- SDEALLOCATE(ElemData_HDF5)
- LBWRITE(*,*) '| Macroscopic values successfully read-in from restart file.'
- END IF
- ! Read-in the running average values from the state file
- IF(AdaptBCTruncAverage) THEN
- ! Avoid deleting the sampling iteration after a restart during a later load balacing step
- IF(.NOT.PerformLoadBalance) AdaptBCSampIterReadIn = 0
- CALL DatasetExists(File_ID,'AdaptiveRunningAverage',RunningAverageExists)
- IF(RunningAverageExists)THEN
- ! Read-in the number of sampling iterations from the restart file (might differ from the current number)
- IF(.NOT.PerformLoadBalance) CALL ReadAttribute(File_ID,'AdaptBCSampIter',1,IntScalar=AdaptBCSampIterReadIn)
- ! Get the data size of the read-in array
- CALL GetDataSize(File_ID,'AdaptiveRunningAverage',nDims,HSize)
- nVar=INT(HSize(2),4)
- nElemReadin = INT(HSize(3),4)
- DEALLOCATE(HSize)
- ! Skip the read-in if the array size does not correspond to the current adaptive BC configuration (e.g. a new adaptive BC was added)
- IF(AdaptBCSampleElemNumGlobal.NE.nElemReadin) THEN
- CALL abort(__STAMP__,&
- 'TruncateRunningAverage: Number of read-in elements does not correspond to current number of sample elements!')
- END IF
- ! Treatment of different number of iterations between read-in and parameter input
- IF(AdaptBCSampIter.EQ.nVar) THEN
- nVarArrayStart = 1
- nVarArrayEnd = nVar
- SampIterArrayEnd = AdaptBCSampIter
- IF(AdaptBCSampIterReadIn.LT.nVar.AND..NOT.PerformLoadBalance) THEN
- LBWRITE(*,*) '| TruncateRunningAverage: Array not filled in previous simulation run. Continuing at: ', AdaptBCSampIterReadIn + 1
- END IF
- ELSE IF(AdaptBCSampIter.GT.nVar) THEN
- nVarArrayStart = 1
- nVarArrayEnd = nVar
- SampIterArrayEnd = nVar
- LBWRITE(*,*) '| TruncateRunningAverage: Smaller number of sampling iterations in restart file. Continuing at: ', AdaptBCSampIterReadIn + 1
- ELSE
- nVarArrayStart = nVar - AdaptBCSampIter + 1
- nVarArrayEnd = nVar
- SampIterArrayEnd = AdaptBCSampIter
- AdaptBCSampIterReadIn = AdaptBCSampIter
- LBWRITE(*,*) '| TruncateRunningAverage: Greater number of sampling iterations in restart file. Using the last ', AdaptBCSampIterReadIn, ' sample iterations.'
- END IF
- ALLOCATE(ElemData2_HDF5(1:8,1:nVar,1:nElemReadin,1:nSpecies))
- ALLOCATE(GlobalElemIndex(1:nElemReadin))
- ! Associate construct for integer KIND=8 possibility
- ASSOCIATE (&
- nSpecies => INT(nSpecies,IK) ,&
- nElemReadin => INT(nElemReadin,IK) ,&
- nVar => INT(nVar,IK) )
- CALL ReadArray('AdaptiveRunningAverage',4,(/8_IK, nVar, nElemReadin, nSpecies/),0_IK,3,RealArray=ElemData2_HDF5(:,:,:,:))
- CALL ReadArray('AdaptiveRunningAverageIndex',1,(/nElemReadin/),0_IK,1,IntegerArray_i4=GlobalElemIndex(:))
- END ASSOCIATE
- ! Map the read-in values to the sampling array (GlobalElemID -> LocalElemID -> SampleElemID)
- IF(AdaptBCSampleElemNum.GT.0) THEN
- DO iElem = 1,nElemReadin
- GlobalElemID = GlobalElemIndex(iElem)
- ! Skip elements outside my local region
- IF((GlobalElemID.LT.1+offsetElem).OR.(GlobalElemID.GT.nElems+offsetElem)) CYCLE
- ! Get the sample element ID
- SampleElemID = AdaptBCMapElemToSample(GlobalElemID-offsetElem)
- IF(SampleElemID.GT.0) AdaptBCAverage(1:8,1:SampIterArrayEnd,SampleElemID,1:nSpecies) = ElemData2_HDF5(1:8,nVarArrayStart:nVarArrayEnd,iElem,1:nSpecies)
- END DO
- END IF
- ! Calculate the macro values intially from the sample for the first iteration
- CALL AdaptiveBCSampling(initTruncAverage_opt=.TRUE.)
- SDEALLOCATE(ElemData2_HDF5)
- SDEALLOCATE(GlobalElemIndex)
- LBWRITE(*,*) '| TruncateRunningAverage: Sample successfully initiliazed from restart file.'
- ELSE
- LBWRITE(*,*) '| TruncateRunningAverage: No running average values found. Values initiliazed with zeros.'
- END IF
- END IF
- CALL CloseDataFile()
- ! Read-in of the number of particles leaving the domain through the adaptive BC type 4 (required for the calculation of the massflow)
- IF(UseAdaptiveType4.AND..NOT.PerformLoadBalance) THEN
- IF(MPIRoot)THEN
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.TRUE.,readOnly=.TRUE.)
- CALL DatasetExists(File_ID,'AdaptBCPartNumOut',AdaptBCPartNumOutExists)
- IF(AdaptBCPartNumOutExists) THEN
- ! Associate construct for integer KIND=8 possibility
- ASSOCIATE (&
- nSpecies => INT(nSpecies,IK) ,&
- nSurfFluxBCs => INT(nSurfacefluxBCs,IK) )
- CALL ReadArray('AdaptBCPartNumOut',2,(/nSpecies,nSurfFluxBCs/),0_IK,1,IntegerArray_i4=AdaptBCPartNumOut(:,:))
- END ASSOCIATE
- LBWRITE(*,*) '| Surface Flux, Type=4: Number of particles leaving the domain successfully read-in from restart file.'
- END IF
- CALL CloseDataFile()
- END IF
- END IF
-END IF
-
-! 5) Initialize the macroscopic values from either the macroscopic restart or the surface flux (if no values have been read-in)
-IF(AdaptiveDataExists) RETURN
-
-IF (DoMacroscopicRestart) THEN
- DO SampleElemID = 1,AdaptBCSampleElemNum
- ElemID = AdaptBCMapSampleToElem(SampleElemID)
- AdaptBCMacroVal(DSMC_VELOX,SampleElemID,iSpec) = MacroRestartValues(ElemID,iSpec,DSMC_VELOX)
- AdaptBCMacroVal(DSMC_VELOY,SampleElemID,iSpec) = MacroRestartValues(ElemID,iSpec,DSMC_VELOY)
- AdaptBCMacroVal(DSMC_VELOZ,SampleElemID,iSpec) = MacroRestartValues(ElemID,iSpec,DSMC_VELOZ)
- AdaptBCMacroVal(4,SampleElemID,iSpec) = MacroRestartValues(ElemID,iSpec,DSMC_NUMDENS)
- END DO
- LBWRITE(*,*) '| Marcroscopic values have been initialized from: ', TRIM(MacroRestartFileName)
- IF(nPorousBC.GT.0) THEN
- CALL abort(__STAMP__,&
- 'Macroscopic restart with porous BC and without state file including adaptive BC info not implemented!')
- END IF
-ELSE
+IF(.NOT.DoRestart.AND..NOT.PerformLoadBalance) THEN
+! 4) Initialize values from parameter file as a fallback
DO iSpec=1,nSpecies
DO iSF=1,Species(iSpec)%nSurfacefluxBCs
currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
@@ -444,48 +300,7 @@ SUBROUTINE InitAdaptiveBCSampling()
END DO
END DO
END DO
- LBWRITE(*,*) '| Macroscopic values have been initialized with the input parameters for the velocity and number density (fallback).'
-END IF
-
-! 6) Sampling of near adaptive boundary element values in the first time step to get initial distribution
-IF(.NOT.DoRestart.AND..NOT.PerformLoadBalance) THEN
- CALL AdaptiveBCSampling(initSampling_opt=.TRUE.)
- LBWRITE(*,*) '| Sampling of inserted particles has been performed for an initial distribution.'
-END IF
-
-! 7) Approximation of particles leaving the domain, assuming zero bulk velocity, using the macrorestart values or init sampling
-IF(UseAdaptiveType4.AND.(.NOT.AdaptBCPartNumOutExists.OR.DoMacroscopicRestart)) THEN
- ! Species-specific time step
- IF(VarTimeStep%UseSpeciesSpecific) THEN
- dtVar = ManualTimeStep * RKdtFrac * Species(iSpec)%TimeStepFactor
- ELSE
- dtVar = ManualTimeStep * RKdtFrac
- END IF
- DO iSpec=1,nSpecies
- DO iSF=1,Species(iSpec)%nSurfacefluxBCs
- currentBC = Species(iSpec)%Surfaceflux(iSF)%BC
- ! Skip processors without a surface flux
- IF (BCdata_auxSF(currentBC)%SideNumber.EQ.0) CYCLE
- ! Skip other regular surface flux and other types
- IF(.NOT.Species(iSpec)%Surfaceflux(iSF)%AdaptiveType.EQ.4) CYCLE
- ! Calculate the velocity for the surface flux with the thermal velocity assuming a zero bulk velocity
- TimeStepOverWeight = dtVar / Species(iSpec)%MacroParticleFactor
- v_thermal = SQRT(2.*BoltzmannConst*Species(iSpec)%Surfaceflux(iSF)%MWTemperatureIC/Species(iSpec)%MassIC) / (2.0*SQRT(PI))
- ! Loop over sides on the surface flux
- DO iSide=1,BCdata_auxSF(currentBC)%SideNumber
- BCSideID=BCdata_auxSF(currentBC)%SideList(iSide)
- ElemID = SideToElem(S2E_ELEM_ID,BCdata_auxSF(currentBC)%SideList(iSide))
- SampleElemID = AdaptBCMapElemToSample(ElemID)
- IF(SampleElemID.GT.0) THEN
- DO jSample=1,SurfFluxSideSize(2); DO iSample=1,SurfFluxSideSize(1)
- AdaptBCPartNumOut(iSpec,iSF) = AdaptBCPartNumOut(iSpec,iSF) + INT(AdaptBCMacroVal(4,SampleElemID,iSpec) &
- * TimeStepOverWeight * SurfMeshSubSideData(iSample,jSample,BCSideID)%area * v_thermal)
- END DO; END DO
- END IF ! SampleElemID.GT.0
- END DO ! iSide=1,BCdata_auxSF(currentBC)%SideNumber
- END DO ! iSF=1,Species(iSpec)%nSurfacefluxBCs
- END DO ! iSpec=1,nSpecies
- SWRITE(*,*) '| Surface Flux, Type=4: Number of particles leaving the domain approximated for the first iteration.'
+ LBWRITE(*,*) '| Macroscopic values have been initialized with the input parameters for velocity and number density (fallback).'
END IF
END SUBROUTINE InitAdaptiveBCSampling
@@ -588,7 +403,7 @@ SUBROUTINE AdaptiveBCSampling(initSampling_opt,initTruncAverage_opt)
RelaxationFactor = AdaptBCRelaxFactor
IF(AdaptBCSampIter.GT.0) THEN
IF(AdaptBCTruncAverage.AND.(RestartSampIter.GT.0).AND.(RestartSampIter.LT.AdaptBCSampIter)) THEN
- ! Truncated average: get the correct number of samples to calculate the average number density while the
+ ! Truncated average: get the correct number of samples to calculate the average number density while the
! sampling array is populated
SamplingIteration = RestartSampIter
ELSE
@@ -665,9 +480,9 @@ SUBROUTINE AdaptiveBCSampling(initSampling_opt,initTruncAverage_opt)
! MPI Communication
#if USE_MPI
IF(MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,AdaptBCMeanValues,8*nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE,AdaptBCMeanValues,8*nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,iError)
ELSE
- CALL MPI_REDUCE(AdaptBCMeanValues,0.,8*nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_WORLD,iError)
+ CALL MPI_REDUCE(AdaptBCMeanValues,0.,8*nSpecies*nSurfacefluxBCs,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,iError)
END IF
#endif /*USE_MPI*/
IF(MPIRoot) THEN
@@ -726,8 +541,8 @@ SUBROUTINE AdaptiveBCSampling(initSampling_opt,initTruncAverage_opt)
END DO
END IF
#if USE_MPI
- CALL MPI_BCAST(AdaptBCMeanValues,8*nSpecies*nSurfacefluxBCs, MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iERROR)
- CALL MPI_BCAST(AdaptBCAverageMacroVal,3*nSpecies*nSurfacefluxBCs, MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,iERROR)
+ CALL MPI_BCAST(AdaptBCMeanValues,8*nSpecies*nSurfacefluxBCs, MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iERROR)
+ CALL MPI_BCAST(AdaptBCAverageMacroVal,3*nSpecies*nSurfacefluxBCs, MPI_DOUBLE_PRECISION,0,MPI_COMM_PICLAS,iERROR)
#endif /*USE_MPI*/
END IF
END IF
diff --git a/src/particles/sampling/particle_sampling_vars.f90 b/src/particles/sampling/particle_sampling_vars.f90
index 5e82c5156..fa0aadf2c 100644
--- a/src/particles/sampling/particle_sampling_vars.f90
+++ b/src/particles/sampling/particle_sampling_vars.f90
@@ -26,7 +26,7 @@ MODULE MOD_Particle_Sampling_Vars
!-----------------------------------------------------------------------------------------------------------------------------------
! Sampling of elements with a boundary for adaptive surface flux and porous BC
-LOGICAL :: UseAdaptive ! Flag is set if an adaptive boundary is present
+LOGICAL :: UseAdaptiveBC ! Flag is set if an adaptive boundary is present
LOGICAL :: AdaptBCAverageValBC ! Flag to enable/disable averaging accross the whole BC
REAL, ALLOCATABLE :: AdaptBCAverageMacroVal(:,:,:) ! Macroscopic values averaged over BC
! (1:3, 1:nSpecies, 1:nSurfaceFluxBCs)
diff --git a/src/particles/surfacemodel/surfacemodel_SEE.f90 b/src/particles/surfacemodel/surfacemodel_SEE.f90
index 938b5d773..3927aa4d1 100644
--- a/src/particles/surfacemodel/surfacemodel_SEE.f90
+++ b/src/particles/surfacemodel/surfacemodel_SEE.f90
@@ -36,12 +36,13 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
!----------------------------------------------------------------------------------------------------------------------------------!
! MODULES !
!----------------------------------------------------------------------------------------------------------------------------------!
-USE MOD_Globals ,ONLY: abort,VECNORM,PARTISELECTRON
-USE MOD_Globals_Vars ,ONLY: c,Joule2eV
+USE MOD_Globals ,ONLY: abort,PARTISELECTRON,DOTPRODUCT
+USE MOD_Globals_Vars ,ONLY: c,c2,Joule2eV
USE MOD_Particle_Vars ,ONLY: PartState,Species,PartSpecies,PartMPF,nSpecies
USE MOD_Globals_Vars ,ONLY: ElementaryCharge,ElectronMass
USE MOD_SurfaceModel_Vars ,ONLY: BulkElectronTempSEE
USE MOD_SurfaceModel_Vars ,ONLY: SurfModResultSpec,SurfModEmissionYield,SurfModEmissionEnergy,SurfModEnergyDistribution
+USE MOD_SurfaceModel_Vars ,ONLY: SurfModSEEPowerFit
USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcElectronSEE,SEE
USE MOD_Particle_Analyze_Tools ,ONLY: CalcEkinPart2
@@ -60,41 +61,71 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
REAL,INTENT(OUT) :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
+INTEGER :: SpecID ! Species index of bombarding particle
REAL :: eps_e ! Energy of bombarding electron in eV
REAL :: iRan ! Random number
REAL :: k_ee ! Coefficient of emission of secondary electron
REAL :: k_refl ! Coefficient for reflection of bombarding electron
REAL :: W0,W1,W2
-REAL :: v
+REAL :: velo2
REAL :: MPF
REAL :: SEE_Prob
!===================================================================================================================================
+SpecID = PartSpecies(PartID_IN)
+! Squared velocity of bombarding particle
+velo2=DOTPRODUCT(PartState(4:6,PartID_IN))
! Sanity check: is the impacting particle faster than c
-v=VECNORM(PartState(4:6,PartID_IN))
-IF(v.GT.c) CALL abort(__STAMP__,'SecondaryElectronEmission: Bombading particle is faster than the speed of light: ',RealInfoOpt=v)
+IF(velo2.GT.c2) CALL abort(__STAMP__,'SecondaryElectronEmission: Bombarding particle is faster than the speed of light: ',RealInfoOpt=SQRT(velo2))
! Default 0
ProductSpec = 0
ProductSpecNbr = 0
TempErgy = 0.0
! Select particle surface modeling
SELECT CASE(PartBound%SurfaceModel(locBCID))
+CASE(4) ! 4: SEE-E by power-law: a*T(eV)^b
+ ProductSpecNbr = 0 ! do not create new particle (default value)
+ ! Bombarding electron
+ IF(PARTISELECTRON(PartID_IN))THEN
+ ! Electron energy in [eV]
+ eps_e = 0.5*Species(SpecID)%MassIC*velo2*Joule2eV ! Incident electron energy [eV]
+ ! Power Fit
+ SEE_Prob = SurfModSEEPowerFit(1,locBCID)*eps_e**SurfModSEEPowerFit(2,locBCID)
+ ! If the yield is greater than 1.0 (or 2.0 or even higher), set the number of products with the integer and roll the dice for the remainder
+ ProductSpecNbr = INT(SEE_Prob)
+ SEE_Prob = SEE_Prob - REAL(ProductSpecNbr)
+
+ ! Roll the dice and if the yield is greater than the random number, add an additional electron
+ CALL RANDOM_NUMBER(iRan)
+ IF(iRan.LT.SEE_Prob) ProductSpecNbr = ProductSpecNbr + 1
+
+ ! If the electron is reflected (ProductSpecNbr=1) or multiple electrons are created (ProductSpecNbr>1)
+ IF(ProductSpecNbr.GT.0) ProductSpec(2) = SurfModResultSpec(locBCID,SpecID)
+
+ ! When more than 1 electron is created, give them all part of the impacting energy
+ IF(ProductSpecNbr.GT.1) eps_e = eps_e/REAL(ProductSpecNbr) ! [eV]
+
+ ! Velocity of reflected primary or secondary electrons in [m/s]
+ TempErgy = SQRT(2.*eps_e*ElementaryCharge/ElectronMass)
+
+ ELSE ! Neutral bombarding particle
+ RETURN ! nothing to do
+ END IF
CASE(5) ! 5: SEE by Levko2015 for copper electrodes
! ! by D. Levko, Breakdown of atmospheric pressure microgaps at high excitation, J. Appl. Phys. 117, 173303 (2015)
- ProductSpec(1) = PartSpecies(PartID_IN) ! old particle
+ ProductSpec(1) = SpecID ! old particle
ASSOCIATE (&
phi => 4.4 ,& ! eV -> cathode work function phi Ref. [20] Y. P. Raizer, Gas Discharge Physics (Springer, 1991)
I => 15.6 & ! eV -> ionization threshold of N2
)
IF(PARTISELECTRON(PartID_IN))THEN ! Bombarding electron
- ASSOCIATE (&
- delta_star_max => 1.06 ,& ! -> empir. fit. const. copper electrode Ref, [19] R. Cimino et al.,Phys.Rev.Lett. 2004
- s => 1.35 ,& ! -> empir. fit. const. copper electrode Ref, [19] R. Cimino et al.,Phys.Rev.Lett. 2004
- eps_max => 262 ,& ! eV -> empir. fit. const. copper electrode Ref, [19] R. Cimino et al.,Phys.Rev.Lett. 2004
- eps_0 => 150 ,& ! eV -> empir. fit. const. copper electrode Ref, [19] R. Cimino et al.,Phys.Rev.Lett. 2004
- velo2 => PartState(4,PartID_IN)**2 + PartState(5,PartID_IN)**2 + PartState(6,PartID_IN)**2 ,&
- mass => Species(PartSpecies(PartID_IN))%MassIC &! mass of bombarding particle
+ ASSOCIATE (& ! Empirical fitting constants for a copper electrode Ref. [19] R. Cimino et al., Phys.Rev.Lett. 2004
+ delta_star_max => 1.06 ,&
+ s => 1.35 ,&
+ eps_max => 262 ,& ! eV
+ eps_0 => 150 ,& ! eV
+ mass => Species(SpecID)%MassIC &! mass of bombarding particle
)
! Electron energy in [eV]
eps_e = 0.5*mass*velo2/ElementaryCharge
@@ -112,7 +143,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
CALL RANDOM_NUMBER(iRan)
IF(iRan.LT.k_ee/(k_ee+k_refl))THEN ! SEE
!ReflectionIndex = 3 ! SEE + perfect elastic scattering of the bombarding electron
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 1
TempErgy = SQRT(2.*(eps_e*ElementaryCharge-ElementaryCharge*phi)/ElectronMass) ! Velocity of emitted secondary electron
eps_e = 0.5*mass*(TempErgy**2)/ElementaryCharge ! Energy of the injected electron
@@ -145,12 +176,12 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
ProductSpec(1) = 0 ! just for sanity check
END IF
END ASSOCIATE
- ELSEIF(Species(PartSpecies(PartID_IN))%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
+ ELSEIF(Species(SpecID)%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
CALL RANDOM_NUMBER(iRan)
!IF(iRan.LT.1.)THEN ! SEE-I: gamma=0.02 for the N2^+ ions and copper material
IF(iRan.LT.0.02)THEN ! SEE-I: gamma=0.02 for the N2^+ ions and copper material
!ReflectionIndex = -2 ! SEE + perfect elastic scattering of the bombarding electron
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 1
eps_e = I-2.*phi ! Energy of the injected electron
TempErgy = SQRT(2.*(eps_e*ElementaryCharge-ElementaryCharge*phi)/ElectronMass) ! Velocity of emitted secondary electron
@@ -161,13 +192,13 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
!WRITE (*,*) CHAR(27) // "[0;31m eps_e =", eps_e,CHAR(27),"[m"
ELSE ! Removal of the bombarding ion
!ReflectionIndex = -1 ! Only perfect elastic scattering of the bombarding electron
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
ProductSpecNbr = 0 ! do not create new particle
END IF
ELSE ! Neutral bombarding particle
! IF(iRan.LT.0.1)THEN ! SEE-N: from svn-trunk PICLas version
! !ReflectionIndex = -2 ! SEE + perfect elastic scattering of the bombarding electron
- ! ProductSpec(2) = SurfModelResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ! ProductSpec(2) = SurfModelResultSpec(locBCID,SpecID) ! Species of the injected electron
! ProductSpecNbr = 1
! ELSE
! !ReflectionIndex = -1 ! Only perfect elastic scattering of the bombarding electron
@@ -186,12 +217,12 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
CASE(6) ! 6: SEE by Pagonakis2016 (originally from Harrower1956)
CALL abort(__STAMP__,'Not implemented yet')
CASE(7) ! 7: SEE-I (bombarding electrons are removed, Ar+ on different materials is considered for SEE)
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
ProductSpecNbr = 0 ! do not create new particle (default value)
IF(PARTISELECTRON(PartID_IN))THEN ! Bombarding electron
RETURN ! nothing to do
- ELSEIF(Species(PartSpecies(PartID_IN))%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
+ ELSEIF(Species(SpecID)%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
! SEE-I bombarding e- are removed, Ar+ on different materials is considered for secondary e- emission (the default probability
! is 0.13 probability, see D. Depla, Magnetron sputter deposition: Linking discharge voltage with target properties, 2009)
@@ -201,7 +232,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
IF(iRan.LT.MOD(SurfModEmissionYield(locBCID), 1.0) ) ProductSpecNbr = ProductSpecNbr + 1 ! Create one additional new particle
IF(ProductSpecNbr.GT.0)THEN
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
! Set TempErgy (velocity in m/s or energy in eV might be required here)
IF(SurfModEmissionEnergy(locBCID).GE.0.)THEN
! Electron energy in [eV] or [m/2] is required here depending on the chosen distribution function
@@ -214,7 +245,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
END IF ! SurfModEnergyDistribution(locBCID).EQ.
ELSE
! Get velocity of new electron (from impacting ion energy)
- TempErgy = CalcEkinPart2(PartState(4:6,PartID_IN),PartSpecies(PartID_IN),1.0) ! [J]
+ TempErgy = CalcEkinPart2(PartState(4:6,PartID_IN),SpecID,1.0) ! [J]
TempErgy = SQRT(2.0 * Tempergy / ElectronMass) ! [m/s]
END IF ! SurfModEmissionEnergy
END IF ! ProductSpecNbr.GT.0
@@ -232,8 +263,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
IF(PARTISELECTRON(PartID_IN))THEN ! Bombarding electron
ASSOCIATE( P0 => 0.9 ,& ! Assumption in paper
Te0 => BulkElectronTempSEE ,& ! Assumed bulk electron temperature [eV] (note this parameter is read as [K])
- velo2=> PartState(4,PartID_IN)**2 + PartState(5,PartID_IN)**2 + PartState(6,PartID_IN)**2 ,& ! Velocity squared
- mass => Species(PartSpecies(PartID_IN))%MassIC ) ! mass of bombarding particle
+ mass => Species(SpecID)%MassIC ) ! mass of bombarding particle
eps_e = 0.5*mass*velo2*Joule2eV ! Incident electron energy [eV]
ASSOCIATE( alpha0 => 1.5*Te0 ,& ! Energy normalization parameter
alpha2 => 6.0*Te0 ) ! Energy normalization parameter
@@ -245,34 +275,34 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
iRan = iRan - W0
IF(iRan.LT.W1)THEN ! 1 SEE
!ASSOCIATE( P10 => 1.5*W1/eps_e )
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 1 ! Create one new particle
- ProductSpec(1) = PartSpecies(PartID_IN) ! Reflect old particle
+ ProductSpec(1) = SpecID ! Reflect old particle
!const = P10 ! Store constant here for usage in VeloFromDistribution()
!END ASSOCIATE
ELSE ! 2 SEE
!ASSOCIATE( P20 => 3.0*W2/(eps_e**2) )
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 2 ! Create two new particles
- ProductSpec(1) = PartSpecies(PartID_IN) ! Reflect old particle
+ ProductSpec(1) = SpecID ! Reflect old particle
!const = P20 ! Store constant here for usage in VeloFromDistribution()
!END ASSOCIATE
END IF
TempErgy = eps_e ! electron energy
ELSE
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
END IF
END ASSOCIATE
END ASSOCIATE
END IF
CASE(9) ! 9: SEE-I when Ar^+ ion bombards surface with 0.01 probability and fixed SEE electron energy of 6.8 eV
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
- IF(Species(PartSpecies(PartID_IN))%ChargeIC.GT.0.0)THEN ! Bombarding positive ion
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
+ IF(Species(SpecID)%ChargeIC.GT.0.0)THEN ! Bombarding positive ion
CALL RANDOM_NUMBER(iRan) ! 1st random number
ASSOCIATE( eps_e => 6.8 )! Ejected electron energy [eV]
IF(iRan.LT.0.01)THEN ! SEE-I: gamma=0.01 for the bombarding Ar^+ ions
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 1 ! Create one new particle
TempErgy = SQRT(2.*eps_e*ElementaryCharge/ElectronMass) ! Velocity of emitted secondary electron in [m/s]
END IF
@@ -282,14 +312,13 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
CASE(10) ! 10: SEE-I (bombarding electrons are removed, Ar+ on copper is considered for SEE)
! by J.G. Theis "Computing the Paschen curve for argon with speed-limited particle-in-cell simulation", 2021
! Plasmas 28, 063513, doi: 10.1063/5.0051095
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
ProductSpecNbr = 0 ! do not create new particle (default value)
IF(PARTISELECTRON(PartID_IN))THEN ! Bombarding electron
RETURN ! nothing to do
- ELSEIF(Species(PartSpecies(PartID_IN))%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
- ASSOCIATE (velo2 => PartState(4,PartID_IN)**2 + PartState(5,PartID_IN)**2 + PartState(6,PartID_IN)**2 ,&
- mass => Species(PartSpecies(PartID_IN))%MassIC )! mass of bombarding particle
+ ELSEIF(Species(SpecID)%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
+ ASSOCIATE (mass => Species(SpecID)%MassIC )! mass of bombarding particle
! Electron energy in [eV]
eps_e = 0.5*mass*velo2/ElementaryCharge
IF(eps_e.LT.700) THEN
@@ -300,7 +329,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
END ASSOCIATE
CALL RANDOM_NUMBER(iRan)
IF(iRan.LT.SEE_Prob)THEN
- ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
ProductSpecNbr = 1 ! Create one new particle
TempErgy = 0.0 ! emit electrons with zero velocity
END IF
@@ -311,12 +340,11 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
CASE(11) ! 11: SEE-E by e- on quartz (SiO2) by A. Dunaevsky, "Secondary electron emission from dielectric materials of a Hall
! thruster with segmented electrodes", 2003
! PHYSICS OF PLASMAS, VOLUME 10, NUMBER 6, DOI: 10.1063/1.1568344
- ProductSpec(1) = -PartSpecies(PartID_IN) ! Negative value: Remove bombarding particle and sample
+ ProductSpec(1) = -SpecID ! Negative value: Remove bombarding particle and sample
ProductSpecNbr = 0 ! do not create new particle (default value)
IF(PARTISELECTRON(PartID_IN))THEN ! Bombarding electron
- ASSOCIATE (velo2 => PartState(4,PartID_IN)**2 + PartState(5,PartID_IN)**2 + PartState(6,PartID_IN)**2 ,&
- mass => Species(PartSpecies(PartID_IN))%MassIC )! mass of bombarding particle
+ ASSOCIATE (mass => Species(SpecID)%MassIC )! mass of bombarding particle
! Electron energy in [eV]
eps_e = 0.5*mass*velo2*Joule2eV ! Incident electron energy [eV]
@@ -335,7 +363,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
IF(iRan.LT.SEE_Prob) ProductSpecNbr = ProductSpecNbr + 1 ! Create one additional electron
! If the electron is reflected (ProductSpecNbr=1) or multiple electrons are created (ProductSpecNbr>1)
- IF(ProductSpecNbr.GT.0) ProductSpec(2) = SurfModResultSpec(locBCID,PartSpecies(PartID_IN)) ! Species of the injected electron
+ IF(ProductSpecNbr.GT.0) ProductSpec(2) = SurfModResultSpec(locBCID,SpecID) ! Species of the injected electron
! When more than 1 electron is created, give them all part of the impacting energy, otherwise reflect the primary electron
IF(ProductSpecNbr.GT.1) eps_e = eps_e/REAL(ProductSpecNbr) ! [eV]
@@ -343,7 +371,7 @@ SUBROUTINE SecondaryElectronEmission(PartID_IN,locBCID,ProductSpec,ProductSpecNb
! Velocity of reflected primary or secondary electrons in [m/s]
TempErgy = SQRT(2.*eps_e*ElementaryCharge/ElectronMass)
- ELSEIF(Species(PartSpecies(PartID_IN))%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
+ ELSEIF(Species(SpecID)%ChargeIC.GT.0.0)THEN ! Positive bombarding ion
RETURN ! nothing to do
ELSE ! Neutral bombarding particle
RETURN ! nothing to do
diff --git a/src/particles/surfacemodel/surfacemodel_analyze.f90 b/src/particles/surfacemodel/surfacemodel_analyze.f90
index 24ab955c0..50c9e6265 100644
--- a/src/particles/surfacemodel/surfacemodel_analyze.f90
+++ b/src/particles/surfacemodel/surfacemodel_analyze.f90
@@ -149,12 +149,12 @@ SUBROUTINE AnalyzeSurface(Time)
USE MOD_Analyze_Vars ,ONLY: DoSurfModelAnalyze
USE MOD_SurfaceModel_Analyze_Vars
USE MOD_Restart_Vars ,ONLY: DoRestart
-USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfSides,PartBound
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, PorousBC
USE MOD_Particle_Vars ,ONLY: nSpecies,UseNeutralization,NeutralizationBalanceGlobal,Species
+#if USE_MPI
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
+#endif /*USE_MPI*/
#if USE_HDG
USE MOD_Analyze_Vars ,ONLY: EDC
USE MOD_Analyze_Vars ,ONLY: CalcElectricTimeDerivative
@@ -182,14 +182,17 @@ SUBROUTINE AnalyzeSurface(Time)
INTEGER :: iEDCBC,i,iBoundary,iPartBound2
#endif /*USE_HDG*/
!===================================================================================================================================
-IF((nComputeNodeSurfSides.EQ.0).AND.(.NOT.CalcBoundaryParticleOutput).AND.(.NOT.UseNeutralization).AND.(.NOT.CalcElectronSEE)) RETURN
IF(.NOT.DoSurfModelAnalyze) RETURN
+
+! Only proceed with processors, which have a surface side (as determined in InitParticleBoundarySurfSides)
+#if USE_MPI
+IF(SurfCOMM%UNICATOR.EQ.MPI_COMM_NULL) RETURN
+#endif /*USE_MPI*/
+
SurfModelAnalyzeSampleTime = Time - SurfModelAnalyzeSampleTime ! Set SurfModelAnalyzeSampleTime=Time at the end of this routine
OutputCounter = 2
unit_index = 636
-#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
-#endif /*USE_MPI*/
+IF(MPIRoot)THEN
INQUIRE(UNIT = unit_index , OPENED = isOpen)
IF(.NOT.isOpen)THEN
outfile = 'SurfaceAnalyze.csv'
@@ -269,22 +272,22 @@ SUBROUTINE AnalyzeSurface(Time)
WRITE(unit_index,'(A)') ''
END IF
END IF
-#if USE_MPI
END IF
-#endif /*USE_MPI*/
!===================================================================================================================================
! Analyze Routines
!===================================================================================================================================
IF (CalcSurfCollCounter) CALL GetCollCounter(SurfCollNum,AdsorptionNum,DesorptionNum)
IF (CalcPorousBCInfo) CALL GetPorousBCInfo()
+#if USE_MPI
IF (CalcBoundaryParticleOutput) CALL SyncBoundaryParticleOutput()
IF (CalcElectronSEE) CALL SyncElectronSEE()
+#endif /*USE_MPI*/
!===================================================================================================================================
! Output Analyzed variables
!===================================================================================================================================
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
+IF(MPIRoot)THEN
#endif /*USE_MPI*/
WRITE(unit_index,'(E23.16E3)',ADVANCE='NO') Time
IF(CalcSurfCollCounter)THEN
@@ -412,8 +415,8 @@ SUBROUTINE AnalyzeSurface(Time)
! Reset BPO containers
DO iPartBound = 1, BPO%NPartBoundaries
DO iSpec = 1, BPO%NSpecies
- ! Reset PartMPI%MPIRoot counters after writing the data to the file,
- ! non-PartMPI%MPIRoot are reset in SyncBoundaryParticleOutput()
+ ! Reset MPIRoot counters after writing the data to the file,
+ ! non-MPIRoot are reset in SyncBoundaryParticleOutput()
BPO%RealPartOut(iPartBound,iSpec) = 0.
END DO ! iSpec = 1, BPO%NSpecies
END DO ! iPartBound = 1, BPO%NPartBoundaries
@@ -428,8 +431,8 @@ SUBROUTINE AnalyzeSurface(Time)
ELSE
CALL WriteDataInfo(unit_index,RealScalar=SEE%RealElectronOut(iPartBound)/SurfModelAnalyzeSampleTime)
END IF ! ABS(SurfModelAnalyzeSampleTime).LE.0.0
- ! Reset PartMPI%MPIRoot counters after writing the data to the file,
- ! non-PartMPI%MPIRoot are reset in SyncBoundaryParticleOutput()
+ ! Reset MPIRoot counters after writing the data to the file,
+ ! non-MPIRoot are reset in SyncBoundaryParticleOutput()
SEE%RealElectronOut(iPartBound) = 0.
END DO ! iPartBound = 1, SEE%NPartBoundaries
END IF ! CalcElectronSEE
@@ -590,7 +593,7 @@ SUBROUTINE GetCollCounter(SurfCollNum,AdsorbNum, DesorbNum)
USE MOD_Particle_Vars ,ONLY: nSpecies
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: SurfAnalyzeCount, SurfAnalyzeNumOfAds, SurfAnalyzeNumOfDes
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -611,14 +614,14 @@ SUBROUTINE GetCollCounter(SurfCollNum,AdsorbNum, DesorbNum)
END DO
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,SurfCollNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,AdsorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(MPI_IN_PLACE,DesorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,SurfCollNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,AdsorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ CALL MPI_REDUCE(MPI_IN_PLACE,DesorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
ELSE
- CALL MPI_REDUCE(SurfCollNum ,SurfCollNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(AdsorbNum ,AdsorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
- CALL MPI_REDUCE(DesorbNum ,DesorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM,IERROR)
+ CALL MPI_REDUCE(SurfCollNum ,SurfCollNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ CALL MPI_REDUCE(AdsorbNum ,AdsorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ CALL MPI_REDUCE(DesorbNum ,DesorbNum ,nSpecies,MPI_INTEGER,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
END IF
#endif /*USE_MPI*/
@@ -639,7 +642,7 @@ SUBROUTINE GetPorousBCInfo()
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: PorousBCOutput
#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
#endif /*USE_MPI*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -652,16 +655,14 @@ SUBROUTINE GetPorousBCInfo()
INTEGER :: iPBC
!===================================================================================================================================
#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , PorousBCOutput, 5*nPorousBC, MPI_DOUBLE_PRECISION, MPI_SUM, 0, PartMPI%COMM, iError)
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , PorousBCOutput, 5*nPorousBC, MPI_DOUBLE_PRECISION, MPI_SUM, 0, SurfCOMM%UNICATOR, iError)
ELSE
- CALL MPI_REDUCE(PorousBCOutput, PorousBCOutput, 5*nPorousBC, MPI_DOUBLE_PRECISION, MPI_SUM, 0, PartMPI%COMM, iError)
+ CALL MPI_REDUCE(PorousBCOutput, PorousBCOutput, 5*nPorousBC, MPI_DOUBLE_PRECISION, MPI_SUM, 0, SurfCOMM%UNICATOR, iError)
END IF
#endif /*USE_MPI*/
-#if USE_MPI
-IF(PartMPI%MPIRoot)THEN
-#endif /*USE_MPI*/
+IF(MPIRoot)THEN
DO iPBC = 1, nPorousBC
IF(PorousBCOutput(1,iPBC).GT.0.0)THEN
! Pumping Speed (Output(2)) is the sum of all elements (counter over particles exiting through pump)
@@ -669,9 +670,7 @@ SUBROUTINE GetPorousBCInfo()
PorousBCOutput(3:5,iPBC) = PorousBCOutput(3:5,iPBC) / PorousBCOutput(1,iPBC)
END IF
END DO
-#if USE_MPI
END IF
-#endif /*USE_MPI*/
END SUBROUTINE GetPorousBCInfo
@@ -679,13 +678,12 @@ END SUBROUTINE GetPorousBCInfo
!===================================================================================================================================
!> Synchronize BoundaryParticleOutput analyze arrays
!===================================================================================================================================
+#if USE_MPI
SUBROUTINE SyncBoundaryParticleOutput()
! MODULES
-#if USE_MPI
USE MOD_Globals
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: BPO
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -694,41 +692,36 @@ SUBROUTINE SyncBoundaryParticleOutput()
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-#if USE_MPI
REAL :: SendBuf(1:BPO%NPartBoundaries*BPO%NSpecies)
INTEGER :: SendBufSize
-#endif /*USE_MPI*/
!===================================================================================================================================
-#if USE_MPI
SendBufSize = BPO%NPartBoundaries*BPO%NSpecies
-IF(PartMPI%MPIRoot)THEN
- ! Map 2D array to vector for sending via MPI
- SendBuf = RESHAPE(BPO%RealPartOut,(/SendBufSize/))
- CALL MPI_REDUCE(MPI_IN_PLACE,SendBuf(1:SendBufSize),SendBufSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+
+! Map 2D array to vector for sending via MPI
+SendBuf = RESHAPE(BPO%RealPartOut,(/SendBufSize/))
+IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,SendBuf(1:SendBufSize),SendBufSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
! MAP vector back to 2D array
BPO%RealPartOut = RESHAPE(SendBuf,(/BPO%NPartBoundaries,BPO%NSpecies/))
ELSE
- ! Map 2D array to vector for sending via MPI
- SendBuf = RESHAPE(BPO%RealPartOut,(/SendBufSize/))
- CALL MPI_REDUCE(SendBuf(1:SendBufSize),0,SendBufSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- ! Reset non PartMPI%MPIRoot counters, PartMPI%MPIRoot counters are reset after writing the data to the file
+ CALL MPI_REDUCE(SendBuf(1:SendBufSize),0,SendBufSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ ! Reset non SurfCOMM%UNICATOR counters, SurfCOMM%UNICATOR counters are reset after writing the data to the file
BPO%RealPartOut = 0.
END IF
-#endif /*USE_MPI*/
END SUBROUTINE SyncBoundaryParticleOutput
+#endif /*USE_MPI*/
!===================================================================================================================================
!> Synchronize CalcElectronSEE analyze arrays
!===================================================================================================================================
+#if USE_MPI
SUBROUTINE SyncElectronSEE()
! MODULES
-#if USE_MPI
USE MOD_Globals
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: SEE
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfCOMM
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -738,17 +731,16 @@ SUBROUTINE SyncElectronSEE()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
!===================================================================================================================================
-#if USE_MPI
-IF (PartMPI%MPIRoot) THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , SEE%RealElectronOut, SEE%NPartBoundaries,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
+IF (MPIRoot) THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , SEE%RealElectronOut, SEE%NPartBoundaries,MPI_DOUBLE_PRECISION,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
ELSE
- CALL MPI_REDUCE(SEE%RealElectronOut , 0 , SEE%NPartBoundaries,MPI_DOUBLE_PRECISION,MPI_SUM,0,PartMPI%COMM,IERROR)
- ! Reset non PartMPI%MPIRoot counters, PartMPI%MPIRoot counters are reset after writing the data to the file
+ CALL MPI_REDUCE(SEE%RealElectronOut , 0 , SEE%NPartBoundaries,MPI_DOUBLE_PRECISION,MPI_SUM,0,SurfCOMM%UNICATOR,IERROR)
+ ! Reset non MPIRoot counters, MPIRoot counters are reset after writing the data to the file
SEE%RealElectronOut = 0.
END IF
-#endif /*USE_MPI*/
END SUBROUTINE SyncElectronSEE
+#endif /*USE_MPI*/
!===================================================================================================================================
@@ -756,7 +748,7 @@ END SUBROUTINE SyncElectronSEE
!===================================================================================================================================
SUBROUTINE InitBoundaryParticleOutput()
! MODULES
-USE MOD_Globals ,ONLY: CollectiveStop,UNIT_stdOut
+USE MOD_Globals
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: BPO
USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound,PartBound
USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETINT,GETINTARRAY
@@ -773,14 +765,20 @@ SUBROUTINE InitBoundaryParticleOutput()
USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance
#endif /*USE_LOADBALANCE*/
#endif /*USE_HDG*/
-USE MOD_Mesh_Vars ,ONLY: nBCs
+USE MOD_Mesh_Vars ,ONLY: nBCs,BC,nBCSides,BoundaryName
+USE MOD_TimeDisc_Vars ,ONLY: iter
+USE MOD_Mesh_Vars ,ONLY: SurfElem
+USE MOD_Interpolation_Vars ,ONLY: wGPSurf
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------!
! INPUT / OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: iPartBound,iSpec,iBPO,iBC
+INTEGER :: iPartBound,iSpec,iBPO,iBC,BCSideID
+REAL,ALLOCATABLE :: TotalSurfArea(:)
+CHARACTER(LEN=32) :: hilf
+!REAL :: area
!===================================================================================================================================
DoSurfModelAnalyze = .TRUE.
BPO%NPartBoundaries = GETINT('BPO-NPartBoundaries')
@@ -847,17 +845,15 @@ SUBROUTINE InitBoundaryParticleOutput()
SWRITE(UNIT_stdOut,'(A,I0)')' iPartBound = ',iPartBound
SWRITE(UNIT_stdOut,'(A,A)') ' SourceName = ',TRIM(PartBound%SourceBoundName(iPartBound))
SWRITE(UNIT_stdOut,'(A,I0)')' Condition = ',PartBound%TargetBoundCond(iPartBound)
- SWRITE(UNIT_stdOut,'(A)')'\n Conditions are'//&
- ' OpenBC = 1 \n'//&
- ' ReflectiveBC = 2 \n'//&
- ' PeriodicBC = 3 \n'//&
- ' SimpleAnodeBC = 4 \n'//&
- ' SimpleCathodeBC = 5 \n'//&
- ' RotPeriodicBC = 6 \n'//&
- ' SymmetryBC = 10 \n'//&
- ' SymmetryAxis = 11 '
- CALL CollectiveStop(__STAMP__&
- ,'PartBound%TargetBoundCond(iPartBound) is not implemented for CalcBoundaryParticleOutput',&
+ SWRITE(UNIT_stdOut,'(A)')'\n Conditions and availability are'//&
+ ' OpenBC = 1 (yes)\n'//&
+ ' ReflectiveBC = 2 (yes)\n'//&
+ ' PeriodicBC = 3 (no)\n'//&
+ ' RotPeriodicBC = 6 (no)\n'//&
+ ' RotPeriodicInterPlaneBC = 6 (no)\n'//&
+ ' SymmetryBC = 10 (no)\n'//&
+ ' SymmetryAxis = 11 (no)'
+ CALL CollectiveStop(__STAMP__,'PartBound%TargetBoundCond(iPartBound) is not implemented for CalcBoundaryParticleOutput',&
IntInfo=PartBound%TargetBoundCond(iPartBound))
END IF ! PartBound%NbrOfSpeciesSwaps(iPartBound).GT.0
END IF ! .NOT.ANY(PartBound%TargetBoundCond(iPartBound).EQ. ...
@@ -873,14 +869,48 @@ SUBROUTINE InitBoundaryParticleOutput()
CASE(SEE_MODELS_ID)
! all secondary electron models
CASE DEFAULT
- CALL CollectiveStop(__STAMP__,'CalcBoundaryParticleOutput not implemented for this '//&
- 'PartBound%SurfaceModel(iPartBound). Either select different surface model or activate NbrOfSpeciesSwaps',&
+ WRITE(UNIT=hilf,FMT='(I0)') iPartBound
+ CALL CollectiveStop(__STAMP__,'CalcBoundaryParticleOutput not implemented for '//&
+ 'PartBound%SurfaceModel(iPartBound='//TRIM(hilf)//'). Either select different surface model or activate NbrOfSpeciesSwaps',&
IntInfo=PartBound%SurfaceModel(iPartBound))
END SELECT
END IF ! PartBound%NbrOfSpeciesSwaps(iPartBound).GT.0
END IF ! PartBound%TargetBoundCond(BPO%PartBoundaries(iPartBound).EQ.2)
END DO ! iPartBound = 1, BPO%NPartBoundaries
+! Display the total area of the all BPO%NPartBoundaries. MPI requires all-reduce to root process
+IF(iter.EQ.0)THEN ! First iteration: Only output this information once
+ ALLOCATE(TotalSurfArea(1:BPO%NPartBoundaries))
+ TotalSurfArea = 0.
+ ! Loop over all BC sides and get surface area
+ DO BCSideID = 1,nBCSides
+ ! Get particle boundary ID
+ iPartBound = PartBound%MapToPartBC(BC(BCSideID))
+ ! get BPO boundary ID
+ iBPO = BPO%BCIDToBPOBCID(iPartBound)
+ ! Check if this boundary is tracked
+ IF(iBPO.GT.0)THEN
+ TotalSurfArea(iBPO) = TotalSurfArea(iBPO) + SUM(SurfElem(:,:,BCSideID)*wGPSurf(:,:))
+ END IF ! iBPO.GT.0
+ END DO ! BCSideID = 1,nBCSides
+#if USE_MPI
+ IF(MPIroot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE , TotalSurfArea , BPO%NPartBoundaries , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ WRITE(UNIT_stdOut,'(A)') "Total area used for BoundaryParticleOutput (BPO):"
+ DO iBPO = 1, BPO%NPartBoundaries
+ IF(iBPO.GT.9)THEN
+ WRITE(UNIT_stdOut,'(A,I0,A,ES15.7,A)') "BPO-",iBPO,": ",TotalSurfArea(iBPO)," "//TRIM(BoundaryName(BPO%FieldBoundaries(iBPO)))
+ ELSE
+ WRITE(UNIT_stdOut,'(A,I0,A,ES16.7,A)') "BPO-",iBPO,": ",TotalSurfArea(iBPO)," "//TRIM(BoundaryName(BPO%FieldBoundaries(iBPO)))
+ END IF ! iBPO.GT.9
+ END DO ! iBPO = 1, BPO%NPartBoundaries
+ ELSE
+ CALL MPI_REDUCE(TotalSurfArea , 0 , BPO%NPartBoundaries , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ END IF
+#endif /*USE_MPI*/
+ DEALLOCATE(TotalSurfArea)
+END IF ! iter.EQ.0
+
END SUBROUTINE InitBoundaryParticleOutput
@@ -891,6 +921,8 @@ END SUBROUTINE InitBoundaryParticleOutput
!> 1) Check if secondary electron emission occurs
!> 1.1) Count number of different SEE boundaries via reflective particle BC
!> 1.2) Count number of different photon SEE boundaries
+!> 1.3) Count number of ray tracing photon SEE boundaries. WARNING: The combination of Init-based photon SEE and ray tracing photon
+! SEE is not allowed
!> 2.) Create Mapping from SEE BC index to particle BC index
!> 2.1) Create mapping for reactive surface SEE (non-photon impacts)
!> 2.2) Create mapping for photon-surface SEE
@@ -939,13 +971,26 @@ SUBROUTINE InitCalcElectronSEE()
END DO
NPartBoundariesPhotonSEE = SEE%NPartBoundaries - NPartBoundariesReflectiveSEE
+! 1.3) Count number of ray tracing photon SEE boundaries. WARNING: The combination of Init-based photon SEE and ray tracing photon
+! SEE is not allowed
+DO iPartBound = 1, nPartBound
+ IF(PartBound%PhotonSEEYield(iPartBound).GT.0.0)THEN
+ ! Sanity checks
+ IF(NPartBoundariesPhotonSEE.GT.0) CALL abort(__STAMP__,'The combination of Init-based + ray tracing photon SEE is not allowed!')
+ ! Remove the following check when the model is implemented (deposited charge holes by SEE)
+ IF(PartBound%Dielectric(iPartBound)) CALL abort(__STAMP__,'Dielectric surfaces and ray tracing ist not implemented')
+ SEE%NPartBoundaries = SEE%NPartBoundaries + 1
+ END IF ! PartBound%PhotonSEEYield(iPartBound).GT.0.0
+END DO ! iPartBound = 1, nPartBound
+NPartBoundariesPhotonSEE = SEE%NPartBoundaries - NPartBoundariesReflectiveSEE
+
! If not SEE boundaries exist, no measurement of the current can be performed
IF(SEE%NPartBoundaries.EQ.0) RETURN
! Automatically activate when CalcBoundaryParticleOutput=T
IF(CalcBoundaryParticleOutput)THEN
CalcElectronSEE = .TRUE.
- CALL PrintOption('SEE current measurement activated (CalcBoundaryParticleOutput=T): CalcElectronSEE','INFO',&
+ CALL PrintOption('SEE current activated (CalcBoundaryParticleOutput=T): CalcElectronSEE','INFO',&
LogOpt=CalcElectronSEE)
ELSE
CalcElectronSEE = GETLOGICAL('CalcElectronSEE','.FALSE.')
@@ -969,7 +1014,7 @@ SUBROUTINE InitCalcElectronSEE()
SEE%PartBoundaries(SEE%NPartBoundaries) = iPartBound
END SELECT
END DO ! iPartBound=1,nPartBound
-! 2.2) Create mapping for photon-surface SEE
+! 2.2) Create mapping for photon-surface SEE (Init-based)
DO iSpec=1,nSpecies
DO iInit=1, Species(iSpec)%NumberOfInits
IF(Species(iSpec)%Init(iInit)%PartBCIndex.GT.0)THEN
@@ -980,6 +1025,13 @@ SUBROUTINE InitCalcElectronSEE()
END IF
END DO
END DO
+! 2.3) Create mapping for photon-surface SEE (ray tracing)
+DO iPartBound = 1, nPartBound
+ IF(PartBound%PhotonSEEYield(iPartBound).GT.0.0)THEN
+ SEE%NPartBoundaries = SEE%NPartBoundaries + 1
+ SEE%PartBoundaries(SEE%NPartBoundaries) = iPartBound
+ END IF ! PartBound%PhotonSEEYield(iPartBound).GT.0.0
+END DO ! iPartBound = 1, nPartBound
! Allocate the container
ALLOCATE(SEE%RealElectronOut(1:SEE%NPartBoundaries))
diff --git a/src/particles/surfacemodel/surfacemodel_init.f90 b/src/particles/surfacemodel/surfacemodel_init.f90
index 35beb1274..ca2251d29 100644
--- a/src/particles/surfacemodel/surfacemodel_init.f90
+++ b/src/particles/surfacemodel/surfacemodel_init.f90
@@ -49,6 +49,7 @@ SUBROUTINE DefineParametersSurfModel()
CALL prms%CreateRealOption( 'Part-SurfaceModel-SEE-Te' , 'Bulk electron temperature for SEE model by Morozov2004 in Kelvin (default corresponds to 50 eV)' , '5.80226250308285e5')
CALL prms%CreateLogicalOption( 'Part-SurfaceModel-SEE-Te-automatic' , 'Automatically set the bulk electron temperature by using the global electron temperature for SEE model by Morozov2004' , '.FALSE.')
+CALL prms%CreateRealArrayOption('Part-Boundary[$]-SurfModSEEPowerFit' , 'SEE Power-fit model (SurfaceModel = 4): coefficients of the form a*E(eV)^b, input as (a,b)', numberedmulti=.TRUE.,no=2)
END SUBROUTINE DefineParametersSurfModel
@@ -60,10 +61,11 @@ SUBROUTINE InitSurfaceModel()
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: Kelvin2eV
USE MOD_Particle_Vars ,ONLY: nSpecies,Species,usevMPF
-USE MOD_ReadInTools ,ONLY: GETINT,GETREAL,GETLOGICAL,GETSTR
+USE MOD_ReadInTools ,ONLY: GETINT,GETREAL,GETLOGICAL,GETSTR,GETREALARRAY
USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound,PartBound
USE MOD_SurfaceModel_Vars ,ONLY: BulkElectronTempSEE,SurfModSEEelectronTempAutoamtic
USE MOD_SurfaceModel_Vars ,ONLY: SurfModResultSpec,SurfModEnergyDistribution,SurfModEmissionEnergy,SurfModEmissionYield
+USE MOD_SurfaceModel_Vars ,ONLY: SurfModSEEPowerFit
USE MOD_Particle_Vars ,ONLY: CalcBulkElectronTemp,BulkElectronTemp
!-----------------------------------------------------------------------------------------------------------------------------------
! IMPLICIT VARIABLE HANDLING
@@ -97,24 +99,21 @@ SUBROUTINE InitSurfaceModel()
ALLOCATE(SumOfResultSpec(nPartBound))
SumOfResultSpec = 0
-! Loop all species
-DO iSpec = 1,nSpecies
- WRITE(UNIT=hilf,FMT='(I0)') iSpec
-
- ! Loop particle boundaries
- DO iPartBound=1,nPartBound
- IF(.NOT.PartBound%Reactive(iPartBound)) CYCLE
- WRITE(UNIT=hilf2,FMT='(I0)') iPartBound
- hilf3=TRIM(hilf)//'-PartBound'//TRIM(hilf2)
- SELECT CASE(PartBound%SurfaceModel(iPartBound))
- CASE(SEE_MODELS_ID)
- ! 5: SEE by Levko2015
- ! 6: SEE by Pagonakis2016 (originally from Harrower1956)
- ! 7: SEE-I (bombarding electrons are removed, Ar+ on different materials is considered for SEE)
- ! 8: SEE-E (e- on dielectric materials is considered for SEE and three different outcomes)
- ! 9: SEE-I when Ar^+ ion bombards surface with 0.01 probability and fixed SEE electron energy of 6.8 eV
- !10: SEE-I (bombarding electrons are removed, Ar+ on copper is considered for SEE)
-!-----------------------------------------------------------------------------------------------------------------------------------
+ALLOCATE(SurfModSEEPowerFit(1:2, 1:nPartBound))
+SurfModSEEPowerFit = 0
+
+! Loop particle boundaries
+DO iPartBound=1,nPartBound
+ IF(.NOT.PartBound%Reactive(iPartBound)) CYCLE
+ WRITE(UNIT=hilf2,FMT='(I0)') iPartBound
+ !---------------------------------------------------------------------------------------------------------------------------------
+ ! Read-in parameters for all SEE models
+ SELECT CASE(PartBound%SurfaceModel(iPartBound))
+ CASE(SEE_MODELS_ID)
+ ! Loop all species
+ DO iSpec = 1,nSpecies
+ WRITE(UNIT=hilf,FMT='(I0)') iSpec
+ hilf3=TRIM(hilf)//'-PartBound'//TRIM(hilf2)
SurfModResultSpec(iPartBound,iSpec) = GETINT('Part-Species'//TRIM(hilf3)//'-ResultSpec')
SumOfResultSpec(iPartBound) = SumOfResultSpec(iPartBound) + SurfModResultSpec(iPartBound,iSpec)
IF(SumOfResultSpec(iPartBound).EQ.-nSpecies) CALL abort(__STAMP__,&
@@ -134,27 +133,37 @@ SUBROUTINE InitSurfaceModel()
END IF ! .NOT.(ALMOSTEQUALRELATIVE(MPFiSpec,MPFresultSpec,1e-3))
END IF ! MPFresultSpec.NE.-1
END IF ! .NOT.usevMPF
- ! Set specific distributions functions
- IF(PartBound%SurfaceModel(iPartBound).EQ.8)THEN
- SurfModEnergyDistribution(iPartBound) = 'Morozov2004'
- SurfModelElectronTemp = .TRUE.
- ELSEIF(PartBound%SurfaceModel(iPartBound).EQ.7)THEN
- ! Skip already initialized boundaries
- IF(SurfModEmissionEnergy(iPartBound).LT.-1.)THEN
- ! Note that the define vars help needs to be changed as soon as these parameters are available for other surface models
- SurfModEnergyDistribution(iPartBound) = TRIM(GETSTR('Part-Boundary'//TRIM(hilf2)//'-SurfModEnergyDistribution','deltadistribution'))
- SurfModEmissionEnergy(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf2)//'-SurfModEmissionEnergy','-1.0')
- IF((SurfModEmissionEnergy(iPartBound).LE.0.).AND.(SurfModEnergyDistribution(iPartBound).EQ.'uniform-energy')) CALL abort(&
- __STAMP__,'SEE model with uniform-energy distribution requires Part-BoundaryX-SurfModEmissionEnergy > 0.')
- SurfModEmissionYield(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf2)//'-SurfModEmissionYield' ,'0.13')
- END IF ! SurfModEmissionEnergy(iPartBound).LE.0.
- ELSE
- SurfModEnergyDistribution(iPartBound) = 'deltadistribution'
- END IF ! PartBound%SurfaceModel(iPartBound).EQ.8
- END SELECT
- END DO ! iPartBound=1,nPartBound
-
-END DO ! iSpec = 1,nSpecies
+ END DO ! iSpec = 1,nSpecies
+ END SELECT
+ !---------------------------------------------------------------------------------------------------------------------------------
+ ! Set the default energy distribution
+ SurfModEnergyDistribution(iPartBound) = 'deltadistribution'
+ !---------------------------------------------------------------------------------------------------------------------------------
+ ! Read-in and set SEE model specific parameters
+ SELECT CASE(PartBound%SurfaceModel(iPartBound))
+ ! 4: SEE Power-fit model by Goebel & Katz „Fundamentals of Electric Propulsion - Ion and Hall Thrusters“
+ CASE(4)
+ CALL abort(__STAMP__,'SEE model power fit: Implementation not yet finished, regression test and documentation is missing!')
+ SurfModSEEPowerFit(1:2,iPartBound) = GETREALARRAY('Part-Boundary'//TRIM(hilf2)//'-SurfModSEEPowerFit',2)
+ ! 5: SEE by Levko2015
+ ! 6: SEE by Pagonakis2016 (originally from Harrower1956)
+ ! 7: SEE-I (bombarding electrons are removed, Ar+ on different materials is considered for SEE)
+ CASE(7)
+ ! Note that the define vars help needs to be changed as soon as these parameters are available for other surface models
+ SurfModEnergyDistribution(iPartBound) = TRIM(GETSTR('Part-Boundary'//TRIM(hilf2)//'-SurfModEnergyDistribution','deltadistribution'))
+ SurfModEmissionEnergy(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf2)//'-SurfModEmissionEnergy','-1.0')
+ IF((SurfModEmissionEnergy(iPartBound).LE.0.).AND.(SurfModEnergyDistribution(iPartBound).EQ.'uniform-energy')) CALL abort(&
+ __STAMP__,'SEE model with uniform-energy distribution requires Part-BoundaryX-SurfModEmissionEnergy > 0.')
+ SurfModEmissionYield(iPartBound) = GETREAL('Part-Boundary'//TRIM(hilf2)//'-SurfModEmissionYield' ,'0.13')
+ ! 8: SEE-E (e- on dielectric materials is considered for SEE and three different outcomes)
+ CASE(8)
+ SurfModEnergyDistribution(iPartBound) = 'Morozov2004'
+ SurfModelElectronTemp = .TRUE.
+ ! 9: SEE-I when Ar^+ ion bombards surface with 0.01 probability and fixed SEE electron energy of 6.8 eV
+ !10: SEE-I (bombarding electrons are removed, Ar+ on copper is considered for SEE)
+ END SELECT
+ !---------------------------------------------------------------------------------------------------------------------------------
+END DO ! iPartBound=1,nPartBound
DEALLOCATE(SumOfResultSpec)
@@ -192,6 +201,7 @@ SUBROUTINE FinalizeSurfaceModel()
SDEALLOCATE(SurfModEmissionEnergy)
SDEALLOCATE(SurfModEmissionYield)
SDEALLOCATE(StickingCoefficientData)
+SDEALLOCATE(SurfModSEEPowerFit)
END SUBROUTINE FinalizeSurfaceModel
END MODULE MOD_SurfaceModel_Init
diff --git a/src/particles/surfacemodel/surfacemodel_main.f90 b/src/particles/surfacemodel/surfacemodel_main.f90
index 9f06c8796..62892b840 100644
--- a/src/particles/surfacemodel/surfacemodel_main.f90
+++ b/src/particles/surfacemodel/surfacemodel_main.f90
@@ -33,8 +33,8 @@ MODULE MOD_SurfaceModel
!===================================================================================================================================
!> Selection and execution of a gas-surface interaction model
!> 0.) Initial surface pre-treatment: Porous BC and initialization of charge deposition on dielectrics
-!> 1.) species swap
-!> 2.) Count and sample the properties BEFORE the surface interaction
+!> 1.) Count and sample the properties BEFORE the surface interaction
+!> 2.) Perform the species swap
!> 3.) Perform the selected gas-surface interaction, currently implemented models:
! 0: Maxwell Scattering
! 5/6/7/8/9/10/11: Secondary Electron Emission
@@ -84,8 +84,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
INTEGER :: ProductSpecNbr !< number of emitted particles for ProductSpec(2)
REAL :: TempErgy !< temperature, energy or velocity used for VeloFromDistribution
REAL :: Xitild,Etatild
-INTEGER :: PartSpecImpact, locBCID
-INTEGER :: iBC, SurfSideID
+INTEGER :: PartSpecImpact, locBCID, SurfSideID
LOGICAL :: SpecularReflectionOnly,DoSample
REAL :: ChargeImpact,PartPosImpact(1:3) !< Charge and position of impact of bombarding particle
REAL :: ChargeRefl !< Charge of reflected particle
@@ -93,8 +92,6 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
REAL :: ChargeHole !< Charge of SEE electrons holes
INTEGER :: i
!===================================================================================================================================
-iBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))
-
!===================================================================================================================================
! 0.) Initial surface pre-treatment
!===================================================================================================================================
@@ -111,7 +108,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
! Store info of impacting particle for possible surface charging
PartPosImpact(1:3) = LastPartPos(1:3,PartID)+TrackInfo%PartTrajectory(1:3)*TrackInfo%alpha
-IF(DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN ! Surface charging active + dielectric surface contact
+IF(DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN ! Surface charging active + dielectric surface contact
IF(usevMPF)THEN
MPF = PartMPF(PartID)
ELSE
@@ -120,12 +117,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
ChargeImpact = Species(PartSpecies(PartID))%ChargeIC*MPF
END IF
!===================================================================================================================================
-! 1.) Species Swap
-!===================================================================================================================================
-IF (PartBound%NbrOfSpeciesSwaps(iBC).GT.0) CALL SpeciesSwap(PartID,SideID)
-
-!===================================================================================================================================
-! 2.) Count and sample the properties BEFORE the surface interaction
+! 1.) Count and sample the properties BEFORE the surface interaction
!===================================================================================================================================
! Counter for surface analyze
IF(CalcSurfCollCounter) SurfAnalyzeCount(PartSpecImpact) = SurfAnalyzeCount(PartSpecImpact) + 1
@@ -145,12 +137,16 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
CALL CalcWallSample(PartID,SurfSideID,'old',SurfaceNormal_opt=n_loc)
END IF
!===================================================================================================================================
+! 2.) Species Swap
+!===================================================================================================================================
+IF (PartBound%NbrOfSpeciesSwaps(locBCID).GT.0) CALL SpeciesSwap(PartID,SideID)
+!===================================================================================================================================
! Particle was deleted during the species swap/circular flow, leave the routine
!===================================================================================================================================
IF(.NOT.PDM%ParticleInside(PartID)) THEN
! Increase the counter for deleted/absorbed/adsorbed particles
IF(CalcSurfCollCounter) SurfAnalyzeNumOfAds(PartSpecImpact) = SurfAnalyzeNumOfAds(PartSpecImpact) + 1
- IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) &
+ IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) &
CALL DepositParticleOnNodes(ChargeImpact, PartPosImpact, GlobalElemID)
RETURN
END IF
@@ -188,7 +184,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
IF (ProductSpec(2).GT.0) THEN
CALL SurfaceModel_ParticleEmission(n_loc, PartID, SideID, ProductSpec, ProductSpecNbr, TempErgy, GlobalElemID,PartPosImpact(1:3))
! Deposit opposite charge of SEE on node
- IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN
+ IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN
! Get MPF
IF (usevMPF) THEN
IF (RadialWeighting%DoRadialWeighting) THEN
@@ -214,7 +210,7 @@ SUBROUTINE SurfaceModel(PartID,SideID,GlobalElemID,n_Loc)
!===================================================================================================================================
! 4.) PIC ONLY: Deposit charges on dielectric surface (when activated), if these were removed/changed in SurfaceModel
!===================================================================================================================================
-IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(iBC)) THEN ! Surface charging active + dielectric surface contact
+IF(DoDeposition.AND.DoDielectricSurfaceCharge.AND.PartBound%Dielectric(locBCID)) THEN ! Surface charging active + dielectric surface contact
IF(.NOT.PDM%ParticleInside(PartID))THEN
! Particle was deleted on surface contact: deposit impacting charge
CALL DepositParticleOnNodes(ChargeImpact, PartPosImpact, GlobalElemID)
@@ -752,31 +748,35 @@ SUBROUTINE SpeciesSwap(PartID,SideID,targetSpecies_IN)
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-INTEGER :: targetSpecies, iSwaps
+INTEGER :: targetSpecies, iSwaps, locBCID
REAL :: RanNum
-INTEGER :: locBCID
+LOGICAL :: PerformSwap
!===================================================================================================================================
+PerformSwap = .TRUE.
locBCID = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))
-CALL RANDOM_NUMBER(RanNum)
-IF(RanNum.LE.PartBound%ProbOfSpeciesSwaps(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))) THEN
+IF(PartBound%ProbOfSpeciesSwaps(locBCID).LT.1.) THEN
+ CALL RANDOM_NUMBER(RanNum)
+ PerformSwap = RanNum.LE.PartBound%ProbOfSpeciesSwaps(locBCID)
+END IF
+
+IF(PerformSwap) THEN
targetSpecies=-1 ! Dummy initialization value
IF(PRESENT(targetSpecies_IN))THEN
targetSpecies = targetSpecies_IN
ELSE ! Normal swap routine
- DO iSwaps=1,PartBound%NbrOfSpeciesSwaps(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))
- IF (PartSpecies(PartID).eq.PartBound%SpeciesSwaps(1,iSwaps,PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))) &
- targetSpecies = PartBound%SpeciesSwaps(2,iSwaps,PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))
+ DO iSwaps=1,PartBound%NbrOfSpeciesSwaps(locBCID)
+ IF (PartSpecies(PartID).EQ.PartBound%SpeciesSwaps(1,iSwaps,locBCID)) targetSpecies = PartBound%SpeciesSwaps(2,iSwaps,locBCID)
END DO
END IF ! PRESENT(targetSpecies_IN)
- !swap species
- IF (targetSpecies.eq.0) THEN
+ ! Swap species
+ IF (targetSpecies.EQ.0) THEN
! Delete particle -> same as PartBound%OpenBC
- CALL RemoveParticle(PartID,BCID=PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))
- ELSE IF (targetSpecies.gt.0) THEN
+ CALL RemoveParticle(PartID,BCID=locBCID)
+ ELSE IF (targetSpecies.GT.0) THEN
! Swap species
PartSpecies(PartID)=targetSpecies
- END IF ! targetSpecies.eq.0
+ END IF ! targetSpecies.EQ.0
END IF ! RanNum.LE.PartBound%ProbOfSpeciesSwaps
END SUBROUTINE SpeciesSwap
@@ -919,7 +919,7 @@ SUBROUTINE StickingCoefficientModel(PartID,SideID,n_Loc)
IF(ParticleSticks) THEN
! Remove the particle from the simulation (total energy was added to the sampled heat flux before the interaction)
- CALL RemoveParticle(PartID)
+ CALL RemoveParticle(PartID,BCID=locBCID)
ELSE
! Perform regular Maxwell scattering
CALL MaxwellScattering(PartID,SideID,n_Loc)
diff --git a/src/particles/surfacemodel/surfacemodel_porous.f90 b/src/particles/surfacemodel/surfacemodel_porous.f90
index f7880e7b0..ff5b73c1f 100644
--- a/src/particles/surfacemodel/surfacemodel_porous.f90
+++ b/src/particles/surfacemodel/surfacemodel_porous.f90
@@ -427,7 +427,7 @@ SUBROUTINE PorousBoundaryRemovalProb_Pressure()
USE MOD_Globals
USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting
USE MOD_Mesh_Vars ,ONLY: nElems,offsetElem
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode, SurfSide2GlobalSide
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, SurfSide2GlobalSide
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC, PorousBC
USE MOD_SurfaceModel_Analyze_Vars ,ONLY: CalcPorousBCInfo, PorousBCOutput
USE MOD_Particle_Boundary_Vars ,ONLY: nPorousSides, PorousBCProperties_Shared, PorousBCInfo_Shared, SampWallPumpCapacity
@@ -454,7 +454,7 @@ SUBROUTINE PorousBoundaryRemovalProb_Pressure()
REAL :: SumPartImpinged(nPorousBC)
!===================================================================================================================================
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
IF(usevMPF.OR.RadialWeighting%DoRadialWeighting) THEN
partWeight = 1.
@@ -609,7 +609,7 @@ SUBROUTINE ExchangeImpingedPartPorousBC()
USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF
USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_Particle_Boundary_Vars ,ONLY: MapSurfSideToPorousSide_Shared
USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide
USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping
@@ -629,7 +629,7 @@ SUBROUTINE ExchangeImpingedPartPorousBC()
INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1)
!===================================================================================================================================
! nodes without sampling surfaces do not take part in this routine
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
nValues = 2
! 1.) Collect the information from the proc-local shadow arrays in the compute-node shared array
@@ -766,7 +766,7 @@ SUBROUTINE ExchangeRemovalProbabilityPorousBC
USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,MPI_COMM_LEADERS_SURF
USE MOD_MPI_Shared_Vars ,ONLY: nSurfLeaders,myComputeNodeRank,mySurfRank
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode
USE MOD_Particle_Boundary_Vars ,ONLY: GlobalSide2SurfSide
USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping, MapSurfSideToPorousSide_Shared
USE MOD_Particle_Boundary_Vars ,ONLY: PorousBCProperties_Shared,PorousBCProperties_Shared_Win
@@ -785,7 +785,7 @@ SUBROUTINE ExchangeRemovalProbabilityPorousBC
INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1)
!===================================================================================================================================
! nodes without sampling surfaces do not take part in this routine
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
! 1) Synchronize the removal probability
CALL BARRIER_AND_SYNC(PorousBCProperties_Shared_Win,MPI_COMM_SHARED)
@@ -909,7 +909,7 @@ SUBROUTINE InitPorousCommunication()
USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SHARED,MPI_COMM_LEADERS_SURF
USE MOD_MPI_Shared_Vars ,ONLY: MPIRankSurfLeader
USE MOD_MPI_Shared_Vars ,ONLY: myLeaderGroupRank,nSurfLeaders,nLeaderGroupProcs
-USE MOD_Particle_Boundary_Vars ,ONLY: SurfOnNode,nComputeNodeSurfTotalSides
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode,nComputeNodeSurfTotalSides
USE MOD_Particle_Boundary_Vars ,ONLY: SurfMapping
USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide
USE MOD_Particle_Boundary_Vars ,ONLY: nPorousSides, PorousBCInfo_Shared
@@ -982,7 +982,7 @@ SUBROUTINE InitPorousCommunication()
IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error', IERROR)
END DO
-IF (.NOT.SurfOnNode) RETURN
+IF (.NOT.SurfTotalSideOnNode) RETURN
SurfMapping(:)%nRecvPorousSides = 0
SurfMapping(:)%nSendPorousSides = 0
diff --git a/src/particles/surfacemodel/surfacemodel_vars.f90 b/src/particles/surfacemodel/surfacemodel_vars.f90
index 5902a2619..a661144b3 100644
--- a/src/particles/surfacemodel/surfacemodel_vars.f90
+++ b/src/particles/surfacemodel/surfacemodel_vars.f90
@@ -52,6 +52,7 @@ MODULE MOD_SurfaceModel_Vars
! converted to eV for usage in the code
LOGICAL :: SurfModSEEelectronTempAutoamtic ! BulkElectronTempSEE = BulkElectronTemp, which is calculated
! automatically for the first species ID for electrons
+REAL, ALLOCATABLE :: SurfModSEEPowerFit(:,:) ! Power-fit coefficients (1=a, 2=b) of the form: a*T(ev)^b
! === Sticking coefficient from simple models/interpolation
REAL, ALLOCATABLE :: StickingCoefficientData(:,:) ! Data for the model using non-bounce and condensation probability
diff --git a/src/particles/tracking/particle_intersection.f90 b/src/particles/tracking/particle_intersection.f90
index db8b14e12..ef06ae9bd 100644
--- a/src/particles/tracking/particle_intersection.f90
+++ b/src/particles/tracking/particle_intersection.f90
@@ -54,6 +54,7 @@ MODULE MOD_Particle_InterSection
#ifdef CODE_ANALYZE
PUBLIC :: OutputTrajectory
#endif /*CODE_ANALYZE*/
+PUBLIC :: ComputeXi,ComputeSurfaceDistance2
!-----------------------------------------------------------------------------------------------------------------------------------
!-----------------------------------------------------------------------------------------------------------------------------------
!===================================================================================================================================
@@ -769,9 +770,9 @@ SUBROUTINE ComputeBiLinearIntersection(isHit,PartTrajectory,lengthPartTrajectory
NormalCoeff(:,4) = BiLinearCoeff(:,4) - SUM(BiLinearCoeff(:,4)*PartTrajectory(:))*PartTrajectory
! A1 is X_xz = X_z - X_x
-a1(:) = NormalCoeff(3,:) - NormalCoeff(1,:)
+A1(:) = NormalCoeff(3,:) - NormalCoeff(1,:)
! A2 is X_yz = X_z - X_y
-a2(:) = NormalCoeff(3,:) - NormalCoeff(2,:)
+A2(:) = NormalCoeff(3,:) - NormalCoeff(2,:)
! Bring into quadratic form
A = a1(1)*a2(3) - a2(1)*a1(3)
@@ -799,11 +800,11 @@ SUBROUTINE ComputeBiLinearIntersection(isHit,PartTrajectory,lengthPartTrajectory
! nRoot equals the number of possible intersections with the bilinear surface. However, only values between [-1,1] are valid
SELECT CASE(nRoot)
! No intersection
- CASE(0)
+ CASE(0) ! nRoot = 0
RETURN
! One possible intersection
- CASE(1)
+ CASE(1) ! nRoot = 1
#ifdef CODE_ANALYZE
IF(PARTOUT.GT.0 .AND. MPIRANKOUT.EQ.MyRank)THEN
IF(PartID.EQ.PARTOUT)THEN
@@ -870,7 +871,7 @@ SUBROUTINE ComputeBiLinearIntersection(isHit,PartTrajectory,lengthPartTrajectory
RETURN
END IF ! ABS(eta(1)).LE.1.0
- CASE(2)
+ CASE(2) ! nRoot = 2
#ifdef CODE_ANALYZE
IF(PARTOUT.GT.0 .AND. MPIRANKOUT.EQ.MyRank)THEN
IF(PartID.EQ.PARTOUT)THEN
diff --git a/src/particles/tracking/particle_localization.f90 b/src/particles/tracking/particle_localization.f90
index 7c4901187..ccc310683 100644
--- a/src/particles/tracking/particle_localization.f90
+++ b/src/particles/tracking/particle_localization.f90
@@ -54,6 +54,7 @@ SUBROUTINE LocateParticleInElement(PartID,doHALO)
!----------------------------------------------------------------------------------------------------------------------------------!
! MODULES !
USE MOD_Particle_Vars ,ONLY: PDM,PEM,PartState,PartPosRef
+USE MOD_part_operations ,ONLY: RemoveParticle
USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
!----------------------------------------------------------------------------------------------------------------------------------!
@@ -68,9 +69,10 @@ SUBROUTINE LocateParticleInElement(PartID,doHALO)
ElemID = SinglePointToElement(PartState(1:3,PartID),doHALO=doHALO)
PEM%GlobalElemID(PartID) = ElemID
IF(ElemID.EQ.-1)THEN
- PDM%ParticleInside(PartID)=.FALSE.
+ CALL RemoveParticle(PartID)
ELSE
PDM%ParticleInside(PartID)=.TRUE.
+ PDM%isNewPart(PartID) = .TRUE.
IF(TrackingMethod.EQ.REFMAPPING) CALL GetPositionInRefElem(PartState(1:3,PartID),PartPosRef(1:3,PartID),ElemID)
END IF ! ElemID.EQ.-1
END SUBROUTINE LocateParticleInElement
diff --git a/src/particles/tracking/particle_tracing.f90 b/src/particles/tracking/particle_tracing.f90
index 54f6d830c..22bace404 100644
--- a/src/particles/tracking/particle_tracing.f90
+++ b/src/particles/tracking/particle_tracing.f90
@@ -92,6 +92,7 @@ SUBROUTINE ParticleTracing()
USE MOD_Particle_Intersection ,ONLY: ComputeBiLinearIntersection
USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
USE MOD_Part_Tools ,ONLY: StoreLostParticleProperties
+USE MOD_part_operations ,ONLY: RemoveParticle
#ifdef CODE_ANALYZE
#ifdef IMPA
USE MOD_Particle_Vars ,ONLY: PartIsImplicit,PartDtFrac
@@ -375,7 +376,7 @@ SUBROUTINE ParticleTracing()
IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' Removing particle with id: ',iPart
END IF ! DisplayLostParticles
PartIsDone=.TRUE.
- PDM%ParticleInside(iPart)=.FALSE.
+ CALL RemoveParticle(iPart)
#ifdef IMPA
DoParticle=.FALSE.
#endif /*IMPA*/
@@ -594,7 +595,7 @@ SUBROUTINE ParticleTracing()
!---------------------------------------------CODE_ANALYZE--------------------------------------------------------------------------
! check if particle is still inside of bounding box of domain and in element
#if USE_MPI
-CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
DO iPart=1,PDM%ParticleVecLength
#ifdef IMPA
diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90
index 86857e139..bf6040499 100644
--- a/src/particles/tracking/particle_triatracking.f90
+++ b/src/particles/tracking/particle_triatracking.f90
@@ -81,7 +81,7 @@ SUBROUTINE ParticleTriaTracking()
#else
IF (PDM%ParticleInside(i)) THEN
#endif /*IMPA*/
- CALL SingleParticleTriaTracking(i=i)
+ CALL SingleParticleTriaTracking(i=i)
END IF
! Particle treatment for an axisymmetric simulation (cloning/deleting particles)
IF(RadialWeighting%PerformCloning) THEN
@@ -138,6 +138,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart)
USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck3DFast, ParticleThroughSideLastPosCheck, IntersectionWithWall
USE MOD_Particle_Boundary_Condition ,ONLY: GetBoundaryInteraction
USE MOD_part_tools ,ONLY: ParticleOnProc, InRotRefFrameCheck
+USE MOD_part_operations ,ONLY: RemoveParticle
#if USE_LOADBALANCE
USE MOD_Mesh_Vars ,ONLY: offsetElem
USE MOD_LoadBalance_Timers ,ONLY: LBStartTime, LBElemSplitTime, LBElemPauseTime
@@ -206,7 +207,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart)
TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
! Skip symmetry side
IF(Symmetry%Order.EQ.2) THEN
- IF(SideIsSymSide_Shared(TempSideID)) CYCLE
+ IF(SideIsSymSide(TempSideID)) CYCLE
END IF
localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
! Side is not one of the 6 local sides
@@ -272,11 +273,11 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart)
IPWRITE(*,*) 'Velo: ', PartState(4:6,i)
IPWRITE(*,*) 'Particle deleted!'
END IF ! DisplayLostParticles
- PDM%ParticleInside(i) = .FALSE.
IF(CountNbrOfLostParts) THEN
CALL StoreLostParticleProperties(i, ElemID)
NbrOfLostParticles=NbrOfLostParticles+1
END IF
+ CALL RemoveParticle(i)
PartisDone = .TRUE.
EXIT
ELSE IF (NrOfThroughSides.GT.1) THEN
@@ -367,11 +368,11 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart)
IPWRITE(*,*) 'Velo: ', PartState(4:6,i)
IPWRITE(*,*) 'Particle deleted!'
END IF ! DisplayLostParticles
- PDM%ParticleInside(i) = .FALSE.
IF(CountNbrOfLostParts) THEN
CALL StoreLostParticleProperties(i, ElemID)
NbrOfLostParticles=NbrOfLostParticles+1
END IF
+ CALL RemoveParticle(i)
PartisDone = .TRUE.
EXIT
END IF
diff --git a/src/particles/ttm/ttm_init.f90 b/src/particles/ttm/ttm_init.f90
index 4bd85de33..5d6791555 100644
--- a/src/particles/ttm/ttm_init.f90
+++ b/src/particles/ttm/ttm_init.f90
@@ -114,9 +114,6 @@ SUBROUTINE InitTTM()
USE MOD_ReadInTools
USE MOD_TTM_Vars
USE MOD_Restart_Vars ,ONLY: DoRestart
-#if USE_MPI
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
-#endif /*USE_MPI*/
USE MOD_Mesh_Vars ,ONLY: ElemBaryNGeo
USE MOD_Globals_Vars ,ONLY: BoltzmannConst,eps0
USE MOD_IO_HDF5 ,ONLY: AddToElemData,ElementOut
@@ -196,7 +193,7 @@ SUBROUTINE InitTTM()
ElemIsDone=.FALSE.
LBWRITE(UNIT_stdOut,'(A,A)') " Reading TTM data from file (TTMFile): ",TRIM(TTMFile)
#if USE_MPI
- IF(.NOT.PartMPI%MPIROOT)THEN
+ IF(.NOT.MPIRoot)THEN
CALL abort(&
__STAMP__&
,'ERROR: Cannot SetParticlePosition in multi-core environment for SpaceIC=IMD!')
@@ -774,6 +771,7 @@ SUBROUTINE InitIMD_TTM_Coupling()
USE MOD_part_emission_tools ,ONLY: CalcVelocity_maxwell_lpn
USE MOD_DSMC_Vars ,ONLY: useDSMC
USE MOD_Eval_xyz ,ONLY: TensorProductInterpolation
+USE MOD_Part_Tools ,ONLY: GetNextFreePosition
!----------------------------------------------------------------------------------------------------------------------------------!
IMPLICIT NONE
! INPUT VARIABLES
@@ -867,13 +865,11 @@ SUBROUTINE InitIMD_TTM_Coupling()
DO iElem=1,PP_nElems
DO iPart=1,ElemCharge(iElem) ! 1 electron for each charge of each element
- ! Set the next free position in the particle vector list
- PDM%CurrentNextFreePosition = PDM%CurrentNextFreePosition + 1
- ParticleIndexNbr = PDM%nextFreePosition(PDM%CurrentNextFreePosition)
- PDM%ParticleVecLength = PDM%ParticleVecLength + 1
+ ParticleIndexNbr = GetNextFreePosition()
!Set new SpeciesID of new particle (electron)
- PDM%ParticleInside(ParticleIndexNbr) = .true.
+ PDM%ParticleInside(ParticleIndexNbr) = .TRUE.
+ PDM%isNewPart(ParticleIndexNbr) = .TRUE.
PartSpecies(ParticleIndexNbr) = ElecSpecIndx
! Place the electron randomly in the reference cell
diff --git a/src/piclas.f90 b/src/piclas.f90
index 4f21d4847..eb8be4396 100644
--- a/src/piclas.f90
+++ b/src/piclas.f90
@@ -22,7 +22,6 @@ PROGRAM Piclas
USE MOD_Piclas_init ,ONLY: FinalizePiclas
USE MOD_TimeDisc ,ONLY: TimeDisc
#if defined(MEASURE_MPI_WAIT)
-USE MOD_MPI ,ONLY: OutputMPIW8Time
USE MOD_MPI_Vars ,ONLY: MPIW8Time,MPIW8TimeSim,MPIW8TimeField,MPIW8TimeBaS,MPIW8TimeMM
USE MOD_MPI_Vars ,ONLY: MPIW8Count,MPIW8CountField,MPIW8CountBaS,MPIW8CountMM
#if defined(PARTICLES)
@@ -58,11 +57,6 @@ PROGRAM Piclas
! Finalize
CALL FinalizePiclas(IsLoadBalance=.FALSE.)
-#if defined(MEASURE_MPI_WAIT)
-! Collect the MPI_WAIT() over all procs and output
-IF(nProcessors.GT.1) CALL OutputMPIW8Time()
-#endif /*defined(MEASURE_MPI_WAIT)*/
-
! MPI
#if USE_MPI
! We also have to finalize MPI itself here
diff --git a/src/piclas.h b/src/piclas.h
index ac2704c20..62037e110 100644
--- a/src/piclas.h
+++ b/src/piclas.h
@@ -320,9 +320,9 @@
#define DT_BR_SWITCH 4
! Secondary electron emission
-#define SEE_MODELS_ID 5,6,7,8,9,10,11
+#define SEE_MODELS_ID 4,5,6,7,8,9,10,11
#if USE_HDG
! HDG Dirichlet BC Side IDs
#define HDGDIRICHLETBCSIDEIDS 2,4,5,6,7,8,50,51,52,60
-#endif
+#endif
\ No newline at end of file
diff --git a/src/posti/dmd/dmd.f90 b/src/posti/dmd/dmd.f90
index bcfb85466..ebde9d7e0 100644
--- a/src/posti/dmd/dmd.f90
+++ b/src/posti/dmd/dmd.f90
@@ -124,6 +124,7 @@ PROGRAM DMD_standalone
CALL FinalizeDMD()
CALL FinalizeMesh()
+GETTIME(EndT)
#if USE_MPI
CALL FinalizeMPI()
CALL MPI_FINALIZE(iError)
@@ -131,7 +132,6 @@ PROGRAM DMD_standalone
#endif
SWRITE(UNIT_stdOut,'(132("="))')
-GETTIME(EndT)
CALL DisplayMessageAndTime(EndT-StartT, 'DMD TOOL FINISHED! ', DisplayDespiteLB=.TRUE., DisplayLine=.FALSE.)
SWRITE(UNIT_stdOut,'(132("="))')
diff --git a/src/posti/dmd/dmd_main.f90 b/src/posti/dmd/dmd_main.f90
index e52300131..08e17bc94 100644
--- a/src/posti/dmd/dmd_main.f90
+++ b/src/posti/dmd/dmd_main.f90
@@ -147,7 +147,7 @@ SUBROUTINE InitDMD()
END IF ! nModes .GT. (nFiles-1)
! Open the first statefile to read necessary attributes
-CALL OpenDataFile(Args(2),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(Args(2),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'MeshFile', 1,StrScalar=MeshFile_state)
CALL ReadAttribute(File_ID,'Project_Name',1,StrScalar=ProjectName)
CALL ReadAttribute(File_ID,'Time', 1,RealScalar=starttime)
@@ -202,7 +202,7 @@ SUBROUTINE InitDMD()
!WRITE(UNIT_stdOut,'(132("="))')
! Read Statefiles
- CALL OpenDataFile(Args(iFile),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(Args(iFile),create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
offset=0
CALL ReadAttribute(File_ID,'Time', 1,RealScalar=time)
CALL ReadArray('DG_Solution',5,&
@@ -225,7 +225,7 @@ SUBROUTINE InitDMD()
TimeEnd_State = time
! IF (useBaseflow) THEN
-! CALL OpenDataFile(Baseflow,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+! CALL OpenDataFile(Baseflow,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! CALL ReadAttribute(File_ID,'File_Type',1,StrScalar =FileType)
! SELECT CASE(TRIM(FileType))
! CASE('State')
@@ -233,9 +233,9 @@ SUBROUTINE InitDMD()
! CALL ReadAttribute(File_ID,'Time', 1,RealScalar=time)
! CALL ReadArray('DG_Solution',5,&
! (/nVar_State,N_State+1,N_State+1,N_StateZ+1,nElems_State/),0,5,RealArray=Utmp)
-!
+!
! CALL CloseDataFile()
-!
+!
! CALL CalcEquationDMD(Utmp,Ktmp(:))
! DO iFile = 2,nFiles+1
! K(:,iFile-1) = K(:,iFile-1) - Ktmp
@@ -256,24 +256,24 @@ SUBROUTINE InitDMD()
! END IF
! END DO
! END DO
-!
+!
! ALLOCATE(Ktmp(nDoFs*nVarDMD))
! DEALLOCATE(Utmp)
! ALLOCATE(Utmp (HSize(1),0:N_State,0:N_State,0:N_StateZ,nElems_State))
-!
+!
! CALL ReadArray('Mean',5,&
! (/INT(HSize(1)),N_State+1,N_State+1,N_StateZ+1,nElems_State/),0,5,RealArray=Utmp)
! CALL CloseDataFile()
-!
+!
! ktmp(:) = RESHAPE(Utmp(VarSortTimeAvg,:,:,:,:), (/nDoFs*nVarDMD/))
-!
+!
! DO iFile = 2,nFiles+1
! K(:,iFile-1) = K(:,iFile-1) - Ktmp
! END DO
-!
+!
! DEALLOCATE(ktmp)
! END SELECT
-!
+!
! END IF
DEALLOCATE(Utmp)
@@ -566,7 +566,7 @@ SUBROUTINE WriteDmdStateFile()
IF(MPIRoot) CALL GenerateFileSkeleton('DMD',N_variables,StrVarNames,TRIM(MeshFile),Time_State,FileNameIn=TRIM(FileName),&
WriteUserblockIn = .FALSE.)
#if USE_MPI
- CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
#endif
!write(*,*) ""
@@ -574,7 +574,7 @@ SUBROUTINE WriteDmdStateFile()
!WRITE (*,*) "nDofs,nVarDMD,nModes =", nDofs,nVarDMD,nModes
!write(*,*) "OpenDataFile(TRIM(FileName),create=.FALSE.,single=.FALSE.,readOnly=.FALSE"
-CALL OpenDataFile(TRIM(FileName),create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(TRIM(FileName),create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
CALL WriteAttributeToHDF5( File_ID , 'DMD Start Time' , 1 , RealScalar=Time_State )
CALL WriteAttributeToHDF5( File_ID , 'DMD END Time' , 1 , RealScalar=TimeEnd_State )
CALL WriteAttributeToHDF5( File_ID , 'DMD dt' , 1 , RealScalar=dt )
@@ -587,7 +587,7 @@ SUBROUTINE WriteDmdStateFile()
!WRITE (*,*) "N_State,N_StateZ,nElems_State =", N_State,N_StateZ,nElems_State
!================= Actual data output =======================!
! Write DMD
-CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileName,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
IF (PlotSingleMode) THEN
k=1
DO i = 1, nModes
diff --git a/src/posti/piclas2vtk/piclas2vtk.f90 b/src/posti/piclas2vtk/piclas2vtk.f90
index 81667208f..5bfb6e129 100644
--- a/src/posti/piclas2vtk/piclas2vtk.f90
+++ b/src/posti/piclas2vtk/piclas2vtk.f90
@@ -44,6 +44,7 @@ PROGRAM piclas2vtk
USE MOD_Mesh_Tools ,ONLY: InitElemNodeIDs
#ifdef PARTICLES
USE MOD_Particle_Mesh_Tools ,ONLY: InitParticleGeometry
+USE MOD_Particle_Mesh_Vars ,ONLY: ConcaveElemSide_Shared,ElemSideNodeID_Shared,ElemMidPoint_Shared
#endif /*PARTICLES*/
USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemNodeID_Shared, NodeInfo_Shared
USE MOD_Mesh_Tools ,ONLY: InitGetCNElemID, InitGetGlobalElemID
@@ -52,6 +53,15 @@ PROGRAM piclas2vtk
USE MOD_MPI_Shared_Vars ,ONLY: nComputeNodeTotalElems
#endif /*USE_MPI*/
USE MOD_Preproc
+USE MOD_Mesh_ReadIn ,ONLY: FinalizeMeshReadin
+#if USE_MPI
+#if defined(PARTICLES)
+USE MOD_Particle_Mesh_Vars ,ONLY: ConcaveElemSide_Shared_Win,ElemSideNodeID_Shared_Win,ElemMidPoint_Shared_Win
+#endif /*defined(PARTICLES)*/
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemNodeID_Shared_Win
+USE MOD_MPI_Shared_vars ,ONLY: MPI_COMM_SHARED
+USE MOD_MPI_Shared
+#endif /*USE_MPI*/
IMPLICIT NONE
!----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
@@ -230,9 +240,7 @@ PROGRAM piclas2vtk
DO iArgs = iArgsStart,nArgs
InputStateFile = Args(iArgs)
! Check if the argument is a valid .h5 file
- IF(.NOT.ISVALIDHDF5FILE(InputStateFile)) THEN
- CALL Abort(__STAMP__,'ERROR - Please supply only .h5 files after parameter file.')
- END IF
+ IF(.NOT.ISVALIDHDF5FILE(InputStateFile)) CALL Abort(__STAMP__,'ERROR - Please supply only .h5 files after parameter file.')
SWRITE(UNIT_stdOut,'(132("="))')
SWRITE(UNIT_stdOut,'(A,I3,A,I3,A)') 'Processing state ',iArgs-iArgsStart+1,' of ',nArgs-iArgsStart+1,'...'
@@ -243,12 +251,16 @@ PROGRAM piclas2vtk
SurfaceDataExists = .FALSE.
PartDataExists = .FALSE.
AdaptiveInfoExists = .FALSE.
- CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Get the type of the .h5 file
CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type)
! Check which containers are present
CALL DatasetExists(File_ID , 'DG_Solution' , DGSolutionExists)
- IF(TRIM(File_Type).EQ.'PartStateBoundary') DGSolutionExists = .FALSE.
+ IF(TRIM(File_Type).EQ.'PartStateBoundary'.OR.TRIM(File_Type).EQ.'PartStateLost') THEN
+ ! Enable particle visualization for lost particle container (otherwise you get an empty file)
+ DGSolutionExists = .FALSE.
+ VisuParticles = .TRUE.
+ END IF
CALL DatasetExists(File_ID , 'ElemData' , ElemDataExists)
CALL DatasetExists(File_ID , 'ExcitationData', ExcitationDataExists)
CALL DatasetExists(File_ID , 'AdaptiveInfo' , AdaptiveInfoExists)
@@ -268,7 +280,7 @@ PROGRAM piclas2vtk
! Read-in of the mesh
IF(.NOT.ReadMeshFinished) THEN
- CALL InitMesh(-1,MeshFile_IN=MeshFile)
+ CALL InitMesh(-2,MeshFile_IN=MeshFile)
CALL InitGetGlobalElemID()
CALL InitGetCNElemID()
#if USE_MPI
@@ -284,7 +296,7 @@ PROGRAM piclas2vtk
END IF
! Build connectivity for element/volume output
IF(ElemDataExists.AND..NOT.ElemMeshInit) THEN
- CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(MeshFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'nUniqueNodes',1,IntScalar=nUniqueNodes)
CALL CloseDataFile()
ALLOCATE(ElemUniqueNodeID(1:8,1:nGlobalElems))
@@ -329,11 +341,11 @@ PROGRAM piclas2vtk
END IF
! === ElemData ===================================================================================================================
IF(ElemDataExists) THEN
- CALL ConvertElemData(InputStateFile,'ElemData','VarNamesAdd')
+ CALL ConvertElemData(InputStateFile,'ElemData','VarNamesAdd',iArgs)
END IF
! === ElemData ===================================================================================================================
IF(ExcitationDataExists) THEN
- CALL ConvertElemData(InputStateFile,'ExcitationData','VarNamesExci')
+ CALL ConvertElemData(InputStateFile,'ExcitationData','VarNamesExci',iArgs)
END IF
! === SurfaceData ================================================================================================================
IF(SurfaceDataExists) THEN
@@ -348,11 +360,40 @@ PROGRAM piclas2vtk
! === AdaptiveInfo
IF(VisuAdaptiveInfo) THEN
IF(AdaptiveInfoExists) THEN
- CALL ConvertElemData(InputStateFile,'AdaptiveInfo','VarNamesAdaptive')
+ CALL ConvertElemData(InputStateFile,'AdaptiveInfo','VarNamesAdaptive',iArgs)
END IF
END IF
END DO ! iArgs = 2, nArgs
+! Finalize
+IF(ReadMeshFinished)THEN
+ CALL FinalizeMeshReadin(-2)
+ ! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
+#if USE_MPI
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+#endif /*USE_MPI*/
+
+#if defined(PARTICLES)
+#if USE_MPI
+ ! InitParticleGeometry()
+ CALL UNLOCK_AND_FREE(ConcaveElemSide_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemSideNodeID_Shared_Win)
+ CALL UNLOCK_AND_FREE(ElemMidPoint_Shared_Win)
+#endif /*USE_MPI*/
+ ! InitParticleGeometry
+ ADEALLOCATE(ConcaveElemSide_Shared)
+ ADEALLOCATE(ElemSideNodeID_Shared)
+ ADEALLOCATE(ElemMidPoint_Shared)
+#endif /*defined(PARTICLES)*/
+
+#if USE_MPI
+ ! From InitElemNodeIDs
+ CALL UNLOCK_AND_FREE(ElemNodeID_Shared_Win)
+#endif /*USE_MPI*/
+ ADEALLOCATE(ElemNodeID_Shared)
+END IF ! ReadMeshFinished
+
+
! Measure processing duration
GETTIME(Time)
#if USE_MPI
@@ -369,16 +410,18 @@ END PROGRAM piclas2vtk
!===================================================================================================================================
!> Subroutine to write 3D point data to VTK format
!===================================================================================================================================
-SUBROUTINE WriteDataToVTK_PICLas(data_size,FileString,nVar,VarNameVisu,nNodes,Coords,nElems,Array,ConnectInfo)
+SUBROUTINE WriteDataToVTK_PICLas(dim,data_size,FileString,nVar,VarNameVisu,nNodes,Coords,nElems,Array,ConnectInfo)
! MODULES
USE MOD_Globals
+USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
+INTEGER,INTENT(IN) :: dim
INTEGER,INTENT(IN) :: nVar,nElems,nNodes,data_size !> Number of nodal output variables
-REAL,INTENT(IN) :: Coords(1:3,nNodes) !> Coordinates x, y and z
-REAL,INTENT(IN) :: Array(nVar,nElems) !> Array with nVar properties for each coordinate
+REAL,INTENT(IN) :: Coords(1:3,0:nSurfSample*(MERGE(1,0,nSurfSample.GT.1)),0:nSurfSample*(MERGE(1,0,nSurfSample.GT.1.AND.dim.GT.1)),0:nSurfSample*(MERGE(1,0,nSurfSample.GT.1.AND.dim.GT.2)),nNodes) !> Coordinates x, y and z
+REAL,INTENT(IN) :: Array(1:nVar,0:(nSurfSample-1)*(MERGE(1,0,nSurfSample.GT.1)),0:(nSurfSample-1)*(MERGE(1,0,nSurfSample.GT.1.AND.dim.GT.1)),0:(nSurfSample-1)*(MERGE(1,0,nSurfSample.GT.1.AND.dim.GT.2)),1:nElems) !< Array with nVar properties for each coordinate
CHARACTER(LEN=*),INTENT(IN) :: FileString !> Output file name
CHARACTER(LEN=*),INTENT(IN) :: VarNameVisu(nVar) !> Variable names
INTEGER,INTENT(IN) :: ConnectInfo(data_size,nElems) !> Node connection information
@@ -387,18 +430,44 @@ SUBROUTINE WriteDataToVTK_PICLas(data_size,FileString,nVar,VarNameVisu,nNodes,Co
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iVal,iElem,Offset,nBytes,nVTKPoints,nVTKCells,ivtk=44,iVar,iNode, int_size, ElemType
-INTEGER :: Vertex(data_size,nElems), iLen, str_len
+INTEGER :: iLen, str_len, NVisu, NVisuCoords,NodeID,NodeIDElem,NPlot_p1_2,i,j,NVisuValue
CHARACTER(LEN=35) :: StrOffset,TempStr1,TempStr2
CHARACTER(LEN=200) :: Buffer, tmp, tmp2, VarNameString
CHARACTER(LEN=1) :: lf, components_string
REAL(KIND=4) :: float
-INTEGER,ALLOCATABLE :: VarNameCombine(:), VarNameCombineLen(:)
+INTEGER,ALLOCATABLE :: VarNameCombine(:), VarNameCombineLen(:), Vertex(:,:)
REAL :: StartT,EndT ! Timer
!===================================================================================================================================
GETTIME(StartT)
-nVTKPoints=nNodes
-nVTKCells=nElems
+SELECT CASE(data_size)
+CASE(8,1) ! VTK_HEXAHEDRON, VTK_VERTEX
+ nVTKPoints=nNodes
+ nVTKCells=nElems
+ NVisu = 1
+ NVisuValue = 0
+ NVisuCoords = 0
+CASE(4) ! VTK_QUAD
+ IF(nSurfSample.GT.1) THEN
+ NPlot_p1_2 = (nSurfSample+1)**2
+ nVTKPoints = nElems * NPlot_p1_2
+ nVTKCells = nElems * nSurfSample**2
+ NVisu = nSurfSample
+ NVisuValue = nSurfSample - 1
+ NVisuCoords = nSurfSample
+ ELSE
+ nVTKPoints=nNodes
+ nVTKCells=nElems
+ NVisu = 1
+ NVisuValue = 0
+ NVisuCoords = 0
+ END IF
+CASE DEFAULT
+ CALL abort(__STAMP__,'Wrong data size given to WriteDataToVTK_PICLas routine!')
+END SELECT
+
+ALLOCATE(Vertex(data_size,nVTKCells))
+Vertex = 0
! Check if no output is present and print info that no file will be created
IF(nElems.LT.1)THEN
@@ -514,21 +583,39 @@ SUBROUTINE WriteDataToVTK_PICLas(data_size,FileString,nVar,VarNameVisu,nNodes,Co
nBytes = nVTKCells*INT(SIZEOF(FLOAT),4)
DO iVal=1,nVar
IF (VarNameCombine(iVal).EQ.0) THEN
- WRITE(ivtk) nBytes,REAL(Array(iVal,1:nVTKCells),4)
+ WRITE(ivtk) nBytes,REAL(Array(iVal,0:NVisuValue,0:NVisuValue*(MERGE(1,0,dim.GT.1)),0:NVisuValue*(MERGE(1,0,dim.GT.2)),1:nElems),4)
ELSEIF(VarNameCombine(iVal).EQ.1) THEN
- WRITE(ivtk) nBytes*VarNameCombineLen(iVal),REAL(Array(iVal:iVal+VarNameCombineLen(iVal)-1,1:nVTKCells),4)
+ WRITE(ivtk) nBytes*VarNameCombineLen(iVal),REAL(Array(iVal:iVal+VarNameCombineLen(iVal)-1,0:NVisuValue,0:NVisuValue*(MERGE(1,0,dim.GT.1)),0:NVisuValue*(MERGE(1,0,dim.GT.2)),1:nElems),4)
ENDIF
END DO
! Points
nBytes = 3*nVTKPoints*INT(SIZEOF(FLOAT),4)
WRITE(ivtk) nBytes
-WRITE(ivtk) REAL(Coords(1:3,1:nVTKPoints),4)
+WRITE(ivtk) REAL(Coords(1:3,0:NVisuCoords,0:NVisuCoords*(MERGE(1,0,dim.GT.1)),0:NVisuCoords*(MERGE(1,0,dim.GT.2)),1:nNodes),4)
! Connectivity
-DO iElem=1,nVTKCells
- DO iNode=1,data_size
- Vertex(iNode,iElem) = ConnectInfo(iNode,iElem)-1
+IF(nSurfSample.GT.1) THEN
+ NodeID = 0
+ NodeIDElem = 0
+ DO iElem=1,nElems
+ DO j=1,NVisu
+ DO i=1,NVisu
+ NodeID = NodeID+1
+ ! CGNS to VTK_QUAD: P4, P1, P2, P3
+ Vertex(:,NodeID) = (/NodeIDElem+i+ j *(NVisu+1)-1, &
+ NodeIDElem+i+ (j-1)*(NVisu+1)-1, &
+ NodeIDElem+i+1+(j-1)*(NVisu+1)-1, &
+ NodeIDElem+i+1+ j *(NVisu+1)-1 /)
+ END DO
+ END DO
+ NodeIDElem=NodeIDElem+NPlot_p1_2
+ END DO ! iElem
+ELSE
+ DO iElem=1,nVTKCells
+ DO iNode=1,data_size
+ Vertex(iNode,iElem) = ConnectInfo(iNode,iElem)-1
+ END DO
END DO
-END DO
+END IF
nBytes = data_size*nVTKCells*INT(SIZEOF(int_size),4)
WRITE(ivtk) nBytes
WRITE(ivtk) Vertex(:,:)
@@ -545,7 +632,7 @@ SUBROUTINE WriteDataToVTK_PICLas(data_size,FileString,nVar,VarNameVisu,nNodes,Co
CASE(1)
ElemType = 2 ! VTK_VERTEX
CASE DEFAULT
- CALL abort(__STAMP__,'Wrong data size given to WritaDataToVTK_PICLas routine!')
+ CALL abort(__STAMP__,'Wrong data size given to WriteDataToVTK_PICLas routine!')
END SELECT
WRITE(ivtk) nBytes
WRITE(ivtk) (ElemType,iElem=1,nVTKCells)
@@ -608,7 +695,7 @@ SUBROUTINE ConvertDGSolution(InputStateFile,NVisu,NodeTypeVisuOut,OutputName,DGS
CHARACTER(LEN=255) :: DMDFields(1:16), Dataset
!===================================================================================================================================
! 1.) Open given file to get the number of elements, the order and the name of the mesh file
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Check if data set exists, if not return
CALL DatasetExists(File_ID,TRIM(DGSolutionDataset),DGSolutionDatasetExists)
@@ -695,7 +782,7 @@ SUBROUTINE ConvertDGSolution(InputStateFile,NVisu,NodeTypeVisuOut,OutputName,DGS
END DO
! Read in solution
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Associate construct for integer KIND=8 possibility
ASSOCIATE (&
@@ -866,7 +953,7 @@ SUBROUTINE ConvertPartData(InputStateFile)
LOGICAL :: FileVersionExists
!===================================================================================================================================
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'Project_Name',1,StrScalar=ProjectName)
CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
@@ -936,8 +1023,8 @@ SUBROUTINE ConvertPartData(InputStateFile)
END DO
FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuPart',OutputTime))//'.vtu'
-CALL WriteDataToVTK_PICLas(1,FileString,nPartsVar,VarNamesParticle,nParts,PartData(1:3,1:nParts),nParts,&
- PartData(4:nPartsVar+3,1:nParts),ConnectInfo(1,1:nParts))
+ CALL WriteDataToVTK_PICLas(1,1,FileString,nPartsVar,VarNamesParticle,nParts,PartData(1:3,1:nParts),nParts,&
+ PartData(4:nPartsVar+3,1:nParts),ConnectInfo(1,1:nParts))
SDEALLOCATE(VarNamesParticle)
SDEALLOCATE(tmpArray)
@@ -952,7 +1039,7 @@ END SUBROUTINE ConvertPartData
!===================================================================================================================================
!> Convert element/volume data (single value per cell, e.g. DSMC/BGK results) to a VTK format
!===================================================================================================================================
-SUBROUTINE ConvertElemData(InputStateFile,ArrayName,VarName)
+SUBROUTINE ConvertElemData(InputStateFile, ArrayName, VarName, iArgs)
! MODULES
USE MOD_Globals
USE MOD_Globals_Vars ,ONLY: ProjectName
@@ -967,11 +1054,12 @@ SUBROUTINE ConvertElemData(InputStateFile,ArrayName,VarName)
CHARACTER(LEN=255),INTENT(IN) :: InputStateFile
CHARACTER(LEN=*),INTENT(IN) :: ArrayName
CHARACTER(LEN=*),INTENT(IN) :: VarName
+INTEGER, INTENT(IN) :: iArgs
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-CHARACTER(LEN=255) :: FileString, File_Type
+CHARACTER(LEN=255) :: FileString, File_Type, File_Num
REAL :: OutputTime
INTEGER :: nDims,nVarAdd
CHARACTER(LEN=255),ALLOCATABLE :: VarNamesAdd(:)
@@ -979,10 +1067,11 @@ SUBROUTINE ConvertElemData(InputStateFile,ArrayName,VarName)
!===================================================================================================================================
! Read in solution
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'Project_Name',1,StrScalar=ProjectName)
-CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type)
+OutputTime = 0. ! default
+IF(TRIM(File_Type).NE.'RadiationState') CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
CALL GetDataSize(File_ID,TRIM(ArrayName),nDims,HSize)
nVarAdd=INT(HSize(1),4)
DEALLOCATE(HSize)
@@ -1000,15 +1089,18 @@ SUBROUTINE ConvertElemData(InputStateFile,ArrayName,VarName)
CALL ReadArray(TRIM(ArrayName),2,(/nVarAdd, nElems/),offsetElem,2,RealArray=ElemData(1:nVarAdd,1:nElems))
END ASSOCIATE
! Default
- FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_Solution_'//TRIM(ArrayName),OutputTime))//'.vtu'
+ IF(TRIM(File_Type).NE.'RadiationState') FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_Solution_'//TRIM(ArrayName),OutputTime))//'.vtu'
! Special file types
SELECT CASE(TRIM(File_Type))
CASE('DSMCState','DSMCHOState')
FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuDSMC',OutputTime))//'.vtu'
IF(TRIM(ArrayName).EQ.'ExcitationData') FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuExcitationData',OutputTime))//'.vtu'
+ CASE('RadiationState')
+ WRITE(File_Num, "(I3.3)") iArgs
+ FileString=TRIM(TRIM(ProjectName)//'_RadVisu_'//TRIM(File_Num))//'.vtu'
END SELECT
! TODO: This is probably borked for NGeo>1 because then NodeCoords are not the corner nodes
- CALL WriteDataToVTK_PICLas(8,FileString,nVarAdd,VarNamesAdd(1:nVarAdd),nUniqueNodes,NodeCoords_Connect(1:3,1:nUniqueNodes),nElems,&
+ CALL WriteDataToVTK_PICLas(3,8,FileString,nVarAdd,VarNamesAdd(1:nVarAdd),nUniqueNodes,NodeCoords_Connect(1:3,1:nUniqueNodes),nElems,&
ElemData(1:nVarAdd,1:nElems),ElemUniqueNodeID(1:8,1:nElems))
END IF
@@ -1026,10 +1118,15 @@ END SUBROUTINE ConvertElemData
SUBROUTINE ConvertSurfaceData(InputStateFile)
! MODULES
USE MOD_Globals
-USE MOD_Globals_Vars ,ONLY: ProjectName
-USE MOD_IO_HDF5 ,ONLY: HSize
-USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,ReadAttribute,GetDataSize,File_ID,ReadArray
-USE MOD_piclas2vtk_Vars ,ONLY: SurfConnect
+USE MOD_Globals_Vars ,ONLY: ProjectName
+USE MOD_IO_HDF5 ,ONLY: HSize
+USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,ReadAttribute,GetDataSize,File_ID,ReadArray
+USE MOD_Particle_Boundary_Vars ,ONLY: nSurfSample
+USE MOD_piclas2vtk_Vars ,ONLY: SurfConnect
+USE MOD_Interpolation ,ONLY: GetVandermonde
+USE MOD_ChangeBasis ,ONLY: ChangeBasis2D
+USE MOD_Interpolation_Vars ,ONLY: NodeTypeVISU
+USE MOD_Mesh_Vars ,ONLY: Face_xGP, Ngeo
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1039,24 +1136,33 @@ SUBROUTINE ConvertSurfaceData(InputStateFile)
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
-CHARACTER(LEN=255) :: FileString
+CHARACTER(LEN=255) :: FileString, File_Type
CHARACTER(LEN=255),ALLOCATABLE :: VarNamesSurf_HDF5(:)
-INTEGER :: nDims, nVarSurf, nSurfSample, nSurfaceSidesReadin
+INTEGER :: nDims, nVarSurf, nSurfaceSidesReadin
REAL :: OutputTime
-REAL, ALLOCATABLE :: tempSurfData(:,:,:,:), SurfData(:,:), Coords(:,:)
+REAL, ALLOCATABLE :: tempSurfData(:,:,:,:,:)
INTEGER :: iSide
+REAL,ALLOCATABLE :: Vdm_EQNgeo_NVisu(:,:) !< Vandermonde from equidistant mesh to visualization nodes
+REAL,ALLOCATABLE :: NodeCoords_visu(:,:,:,:,:) !< Coordinates of visualization nodes
!===================================================================================================================================
! Read in solution
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
CALL ReadAttribute(File_ID,'Project_Name',1,StrScalar=ProjectName)
-CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
-CALL ReadAttribute(File_ID,'DSMC_nSurfSample',1,IntScalar=nSurfSample)
-IF(nSurfSample.NE.1) THEN
- CALL abort(&
- __STAMP__&
- ,'Error in piclas2vtk: Conversion to VTK only possible for DSMC_nSurfSample=1!')
+CALL ReadAttribute(File_ID,'File_Type',1,StrScalar=File_Type)
+IF(TRIM(File_Type).NE.'RadiationSurfState') THEN
+ CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
+ELSE
+ nSurfSample = 1
END IF
+!CALL ReadAttribute(File_ID,'Time',1,RealScalar=OutputTime)
+!CALL ReadAttribute(File_ID,'DSMC_nSurfSample',1,IntScalar=nSurfSample)
+!IF(nSurfSample.NE.1) THEN
+ !CALL abort(&
+ !__STAMP__&
+ !,'Error in piclas2vtk: Conversion to VTK only possible for DSMC_nSurfSample=1!')
+!END IF
+CALL ReadAttribute(File_ID,'DSMC_nSurfSample',1,IntScalar=nSurfSample)
CALL GetDataSize(File_ID,'SurfaceData',nDims,HSize)
nVarSurf = INT(HSize(1),4)
@@ -1065,39 +1171,58 @@ SUBROUTINE ConvertSurfaceData(InputStateFile)
CALL ReadAttribute(File_ID,'VarNamesSurface',nVarSurf,StrArray=VarNamesSurf_HDF5(1:nVarSurf))
IF((nVarSurf.GT.0).AND.(SurfConnect%nSurfaceBCSides.GT.0))THEN
- ALLOCATE(SurfData(1:nVarSurf,1:SurfConnect%nSurfaceBCSides))
- ALLOCATE(tempSurfData(1:nVarSurf,nSurfSample,nSurfSample,1:nSurfaceSidesReadin))
- SurfData=0.
+ ALLOCATE(tempSurfData(1:nVarSurf,nSurfSample,nSurfSample,0:0,1:nSurfaceSidesReadin))
tempSurfData = 0.
- ASSOCIATE(nVarSurf => INT(nVarSurf,IK), &
+ ASSOCIATE(nVarSurf => INT(nVarSurf,IK), &
+ nSurfSample => INT(nSurfSample,IK), &
nSurfaceSidesReadin => INT(nSurfaceSidesReadin,IK))
- CALL ReadArray('SurfaceData',4,(/nVarSurf, 1_IK, 1_IK, nSurfaceSidesReadin/), &
- 0_IK,4,RealArray=tempSurfData(:,:,:,:))
+ CALL ReadArray('SurfaceData',4,(/nVarSurf, nSurfSample, nSurfSample, nSurfaceSidesReadin/), &
+ 0_IK,4,RealArray=tempSurfData(:,:,:,0,:))
END ASSOCIATE
! Sanity check
IF(SurfConnect%nSurfaceBCSides.NE.nSurfaceSidesReadin)THEN
WRITE (UNIT_stdOut,*) "SurfConnect%nSurfaceBCSides =", SurfConnect%nSurfaceBCSides
WRITE (UNIT_stdOut,*) "nSurfaceSidesReadin =", nSurfaceSidesReadin
- CALL abort(&
- __STAMP__&
- ,'Error: SurfConnect%nSurfaceBCSides.NE.nSurfaceSidesReadin')
+ CALL abort(__STAMP__,'Error: SurfConnect%nSurfaceBCSides.NE.nSurfaceSidesReadin')
END IF ! SurfConnect%nSurfaceBCSides.NE.nSurfaceSidesReadin
+END IF
+
+IF(nSurfSample.GT.1) THEN
+ ALLOCATE(Vdm_EQNgeo_NVisu(0:nSurfSample,0:NGeo))
+ ! Use NodeTypeVISU, which is hard-coded to NodeTypeVISU='VISU'
+ CALL GetVandermonde(NGeo,'GAUSS',nSurfSample,NodeTypeVISU,Vdm_EQNgeo_NVisu,modal=.FALSE.)
+ ALLOCATE(NodeCoords_visu(1:3,0:nSurfSample,0:nSurfSample,0:0,SurfConnect%nSurfaceBCSides))
+ NodeCoords_visu = 0.
+ ! Interpolate mesh onto visu grid
+ DO iSide=1,SurfConnect%nSurfaceBCSides
+ CALL ChangeBasis2D(3,NGeo,nSurfSample,Vdm_EQNgeo_NVisu,Face_xGP(1:3,:,:,SurfConnect%SurfSideToSide(iSide)),NodeCoords_visu(1:3,:,:,0,iSide))
+ END DO
+ELSE
+ ALLOCATE(NodeCoords_visu(1:3,0:0,0:0,0:0,1:SurfConnect%nSurfaceNode))
+ NodeCoords_visu = 0.
+ NodeCoords_visu(1:3,0,0,0,1:SurfConnect%nSurfaceNode) = SurfConnect%NodeCoords(1:3,1:SurfConnect%nSurfaceNode)
+END IF
- ! Copy data from tmp array
- DO iSide = 1, SurfConnect%nSurfaceBCSides
- SurfData(1:nVarSurf,iSide) = tempSurfData(1:nVarSurf,1,1,iSide)
- END DO ! iSide = 1, SurfConnect%nSurfaceBCSides
+IF(TRIM(File_Type).NE.'RadiationSurfState') THEN
+ FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurf',OutputTime))//'.vtu'
+ELSE
+ FileString=TRIM(TRIM(ProjectName)//'_RadSurfVisu')//'.vtu'
END IF
+!CALL WriteDataToVTK_PICLas(4,FileString,nVarSurf,VarNamesSurf_HDF5,SurfConnect%nSurfaceNode,SurfConnect%NodeCoords(1:3,1:SurfConnect%nSurfaceNode),&
+ !SurfConnect%nSurfaceBCSides,SurfData,SurfConnect%SideSurfNodeMap(1:4,1:SurfConnect%nSurfaceBCSides))
-FileString=TRIM(TIMESTAMP(TRIM(ProjectName)//'_visuSurf',OutputTime))//'.vtu'
-CALL WriteDataToVTK_PICLas(4,FileString,nVarSurf,VarNamesSurf_HDF5,SurfConnect%nSurfaceNode,SurfConnect%NodeCoords(1:3,1:SurfConnect%nSurfaceNode),&
- SurfConnect%nSurfaceBCSides,SurfData,SurfConnect%SideSurfNodeMap(1:4,1:SurfConnect%nSurfaceBCSides))
+IF(nSurfSample.GT.1) THEN
+ ! Number of nodes is calculated inside the routine in case of super-sampling: nSurfaceBCSides = nSurfaceNode
+ CALL WriteDataToVTK_PICLas(2,4,FileString,nVarSurf,VarNamesSurf_HDF5,SurfConnect%nSurfaceBCSides,NodeCoords_visu,&
+ SurfConnect%nSurfaceBCSides,tempSurfData,SurfConnect%SideSurfNodeMap)
+ELSE
+ CALL WriteDataToVTK_PICLas(2,4,FileString,nVarSurf,VarNamesSurf_HDF5,SurfConnect%nSurfaceNode,NodeCoords_visu,&
+ SurfConnect%nSurfaceBCSides,tempSurfData,SurfConnect%SideSurfNodeMap)
+END IF
SDEALLOCATE(VarNamesSurf_HDF5)
-SDEALLOCATE(SurfData)
SDEALLOCATE(tempSurfData)
-SDEALLOCATE(Coords)
CALL CloseDataFile()
@@ -1112,12 +1237,11 @@ SUBROUTINE BuildSurfMeshConnectivity(InputStateFile)
USE MOD_Globals
USE MOD_IO_HDF5 ,ONLY: HSize
USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,ReadAttribute,GetDataSize,File_ID,ReadArray,GetDataSize
-USE MOD_Mesh_ReadIn ,ONLY: readMesh
USE MOD_Mesh_Tools ,ONLY: GetCNElemID
USE MOD_Mesh_Vars ,ONLY: BoundaryName
+USE MOD_Mesh_Vars ,ONLY: nBCSides, BC, SideToElem, offsetElem
USE MOD_piclas2vtk_Vars ,ONLY: SurfConnect
-USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared,SideInfo_Shared,NodeCoords_Shared,NodeInfo_Shared
-USE MOD_Particle_Mesh_Vars ,ONLY: nNonUniqueGlobalSides
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared,NodeCoords_Shared,NodeInfo_Shared
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
@@ -1128,13 +1252,13 @@ SUBROUTINE BuildSurfMeshConnectivity(InputStateFile)
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
CHARACTER(LEN=255),ALLOCATABLE :: SurfBCName_HDF5(:)
-INTEGER :: nDims, iNode, nSurfBC_HDF5, iName, nSides
+INTEGER :: nDims, iNode, nSurfBC_HDF5, iName, locElemID
INTEGER :: CNElemID, iLocSide, iSide, iNode2, iBC, nSurfSides, nUniqueSurfSide
-INTEGER, ALLOCATABLE :: TempBCSurfNodes(:), TempSideSurfNodeMap(:,:), SideToSurfSide(:), NonUnique2UniqueSide(:)
+INTEGER, ALLOCATABLE :: TempBCSurfNodes(:), TempSideSurfNodeMap(:,:), SideToSurfSide(:)
REAL, ALLOCATABLE :: TempNodeCoords(:,:)
LOGICAL :: IsSortedSurfNode
!===================================================================================================================================
-CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(InputStateFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
SWRITE(UNIT_stdOut,'(A,A)')' GET NUMBER AND NAMES OF SURFACE-BCSIDES IN HDF5 FILE... '
CALL GetDataSize(File_ID,'BC_Surf',nDims,HSize,attrib=.true.)
@@ -1147,47 +1271,38 @@ SUBROUTINE BuildSurfMeshConnectivity(InputStateFile)
SWRITE(UNIT_stdOut,'(A3,A38,I2.1,A5,A3,A33,A13)')' | ','BC',iName,'Name',' | ',TRIM(SurfBCName_HDF5(iName)),' | HDF5 | '
END DO
-nSides = nNonUniqueGlobalSides
-
! create sideid to surfaceid map for all surface-sides contained in statefile
-ALLOCATE(SideToSurfSide(1:nSides))
-SideToSurfSide(1:nSides) = -1
-ALLOCATE(NonUnique2UniqueSide(1:nSides))
-NonUnique2UniqueSide(1:nSides) = -1
+ALLOCATE(SideToSurfSide(1:nBCSides))
+SideToSurfSide(1:nBCSides) = -1
! if side is surface (BC_reflective defined in State file) then map respective surface side number
nSurfSides = 0
nUniqueSurfSide = 0
-DO iSide = 1,nSides
- IF(SideInfo_Shared(SIDE_BCID,iSide).EQ.0) CYCLE
+DO iSide = 1,nBCSides
DO iBC=1,nSurfBC_HDF5
- IF((TRIM(BoundaryName(SideInfo_Shared(SIDE_BCID,iSide))) .EQ. TRIM(SurfBCName_HDF5(iBC)))) THEN
+ IF((TRIM(BoundaryName(BC(iSide))) .EQ. TRIM(SurfBCName_HDF5(iBC)))) THEN
nSurfSides = nSurfSides + 1
SideToSurfSide(iSide) = nSurfSides
- IF(SideInfo_Shared(SIDE_NBSIDEID,iSide).GT.0) THEN
- ! Cycling over non-unique sides
- IF(iSide.GT.SideInfo_Shared(SIDE_NBSIDEID,iSide)) CYCLE
- END IF
- nUniqueSurfSide = nUniqueSurfSide + 1
- NonUnique2UniqueSide(nSurfSides) = nUniqueSurfSide
END IF
END DO
END DO
! Build connectivity for the surface mesh
-ALLOCATE(TempBCSurfNodes(4*nSides))
-ALLOCATE(TempNodeCoords(1:3,4*nSides))
-ALLOCATE(TempSideSurfNodeMap(1:4,1:nSides))
+ALLOCATE(TempBCSurfNodes(4*nBCSides))
+ALLOCATE(TempNodeCoords(1:3,4*nBCSides))
+ALLOCATE(TempSideSurfNodeMap(1:4,1:nBCSides))
SurfConnect%nSurfaceNode=0
SurfConnect%nSurfaceBCSides=0
+ALLOCATE(SurfConnect%SurfSideToSide(nBCSides))
+SurfConnect%SurfSideToSide = 0
-DO iSide=1, nSides
+DO iSide=1, nBCSides
! Cycling over non-reflective sides
IF (SideToSurfSide(iSide).EQ.-1) CYCLE
- ! Cycling over non-unique sides
- IF (NonUnique2UniqueSide(SideToSurfSide(iSide)).EQ.-1) CYCLE
SurfConnect%nSurfaceBCSides = SurfConnect%nSurfaceBCSides + 1
- CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,iSide))
- iLocSide = SideInfo_Shared(SIDE_LOCALID,iSide)
+ locElemID = SideToElem(S2E_ELEM_ID,iSide)
+ iLocSide = SideToElem(S2E_LOC_SIDE_ID,iSide)
+ CNElemID = GetCNElemID(offsetElem+locElemID)
+ SurfConnect%SurfSideToSide(SurfConnect%nSurfaceBCSides) = iSide
DO iNode2 = 1, 4
IsSortedSurfNode = .FALSE.
DO iNode = 1, SurfConnect%nSurfaceNode
@@ -1215,7 +1330,6 @@ SUBROUTINE BuildSurfMeshConnectivity(InputStateFile)
SDEALLOCATE(TempBCSurfNodes)
SDEALLOCATE(TempSideSurfNodeMap)
SDEALLOCATE(TempNodeCoords)
-SDEALLOCATE(NonUnique2UniqueSide)
SDEALLOCATE(SurfBCName_HDF5)
SDEALLOCATE(SideToSurfSide)
CALL CloseDataFile()
diff --git a/src/posti/piclas2vtk/piclas2vtk_vars.f90 b/src/posti/piclas2vtk/piclas2vtk_vars.f90
index dbf4aeedf..0a2963341 100644
--- a/src/posti/piclas2vtk/piclas2vtk_vars.f90
+++ b/src/posti/piclas2vtk/piclas2vtk_vars.f90
@@ -40,6 +40,7 @@ MODULE MOD_piclas2vtk_Vars
INTEGER :: nSurfaceBCSides !< Number of Sides on Surface (reflective)
REAL, ALLOCATABLE :: NodeCoords(:,:)
INTEGER, ALLOCATABLE :: SideSurfNodeMap(:,:) !< Mapping from glob Side to SurfaceNodeNum (1:4, nSurfaceBCSides)
+ INTEGER, ALLOCATABLE :: SurfSideToSide(:)
END TYPE
TYPE (tSurfaceConnect) :: SurfConnect
diff --git a/src/posti/superB/superB.f90 b/src/posti/superB/superB.f90
index 3250244ab..975955eb3 100644
--- a/src/posti/superB/superB.f90
+++ b/src/posti/superB/superB.f90
@@ -42,6 +42,7 @@ PROGRAM SuperB_standalone
USE MOD_MPI_Shared
#endif /*USE_MPI*/
USE MOD_Globals_Init ,ONLY: DefineParametersGlobals
+USE MOD_Mesh_ReadIn ,ONLY: FinalizeMeshReadin
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
@@ -145,6 +146,7 @@ PROGRAM SuperB_standalone
! Finalize SuperB
CALL FinalizeSuperB()
CALL FinalizeMesh()
+CALL FinalizeMeshReadin(2)
GETTIME(SystemTime)
SWRITE(UNIT_stdOut,'(132("="))')
diff --git a/src/posti/superB/superB_main.f90 b/src/posti/superB/superB_main.f90
index 50d230dfd..7737126a5 100644
--- a/src/posti/superB/superB_main.f90
+++ b/src/posti/superB/superB_main.f90
@@ -158,7 +158,8 @@ SUBROUTINE SuperB()
ASSOCIATE( f => CurrentInfo(iCoil)%CurrentFreq )
BGFieldFrequency = f ! Set frequency for output to h5 file as attribute
BGFieldCurrent = CoilInfo(iCoil)%Current ! Set current maximum for output to h5 file as attribute
- timestep = MERGE(1./(f*REAL(nTimePoints-1)), 0., f.GT.0.)
+ IF (f.GT.0.) THEN; timestep = 1./(f*REAL(nTimePoints-1))
+ ELSE ; timestep = 0.; END IF
END ASSOCIATE
SWRITE(UNIT_stdOut,'(A)') '...Calculation of the B-Field'
DO iTimePoint = 1, nTimePoints
@@ -177,7 +178,7 @@ SUBROUTINE SuperB()
! ------------------------------------------------------------
! Write BGField (time-constant) or WriteBGFieldToHDF5 (time-dependent) fields to h5
CALL WriteBGFieldToHDF5()
-! Output analytic field solution if required
+! Output analytic field solution if required
IF(DoCalcErrorNormsSuperB) CALL WriteBGFieldAnalyticToHDF5()
! Deallocate stuff
diff --git a/src/posti/superB/superB_tools.f90 b/src/posti/superB/superB_tools.f90
index a1a591fd6..b39053e00 100644
--- a/src/posti/superB/superB_tools.f90
+++ b/src/posti/superB/superB_tools.f90
@@ -190,11 +190,11 @@ SUBROUTINE CalcErrorSuperB(L_2_Error,L_Inf_Error,ExactFunctionNumber,iCoilOrMagn
END DO ! iElem=1,PP_nElems
#if USE_MPI
IF(MPIroot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , 4 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , 4 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_2_Error , 4 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MPI_IN_PLACE , L_Inf_Error , 4 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
ELSE
- CALL MPI_REDUCE(L_2_Error , 0 , 4 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(L_Inf_Error , 0 , 4 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(L_2_Error , 0 , 4 , MPI_DOUBLE_PRECISION , MPI_SUM , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(L_Inf_Error , 0 , 4 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
! in this case the receive value is not relevant.
END IF
#endif /*USE_MPI*/
@@ -214,7 +214,7 @@ SUBROUTINE ExactFuncSuperB(ExactFunctionNumber,iCoilOrMagnet,x,resu)
! 2X : Magnets
!===================================================================================================================================
! MODULES
-USE MOD_Globals ,ONLY: Abort,VECNORM,OrthoNormVec,UNITVECTOR,CROSSNORM,DOTPRODUCT
+USE MOD_Globals ,ONLY: Abort,VECNORM,UNITVECTOR,CROSSNORM,DOTPRODUCT
USE MOD_Globals ,ONLY: SphericalCoordinates,TransformVectorFromSphericalCoordinates
USE MOD_Globals_Vars ,ONLY: Pi,mu0
USE MOD_SuperB_Vars ,ONLY: CoilInfo,PermanentMagnetInfo
diff --git a/src/precond/precond.f90 b/src/precond/precond.f90
index 9ffdfacf0..513d4034f 100644
--- a/src/precond/precond.f90
+++ b/src/precond/precond.f90
@@ -378,7 +378,7 @@ SUBROUTINE BuildPrecond(t,tStage,tDeriv,alpha,dt)
END DO ! ! iELEM
#if USE_MPI
-CALL MPI_REDUCE(TotalTime,TotalTimeMPI ,3,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_WORLD,IERROR)
+CALL MPI_REDUCE(TotalTime,TotalTimeMPI ,3,MPI_DOUBLE_PRECISION,MPI_MAX,0,MPI_COMM_PICLAS,IERROR)
IF(MPIRoot) THEN
TotalTime=TotalTimeMPI
END IF
diff --git a/src/radiation/radiation_solver/exportspectrum.f90 b/src/radiation/radiation_solver/exportspectrum.f90
new file mode 100644
index 000000000..084002e6a
--- /dev/null
+++ b/src/radiation/radiation_solver/exportspectrum.f90
@@ -0,0 +1,94 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_ExportSpectrum
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_exportspectrum
+ MODULE PROCEDURE radiation_exportspectrum
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_exportspectrum
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_exportspectrum(iElement, output_format)
+!===================================================================================================================================
+! exports spectral emission and absorption to *.dat-files
+!
+! Radiation_Emission_Absorption_xx_iGlobalElement(:,3) -> wavelength, emission (W/m3/str/m), absorption (1/m))
+!
+! further formats can be added to output_format, currently available:
+! 1: gnuplot
+! 2: tikz
+!===================================================================================================================================
+! MODULES
+ USE MOD_Radiation_Vars, ONLY: RadiationParameter, Radiation_Emission_spec, Radiation_Absorption_spec
+ USE MOD_Mesh_Vars, ONLY: offsetElem
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iElement, output_format
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER :: w, io_error, iGlobalElement
+ CHARACTER(32) :: hilf
+!===================================================================================================================================
+
+ iGlobalElement = iElement + offsetElem
+ WRITE(UNIT=hilf,FMT='(I0)') iGlobalElement
+
+ SELECT CASE(output_format)
+
+ CASE(1) !Output for gnuplot
+ OPEN(unit=20,file='Radiation_Emission_Absorption_'//TRIM(hilf)//'.dat', status='replace',action='write',iostat=io_error)
+ DO w=1, RadiationParameter%WaveLenDiscr
+ WRITE(20,*) RadiationParameter%WaveLen(w)*1.E10, Radiation_Emission_spec(w,iElement), Radiation_Absorption_spec(w,iElement)
+ END DO
+ CLOSE(unit=20)
+
+ CASE(2)!Output for pgfplots
+ OPEN(unit=20,file='Radiation_Emission_Absorption_tikz_'//TRIM(hilf)//'.dat', status='replace',action='write',iostat=io_error)
+ WRITE(20,*) 'x,y1,y2'
+ DO w=1, RadiationParameter%WaveLenDiscr
+ WRITE(20,*) RadiationParameter%WaveLen(w)*1.E10,',',Radiation_Emission_spec(w,iElement),',', &
+ Radiation_Absorption_spec(w,iElement)
+ END DO
+ CLOSE(unit=20)
+
+ CASE DEFAULT
+ WRITE(*,*) 'output format is not defined'
+
+ END SELECT
+
+END SUBROUTINE radiation_exportspectrum
+
+
+END MODULE MOD_Radiation_ExportSpectrum
diff --git a/src/radiation/radiation_solver/radiation_atoms.f90 b/src/radiation/radiation_solver/radiation_atoms.f90
new file mode 100644
index 000000000..21ccd75e4
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_atoms.f90
@@ -0,0 +1,477 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_Atoms
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_atoms
+ MODULE PROCEDURE radiation_atoms
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_atoms
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_atoms(iElem, em_atom)
+!===================================================================================================================================
+! Main routine of atomic radiation calculation
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Globals_Vars, ONLY : BoltzmannConst, PlanckConst, ElementaryCharge
+ USE MOD_Radiation_Vars, ONLY : RadiationInput, RadiationParameter, SpeciesRadiation, &
+ Radiation_Emission_spec, Radiation_Absorption_spec, &
+ NumDensElectrons, Radiation_ElemEnergy_Species, Radiation_Absorption_SpeciesWave
+ USE MOD_Particle_Vars, ONLY : nSpecies, Species
+ USE MOD_Globals_Vars, ONLY : c, Pi
+ USE MOD_DSMC_Vars, ONLY : SpecDSMC
+!USE MOD_Radiation_Excitation, ONLY : low_IonizationPot
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(INOUT) :: em_atom
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+ REAL :: c_emi, c_abs, c_dopp
+ REAL :: rho, ntot !in ini
+ REAL :: sigma_ij, coll_freq_ij, T_mean
+ INTEGER :: i, k, l, iSpec, jSpec, iWave, iWaveCoarse!, hilf, w
+ INTEGER :: nLines_considered !number of calculated transition lines
+ REAL :: etot, abstot
+ REAL, ALLOCATABLE :: epsilon_at(:), epsilon_iSpec(:), abs_iSpec(:)
+ REAL :: cwav
+ REAL :: Dlaml, Dlamd, Dlamn, Dlamp, Dlams, Dlamr, Dlamvw !line broadening mechanisms
+
+ REAL :: low_IonizationPot !from excitation
+ REAL, ALLOCATABLE :: lamnu(:)
+ REAL :: wrange, wleft, wright
+ REAL :: dpar, beta, rpar, Dlamv
+ INTEGER, PARAMETER:: Voigt_int_nmax = 1001
+ REAL, PARAMETER :: Voigt_mult_discr = 25.
+ REAL :: Voigt_int(-Voigt_int_nmax:Voigt_int_nmax), Voigt_int_step, Voigt
+ REAL :: Voigt_var1, Voigt_const1, Voigt_const2, Voigt_int_distmax, Voigt_arg_dimless, Voigt_int_NormEnergy
+ INTEGER :: iVoigt
+ REAL :: Voigt_dist1, Voigt_dist2, Voigt_dist225
+ REAL, ALLOCATABLE :: Radiation_Profile(:)
+ REAL :: TempOut_Em, TempOut_Abs
+!===================================================================================================================================
+
+! --- initialize emission coefficient
+ ALLOCATE(epsilon_at(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(epsilon_iSpec(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(abs_iSpec(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(Radiation_Profile(RadiationParameter%WaveLenDiscr))
+ DO iWave=1, RadiationParameter%WaveLenDiscr
+ epsilon_at(iWave) = 0.0 !Radiation_Emission_spec(iWave,iElem)
+ END DO
+
+! --- loop for ntot and rho over all atoms
+ rho = 0.0
+ ntot = 0.0
+
+ DO jSpec = 1, nSpecies
+ rho = rho + RadiationInput(jSpec)%NumDens * Species(jSpec)%MassIC
+ ntot = ntot + RadiationInput(jSpec)%NumDens
+ END DO
+
+! --- calculation of constants
+ c_emi = PlanckConst * c / (4.*Pi)
+ c_abs = 1. / (8.*Pi*c)
+ c_dopp = SQRT(8.*BoltzmannConst*0.69315)/c
+
+
+ DO iSpec = 1, nSpecies
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+ IF((SpecDSMC(iSpec)%InterID .NE. 1) .AND. (SpecDSMC(iSpec)%InterID .NE. 10)) CYCLE
+ IF((RadiationInput(iSpec)%Telec.LT.10.0).OR.(RadiationInput(iSpec)%NumDens.LT.10.0).OR.(RadiationInput(iSpec)%Ttrans(4).LT.10.0)) CYCLE
+
+ ALLOCATE(lamnu(SpeciesRadiation(iSpec)%nLines))
+
+ lamnu = 0.0
+ Radiation_Profile = 0.0
+ epsilon_iSpec = 0.0
+ abs_iSpec = 0.0
+
+ IF ((SpeciesRadiation(iSpec)%nLevels.NE.0) .OR. (SpeciesRadiation(iSpec)%nLines.NE.0)) THEN
+
+ DO l=1,SpeciesRadiation(iSpec)%nLines
+ lamnu(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(l,2),3))) &
+ = lamnu(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(l,2),3))) &
+ + SpeciesRadiation(iSpec)%LinesReal(l,2)
+ END DO
+
+ low_IonizationPot = 2.9E-8*SQRT(NumDensElectrons/1.E6/MAX(1.,RadiationInput(iSpec)%Telec))*ElementaryCharge
+
+ ! --- total collisional frequency for phase broadening
+ coll_freq_ij=0.0
+ DO jSpec = 1, nSpecies
+ sigma_ij = Pi*(RadiationInput(iSpec)%Radius + RadiationInput(jSpec)%Radius)**2
+ T_mean = (Species(iSpec)%MassIC*RadiationInput(iSpec)%NumDens*RadiationInput(iSpec)%Ttrans(4)+ &
+ Species(jSpec)%MassIC*RadiationInput(jSpec)%NumDens*RadiationInput(jSpec)%Ttrans(4)) / &
+ (Species(iSpec)%MassIC*RadiationInput(iSpec)%NumDens+Species(jSpec)%MassIC*RadiationInput(jSpec)%NumDens)
+ coll_freq_ij = coll_freq_ij + 2.0 * RadiationInput(iSpec)%NumDens * RadiationInput(jSpec)%NumDens * sigma_ij &
+ * SQRT(2*BoltzmannConst * T_mean * (Species(iSpec)%MassIC + Species(jSpec)%MassIC) &
+ / (Pi*Species(iSpec)%MassIC*Species(jSpec)%MassIC))
+ END DO
+
+ nLines_considered = 0
+
+ ! --- loop over all transition lines
+ DO k=1,SpeciesRadiation(iSpec)%nLines
+
+ IF (SpeciesRadiation(iSpec)%Level(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3)),2) &
+ .LE. (RadiationInput(iSpec)%IonizationEn - low_IonizationPot)) THEN
+
+ ! --- local emission and absorption coefficients
+ etot = c_emi * REAL(SpeciesRadiation(iSpec)%LinesInt(k,4)) &
+ / SpeciesRadiation(iSpec)%Level(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3)),1) &
+ * SpeciesRadiation(iSpec)%NumDensExc(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3))) &
+ * SpeciesRadiation(iSpec)%LinesReal(k,2) / (SpeciesRadiation(iSpec)%LinesReal(k,1))
+ abstot = c_abs * (SpeciesRadiation(iSpec)%LinesReal(k,1))**4 * SpeciesRadiation(iSpec)%LinesReal(k,2) &
+ * (REAL(SpeciesRadiation(iSpec)%LinesInt(k,4)) &
+ / SpeciesRadiation(iSpec)%Level(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,1),3)),1) &
+ * SpeciesRadiation(iSpec)%NumDensExc(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,1),3))) &
+ - REAL(SpeciesRadiation(iSpec)%LinesInt(k,4)) &
+ / SpeciesRadiation(iSpec)%Level(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3)),1) &
+ * SpeciesRadiation(iSpec)%NumDensExc(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3))) )
+
+ ! --- broadening mechanisms
+ cwav = ((SpeciesRadiation(iSpec)%LinesReal(k,1))**2) / c
+
+ ! --- Stark broadening
+ Dlams = 2.*RadiationInput(iSpec)%NumDens*SpeciesRadiation(iSpec)%LinesReal(k,3) &
+ * (RadiationInput(iSpec)%Telec*1.E-4)**RadiationInput(iSpec)%Starkex*1.E-32
+
+ ! --- Van der Waals broadening
+ Dlamvw = 20.0 * cwav * 4.5214D-18 * ntot * (3.* BoltzmannConst* RadiationInput(iSpec)%Ttrans(4)*ntot/rho)**.3
+
+ ! --- natural broadening
+ Dlamn = cwav * (lamnu(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,2),3))) &
+ + lamnu(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,1),3))))
+
+ ! --- Lorentz (phase) broadening
+ Dlamp = 2.0 * cwav * coll_freq_ij / RadiationInput(iSpec)%NumDens
+
+ ! --- Resonance broadening (NEQAIR)
+ Dlamr = 1.03*1.E-11 * SQRT( REAL(SpeciesRadiation(iSpec)%LinesInt(k,4))/REAL(SpeciesRadiation(iSpec)%LinesInt(k,3)) ) &
+ * (SpeciesRadiation(iSpec)%LinesReal(k,1))**5 * SpeciesRadiation(iSpec)%LinesReal(k,2) &
+ * SpeciesRadiation(iSpec)%NumDensExc(NINT(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%LinesInt(k,1),3)))
+
+ ! --- Total Lorentz width
+ Dlaml = Dlams + Dlamvw + Dlamn + Dlamp + Dlamr
+
+ ! --- Doppler broadening
+ Dlamd = c_dopp*SpeciesRadiation(iSpec)%LinesReal(k,1)*SQRT(RadiationInput(iSpec)%Ttrans(4)/Species(iSpec)%MassIC )
+
+ ! --- determine actual wavelength range to be calculated
+ wrange = 100. * MAX(Dlaml,Dlamd)
+ wleft = MAX(RadiationParameter%WaveLen(1), SpeciesRadiation(iSpec)%LinesReal(k,1) - wrange )
+ wright = MIN(RadiationParameter%WaveLen(RadiationParameter%WaveLenDiscr), SpeciesRadiation(iSpec)%LinesReal(k,1) + wrange)
+
+ ! --- check if line is within range
+ IF ( wright .GE. RadiationParameter%WaveLen(1) &
+ .AND. wleft .LE. RadiationParameter%WaveLen(RadiationParameter%WaveLenDiscr)) THEN
+
+ nLines_considered = nLines_considered + 1
+
+ ! --- parameters for Voigt line profiles
+ dpar = (Dlaml-Dlamd) / (Dlaml+Dlamd)
+ beta = 0.023665 * EXP(0.6*dpar) + 0.00418 * EXP(-1.9*dpar)
+ rpar = 1. - 0.18121 * (1.-dpar**2) - beta * SIN(Pi*dpar)
+ Dlamv = rpar*(Dlaml+Dlamd)
+
+ ! --- generate Voigt line profile
+ Voigt_int(-Voigt_int_nmax) = 0. !initialize Voigt profile
+ Voigt_int( Voigt_int_nmax) = 1.
+
+ Voigt_int_distmax = Voigt_mult_discr * Dlamv !determine discretised interval
+ Voigt_arg_dimless = Dlaml/Dlamv
+ Voigt_var1 = 1./((1.065 + (0.447 + 0.058 * Voigt_arg_dimless) * Voigt_arg_dimless) * Dlamv)
+ Voigt_const2 = Voigt_arg_dimless * Voigt_var1
+ Voigt_const1 = Voigt_var1 - Voigt_const2
+ Voigt_int_step = Voigt_int_distmax / (Voigt_int_nmax-1) !step width
+
+ DO iVoigt = -(Voigt_int_nmax-1), 0 !determine lower half of Voigt profile
+ Voigt_dist1 = REAL(ABS(iVoigt)) * Voigt_int_step / (Dlamv)
+ Voigt_dist2 = Voigt_dist1**2
+ Voigt_dist225 = Voigt_dist2 * SQRT(SQRT(Voigt_dist1))
+
+ Voigt = Voigt_const1 * EXP(MAX(-1.E8,-2.772*Voigt_dist2)) + Voigt_const2 / (1.+4.*Voigt_dist2) &
+ + 0.016 * Voigt_const2 * (1.-Voigt_arg_dimless) * (EXP(MAX(-1.E5,-0.4*Voigt_dist225) &
+ - 10. / (10. + Voigt_dist225)))
+ IF((Voigt_dist225.GT.1E5).OR.(Voigt_dist2.GT.1E8)) CALL abort(&
+ __STAMP__&
+ ,' ERROR: Voigt_dist225 is too big!')
+ Voigt_int(iVoigt) = Voigt_int(iVoigt-1) + Voigt * Voigt_int_step
+ END DO
+
+ DO iVoigt = 1, (Voigt_int_nmax-1) ! determine upper half of Voigt profile
+ Voigt_int(iVoigt) = 2. * Voigt_int(0) - Voigt_int(-iVoigt)
+ END DO
+
+ Voigt_int_NormEnergy = 1./ Voigt_int(Voigt_int_nmax-1)
+
+ DO iVoigt = -(Voigt_int_nmax-1), (Voigt_int_nmax-1) ! normalize profiles that energy below the Voigt profile function is 1 (integrated profiles are normed to 1)
+ Voigt_int(iVoigt) = Voigt_int(iVoigt) * Voigt_int_NormEnergy
+ END DO
+
+ ! IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Atomic_Transition_Line_Profile(Radiation_Profile, SpeciesRadiation(iSpec)%LinesReal(k,1), Voigt_int, Voigt_int_distmax, &
+ epsilon_at, epsilon_iSpec, etot, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ ! END IF
+
+ END IF
+
+ END IF
+
+ END DO
+
+! hilf = LEN_TRIM(RadiationInput(iSpec)%RadiationSpectraFileName)
+! RadiationInput(iSpec)%RadiationSpectraFileName = RadiationInput(iSpec)%RadiationSpectraFileName(1:hilf-4)
+! WRITE(*,*) 'calculated ',nLines_considered,' bound-bound lines of ', TRIM(RadiationInput(iSpec)%RadiationSpectraFileName)
+
+ END IF
+
+ TempOut_Em = 0.0
+ TempOut_Abs = 0.0
+ DO iWave=1, RadiationParameter%WaveLenDiscr
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ TempOut_Em = TempOut_Em + 4.*Pi*epsilon_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ TempOut_Abs = TempOut_Abs + abs_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ Radiation_Absorption_SpeciesWave(iWaveCoarse, iSpec) = Radiation_Absorption_SpeciesWave(iWaveCoarse, iSpec) + abs_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ END DO
+ Radiation_ElemEnergy_Species(iSpec,iElem,1) = TempOut_Em
+ Radiation_ElemEnergy_Species(iSpec,iElem,2) = TempOut_Abs
+
+ DEALLOCATE(lamnu)
+
+ END DO
+
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ Radiation_Emission_spec(iWaveCoarse,iElem) = Radiation_Emission_spec(iWaveCoarse,iElem) + epsilon_at(iWave)/RadiationParameter%WaveLenReductionFactor
+ END DO
+
+! --- add contribution to total emission
+ em_atom = epsilon_at(1) * RadiationParameter%WaveLenIncr
+ DO i=2, RadiationParameter%WaveLenDiscr
+ em_atom = em_atom + epsilon_at(i) * RadiationParameter%WaveLenIncr
+ END DO
+
+ ! WRITE(*,*) '*** ATOMIC BOUND-BOUND RADIATION SUCCESSFULLY DONE ***'
+ ! WRITE(*,*) ''
+
+END SUBROUTINE radiation_atoms
+
+
+
+
+SUBROUTINE Radiation_Atomic_Transition_Line_Profile(Radiation_Profile, wavelength, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+!===================================================================================================================================
+! calculates emission profile functions and adds radiative energy to emission array
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Radiation_Vars, ONLY : RadiationParameter
+ USE MOD_Mesh_Tools, ONLY : GetGlobalElemID
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(INOUT) :: Radiation_Profile(:), epsilon_mol(:), epsilon_iSpec(:), Radiation_Absorption_spec(:,:), &
+ abs_iSpec(:)
+ REAL, INTENT(IN) :: wavelength, Voigt_int_distmax, eps, abstot, Voigt_int(-1001:1001)
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER :: startwavelength_int, endwavelength_int, i, iWaveCoarse, iWave
+ LOGICAL :: add_radline
+!===================================================================================================================================
+ ! --- determination of indices for first and last entry of Voigt-profiles on wavelength axis
+ startwavelength_int = INT(MAX(1.0 &
+ , (((wavelength - Voigt_int_distmax - RadiationParameter%MinWaveLen) / RadiationParameter%WaveLenIncr) + 1.0)))
+ endwavelength_int = INT(MIN(REAL(RadiationParameter%WaveLenDiscr) &
+ , (((wavelength + Voigt_int_distmax - RadiationParameter%MinWaveLen) / RadiationParameter%WaveLenIncr) + 1.0)))
+
+! startwavelength_int = MAX(1, INT((wavelength - Voigt_int_distmax &
+! - RadiationParameter%MinWaveLen) / RadiationParameter%WaveLenIncr) + 1)
+! endwavelength_int = MIN(RadiationParameter%WaveLenDiscr, INT((wavelength &
+! + Voigt_int_distmax - RadiationParameter%MinWaveLen) / RadiationParameter%WaveLenIncr) + 1)
+
+ add_radline = .FALSE.
+
+ IF ( (startwavelength_int .LT. endwavelength_int) .AND. &
+ ((wavelength+Voigt_int_distmax) .GT. RadiationParameter%MinWaveLen) .AND. &
+ ((wavelength-Voigt_int_distmax) .LT. RadiationParameter%MaxWaveLen) ) THEN
+
+ add_radline = .TRUE.
+
+ ! --- determine transition lines of previous computed Voigt-profiles
+ CALL Radiation_Voigt_wavelength_interpolation(Voigt_int, Voigt_int_distmax, wavelength, &
+ Radiation_Profile, startwavelength_int, endwavelength_int)
+
+ IF (add_radline) THEN
+
+ ! --- add radiative energy to emission
+ DO i=0 , (endwavelength_int-startwavelength_int + 0)
+ epsilon_iSpec(startwavelength_int+i) &
+ = epsilon_iSpec(startwavelength_int+i) + MAX(0.0,eps) * Radiation_Profile(startwavelength_int+i)
+ epsilon_mol(startwavelength_int+i) &
+ = epsilon_mol(startwavelength_int+i) + MAX(0.0,eps) * Radiation_Profile(startwavelength_int+i)
+ abs_iSpec(startwavelength_int+i) &
+ = abs_iSpec(startwavelength_int+i)+MAX(0.0,abstot)*Radiation_Profile(startwavelength_int+i)
+ iWave = startwavelength_int+i
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ Radiation_Absorption_spec(iWaveCoarse,GetGlobalElemID(iElem)) &
+ = Radiation_Absorption_spec(iWaveCoarse,GetGlobalElemID(iElem))+MAX(0.0,abstot)*Radiation_Profile(iWave)/RadiationParameter%WaveLenReductionFactor
+ END DO
+
+ END IF
+
+ END IF
+
+END SUBROUTINE Radiation_Atomic_Transition_Line_Profile
+
+
+
+
+SUBROUTINE Radiation_Voigt_wavelength_interpolation(Voigt_int, Voigt_int_distmax, centerwavelength, &
+ Radiation_Profile, startwavelength_int, endwavelength_int)
+!===================================================================================================================================
+! distributes transition lines with precomputed integrated Voigt-profiles (Voigt_int)
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Globals
+ USE MOD_Radiation_Vars, ONLY : RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: Voigt_int(-1001:1001), centerwavelength, Voigt_int_distmax
+ ! TODO Voigt_int_nmax in Voigt_int(:)
+ REAL, INTENT(INOUT) :: Radiation_Profile(:)
+ INTEGER, INTENT(INOUT) :: startwavelength_int, endwavelength_int
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER, PARAMETER :: Voigt_int_nmax = 1001
+ INTEGER :: i!, width_int
+ REAL :: startvalue, Voigt_int_value, Voigt_int_value_old
+ REAL :: weighting_int_left, weighting_int_right
+ INTEGER :: index_left,index_right
+ !REAL, ALLOCATABLE :: help_Radiation_Profile(:)
+!===================================================================================================================================
+
+! --- extrapolation of left point
+ startvalue = Voigt_int(-Voigt_int_nmax) &
+ - (Voigt_int(-Voigt_int_nmax+1)-Voigt_int(-Voigt_int_nmax))/RadiationParameter%WaveLenIncr &
+ * (centerwavelength - Voigt_int_distmax - RadiationParameter%WaveLen(startwavelength_int))
+ IF (startvalue .LT. 0.0) startvalue = 0.0
+
+! --- determination of number of wavelength array indices within the corresponding Voigt profile width
+! width_int = endwavelength_int - startwavelength_int
+
+! IF (width_int .EQ. 0.0) THEN
+! WRITE(*,'(A,F8.4,A)') 'Warning: line at ', centerwavelength*1.E9, &
+! 'nm is neglected due to a too small wavelength discretization'
+! END IF
+
+! --- determination of transition lines
+ Radiation_Profile(startwavelength_int) = startvalue
+! Radiation_Profile(endwavelength_int+1) = 1.0
+
+ Voigt_int_value_old = 0.0!startvalue !TODO: check!
+ Voigt_int_value = 0.0
+
+
+ DO i=1, (endwavelength_int-startwavelength_int)
+
+ index_left = INT(SIGN(ABS((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength)) &
+ / (Voigt_int_distmax/REAL(Voigt_int_nmax)), &
+ RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength))
+
+ IF ((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength).LT.0.0) THEN
+ index_right = index_left
+ index_left = index_left - 1
+ ELSE
+ index_right = index_left + 1
+ END IF
+
+ IF(index_right.GT.Voigt_int_nmax) CYCLE
+! IF(index_left.LT.(-Voigt_int_nmax)) CYCLE
+
+ weighting_int_left = 1. - ABS(REAL(index_left)-((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength) &
+ / (Voigt_int_distmax/REAL(Voigt_int_nmax))))
+ weighting_int_right = 1. - weighting_int_left
+
+ Voigt_int_value = weighting_int_left * Voigt_int(index_left) + weighting_int_right * Voigt_int(index_right)
+
+ Radiation_Profile(startwavelength_int + i) = Voigt_int_value - Voigt_int_value_old
+
+ Voigt_int_value_old = Voigt_int_value
+
+ END DO
+
+ DO i=1, (endwavelength_int-startwavelength_int)
+ Radiation_Profile(startwavelength_int+i) = Radiation_Profile(startwavelength_int+i) / RadiationParameter%WaveLenIncr
+ END DO
+
+! ALLOCATE(help_Radiation_Profile(RadiationParameter%WaveLenDiscr)) !2nd order integration, but not better for tested lines
+! help_Radiation_Profile = Radiation_Profile
+! Radiation_Profile = 0.0
+! DO i=0, width_int+1
+! IF(i .EQ. 0) THEN
+! Radiation_Profile(startwavelength_int+i) = (help_Radiation_Profile(startwavelength_int+i) &
+! + help_Radiation_Profile(startwavelength_int+i+2)) / (2.*RadiationParameter%WaveLenIncr)
+! ELSE IF(i .EQ. (width_int+1)) THEN
+! Radiation_Profile(startwavelength_int+i) = (help_Radiation_Profile(startwavelength_int+i) &
+! + help_Radiation_Profile(startwavelength_int+i-2)) / (2.*RadiationParameter%WaveLenIncr)
+! ELSE
+! Radiation_Profile(startwavelength_int+i) = (help_Radiation_Profile(startwavelength_int+i-1) &
+! + help_Radiation_Profile(startwavelength_int+i+1)) / (2.*RadiationParameter%WaveLenIncr)
+! END IF
+! END DO
+
+
+END SUBROUTINE Radiation_Voigt_wavelength_interpolation
+
+
+END MODULE MOD_Radiation_Atoms
diff --git a/src/radiation/radiation_solver/radiation_continuum.f90 b/src/radiation/radiation_solver/radiation_continuum.f90
new file mode 100644
index 000000000..ba3b012ed
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_continuum.f90
@@ -0,0 +1,388 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_Continuum
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_continuum
+ MODULE PROCEDURE radiation_continuum
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_continuum
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_continuum(iElem, em_cont)
+!===================================================================================================================================
+! Main routine of continuum radiation calculation
+!===================================================================================================================================
+! MODULES
+ USE MOD_Radiation_Vars, ONLY : RadiationInput, RadiationParameter, Radiation_Emission_spec, RadiationSwitches
+ USE MOD_PARTICLE_Vars, ONLY : nSpecies
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(INOUT) :: em_cont
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+ REAL :: n_atom, n_ion
+ INTEGER :: jSpec, i
+ REAL, ALLOCATABLE :: epsilon_cont(:)
+
+!===================================================================================================================================
+
+ ALLOCATE(epsilon_cont(RadiationParameter%WaveLenDiscr))
+
+ n_atom = 0.0
+ n_ion = 0.0
+
+ DO jSpec = 1, nSpecies
+ IF (RadiationInput(jSpec)%NuclCharge .EQ. 1) n_atom = n_atom + RadiationInput(jSpec)%NumDens
+ IF (RadiationInput(jSpec)%NuclCharge .EQ. 2) n_ion = n_ion + RadiationInput(jSpec)%NumDens
+ END DO
+
+! --- initialize emission coefficient
+ DO i=1, RadiationParameter%WaveLenDiscr
+ epsilon_cont(i) = Radiation_Emission_spec(i,iElem) ! TODO: or 0.0?
+ END DO
+
+! --- free-free emission
+ IF (RadiationSwitches%ff) THEN
+! --- free-free emission due to neutrals
+ CALL Radiation_continuum_ff(n_atom, 1, iElem)
+! --- free-free emission due to ions
+ CALL Radiation_continuum_ff(n_ion, 2, iElem)
+ ! WRITE(*,*) '*** FREE-FREE CONTINUUM RADIATION SUCCESSFULLY DONE ***'
+ ! WRITE(*,*) ''
+ END IF
+
+! --- bound-free emission
+ IF (RadiationSwitches%bf) THEN
+ CALL Radiation_continuum_bf(iElem)
+ ! WRITE(*,*) '*** BOUND-FREE CONTINUUM RADIATION SUCCESSFULLY DONE ***'
+ ! WRITE(*,*) ''
+ END IF
+
+
+! --- calculate emission due to continuum radiation
+ DO i = 1, RadiationParameter%WaveLenDiscr
+ epsilon_cont(i) = Radiation_Emission_spec(i,iElem) - epsilon_cont(i)
+ END DO
+
+! --- determine total volumetric emission for continua
+ CALL Radiation_continuum_total(epsilon_cont, em_cont)
+
+
+END SUBROUTINE radiation_continuum
+
+
+
+
+
+
+
+
+
+SUBROUTINE Radiation_continuum_ff(n, z, iElem)
+!===================================================================================================================================
+! determines free-free (ff) continuum radiation (bremsstrahlung)
+! T_elec needs to be changed with PIC interface!!!
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals_Vars, ONLY : BoltzmannConst, PlanckConst
+ USE MOD_Radiation_Vars, ONLY : RadiationInput, RadiationParameter, Radiation_Emission_spec, Radiation_Absorption_spec
+ USE MOD_Globals_Vars, ONLY : c
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: n
+ INTEGER, INTENT(IN) :: z, iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ REAL, PARAMETER :: gaunt_ff = 1.!0.8 ! Gaunt factor for free-free radiation
+ REAL :: kbTe, em_brems_const, expon, em_brems ! kbTe, frequency independent factor, exponent, free-free emission coefficient at particular wavelength
+ REAL :: B_lambda ! Planck's function formulated for per wavelength
+ INTEGER :: i
+!===================================================================================================================================
+
+ kbTe = BoltzmannConst * RadiationInput(1)%Telec
+ em_brems_const = 5.443e-52*(z-1)**2*RadiationInput(1)%NumDens*n/sqrt(RadiationInput(1)%Telec)
+
+ DO i=1, RadiationParameter%WaveLenDiscr
+ expon = MIN(700., PlanckConst*c/(RadiationParameter%WaveLen(i)*kbTe))
+ em_brems = gaunt_ff*em_brems_const/(RadiationParameter%WaveLen(i)**2/c)*EXP(-expon)
+
+! B_lambda = 2.*PlanckConst*(c/RadiationParameter%WaveLen(i))**3/(c**2)/(RadiationParameter%WaveLen(i)**2/c)/(EXP(expon)-1.)
+ B_lambda = 2.*PlanckConst*c**2/(RadiationParameter%WaveLen(i)**5)/(EXP(expon)-1.)
+
+ Radiation_Emission_spec(i,iElem) = Radiation_Emission_spec(i,iElem) + em_brems
+ Radiation_Absorption_spec(i,iElem) = Radiation_Absorption_spec(i,iElem) + em_brems/B_lambda
+ END DO
+
+
+END SUBROUTINE Radiation_continuum_ff
+
+
+
+
+
+
+
+
+
+SUBROUTINE Radiation_continuum_bf(iElem)
+!===================================================================================================================================
+! determines bound-free (bf) continuum radiation due to recombination/photoionization
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals_Vars, ONLY : BoltzmannConst, PlanckConst, ElementaryCharge, ElectronMass, BohrRadius, Pi
+ USE MOD_Particle_Vars, ONLY : nSpecies, Species
+ USE MOD_Radiation_Vars, ONLY : RadiationInput, SpeciesRadiation, RadiationParameter, &
+ Radiation_Emission_spec, Radiation_Absorption_spec, NumDensElectrons
+ USE MOD_Globals_Vars, ONLY : c
+ USE MOD_DSMC_Vars, ONLY : SpecDSMC
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ REAL :: kbTe, nue ! kbTe, nue
+ REAL :: AdvanceSeriesLimits ! Advance of series limits
+ REAL :: NumDensIon, geIon
+ INTEGER :: iAtom, jAtom, iIon, iLevel, iWave ! counter for loop over all atoms, ions, Levels, wavelength increments
+ INTEGER :: LevelsConsidered ! number of considered energy levels
+ REAL :: gaunt_bf ! Gaunt factor for bound-free radiation
+ REAL :: low_IonizationPot ! lowering of ionization Potenzial [J]
+ REAL :: ActualIonizationEn ! lowered ionization energy due to photo-ionization edge shift
+ REAL :: kappaBFFactor, epsilonBFFactor ! Factor for the calculation of emission and absorption coefficients (constant for each atom)
+ REAL :: epsilonBF, kappaBF
+ REAL, PARAMETER :: Ryd = 13.59983 ! [eV]
+ REAL :: tau, s, sigmaN, sigma
+!===================================================================================================================================
+
+ kbTe = BoltzmannConst * RadiationInput(1)%Telec
+
+! --- loop over all atoms
+ DO iAtom = 1, nSpecies
+ IF((SpecDSMC(iAtom)%InterID .NE. 1) .AND. (SpecDSMC(iAtom)%InterID .NE. 10)) CYCLE
+
+! IF (RadiationInput(iAtom)%NuclCharge .GT. 1) CYCLE !approach only for neutral atoms
+ iIon = iAtom
+! --- determine ionized species
+ DO jAtom = 1, nSpecies ! TODO nAtoms instead of nSpecies
+ IF((SpecDSMC(jAtom)%InterID .NE. 1) .AND. (SpecDSMC(jAtom)%InterID .NE. 10)) CYCLE
+ IF((Species(iAtom)%MassIC .EQ. Species(jAtom)%MassIC) &
+ .AND. (RadiationInput(iAtom)%NuclCharge+1 .EQ. RadiationInput(jAtom)%NuclCharge) ) THEN
+ iIon = jAtom
+ END IF
+ END DO
+
+! --- INITIALIZE LEVEL INDEPENDENT VARIABLES
+! --- advance of series limits (Griem 5-47 E_H -> E_Ion)
+ AdvanceSeriesLimits = 4. * RadiationInput(iAtom)%NuclCharge**(4./5.) * (BohrRadius**3. * NumDensElectrons)**(4./15.) &
+ * RadiationInput(iAtom)%IonizationEn
+ low_IonizationPot = 2.9E-8*SQRT(NumDensElectrons/1.E6/RadiationInput(iAtom)%Telec)*ElementaryCharge ! TODO correct indices -> To electrons
+ ActualIonizationEn = RadiationInput(iAtom)%IonizationEn - low_IonizationPot
+ ActualIonizationEn = MIN(ActualIonizationEn, RadiationInput(iAtom)%IonizationEn-AdvanceSeriesLimits)
+
+! --- determination of levels to be considered
+ DO iLevel = 1, SpeciesRadiation(iAtom)%nLevels
+ IF(SpeciesRadiation(iAtom)%Level(iLevel,2) .GT. ActualIonizationEn) THEN
+ LevelsConsidered = iLevel - 1
+ EXIT
+ END IF
+ END DO
+
+
+ IF (iIon .NE. iAtom) THEN
+ geIon = SpeciesRadiation(iIon)%Level(1,1) ! values for ion in ground state
+ NumDensIon = SpeciesRadiation(iIon)%NumDensExc(1)
+ ! PRINT*,'bound-free continuum is calculated using ionized species: ', &
+ ! TRIM(RadiationInput(iAtom)%RadiationSpectraFileName)
+ ELSE
+! --- assumed degeneracy of the ion
+ geIon = 1.0d0
+! --- equilibrium ground state ion number density
+ NumDensIon = ((Species(iAtom)%MassIC-ElectronMass) * 2. * Pi * BoltzmannConst/PlanckConst**2. * ElectronMass &
+ * RadiationInput(1)%Telec / Species(iAtom)%MassIC)**1.5d0 * geIon / SpeciesRadiation(iAtom)%Level(1,1) &
+ * EXP(-ActualIonizationEn/kbTe) * SpeciesRadiation(iAtom)%NumDensExc(1) / MAX(1.0d0, NumDensElectrons)
+ ! PRINT*,'bound-free continuum is approximated using equilibrium considerations! (missing data file for ionized species): ', &
+ ! TRIM(RadiationInput(iAtom)%RadiationSpectraFileName)
+ END IF
+
+
+! --- emission coefficient formula is valid for photorecombination from the ion ground state only!
+ epsilonBFFactor = 1.719236e-46 * NumDensElectrons * NumDensIon * RadiationInput(iAtom)%NuclCharge**4. / geIon &
+ / c * ( Species(iAtom)%MassIC/((Species(iAtom)%MassIC-ElectronMass) * MAX(250., RadiationInput(iAtom)%Telec) ))**1.5
+ kappaBFFactor = 2.815401e25 * RadiationInput(iAtom)%NuclCharge**4.
+
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+
+ nue = c / RadiationParameter%WaveLen(iWave)
+
+ epsilonBF = 0.
+ kappaBF = 0.
+
+ DO iLevel = 1, LevelsConsidered
+ IF(PlanckConst*nue .GE. ActualIonizationEn-SpeciesRadiation(iAtom)%Level(iLevel,2)) THEN
+ ! gaunt factors using L.G. D'yachkov - Simple formula for the average Gaunt factor Eq. 9
+ IF((SpeciesRadiation(iAtom)%Level(iLevel,5) .LT. 0.0) .OR. (SpeciesRadiation(iAtom)%Level(iLevel,5) .GT. 1.0)) THEN
+ tau = kbTe/(RadiationInput(iAtom)%NuclCharge**2.*Ryd)
+ s = 0.5+0.5*tau**(0.5)
+ sigmaN = 2.*MIN(SpeciesRadiation(iAtom)%Level(iLevel,2), RadiationInput(iAtom)%IonizationEn) &
+ / (RadiationInput(iAtom)%NuclCharge**2.*Ryd)
+ sigma = SpeciesRadiation(iAtom)%Level(iLevel,2)/(RadiationInput(iAtom)%NuclCharge**2.*Ryd)
+ gaunt_bf = 1. + 0.347/sigma**(2./3.)*(tau+s*sigma-sigmaN/(1.-EXP(-sigmaN/tau))) &
+ - 0.0331/sigma**(4./3.)*(2.*tau*(tau+s*sigma)+(s*sigma)**2. &
+ - sigmaN*(2.*tau+2.*s*sigma-sigmaN)/(1.-EXP(-sigmaN/tau)))
+ SpeciesRadiation(iAtom)%Level(iLevel,5) = gaunt_bf
+ PRINT*, 'Gaunt-factor for bound-free radiation calculated'
+ END IF
+ kappaBF = kappaBF + SpeciesRadiation(iAtom)%Level(iLevel,5) * SpeciesRadiation(iAtom)%NumDensExc(iLevel) &
+ / (nue**3. * SpeciesRadiation(iAtom)%Level(iLevel,4)**5.)
+ epsilonBF = epsilonBF + SpeciesRadiation(iAtom)%Level(iLevel,5) * EXP(-SpeciesRadiation(iAtom)%Level(iLevel,2)/kbTe) &
+ * nue**2. / SpeciesRadiation(iAtom)%Level(iLevel,4)**5. * SpeciesRadiation(iAtom)%Level(iLevel,1)
+ END IF
+ END DO
+
+ kappaBF = kappaBF * kappaBFFactor * (1.d0 - EXP(-PlanckConst*nue/kbTe))
+ epsilonBF = epsilonBF * epsilonBFFactor * EXP(MIN((ActualIonizationEn-PlanckConst*nue)/kbTe, 7.d2))
+
+! PRINT*, kappaBF, epsilonBF
+
+ Radiation_Emission_spec(iWave,iElem) = Radiation_Emission_spec(iWave,iElem) + epsilonBF
+ Radiation_Absorption_spec(iWave,iElem) = Radiation_Absorption_spec(iWave,iElem) + kappaBF
+
+ END DO
+
+ ! PRINT*, 'calculated ', LevelsConsidered, 'bound-free levels of ', TRIM(RadiationInput(iAtom)%RadiationSpectraFileName)
+
+ END DO
+
+
+END SUBROUTINE Radiation_continuum_bf
+
+
+
+
+
+
+
+
+
+SUBROUTINE Radiation_continuum_total(epsilon_cont, em_cont)
+!===================================================================================================================================
+! determines the total emission by numerical 2nd order integration of given epsilon with a Lagrange polynom
+!===================================================================================================================================
+! MODULES
+ USE MOD_Radiation_Vars, ONLY : RadiationParameter
+ USE MOD_Globals
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: epsilon_cont(:)
+ REAL, INTENT(INOUT) :: em_cont
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ REAL :: x1, x2, x3, y1, y2, y3, f1, f2, f3, a, b, c, dr_t, dr_l, dr_l2, dr, x0, y0, left, right
+ INTEGER :: i
+
+!===================================================================================================================================
+ !!!!!!!!!TODO!!!!!!!!
+ dr_l2=0.0; y0=0.0; y1=0.0; x0=0.0
+ DO i=1, RadiationParameter%WaveLenDiscr-2
+
+ x1 = RadiationParameter%WaveLen(i)
+ x2 = RadiationParameter%WaveLen(i+1)
+ x3 = RadiationParameter%WaveLen(i+2)
+
+ y1 = epsilon_cont(i)
+ y2 = epsilon_cont(i+1)
+ y3 = epsilon_cont(i+2)
+
+ f1 = y1/(x1-x2)/(x1-x3)
+ f2 = y2/(x2-x1)/(x2-x3)
+ f3 = y3/(x3-x1)/(x3-x2)
+
+ a = f1 + f2 + f3
+ b = -(x2+x3)*f1 - (x1+x3)*f2 - (x1+x2)*f3
+ c = x2*x3*f1 + x1*x3*f2 + x1*x2*f3
+
+ left = x1
+ right = x2
+ dr_l = a/3.*(right**3.-left**3.) + b/2.*(right**2.-left**2.) + c*(right-left)
+ dr_t = 0.5 * (y1+y2) * (x2-x1)
+
+ IF( ( dr_l .LT. MIN(y1,y2)*(x2-x1) ) .OR. ( dr_l .GT. MAX(y1,y2)*(x2-x1) ) ) THEN
+ dr = dr_t
+ ELSE
+ dr = dr_l
+ END IF
+
+ IF( (i .GT. 1) .AND. (dr_l2 .GT. MIN(y0,y1)*(x1-x0)) .AND. (dr_l2 .LT. MAX(y0,y1)*(x1-x0) ) ) THEN
+ dr = 0.5 * (dr + dr_l2)
+ END IF
+
+ em_cont = em_cont + dr
+
+ left = x2
+ right = x3
+ dr_l2 = a/3.*(right**3.-left**3.) + b/2.*(right**2.-left**2.) + c*(right-left)
+ x0 = x1
+ y0 = y1
+
+ END DO
+
+ i = RadiationParameter%WaveLenDiscr-1
+ dr_t = 0.5 * (epsilon_cont(i)+epsilon_cont(i+1)) * (RadiationParameter%WaveLen(i+1)-RadiationParameter%WaveLen(i))
+
+ em_cont = em_cont + dr_t
+
+
+END SUBROUTINE Radiation_continuum_total
+
+
+
+END MODULE MOD_Radiation_Continuum
diff --git a/src/radiation/radiation_solver/radiation_excitation.f90 b/src/radiation/radiation_solver/radiation_excitation.f90
new file mode 100644
index 000000000..119c6243b
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_excitation.f90
@@ -0,0 +1,170 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_Excitation
+!===================================================================================================================================
+! Module for calculation of the excited state density for radiative transitions
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_excitation
+ MODULE PROCEDURE radiation_excitation
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_excitation
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_excitation()
+!===================================================================================================================================
+! Main routine of populating the excited state
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : ElementaryCharge, BoltzmannConst
+USE MOD_Radiation_Vars, ONLY : RadiationInput, SpeciesRadiation, NumDensElectrons
+USE MOD_PARTICLE_Vars, ONLY : nSpecies
+USE MOD_DSMC_Vars, ONLY : SpecDSMC
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+ REAL :: low_IonizationPot !lowering of ionization Potenzial [J]
+! REAL :: ElectronicPartFunc !Partition function for Maxwell distribution of excited state
+ INTEGER :: iLevel, iLevel_considered ! loop indices
+ INTEGER :: nLevels_considered ! actual number of considered levels
+ INTEGER :: iSpec
+ REAL :: BoltzmannFactor ! degeneracy*EXP(-E/kB T)
+ REAL :: RotVibPartFunc ! combined rotational-vibrational partition function
+ REAL :: Gvib, Gvib_prev ! normalized vibrational energy (G=Delta EVib / hc)
+ INTEGER :: v ! vibrational quantum number [-]
+ REAL :: deltaqv
+!===================================================================================================================================
+
+ DO iSpec = 1, nSpecies
+
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+
+! --- atoms (1) and atomic ions (10)
+ IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10)) THEN
+ IF (RadiationInput(iSpec)%Telec.LE.0.0) CYCLE
+ IF (SpeciesRadiation(iSpec)%nLevels.EQ.0) CYCLE
+ low_IonizationPot = 2.9E-8*SQRT(NumDensElectrons/1.E6/MAX(1.,RadiationInput(iSpec)%Telec))*ElementaryCharge
+
+ nLevels_considered = SpeciesRadiation(iSpec)%nLevels
+
+ IF (low_IonizationPot .NE. 0.0) THEN
+ DO iLevel_considered = 1, SpeciesRadiation(iSpec)%nLevels
+ IF ( SpeciesRadiation(iSpec)%Level(iLevel_considered,2) .LT. (RadiationInput(iSpec)%IonizationEn-low_IonizationPot) ) THEN
+ nLevels_considered = iLevel_considered
+ END IF
+ END DO
+ END IF
+
+ SpeciesRadiation(iSpec)%PartFunc = 0.0
+
+ DO iLevel = 1, nLevels_considered !SpeciesRadiation(1)%nLevels
+ SpeciesRadiation(iSpec)%PartFunc = SpeciesRadiation(iSpec)%PartFunc + SpeciesRadiation(iSpec)%Level(iLevel,1) &
+ * EXP(-SpeciesRadiation(iSpec)%Level(iLevel,2)/(BoltzmannConst*RadiationInput(iSpec)%Telec))
+ END DO
+
+ DO iLevel = 1, nLevels_considered !SpeciesRadiation(1)%nLevels
+ SpeciesRadiation(iSpec)%NumDensExc(iLevel) = RadiationInput(iSpec)%NumDens*SpeciesRadiation(iSpec)%Level(iLevel,1) &
+ * EXP(-SpeciesRadiation(iSpec)%Level(iLevel,2)/(BoltzmannConst*RadiationInput(iSpec)%Telec))&
+ /SpeciesRadiation(iSpec)%PartFunc
+ END DO
+
+! --- diatomic molecules (2) and diatomic molecular ions (20)
+ ELSEIF((SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN
+
+!! --- Initialization
+ SpeciesRadiation(iSpec)%PartFunc = 0.0
+ IF ((RadiationInput(iSpec)%Telec.LE.0.0).OR.(RadiationInput(iSpec)%Tvib.LE.0.0))CYCLE !!!!!!!TODO!!!
+ DO iLevel = 1, SpeciesRadiation(iSpec)%nLevels
+! --- Initialization
+ Gvib_prev = 0.0
+ v = 0
+ RotVibPartFunc = 0.0
+
+! --- calculation of Boltzmann Factor (ge*EXP(-E/kBT))
+ BoltzmannFactor = SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,1) &
+ * EXP(MIN(7.d2, -SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,2) / (BoltzmannConst*RadiationInput(iSpec)%Telec)))
+
+ DO !WHILE (.TRUE.)
+! --- vibrational energy of quantum number v, powers of the vibrational quantum number + .5
+! --- G = omega_w(v+1/2) - omega_w x_e(v+1/2)**2 + omega_w y_e(v+1/2)**3 + omega_w z_e(v+1/2)**4 + ...
+ Gvib = SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,4) * (REAL(v)+0.5) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,5) * (REAL(v)+0.5)**2 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,6) * (REAL(v)+0.5)**3 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,7) * (REAL(v)+0.5)**4
+
+! --- contribution of vibrational quantum number v to the partition function
+ deltaqv = EXP(-Gvib/(BoltzmannConst*RadiationInput(iSpec)%Tvib))
+
+! --- cutoff criteria
+ IF(Gvib .GT. SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,3)) THEN
+ EXIT !Vibrational energy exceeds dissociation energy
+ ELSEIF(Gvib .LT. Gvib_prev) THEN
+ EXIT !Vibrational energy reached fictitious peak?
+ END IF
+
+! --- contribution of rotational excitation
+ IF((SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,8) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,9)*(REAL(v)+0.5) ) .GT. 0.0) THEN
+
+! --- Analytic expression with cutoff at dissociation energy
+ RotVibPartFunc = RotVibPartFunc + RadiationInput(iSpec)%Trot * deltaqv &
+ / ( 1.0 / BoltzmannConst * ( SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,8) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,9)*(REAL(v)+0.5) ) ) & ! + gamma_e*(REAL(v)+0.5)**2
+ * ( 1.d0 - exp( ( Gvib - SpeciesRadiation(iSpec)%EnergyLevelProperties(iLevel,3) ) &
+ / BoltzmannConst / RadiationInput(iSpec)%Trot) )
+
+ END IF
+
+ Gvib_prev = Gvib
+ v=v+1
+
+ END DO
+
+ SpeciesRadiation(iSpec)%PartFunc = SpeciesRadiation(iSpec)%PartFunc + BoltzmannFactor * RotVibPartFunc
+
+ END DO
+
+ ELSE
+
+ CYCLE
+
+ END IF
+
+ END DO
+
+END SUBROUTINE radiation_excitation
+
+END MODULE MOD_Radiation_Excitation
diff --git a/src/radiation/radiation_solver/radiation_init.f90 b/src/radiation/radiation_solver/radiation_init.f90
new file mode 100644
index 000000000..27877c876
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_init.f90
@@ -0,0 +1,544 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_Init
+!===================================================================================================================================
+! Initialization of DSMC
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE InitRadiation
+ MODULE PROCEDURE InitRadiation
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: InitRadiation, FinalizeRadiation, DefineParametersRadiation
+!===================================================================================================================================
+
+CONTAINS
+
+
+
+
+SUBROUTINE DefineParametersRadiation()
+!==================================================================================================================================
+! Define parameters for Radiation
+!==================================================================================================================================
+! MODULES
+USE MOD_ReadInTools ,ONLY: prms,addStrListEntry
+IMPLICIT NONE
+!==================================================================================================================================
+CALL prms%SetSection("Radiation")
+
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationTtrans', 'Translational temperature, K', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationTelec', 'Electronic excitation temperature, K', '0.0', &
+ numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationNumDens', 'Number density, 1/cm3', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationTvib', 'Vibrational temperature, K', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationTrot', 'Rotational temperature, K', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationIonizationEn', 'Ionization Energy, 1/cm', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-RadiationRadius_A', 'Species radius, A', '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Part-Species[$]-Starkex', 'Exponent for the determination of Stark broadening', &
+ '0.0', numberedmulti=.TRUE.)
+CALL prms%CreateIntOption( 'Part-Species[$]-NuclCharge', 'Nuclear charge:\n'//&
+ '1: neutral atom\n'//&
+ '2: singly ionized atom', '1', numberedmulti=.TRUE.)
+CALL prms%CreateLogicalOption('Part-Species[$]-DoRadiation', 'Considering species for radiative emission', '.TRUE.', &
+ numberedmulti=.TRUE.)
+CALL prms%CreateRealOption( 'Radiation-MinWaveLen', 'Lower wavelength limit for radiation calculation', '100.0')
+CALL prms%CreateRealOption( 'Radiation-MaxWaveLen', 'Upper wavelength limit for radiation calculation','1000.0')
+CALL prms%CreateIntOption( 'Radiation-WaveLenDiscr', 'Number of discretization points', '10000')
+CALL prms%CreateIntOption( 'Radiation-WaveLenReductionFactor', 'Number of discretization points', '1')
+CALL prms%CreateIntOption( 'Radiation-WaveLenReductionFactorOutput', 'Number of discretization points', '1')
+CALL prms%CreateIntOption( 'Radiation-RadType', 'Select radiation type:\n'//&
+ '1: particle radiation\n'//&
+ '2: black body radiation\n'//&
+ '3: radiation solver only', '3')
+CALL prms%CreateLogicalOption('Radiation-ff', 'Enable free-free radiation', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-bf', 'Enable bound-free radiation (only atomic)', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-bb-atoms', 'Enable atomic bound-bound radiation', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-bb-molecules', 'Enable molecular bound-bound radiation', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-MacroRadInput', 'Reading in flow field data as radiation input', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-MacroInput-SortCellsY', 'Sorts Cells in y-direction', '.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-UseElectronicExcitation', 'Use el. excitation to populate upper state densitites', '.TRUE.')
+CALL prms%CreateRealOption( 'Radiation-NumDensElectrons', 'Electron number density, 1/cm3', '0.0')
+CALL prms%CreateRealOption( 'Radiation-TElectrons', 'Electron temperature, K', '0.0')
+CALL prms%CreateStringOption( 'Radiation-Species[$]-SpectraFileName', 'File name of data file', 'none', numberedmulti=.TRUE.)
+CALL prms%CreateStringOption( 'Radiation-MacroInput-Filename', &
+ 'TO-DO')
+END SUBROUTINE DefineParametersRadiation
+
+
+
+
+SUBROUTINE InitRadiation()
+!===================================================================================================================================
+! Init of DSMC Vars
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : PlanckConst, c
+USE MOD_Mesh_Vars, ONLY : nGlobalElems
+USE MOD_Particle_Mesh_Vars, ONLY : nComputeNodeElems
+USE MOD_ReadInTools
+USE MOD_PARTICLE_Vars, ONLY : nSpecies
+USE MOD_Radiation_Vars
+USE MOD_DSMC_Vars, ONLY : SpecDSMC
+USE MOD_Radiation_ReadIn, ONLY : Radiation_readin_atoms, Radiation_readin_molecules
+USE MOD_Mesh_Tools, ONLY : GetGlobalElemID
+#if USE_MPI
+!USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars
+#else
+USE MOD_Mesh_Vars, ONLY : nElems
+#endif
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ CHARACTER(32) :: hilf
+ INTEGER :: iSpec, iWaveLen, firstElem, lastElem, iElem
+!===================================================================================================================================
+SWRITE(UNIT_stdOut,'(A)') ' INIT RADIATION SOLVER...'
+
+RadiationSwitches%RadType = GETINT('Radiation-RadType', '3')
+ALLOCATE(RadiationInput(nSpecies))
+ALLOCATE(SpeciesRadiation(nSpecies))
+SpeciesRadiation(:)%nLevels = 0
+SpeciesRadiation(:)%nLines = 0
+
+IF (RadiationSwitches%RadType.NE.2) THEN
+ DO iSpec = 1, nSpecies
+ IF(SpecDSMC(iSpec)%InterID.EQ.4) CYCLE
+ WRITE(UNIT=hilf,FMT='(I0)') iSpec
+ RadiationInput(iSpec)%Ttrans(4) = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTtrans')
+ RadiationInput(iSpec)%Telec = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTelec')
+ RadiationInput(iSpec)%NumDens = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationNumDens')
+ IF((SpecDSMC(iSpec)%InterID.EQ.2) .OR. (SpecDSMC(iSpec)%InterID.EQ.20)) THEN
+ RadiationInput(iSpec)%Tvib = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTvib')
+ RadiationInput(iSpec)%Trot = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationTrot')
+ END IF
+ RadiationInput(iSpec)%IonizationEn = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationIonizationEn')
+ RadiationInput(iSpec)%IonizationEn = RadiationInput(iSpec)%IonizationEn *PlanckConst*c*100.
+
+ RadiationInput(iSpec)%DoRadiation = GETLOGICAL('Part-Species'//TRIM(hilf)//'-DoRadiation')
+
+ IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10)) THEN !Only for atoms (1) and atomic ions (10)
+ CALL Radiation_readin_atoms(iSpec)
+ RadiationInput(iSpec)%Radius = GETREAL('Part-Species'//TRIM(hilf)//'-RadiationRadius_A')
+ RadiationInput(iSpec)%Radius = RadiationInput(iSpec)%Radius *1.0E-10
+ RadiationInput(iSpec)%Starkex = GETREAL('Part-Species'//TRIM(hilf)//'-Starkex')
+ RadiationInput(iSpec)%NuclCharge = GETINT('Part-Species'//TRIM(hilf)//'-NuclCharge')
+ END IF
+
+ IF((SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN !Only for molecules (2) and molecular ions (20)
+ CALL Radiation_readin_molecules(iSpec)
+ END IF
+ END DO
+END IF
+
+RadiationParameter%MinWaveLen = GETREAL('Radiation-MinWaveLen')
+RadiationParameter%MinWaveLen = RadiationParameter%MinWaveLen*1.E-9
+RadiationParameter%MaxWaveLen = GETREAL('Radiation-MaxWaveLen')
+RadiationParameter%MaxWaveLen = RadiationParameter%MaxWaveLen*1.E-9
+RadiationParameter%WaveLenDiscr = GETINT('Radiation-WaveLenDiscr')
+RadiationParameter%WaveLenReductionFactor = GETINT('Radiation-WaveLenReductionFactor')
+RadiationParameter%WaveLenReductionFactorOutput = GETINT('Radiation-WaveLenReductionFactorOutput')
+IF((RadiationSwitches%RadType.EQ.3) .AND. (nGlobalElems.EQ.1)) RadiationParameter%WaveLenReductionFactor = 1
+IF(RadiationSwitches%RadType.EQ.2) RadiationParameter%WaveLenReductionFactor = 1
+IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ RadiationParameter%WaveLenDiscrCoarse = NINT(REAL(RadiationParameter%WaveLenDiscr)/ REAL(RadiationParameter%WaveLenReductionFactor))
+ RadiationParameter%WaveLenReductionFactor = INT(RadiationParameter%WaveLenDiscr/RadiationParameter%WaveLenDiscrCoarse)
+ SWRITE(UNIT_stdOut,'(A)') 'Corrected WaveLenReductionFactor is ', RadiationParameter%WaveLenReductionFactor
+ ALLOCATE(RadiationParameter%WaveLenCoarse(RadiationParameter%WaveLenDiscrCoarse))
+ RadiationParameter%WaveLenCoarse = 0.0
+ELSE
+ RadiationParameter%WaveLenDiscrCoarse = RadiationParameter%WaveLenDiscr
+END IF
+IF (RadiationParameter%WaveLenReductionFactorOutput.GT.1) THEN
+ RadiationParameter%WaveLenDiscrOutput = NINT(REAL(RadiationParameter%WaveLenDiscr)/ REAL(RadiationParameter%WaveLenReductionFactorOutput))
+ RadiationParameter%WaveLenReductionFactorOutput = INT(RadiationParameter%WaveLenDiscr/RadiationParameter%WaveLenDiscrOutput)
+ SWRITE(UNIT_stdOut,'(A)') 'Corrected WaveLenReductionFactorOutput is ', RadiationParameter%WaveLenReductionFactorOutput
+ELSE
+ RadiationParameter%WaveLenDiscrOutput = RadiationParameter%WaveLenDiscr
+END IF
+IF(RadiationParameter%MinWaveLen.GE.RadiationParameter%MaxWaveLen) THEN
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation - maximum wavelength is smaller than minimum wavelength')
+END IF
+IF(RadiationParameter%WaveLenDiscr.LT.100) THEN
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation - number of wavelength discretization points is to small')
+END IF
+RadiationParameter%WaveLenIncr = (RadiationParameter%MaxWaveLen - RadiationParameter%MinWaveLen) &
+ / (RadiationParameter%WaveLenDiscr-1)
+
+ALLOCATE(RadiationParameter%WaveLen(RadiationParameter%WaveLenDiscr))
+RadiationParameter%WaveLen = 0.0
+
+DO iWaveLen = 1, RadiationParameter%WaveLenDiscr
+ RadiationParameter%WaveLen(iWaveLen) = RadiationParameter%MinWaveLen + (iWaveLen-1) * RadiationParameter%WaveLenIncr
+END DO
+IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ RadiationParameter%WaveLenIncrCoarse = (RadiationParameter%MaxWaveLen - RadiationParameter%MinWaveLen) &
+ / (RadiationParameter%WaveLenDiscr*RadiationParameter%WaveLenReductionFactor-1)
+ DO iWaveLen = 1, NINT(RadiationParameter%WaveLenIncrCoarse)
+ RadiationParameter%WaveLenCoarse(iWaveLen) = RadiationParameter%MinWaveLen + (iWaveLen-1) * RadiationParameter%WaveLenIncrCoarse
+ END DO
+END IF
+
+RadiationSwitches%ff = GETLOGICAL('Radiation-ff')
+RadiationSwitches%bf = GETLOGICAL('Radiation-bf')
+RadiationSwitches%bb_at = GETLOGICAL('Radiation-bb-atoms')
+RadiationSwitches%bb_mol = GETLOGICAL('Radiation-bb-molecules')
+RadiationSwitches%MacroRadInput = GETLOGICAL('Radiation-MacroRadInput')
+RadiationSwitches%SortCellsY = GETLOGICAL('Radiation-MacroInput-SortCellsY')
+RadiationSwitches%UseElectronicExcitation = GETLOGICAL('Radiation-UseElectronicExcitation')
+
+IF (RadiationSwitches%MacroRadInput) CALL MacroscopicRadiationInput()
+
+NumDensElectrons = GETREAL('Radiation-NumDensElectrons')
+TElectrons = GETREAL('Radiation-TElectrons')
+
+#if USE_MPI
+ ! allocate shared array for Radiation_Emission/Absorption_Spec
+CALL Allocate_Shared((/RadiationParameter%WaveLenDiscrCoarse,nComputeNodeElems/), Radiation_Emission_Spec_Shared_Win,Radiation_Emission_Spec_Shared)
+CALL MPI_WIN_LOCK_ALL(0,Radiation_Emission_Spec_Shared_Win,IERROR)
+CALL Allocate_Shared((/INT(RadiationParameter%WaveLenDiscrCoarse,IK)*INT(nGlobalElems,IK)/),Radiation_Absorption_Spec_Shared_Win,Radiation_Absorption_Spec_Shared)
+CALL MPI_WIN_LOCK_ALL(0,Radiation_Absorption_Spec_Shared_Win,IERROR)
+CALL Allocate_Shared((/INT(RadiationParameter%WaveLenDiscrCoarse,IK)*INT(nGlobalElems,IK)*INT(nSpecies,IK)/),Radiation_Absorption_SpecPercent_Shared_Win,Radiation_Absorption_SpecPercent_Shared)
+CALL MPI_WIN_LOCK_ALL(0,Radiation_Absorption_SpecPercent_Shared_Win,IERROR)
+CALL Allocate_Shared((/nSpecies,nComputeNodeElems,2/), Radiation_ElemEnergy_Species_Shared_Win,Radiation_ElemEnergy_Species_Shared)
+CALL MPI_WIN_LOCK_ALL(0,Radiation_ElemEnergy_Species_Shared_Win,IERROR)
+
+Radiation_Emission_spec => Radiation_Emission_spec_Shared
+Radiation_Absorption_Spec(1:RadiationParameter%WaveLenDiscrCoarse ,1:nGlobalElems) => Radiation_Absorption_Spec_Shared
+Radiation_Absorption_SpecPercent(1:RadiationParameter%WaveLenDiscrCoarse ,1:nSpecies, 1:nGlobalElems) => Radiation_Absorption_SpecPercent_Shared
+Radiation_ElemEnergy_Species => Radiation_ElemEnergy_Species_Shared
+#else
+! allocate local array for ElemInfo
+ALLOCATE(Radiation_Emission_spec(RadiationParameter%WaveLenDiscrCoarse,nElems))
+ALLOCATE(Radiation_Absorption_Spec(RadiationParameter%WaveLenDiscrCoarse,nElems))
+ALLOCATE(Radiation_Absorption_SpecPercent(RadiationParameter%WaveLenDiscrCoarse,nSpecies,nElems))
+ALLOCATE(Radiation_ElemEnergy_Species(nSpecies,nElems,2))
+#endif /*USE_MPI*/
+
+ALLOCATE(Radiation_Absorption_SpeciesWave(RadiationParameter%WaveLenDiscrCoarse,nSpecies))
+
+#if USE_MPI
+ firstElem = INT(REAL( myComputeNodeRank *nComputeNodeElems)/REAL(nComputeNodeProcessors))+1
+ lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeElems)/REAL(nComputeNodeProcessors))
+#else
+ firstElem = 1
+ lastElem = nElems
+#endif
+
+DO iElem = firstElem, lastElem
+ Radiation_Emission_spec(:,iElem) = 0.0
+ Radiation_Absorption_Spec(:,GetGlobalElemID(iElem)) = 0.0
+ Radiation_Absorption_SpecPercent(:,:,GetGlobalElemID(iElem)) = 0
+ Radiation_ElemEnergy_Species(:,iElem,:) =0.0
+END DO
+#if USE_MPI
+ CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_ElemEnergy_Species_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_Spec_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_SpecPercent_Shared_Win ,MPI_COMM_SHARED)
+ IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLGATHERV( MPI_IN_PLACE &
+ , 0 &
+ , MPI_DATATYPE_NULL &
+ , Radiation_Absorption_Spec &
+ , RadiationParameter%WaveLenDiscrCoarse *recvcountElem &
+ , RadiationParameter%WaveLenDiscrCoarse *displsElem &
+ , MPI_DOUBLE_PRECISION &
+ , MPI_COMM_LEADERS_SHARED &
+ , IERROR)
+ CALL MPI_ALLGATHERV( MPI_IN_PLACE &
+ , 0 &
+ , MPI_DATATYPE_NULL &
+ , Radiation_Absorption_SpecPercent &
+ , RadiationParameter%WaveLenDiscrCoarse*nSpecies *recvcountElem &
+ , RadiationParameter%WaveLenDiscrCoarse*nSpecies *displsElem &
+ , MPI_INTEGER2 &
+ , MPI_COMM_LEADERS_SHARED &
+ , IERROR)
+ END IF
+ END IF
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_Spec_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_SpecPercent_Shared_Win ,MPI_COMM_SHARED)
+#endif
+
+
+
+SWRITE(UNIT_stdOut,'(A)') ' INIT RADIATION SOLVER DONE!'
+
+END SUBROUTINE InitRadiation
+
+
+SUBROUTINE MacroscopicRadiationInput()
+!===================================================================================================================================
+!>
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_io_hdf5
+USE MOD_HDF5_Input ,ONLY: OpenDataFile,CloseDataFile,DatasetExists,ReadArray,GetDataProps
+USE MOD_Mesh_Vars ,ONLY: offsetElem, nElems
+USE MOD_Particle_Vars ,ONLY: nSpecies
+USE MOD_DSMC_Vars ,ONLY: SpecDSMC
+USE MOD_Radiation_Vars ,ONLY: RadiationSwitches, MacroRadInputParameters
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_ReadInTools
+USE MOD_Particle_Mesh_Vars ,ONLY: nComputeNodeElems
+#if USE_MPI
+USE MOD_Radiation_Vars ,ONLY: MacroRadInputParameters_Shared,MacroRadInputParameters_Shared_Win
+!USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars
+#endif
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemMidPoint_Shared
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: nVar_HDF5, N_HDF5, nElems_HDF5, iVar, iSpec, iElem, CNElemID, IndexElectronTemp, iSpecElectrons
+REAL, ALLOCATABLE :: ElemData_HDF5(:,:)
+CHARACTER(LEN=300) :: MacroRadiationInputFile
+INTEGER, ALLOCATABLE :: SortElemInd(:)
+REAL, ALLOCATABLE :: SortElemYPos(:)
+!===================================================================================================================================
+
+MacroRadiationInputFile = GETSTR('Radiation-MacroInput-Filename')
+CALL OpenDataFile(MacroRadiationInputFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
+
+CALL GetDataProps('ElemData',nVar_HDF5,N_HDF5,nElems_HDF5)
+
+#if USE_MPI
+! allocate shared array for Radiation_Emission/Absorption_Spec
+CALL Allocate_Shared((/nComputeNodeElems,nSpecies,5/), MacroRadInputParameters_Shared_Win,MacroRadInputParameters_Shared)
+CALL MPI_WIN_LOCK_ALL(0,MacroRadInputParameters_Shared_Win,IERROR)
+
+MacroRadInputParameters => MacroRadInputParameters_Shared
+#else
+! allocate local array for ElemInfo
+ALLOCATE(MacroRadInputParameters(1:nElems,1:nSpecies,1:5))
+#endif /*USE_MPI*/
+
+ALLOCATE(ElemData_HDF5(1:nVar_HDF5,1:nElems))
+! Associate construct for integer KIND=8 possibility
+ASSOCIATE (&
+ nVar_HDF5 => INT(nVar_HDF5,IK) ,&
+ offsetElem => INT(offsetElem,IK),&
+ nElems => INT(nElems,IK) )
+ CALL ReadArray('ElemData',2,(/nVar_HDF5,nElems/),offsetElem,2,RealArray=ElemData_HDF5(:,:))
+END ASSOCIATE
+
+
+IF(RadiationSwitches%SortCellsY) THEN !Sort cells if manually created input is used
+ IF(nProcessors.GT.1) THEN
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation - Sort cells in y-direction only possible on one processor!')
+ END IF
+ ALLOCATE(SortElemInd(nElems), SortElemYPos(nElems))
+ DO iElem = 1, nElems
+ SortElemInd(iElem) = iElem
+ END DO
+ SortElemYPos(:) = -ElemMidPoint_Shared(2,:)
+ CALL BubbleSortID(SortElemYPos, SortElemInd, nElems)
+
+ iVar = 1
+ DO iSpec = 1, nSpecies
+ DO iElem = 1, nElems
+ CNElemID = GetCNElemID(iElem+offsetElem)
+ MacroRadInputParameters(SortElemInd(CNElemID),iSpec,1) = MAX(0.,ElemData_HDF5(iVar+ 6,iElem)) !density
+ MacroRadInputParameters(SortElemInd(CNElemID),iSpec,2) = MAX(0.,ElemData_HDF5(iVar+ 7,iElem)) !T_vib
+ MacroRadInputParameters(SortElemInd(CNElemID),iSpec,3) = MAX(0.,ElemData_HDF5(iVar+ 8,iElem)) !T_rot
+ MacroRadInputParameters(SortElemInd(CNElemID),iSpec,4) = MAX(0.,ElemData_HDF5(iVar+ 9,iElem)) !T_elec
+ MacroRadInputParameters(SortElemInd(CNElemID),iSpec,5) = MAX(0.,ElemData_HDF5(iVar+11,iElem)) !T_mean
+ END DO
+ iVar = iVar + DSMC_NVARS
+ END DO
+ELSE
+ iVar = 1
+ DO iSpec = 1, nSpecies
+ DO iElem = 1, nElems
+ CNElemID = GetCNElemID(iElem+offsetElem)
+ MacroRadInputParameters(CNElemID,iSpec,1) = MAX(0.,ElemData_HDF5(iVar+ 6,iElem)) !density
+ MacroRadInputParameters(CNElemID,iSpec,2) = MAX(0.,ElemData_HDF5(iVar+ 7,iElem)) !T_vib
+ MacroRadInputParameters(CNElemID,iSpec,3) = MAX(0.,ElemData_HDF5(iVar+ 8,iElem)) !T_rot
+ MacroRadInputParameters(CNElemID,iSpec,4) = MAX(0.,ElemData_HDF5(iVar+ 9,iElem)) !T_elec
+ !IF((iSpec.EQ.12) .OR. (iSpec.EQ.13)) MacroRadInputParameters(CNElemID,iSpec,4)=MacroRadInputParameters(CNElemID,iSpec,4)*1.1 !Fe Fe+ +-10percent
+ MacroRadInputParameters(CNElemID,iSpec,5) = MAX(0.,ElemData_HDF5(iVar+11,iElem)) !T_mean
+ END DO
+ iVar = iVar + DSMC_NVARS
+ END DO
+
+ IF(.NOT.RadiationSwitches%UseElectronicExcitation) THEN
+ iSpecElectrons = 0
+ DO iSpec = 1, nSpecies
+ IF (SpecDSMC(iSpec)%InterID .EQ. 4) iSpecElectrons = iSpec
+ END DO
+ IF (iSpecElectrons .EQ. 0) THEN
+ PRINT*, "unknown species number for electrons while reading flow field data"
+ STOP
+ END IF
+ IndexElectronTemp = (iSpecElectrons-1)*DSMC_NVARS+1 + 11 !132 for 11th Species
+ DO iElem = 1, nElems
+ DO iSpec = 1, nSpecies
+ CNElemID = GetCNElemID(iElem+offsetElem)
+ IF((SpecDSMC(iSpec)%InterID .EQ. 1) .OR. (SpecDSMC(iSpec)%InterID .EQ. 10) .OR. &
+ (SpecDSMC(iSpec)%InterID .EQ. 2) .OR. (SpecDSMC(iSpec)%InterID .EQ. 20)) THEN
+ MacroRadInputParameters(CNElemID,iSpec,4) = MAX(0.,ElemData_HDF5(IndexElectronTemp,iElem))
+ ELSE IF(SpecDSMC(iSpec)%InterID .EQ. 4) THEN
+ CYCLE
+ ELSE
+ PRINT*, "excitation temperature cannot be matched, unknown InterID for species", iSpec
+ END IF
+ END DO
+ END DO
+ END IF
+END IF
+
+#if USE_MPI
+CALL BARRIER_AND_SYNC(MacroRadInputParameters_Shared_Win ,MPI_COMM_SHARED)
+#endif
+
+DEALLOCATE(ElemData_HDF5)
+
+END SUBROUTINE MacroscopicRadiationInput
+
+
+SUBROUTINE BubbleSortID(a,id,len)
+!===================================================================================================================================
+! bubble sort, taken from rosetta-wiki and modified for own use
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,INTENT(IN) :: len
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL,INTENT(INOUT) :: a(len)
+INTEGER,INTENT(INOUT),OPTIONAL :: id(len)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: temp
+INTEGER :: iloop,jloop, temp2
+LOGICAL :: swapped = .TRUE.
+!===================================================================================================================================
+
+IF(PRESENT(id))THEN
+ DO jloop=len-1,1,-1
+ swapped = .FALSE.
+ DO iloop=1,jloop
+ IF (a(iloop).GT.a(iloop+1))THEN
+ ! switch entries
+ temp=a(iloop)
+ a(iloop) = a(iloop+1)
+ a(iloop+1) = temp
+ ! switch ids
+ temp2=id(iloop)
+ id(iloop) = id(iloop+1)
+ id(iloop+1) = temp2
+ swapped = .TRUE.
+ END IF
+ END DO ! iloop
+ IF (.NOT. swapped) EXIT
+ END DO ! jloop
+ELSE
+ DO jloop=len-1,1,-1
+ swapped = .FALSE.
+ DO iloop=1,jloop
+ IF (a(iloop).GT.a(iloop+1))THEN
+ ! switch entries
+ temp=a(iloop)
+ a(iloop) = a(iloop+1)
+ a(iloop+1) = temp
+ swapped = .TRUE.
+ END IF
+ END DO ! iloop
+ IF (.NOT. swapped) EXIT
+ END DO ! jloop
+END IF
+END SUBROUTINE BubbleSortID
+
+
+SUBROUTINE FinalizeRadiation()
+!===================================================================================================================================
+!> Deallocating radiation variables
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Radiation_Vars
+#if USE_MPI
+!USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+USE MOD_MPI_Shared
+#endif
+!-----------------------------------------------------------------------------------------------------------------------------------
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+
+SDEALLOCATE(RadiationInput)
+SDEALLOCATE(SpeciesRadiation)
+SDEALLOCATE(RadiationParameter%WaveLen)
+
+#if USE_MPI
+! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+CALL UNLOCK_AND_FREE(Radiation_Emission_Spec_Shared_Win)
+CALL UNLOCK_AND_FREE(Radiation_Absorption_Spec_Shared_Win)
+CALL UNLOCK_AND_FREE(Radiation_ElemEnergy_Species_Shared_Win)
+CALL UNLOCK_AND_FREE(Radiation_Absorption_SpecPercent_Shared_Win)
+IF(RadiationSwitches%MacroRadInput) CALL UNLOCK_AND_FREE(MacroRadInputParameters_Shared_Win)
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+#endif /*USE_MPI*/
+ADEALLOCATE(MacroRadInputParameters_Shared)
+ADEALLOCATE(Radiation_Emission_Spec)
+ADEALLOCATE(Radiation_Absorption_Spec)
+ADEALLOCATE(Radiation_ElemEnergy_Species)
+ADEALLOCATE(Radiation_Absorption_SpecPercent)
+
+END SUBROUTINE FinalizeRadiation
+
+END MODULE MOD_Radiation_Init
diff --git a/src/radiation/radiation_solver/radiation_instrbroadening.f90 b/src/radiation/radiation_solver/radiation_instrbroadening.f90
new file mode 100644
index 000000000..cfd9e8813
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_instrbroadening.f90
@@ -0,0 +1,152 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_InstrBroadening
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_instrbroadening
+ MODULE PROCEDURE radiation_instrbroadening
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_instrbroadening
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_instrbroadening(iElem)
+!===================================================================================================================================
+! Accounting for trapezoidal slit-function (instrumental broadening)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Radiation_Vars, ONLY : RadiationParameter, Radiation_Emission_spec
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+ REAL, PARAMETER :: basewidth = 3.42E-10*5.
+ REAL, PARAMETER :: topwidth = 1.79E-10*5.
+ REAL :: basewidth_half, topwidth_half, slope
+ REAL :: wavelength_min_base, wavelength_max_base, wavelength_min_top, wavelength_max_top
+ INTEGER :: io_error, w
+ INTEGER :: iWave, iWave_min, i
+ REAL, ALLOCATABLE :: Radiation_Emission_spec_conv(:)
+ REAL :: fractionl, fractionr, delta_base, delta_top
+
+!===================================================================================================================================
+
+ ALLOCATE(Radiation_Emission_spec_conv(RadiationParameter%WaveLenDiscr))
+
+ iWave_min = 1!0
+
+ basewidth_half = 0.5 * basewidth
+ topwidth_half = 0.5 * topwidth
+ slope = 1. / (basewidth_half-topwidth_half)
+
+ DO iWave=1, RadiationParameter%WaveLenDiscr
+ wavelength_min_base = RadiationParameter%WaveLen(iWave) - basewidth_half
+ wavelength_max_base = RadiationParameter%WaveLen(iWave) + basewidth_half
+ wavelength_min_top = RadiationParameter%WaveLen(iWave) - topwidth_half
+ wavelength_max_top = RadiationParameter%WaveLen(iWave) + topwidth_half
+
+! --- start index determination
+ DO WHILE(RadiationParameter%WaveLen(iWave_min+1) .LT. wavelength_min_base)
+ iWave_min = iWave_min + 1
+ END DO
+
+! --- slit function
+ DO i = iWave_min, RadiationParameter%WaveLenDiscr-1
+ IF(RadiationParameter%WaveLen(i) .LT. wavelength_min_base) THEN
+ fractionl = 0.
+ IF(RadiationParameter%WaveLen(i+1) .GT. wavelength_min_top) THEN
+ STOP 'slit function: step width is too big!'
+ END IF
+ fractionr = slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ delta_base = RadiationParameter%WaveLen(i+1) - wavelength_min_base
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_min_top) THEN
+ fractionl = slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ fractionr = slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ delta_base = RadiationParameter%WaveLenIncr
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i ) .LT. wavelength_min_top) THEN
+ fractionl = slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ fractionr = 1.
+ delta_base = wavelength_min_top - RadiationParameter%WaveLen(i)
+ delta_top = RadiationParameter%WaveLen(i+1) - wavelength_min_top
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_max_top) THEN
+ delta_base = 0.
+ delta_top = RadiationParameter%WaveLenIncr
+ ELSEIF(RadiationParameter%WaveLen(i ) .LT. wavelength_max_top) THEN
+ fractionl = 1.
+ fractionr = - slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ delta_base = RadiationParameter%WaveLen(i+1) - wavelength_max_top
+ delta_top = wavelength_max_top - RadiationParameter%WaveLen(i)
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_max_base) THEN
+ fractionl = - slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ fractionr = - slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ delta_base = RadiationParameter%WaveLenIncr
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i) .LT. wavelength_max_base) THEN
+ fractionl = - slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ fractionr = 0.
+ delta_base = wavelength_max_base - RadiationParameter%WaveLen(i)
+ delta_top = 0.
+ ELSE
+ EXIT
+ END IF
+
+ Radiation_Emission_spec_conv(iWave) = Radiation_Emission_spec_conv(iWave) &
+ + ((fractionl+fractionr)*.5*delta_base+delta_top) &
+ * Radiation_Emission_spec(i+1,iElem)
+
+
+ END DO
+
+! --- transformation to Laux's units
+! Radiation_Emission_spec_conv(iWave) = Radiation_Emission_spec_conv(iWave)/1.D11
+
+ END DO
+
+ OPEN(unit=30,file='Broadening.dat',status='replace',action='write', iostat=io_error)
+ DO w=1, RadiationParameter%WaveLenDiscr
+ WRITE(30,*) RadiationParameter%WaveLen(w)*1.E10 , Radiation_Emission_spec_conv(w)!*1.E10!/3.E12
+ END DO
+ CLOSE(unit=30)
+
+ WRITE(*,*) '*** INSTRUMENTAL BROADENING SUCCESSFULLY DONE ***'
+ WRITE(*,*) ''
+
+END SUBROUTINE radiation_instrbroadening
+
+
+END MODULE MOD_Radiation_InstrBroadening
diff --git a/src/radiation/radiation_solver/radiation_main.f90 b/src/radiation/radiation_solver/radiation_main.f90
new file mode 100644
index 000000000..028438489
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_main.f90
@@ -0,0 +1,158 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_main
+ MODULE PROCEDURE radiation_main
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_main
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_main(iElem)
+!===================================================================================================================================
+! Main routine of the radiation solver, called cell-locally in the radtrans_init.f90 in each computational cell to calculate the
+! local emission and absorption coefficients needed to solve the radiative transfer equation
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_Radiation_Vars, ONLY : RadiationInput, RadiationSwitches, MacroRadInputParameters, &
+ Radiation_Emission_spec, Radiation_Absorption_spec, RadiationParameter
+USE MOD_Radiation_Vars, ONLY : Radiation_Absorption_SpeciesWave ,Radiation_Absorption_SpecPercent
+USE MOD_Radiation_Excitation, ONLY : radiation_excitation
+USE MOD_Radiation_Atoms, ONLY : radiation_atoms
+USE MOD_Radiation_Molecules, ONLY : radiation_molecules
+USE MOD_Radiation_Continuum, ONLY : radiation_continuum
+USE MOD_Radiation_InstrBroadening, ONLY : radiation_instrbroadening
+USE MOD_PARTICLE_Vars, ONLY : nSpecies
+USE MOD_Mesh_Vars, ONLY : nGlobalElems!, offsetElem
+USE MOD_Mesh_Tools, ONLY : GetGlobalElemID
+USE MOD_Radiation_ExportSpectrum
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER :: iSpec, w, io_error, iWave
+! REAL :: currentWave, iRan
+ REAL :: em_tot, em_atom, em_mol, em_cont, sumAbsSpecies
+!===================================================================================================================================
+
+! --- initialize total emission variables
+ em_atom = 0.0
+ em_mol = 0.0
+ em_cont = 0.0
+ em_tot = 0.0
+ Radiation_Absorption_SpeciesWave = 0.0
+!IF ( ((iElem+offsetElem).NE.208) .AND. ((iElem+offsetElem).NE.228) .AND. ((iElem+offsetElem).NE.3492) &
+!.AND. ((iElem+offsetElem).NE.4743) .AND. ((iElem+offsetElem).NE.6541)) RETURN
+
+! --- get cell-local gas properties
+ IF (RadiationSwitches%MacroRadInput) THEN
+ DO iSpec = 1, nSpecies
+ RadiationInput(iSpec)%NumDens = MacroRadInputParameters(iElem,iSpec,1)
+ RadiationInput(iSpec)%Tvib = MacroRadInputParameters(iElem,iSpec,2)
+ RadiationInput(iSpec)%Trot = MacroRadInputParameters(iElem,iSpec,3)
+ RadiationInput(iSpec)%Telec = MacroRadInputParameters(iElem,iSpec,4)
+ RadiationInput(iSpec)%Ttrans(4) = MacroRadInputParameters(iElem,iSpec,5)
+ END DO
+ END IF
+
+! --- calculate upper state densities
+ CALL radiation_excitation()
+
+! --- calculate emission and absorption coefficients of atomic bound-bound radiation
+ IF (RadiationSwitches%bb_at) THEN
+ CALL radiation_atoms(iElem, em_atom)
+ END IF
+
+! --- calculate emission and absorption coefficients of diatomic/molecular bound-bound radiation
+ IF (RadiationSwitches%bb_mol) THEN
+ CALL radiation_molecules(iElem, em_mol)
+ END IF
+
+! --- calculate emission and absorption coefficients of contiuum radiation
+! CALL radiation_continuum(iElem, em_cont)
+
+ em_atom = em_atom * 4. * Pi
+ em_mol = em_mol * 4. * Pi
+ em_cont = em_cont * 4. * Pi
+ em_tot = em_atom + em_mol + em_cont
+
+ ! WRITE(*,*) 'atomic emission : ', em_atom, '[w/m³]'
+ ! WRITE(*,*) 'molecular emission : ', em_mol, '[w/m³]'
+ ! WRITE(*,*) 'continuum emission : ', em_cont, '[w/m³]'
+ ! WRITE(*,*) 'total emission : ', em_tot, '[w/m³]'
+ ! WRITE(*,*) ''
+
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ sumAbsSpecies =SUM(Radiation_Absorption_SpeciesWave(iWave, :))
+ ! Cast to INTEGER KIND=2
+ IF(sumAbsSpecies.GT.0.0) Radiation_Absorption_SpecPercent(iWave,:,GetGlobalElemID(iElem)) = NINT(Radiation_Absorption_SpeciesWave(iWave, :)/sumAbsSpecies*10000., 2)
+ END DO
+
+ IF((RadiationSwitches%RadType.EQ.3) .AND. (nGlobalElems.EQ.1)) THEN
+ OPEN(unit=20,file='Radiation_Emission_Absorption.csv',status='replace',action='write', iostat=io_error)
+ WRITE(20,*) 'wavelength,emission_coefficient,absorption_coefficient'
+ DO w=1, RadiationParameter%WaveLenDiscr
+ WRITE(20,*) RadiationParameter%WaveLen(w)*1.E9,',',Radiation_Emission_spec(w,1),',',Radiation_Absorption_spec(w,1)
+ END DO
+ CLOSE(unit=20)
+ END IF
+
+!------- Write output .dat-file including spectrally resolved emission and absorption for chosen cells
+! --- FIRE II Front ---
+! IF( ((iElem+offsetElem).EQ.208) .OR. ((iElem+offsetElem).EQ.228) .OR. ((iElem+offsetElem).EQ.3492) &
+! .OR. ((iElem+offsetElem).EQ.4743) .OR. ((iElem+offsetElem).EQ.6541)) THEN
+! CALL radiation_exportspectrum(iElem, 1)
+! CALL radiation_exportspectrum(iElem, 2)
+! END IF
+
+
+! --- HEARTED ---
+! IF( ((iElem+offsetElem).EQ.145) .OR. ((iElem+offsetElem).EQ.170) .OR. ((iElem+offsetElem).EQ.3597) &
+! .OR. ((iElem+offsetElem).EQ.5228) ) THEN
+! ! CALL radiation_exportspectrum(iElem, 1)
+! CALL radiation_exportspectrum(iElem, 2)
+! END IF
+
+!------- use slit function
+!IF ((iElem+offsetElem).EQ.4743) THEN
+! CALL radiation_instrbroadening(iElem)
+!END IF
+
+END SUBROUTINE radiation_main
+
+END MODULE MOD_Radiation
diff --git a/src/radiation/radiation_solver/radiation_molecules.f90 b/src/radiation/radiation_solver/radiation_molecules.f90
new file mode 100644
index 000000000..bfb80b6e3
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_molecules.f90
@@ -0,0 +1,1249 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_Molecules
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE radiation_molecules
+ MODULE PROCEDURE radiation_molecules
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: radiation_molecules
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE radiation_molecules(iElem, em_mol)
+!===================================================================================================================================
+! Main routine of molecular radiation calculation
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Globals_Vars, ONLY : BoltzmannConst, PlanckConst, AtomicMassUnit, Pi, c
+ USE MOD_Radiation_Vars, ONLY : RadiationInput, RadiationParameter, SpeciesRadiation, &
+ Radiation_Emission_spec, Radiation_Absorption_spec, NumDensElectrons, TElectrons, &
+ Radiation_ElemEnergy_Species, Radiation_Absorption_SpeciesWave
+ USE MOD_Particle_Vars, ONLY : nSpecies, Species
+ USE MOD_DSMC_Vars, ONLY : SpecDSMC
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(INOUT) :: em_mol
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+ INTEGER :: iSpec, iWave, iBand, iTrans, i, iWaveCoarse!, hilf
+ REAL :: rho, ptot !in ini !density [kg/m**3], pressure [Pa], number density
+ REAL, ALLOCATABLE :: epsilon_mol(:), epsilon_iSpec(:), abs_iSpec(:)
+ INTEGER :: istart, iend
+ REAL :: v_upper, v_lower ! vibrational quantum number of upper/lower state
+ REAL :: ElecTransMoment_squared ! squared electronic transition moment Re(r_{v_upper,v_lower})^2
+ REAL :: Bv_upper, Bv_lower ! rotational constants for the vibrational level v_upper/lower, cm^-1
+ REAL :: Dv_upper, Dv_lower ! rotational constants for the vibrational level v_upper/lower, cm^-1
+ REAL :: G_upper, G_lower ! G(v) = we(v+0.5) - wexe(v+0.5)**2 + weye(v+0.5)**3 + weze(v+0.5)**4
+ REAL :: cint1, cint2, nubar0, r1 ! TODO: RENAME, nubar0 [cm**-1]
+ INTEGER :: kmax ! TODO: RENAME maximum rotational quantum number (NEQAIR85 determines the maximum rotational quantum number by determining approximately 0.01 of the maximum radiation. This approach is not longer followed since the combination of the radiating band to more transitions had the effect that no rotational lines were computed for higher vibrational levels. Now, the maximum rotational quantum number is determined from the dissociation energy (only bvu is used, since otherwise an iterative procedure would be necessary) mf 2007/07/18)
+ REAL :: DlamG, DlamL, DlamV ! Gaussian, Lorentzian and Voigt width_int [m]
+ REAL :: DlamL1, DlamL2, DlamL3, DlamL4 ! 1: collisions with molecules, 2: collisions with all other, 3: natural, 4: Stark [m]
+ REAL, PARAMETER :: Stark = 0.3 ! Stark width at NumDensElectrons=1.E16 and TElectrons = 10000
+ REAL :: NumDensForeignGas,MolWeightForeignGas! number density and average molecular weight of foreign gas
+
+ INTEGER, PARAMETER:: Voigt_int_nmax = 1001
+ REAL, PARAMETER :: Voigt_mult_discr = 25.
+ REAL :: Voigt_int(-Voigt_int_nmax:Voigt_int_nmax), Voigt_int_step, Voigt
+ REAL :: Voigt_var1, Voigt_const1, Voigt_const2, Voigt_int_distmax, Voigt_arg_dimless, Voigt_int_NormEnergy
+ INTEGER :: iVoigt
+ REAL :: Voigt_dist1, Voigt_dist2, Voigt_dist225
+
+ REAL :: j_upper, j_lower, j_transition
+ REAL :: k_upper, k_lower
+ INTEGER :: k, iBranch
+ REAL :: HoenlLondon_3p3p(0:500,8), HoenlLondon_2p2p(500,12), HoenlLondon_2s2s(0:500,6) !hoenl-london compution
+
+ INTEGER, PARAMETER:: Deltak_upper_3p3p(8) = [1,-1,1,-0,-1,1,0,-1]
+ INTEGER, PARAMETER:: Deltak_lower_3p3p(8) = [0, 0,0,0, 0,0,0, 0]
+ INTEGER, PARAMETER:: Deltak_upper_2p2p(12) = [-1,0,1, 0,0,1,-1,0,1,-1,0,1]
+ INTEGER, PARAMETER:: Deltak_lower_2p2p(12) = [0, 0,0,-1,0,0, 0,0,0, 0,0,0]
+ INTEGER, PARAMETER:: Deltak_upper_2s2s(6) = [1,1,-1,-1,1,-1]
+ INTEGER, PARAMETER:: Deltak_lower_2s2s(6) = [0,0, 0, 0,0, 0]
+
+ REAL :: Lambda_upper, Lambda_lower ! Bahndrehimpulsquantenzahl
+ REAL :: Y_upper, Y_lower,Y_transition ! Y = A/Bv
+ REAL :: F_upper, F_lower
+ REAL :: Z1_upper, Z1_lower, Z2_upper, Z2_lower
+ REAL :: nubar, r2!, lambda ! wavenumber [cm**-1], , wavelength [m]
+
+ REAL :: etot, abstot, eps
+ REAL, PARAMETER :: a0e = 2.5415785E-18
+ REAL :: AlternationFactor ! alternation factor for homocuclear molecules
+ REAL :: HoenlLondon, u
+
+ REAL, ALLOCATABLE :: Radiation_Profile(:)
+ REAL :: TempOut_Em, TempOut_Abs
+!===================================================================================================================================
+
+! --- loop for ptot and rho over all atoms and molecules, additionally electrons
+ rho = 0.0
+ ptot = 0.0
+
+ DO iSpec = 1, nSpecies
+ rho = rho + RadiationInput(iSpec)%NumDens * Species(iSpec)%MassIC
+ ptot = ptot + RadiationInput(iSpec)%NumDens * BoltzmannConst * RadiationInput(iSpec)%Ttrans(4)
+ END DO
+ ptot = ptot + NumDensElectrons * BoltzmannConst * TElectrons ! TODO: isp -> should be electrons? Radiation: NumDens(N2), Telec
+
+! --- initialize emission coefficient
+ ALLOCATE(epsilon_mol(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(epsilon_iSpec(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(abs_iSpec(RadiationParameter%WaveLenDiscr))
+ ALLOCATE(Radiation_Profile(RadiationParameter%WaveLenDiscr))
+ DO iWave=1, RadiationParameter%WaveLenDiscr
+ epsilon_mol(iWave) = 0.0 !Radiation_Emission_spec(iWave,iElem)
+ END DO
+
+ istart = RadiationParameter%WaveLenDiscr
+ iend = 1
+
+ DO iSpec = 1, nSpecies
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+ IF((SpecDSMC(iSpec)%InterID .NE. 2) .AND. (SpecDSMC(iSpec)%InterID .NE. 20)) CYCLE
+ Radiation_Profile = 0.0
+ IF ((RadiationInput(iSpec)%Telec.LT.10.0).OR.(RadiationInput(iSpec)%Tvib.LT.10.0).OR.(RadiationInput(iSpec)%NumDens.LT.10.0).OR.(RadiationInput(iSpec)%Ttrans(4).LT.10.0))CYCLE
+
+ epsilon_iSpec = 0.0
+ abs_iSpec = 0.0
+
+ IF(SpeciesRadiation(iSpec)%nBands.NE.0) THEN
+
+! --- determine number density and average weight of foreign gas
+ NumDensForeignGas = 1.0E10
+ IF (ptot .GT. 1.0E-16) &
+ NumDensForeignGas = MAX(ptot/(RadiationInput(iSpec)%Ttrans(4)*BoltzmannConst) - RadiationInput(iSpec)%NumDens , &
+ 1.0D-40*ptot/(RadiationInput(iSpec)%Ttrans(4)*BoltzmannConst))
+
+ MolWeightForeignGas = 20. * AtomicMassUnit
+ IF(rho .GT. 1.0E-16) MolWeightForeignGas = (rho - Species(iSpec)%MassIC*RadiationInput(iSpec)%NumDens) / NumDensForeignGas
+ MolWeightForeignGas = MolWeightForeignGas / (AtomicMassUnit * 1.0E-3)
+ IF(MolWeightForeignGas .LT. 10.*1.0E-3*AtomicMassUnit) MolWeightForeignGas = 10. * 1.0E-3 * AtomicMassUnit
+ IF(MolWeightForeignGas .GT. 28.85*1.0E-3*AtomicMassUnit) MolWeightForeignGas = 28.85* 1.0E-3 * AtomicMassUnit
+
+ DO iBand = 1,SpeciesRadiation(iSpec)%nBands
+ ! WRITE(*,*) TRIM(SpeciesRadiation(iSpec)%BandName(iBand))
+
+ !! TODO : IF ( 2 .EQ. 2) diatomic molecule
+ ! -----------------------------------------------------------------------------------------------------------------------------------
+ ! ------------------------------------------------- diatomic molecule calculation ---------------------------------------------------
+ ! -----------------------------------------------------------------------------------------------------------------------------------
+
+ ! --- cycle over all transitions of electronic bands
+ DO iTrans = 1, SpeciesRadiation(iSpec)%NumMolecularTransitions(iBand)
+ v_upper = SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,1)
+ v_lower = SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,2)
+ ElecTransMoment_squared = SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,3) &
+ * REAL(SpeciesRadiation(iSpec)%BandProperties(iBand,4))
+ ! --- rotational constants for this band
+ Bv_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1), 8) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1), 9) * (v_upper+0.5)
+ Bv_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2), 8) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2), 9) * (v_lower+0.5)
+ Dv_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),13) &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),14) * (v_upper+0.5)
+ Dv_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),13) &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),14) * (v_lower+0.5)
+
+ ! --- constants for intensity equation in rotational structure
+ G_upper =SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1) ,4) * (v_upper+0.5) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1) ,5) * (v_upper+0.5)**2 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1) ,6) * (v_upper+0.5)**3 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1) ,7) * (v_upper+0.5)**4
+ G_lower =SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2) ,4) * (v_lower+0.5) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2) ,5) * (v_lower+0.5)**2 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2) ,6) * (v_lower+0.5)**3 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2) ,7) * (v_lower+0.5)**4
+
+ cint1 = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+ / RadiationInput(iSpec)%Telec + G_upper / RadiationInput(iSpec)%Tvib
+ cint2 = (16.0E-5*c* RadiationInput(iSpec)%NumDens * 1.0E-6 * SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,4) &
+ * ElecTransMoment_squared * Pi**3) / (3.0 * SpeciesRadiation(iSpec)%PartFunc)
+
+ kmax = INT( SQRT( MAX(0.D0, &
+ 0.25 + ( SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),3) &
+ - G_lower ) / Bv_lower ) + 1. ) )
+
+ ! --- band origin
+ nubar0 = (( SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) ) &
+ + (G_upper - G_lower)) / (100.*PlanckConst*c) ! energy conversion J -> cm**-1
+
+ r1 = EXP( ( SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) ) &
+ / (BoltzmannConst * RadiationInput(iSpec)%Telec) + (G_upper-G_lower) / (BoltzmannConst * RadiationInput(iSpec)%Tvib) )
+
+ ! --- check if transition is in considered wavelength interval
+ IF( (2.0/(100.*nubar0)) .LT. RadiationParameter%WaveLen(1) ) CYCLE
+ IF( (0.5/(100.*nubar0)) .GT. RadiationParameter%WaveLen(RadiationParameter%WaveLenDiscr) ) CYCLE
+
+ ! --- widths
+ DlamG = 7.16E-7 / (100.*nubar0) * SQRT(RadiationInput(iSpec)%Ttrans(4)/(Species(iSpec)%MassIC/AtomicMassUnit))
+
+ DlamL1 = 1.33E-29 * SQRT(2.0/(Species(iSpec)%MassIC/AtomicMassUnit)) &
+ * (0.01/nubar0)**2 * SQRT(RadiationInput(iSpec)%Ttrans(4)) * RadiationInput(iSpec)%NumDens * 1.0E-6 * 10. * 1.0E10
+ DlamL2 = 5.85E-30 * SQRT(1.0/(Species(iSpec)%MassIC/AtomicMassUnit)+1./(MolWeightForeignGas/(AtomicMassUnit*1.0E-3))) &
+ * (0.01/nubar0)**2 * SQRT(RadiationInput(iSpec)%Ttrans(4)) * NumDensForeignGas * 1.0E-6 * 10. * 1.0E10
+ DlamL3 = 1.18E-4 * 1.0E-10
+ DlamL4 = 1.0E-8 * Stark * (1.0E-22 * MAX(NumDensElectrons, 1.E-6))**0.6 * (0.01/nubar0)**2 * 1.0E10
+ DlamL = DlamL1 + DlamL2 + DlamL3 + DlamL4
+
+ ! --- Voigt-line width at half maximum
+ DlamV = Dlaml/2.0 + SQRT( Dlaml**2/4.0 + Dlamg**2 )
+
+ ! --- generate Voigt line profile
+ Voigt_int(-Voigt_int_nmax) = 0. !initialize Voigt profile
+ Voigt_int( Voigt_int_nmax) = 1.
+
+ Voigt_int_distmax = Voigt_mult_discr * DlamV !determine discretised interval
+ Voigt_arg_dimless = DlamL/DlamV
+ Voigt_var1 = 1./((1.065 + (0.447 + 0.058 * Voigt_arg_dimless) * Voigt_arg_dimless) * DlamV)
+ Voigt_const2 = Voigt_arg_dimless * Voigt_var1
+ Voigt_const1 = Voigt_var1 - Voigt_const2
+ Voigt_int_step = Voigt_int_distmax / (Voigt_int_nmax-1) !step width
+
+ DO iVoigt = -(Voigt_int_nmax-1), 0 !determine lower half of Voigt profile
+ Voigt_dist1 = REAL(ABS(iVoigt)) * Voigt_int_step / (DlamV)
+ Voigt_dist2 = Voigt_dist1**2
+ Voigt_dist225 = Voigt_dist2 * SQRT(SQRT(Voigt_dist1))
+
+ Voigt = Voigt_const1 * EXP(MAX(-1.E8,-2.772*Voigt_dist2)) + Voigt_const2 / (1.+4.*Voigt_dist2) &
+ + 0.016 * Voigt_const2 * (1.-Voigt_arg_dimless) * (EXP(MAX(-1.E5,-0.4*Voigt_dist225) &
+ - 10. / (10. + Voigt_dist225)))
+ IF((Voigt_dist225.GT.1E5).OR.(Voigt_dist2.GT.1E8)) CALL abort(&
+ __STAMP__&
+ ,' ERROR: Voigt_dist225 is too big!')
+ Voigt_int(iVoigt) = Voigt_int(iVoigt-1) + Voigt * Voigt_int_step
+ END DO
+
+ DO iVoigt = 1, (Voigt_int_nmax-1) ! determine upper half of Voigt profile
+ Voigt_int(iVoigt) = 2. * Voigt_int(0) - Voigt_int(-iVoigt)
+ END DO
+
+ Voigt_int_NormEnergy = 1./ Voigt_int(Voigt_int_nmax-1)
+
+ DO iVoigt = -(Voigt_int_nmax-1), (Voigt_int_nmax-1) ! normalize profiles that energy below the Voigt profile function is 1 (integrated profiles are normed to 1)
+ Voigt_int(iVoigt) = Voigt_int(iVoigt) * Voigt_int_NormEnergy
+ END DO
+
+
+ ! --- different radiating systems
+ SELECT CASE (SpeciesRadiation(iSpec)%BandProperties(iBand,3))
+
+ CASE(1) ! parallel transition, Delta Lambda = 0
+
+ etot = 0.0
+
+ ! --- set constants to determine wavelength of center line for triplets (Herzberg p.235)
+ Lambda_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)
+ Lambda_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)
+ Y_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),16) / Bv_upper
+ Y_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),16) / Bv_lower
+
+ DO iBranch = 1,2
+
+ SELECT CASE(iBranch)
+ CASE(1) !set quantum numbers for P branch (+1)
+ k_upper = 0.0
+ k_lower = k_upper + 1.0
+ CASE(2) !set quantum numbers for R branch (-1)
+ k_upper = 0.0
+ k_lower = k_upper - 1.0
+ CASE DEFAULT
+ WRITE(*,*) 'branch not found'
+ END SELECT
+
+ ! --- compute and distribute the integrated integrated intensity due to spontaneous emission of all specified rotational lines for the appropriate branch
+ DO k = 0, kmax
+
+ Z1_upper = Lambda_upper**2 * Y_upper * (Y_upper - 4.) + 4./3. + 4. * k_upper * (k_upper + 1.)
+ Z1_lower = Lambda_lower**2 * Y_lower * (Y_lower - 4.) + 4./3. + 4. * k_lower * (k_lower + 1.)
+
+ IF(Lambda_upper .EQ. 0.0) THEN
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),1) .NE. 3.0) THEN
+ Z2_upper = 0.0
+ Z2_lower = 0.0
+ ELSE
+ Z2_upper = (Lambda_upper**2 * Y_upper * (Y_upper-1.) - 4./9. - 2. * k_upper * (k_upper+1.)) / (3.*Z1_upper) ! TODO: + or - 4/9?
+ Z2_lower = (Lambda_lower**2 * Y_lower * (Y_lower-1.) - 4./9. - 2. * k_lower * (k_lower+1.)) / (3.*Z1_lower) ! TODO: + or - 4/9?
+ END IF
+ ELSE
+ IF((SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),1)/2.0) &
+ .NE. 3.0) THEN
+ Z2_upper = 0.0
+ Z2_lower = 0.0
+ ELSE
+ Z2_upper = (Lambda_upper**2 * Y_upper * (Y_upper-1.) - 4./9. - 2. * k_upper * (k_upper+1.)) / (3.*Z1_upper) ! TODO: + or - 4/9?
+ Z2_lower = (Lambda_lower**2 * Y_lower * (Y_lower-1.) - 4./9. - 2. * k_lower * (k_lower+1.)) / (3.*Z1_lower) ! TODO: + or - 4/9?
+ END IF
+ END IF
+
+ ! --- compute wavelength of line center
+ F_upper = Bv_upper * (k_upper * (k_upper + 1.) + 4. * Z2_upper) - Dv_upper * (k_upper + 0.5)**4
+ F_lower = Bv_lower * (k_lower * (k_lower + 1.) + 4. * Z2_lower) - Dv_lower * (k_lower + 0.5)**4
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ SELECT CASE(iBranch)
+ CASE(1) !set HLF for P branch (+1)
+ HoenlLondon = k_upper + 1.0
+ CASE(2) !set HLF for R branch (-1)
+ HoenlLondon = k_upper
+ END SELECT
+
+ ! --- evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(k_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ ! --- find integrated line intensity due to spontaneous emission (etot) and sum of absorption and stimulated emission (abstot)
+ eps = 1.0E16 * AlternationFactor * HoenlLondon * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * k_upper * (k_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst)
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+! abstot = c*c/(8.*Pi*nubar*nubar) &
+! * 16.*Pi**3*nubar**3/(3.*8.8541878128E-12*PlanckConst*c**3) &
+! * SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,4)*ElecTransMoment_squared*HoenlLondon/(2.*J+1.) &
+! * (RadiationInput(iSpec)%NumDens / SpeciesRadiation(iSpec)%PartFunc &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) &
+! * EXP(-(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+! / RadiationInput(iSpec)%Telec + G_upper / RadiationInput(iSpec)%Tvib
+! + (Bv_upper * k_upper * (k_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst) &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),1) &
+! / SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) &
+! - (RadiationInput(iSpec)%NumDens / SpeciesRadiation(iSpec)%PartFunc &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),1) &
+! * EXP(-(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+! / RadiationInput(iSpec)%Telec + G_lower / RadiationInput(iSpec)%Tvib
+! + (Bv_lower * k_lower * (k_lower + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst) )
+
+! abstot = 2.*Pi*Pi*nubar/(3.*8.8541878128E-12*PlanckConst*c) &
+! * SpeciesRadiation(iSpec)%Bands(iBand)%MolTransLines(iTrans,4)*ElecTransMoment_squared*HoenlLondon/(2.*J+1.) &
+! * (RadiationInput(iSpec)%NumDens / SpeciesRadiation(iSpec)%PartFunc &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) &
+! * EXP(-(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+! / RadiationInput(iSpec)%Telec + G_upper / RadiationInput(iSpec)%Tvib
+! + (Bv_upper * k_upper * (k_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst) &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),1) &
+! / SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),2) &
+! - (RadiationInput(iSpec)%NumDens / SpeciesRadiation(iSpec)%PartFunc &
+! * SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),1) &
+! * EXP(-(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),2) &
+! / RadiationInput(iSpec)%Telec + G_lower / RadiationInput(iSpec)%Tvib
+! + (Bv_lower * k_lower * (k_lower + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst) )
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+
+ k_lower = k_lower + 1.0
+ k_upper = k_upper + 1.0
+
+ END DO !k
+ END DO !iBranch
+
+ CASE(2) ! perpendicular transition, Delta Lambda = +-1
+
+ ! --- adjust factor used in intesity equation to correct partcc for lambda doubling
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17) .GE. 0.5) &
+ cint2 = cint2 / 2.0
+
+ etot = 0.0
+
+ DO iBranch = 1,3
+
+ SELECT CASE(iBranch)
+ CASE(1) !set quantum numbers for P branch (+1)
+ k_upper = 1.0
+ k_lower = k_upper + 1.0
+ CASE(2) !set quantum numbers for Q branch ( 0)
+ k_upper = 1.0
+ k_lower = k_upper
+ CASE(3) !set quantum numbers for R branch (-1)
+ k_upper = 1.0
+ k_lower = k_upper - 1.0
+ CASE DEFAULT
+ WRITE(*,*) 'branch not found'
+ END SELECT
+
+ ! --- compute and distribute the integrated intensity due to spontaneous emission of all specified rotational lines
+ DO k = 1, kmax
+ ! --- compute line center
+ F_upper = Bv_upper * (k_upper * (k_upper + 1.0)) - Dv_upper * (k_upper + 0.5)**4
+ F_lower = Bv_lower * (k_lower * (k_lower + 1.0)) - Dv_lower * (k_lower + 0.5)**4
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ ! lambda = 1./(100.*nubar)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ ! --- strength factor, set sign of Lambda used in strength equations, appropriate to the sigh of Delta Lambda (Johnson p.150)
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17) .LT. &
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)) THEN
+ SELECT CASE(iBranch)
+ CASE(1)
+ HoenlLondon = (k_upper + 1.0 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (k_upper + 2.0 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / (k_upper + 1.0)
+ CASE(2)
+ HoenlLondon = (k_upper &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (2.0 * k_upper + 1.0) &
+ * (k_upper + 1.0 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / (k_upper * (k_upper + 1.0))
+ CASE(3)
+ HoenlLondon = (k_upper &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (k_upper - 1.0 &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / k_upper
+ END SELECT
+ ELSE
+ SELECT CASE(iBranch)
+ CASE(1)
+ HoenlLondon = (k_upper + 1.0 &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (k_upper + 2.0 &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / (k_upper + 1.0)
+ CASE(2)
+ HoenlLondon = (k_upper &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (2.0 * k_upper + 1.0) &
+ * (k_upper + 1.0 &
+ - SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / (k_upper * (k_upper + 1.0))
+ CASE(3)
+ HoenlLondon = (k_upper &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ * (k_upper - 1.0 &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)) &
+ / k_upper
+ END SELECT
+ END IF
+
+ ! --- determine if lines alternate in intesity -> evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(k_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ eps = 1.0E16 * AlternationFactor * HoenlLondon * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * k_upper * (k_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst)
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+
+ k_lower = k_lower + 1.0
+ k_upper = k_upper + 1.0
+
+ END DO !k
+ END DO ! iBranch
+
+ CASE(3) ! 2Sigma -> 2Pi
+
+ Lambda_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)
+ Lambda_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)
+ Y_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),16) / Bv_upper
+ Y_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),16) / Bv_lower
+
+ ! --- set Y_transition depending on direction of transition
+ IF(Lambda_upper .GT. Lambda_lower) THEN !Pi -> Sigma transition
+ Y_transition = Y_upper
+ ELSE !Sigma -> Pi transition
+ Y_transition = Y_lower
+ END IF
+
+ etot = 0.0
+
+ DO iBranch = 1,8
+
+ ! --- Pi -> Sigma transition
+ IF(Lambda_upper .GT. Lambda_lower) THEN
+ SELECT CASE(iBranch)
+ CASE(1) !set quantum numbers for P2 branch
+ j_upper = 1.5
+ j_lower = j_upper + 1.0
+ CASE(2) !set quantum numbers for R1 branch
+ j_upper = 2.5
+ j_lower = j_upper - 1.0
+ CASE(3) !set quantum numbers for R21 branch
+ j_upper = 1.5
+ j_lower = j_upper - 1.0
+ CASE(4) !set quantum numbers for OP12 branch
+ j_upper = 2.5
+ j_lower = j_upper + 1.0
+ CASE(5) !set quantum numbers for Q2/QP21 branch
+ j_upper = 1.5
+ j_lower = j_upper
+ CASE(6) !set quantum numbers for Q1/QR12 branch
+ j_upper = 2.5
+ j_lower = j_upper
+ CASE(7) !set quantum numbers for R2/RQ21 branch
+ j_upper = 1.5
+ j_lower = j_upper - 1.0
+ CASE(8) !set quantum numbers for P1/PQ12 branch
+ j_upper = 2.5
+ j_lower = j_upper + 1.0
+ CASE DEFAULT
+ WRITE(*,*) 'branch not found'
+ END SELECT
+ ! --- Sigma -> Pi transition
+ ELSE
+ SELECT CASE(iBranch)
+ CASE(1) !set quantum numbers for R2 branch
+ j_upper = 1.5
+ j_lower = j_upper - 1.0
+ CASE(2) !set quantum numbers for P1 branch
+ j_upper = 2.5
+ j_lower = j_upper + 1.0
+ CASE(3) !set quantum numbers for SR21 branch
+ j_upper = 1.5
+ j_lower = j_upper - 1.0
+ CASE(4) !set quantum numbers for OP12 branch
+ j_upper = 2.5
+ j_lower = j_upper + 1.0
+ CASE(5) !set quantum numbers for Q2/QR12 branch
+ j_upper = 1.5
+ j_lower = j_upper
+ CASE(6) !set quantum numbers for Q1/QP21 branch
+ j_upper = 2.5
+ j_lower = j_upper
+ CASE(7) !set quantum numbers for P2/PQ12 branch
+ j_upper = 1.5
+ j_lower = j_upper + 1.0
+ CASE(8) !set quantum numbers for R1/RQ21 branch
+ j_upper = 2.5
+ j_lower = j_upper - 1.0
+ CASE DEFAULT
+ WRITE(*,*) 'branch not found'
+ END SELECT
+ END IF
+
+ ! --- set j_transition depending on direction of transition, j is the rotational quatum number of the Pi state (reference by Earls)
+ IF(Lambda_upper .GT. Lambda_lower) THEN !Pi -> Sigma transition
+ j_transition = j_upper
+ ELSE !Sigma -> Pi transition
+ j_transition = j_lower
+ END IF
+
+ DO k = 2, kmax
+
+ IF((iBranch .EQ. 1) .OR. (iBranch .EQ. 5) .OR. (iBranch .EQ. 7)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + .5 * SQRT(4. * (j_upper+0.5)**2 &
+ - 4. * Y_upper * Lambda_upper**2 + (Y_upper * Lambda_upper)**2 ))
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + .5 * SQRT(4. * (j_lower+0.5)**2 &
+ - 4. * Y_lower * Lambda_lower**2 + (Y_lower * Lambda_lower)**2 ))
+ ELSEIF ((iBranch .EQ. 2) .OR. (iBranch .EQ. 6) .OR. (iBranch .EQ. 8)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - .5 * SQRT(4. * (j_upper+0.5)**2 &
+ - 4. * Y_upper * Lambda_upper**2 + (Y_upper * Lambda_upper)**2 ))
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - .5 * SQRT(4. * (j_lower+0.5)**2 &
+ - 4. * Y_lower * Lambda_lower**2 + (Y_lower * Lambda_lower)**2 ))
+ ELSEIF (iBranch .EQ. 3) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + .5 * SQRT(4. * (j_upper+0.5)**2 &
+ - 4. * Y_upper * Lambda_upper**2 + (Y_upper * Lambda_upper)**2 ))
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - .5 * SQRT(4. * (j_lower+0.5)**2 &
+ - 4. * Y_lower * Lambda_lower**2 + (Y_lower * Lambda_lower)**2 ))
+ ELSEIF (iBranch .EQ. 4) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - .5 * SQRT(4. * (j_upper+0.5)**2 &
+ - 4. * Y_upper * Lambda_upper**2 + (Y_upper * Lambda_upper)**2 ))
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + .5 * SQRT(4. * (j_lower+0.5)**2 &
+ - 4. * Y_lower * Lambda_lower**2 + (Y_lower * Lambda_lower)**2 ))
+ END IF
+
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ ! --- set strength factor for different branches
+ u = 1. / SQRT(Y_transition**2 - 4. * Y_transition + (2.*j_transition+1.)**2)
+ SELECT CASE(iBranch)
+ CASE(1)
+ HoenlLondon = ((2. * j_transition + 1.)**2 + (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition + 1. - 2.*Y_transition) ) / (32. * (j_transition+1.))
+ CASE(2)
+ HoenlLondon = ((2. * j_transition + 1.)**2 + (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition + 1. - 2.*Y_transition) ) / (32. * (j_transition+0.))
+ CASE(3)
+ HoenlLondon = ((2. * j_transition + 1.)**2 - (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition + 1. - 2.*Y_transition) ) / (32. * (j_transition+1.))
+ CASE(4)
+ HoenlLondon = ((2. * j_transition + 1.)**2 - (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition + 1. - 2.*Y_transition) ) / (32. * (j_transition+0.))
+
+ CASE(5) !double branch
+ HoenlLondon = ((2. * j_transition + 1.)**2 - (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition - 7. + 2.*Y_transition) ) / (32. * (j_transition+1.))
+ HoenlLondon = HoenlLondon &
+ + (2. * j_transition + 1.) * ((4.*j_transition**2 + 4.*j_transition - 1.) + u &
+ * (8.*j_transition**3 + 12.*j_transition**2 - 2.*j_transition + 1. - 2.*Y_transition)) &
+ / (32. * j_transition * (j_transition+1.))
+ CASE(6) !double branch
+ HoenlLondon = ((2. * j_transition + 1.)**2 - (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition - 7. + 2.*Y_transition) ) / (32. * (j_transition+0.))
+ HoenlLondon = HoenlLondon &
+ + (2. * j_transition + 1.) * ((4.*j_transition**2 + 4.*j_transition - 1.) + u &
+ * (8.*j_transition**3 + 12.*j_transition**2 - 2.*j_transition - 7. + 2.*Y_transition)) &
+ / (32. * j_transition * (j_transition+1.))
+ CASE(7) !double branch
+ HoenlLondon = ((2. * j_transition + 1.)**2 + (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition - 7. + 2.*Y_transition) ) / (32. * (j_transition+0.))
+ HoenlLondon = HoenlLondon &
+ + (2. * j_transition + 1.) * ((4.*j_transition**2 + 4.*j_transition - 1.) - u &
+ * (8.*j_transition**3 + 12.*j_transition**2 - 2.*j_transition - 7. + 2.*Y_transition)) &
+ / (32. * j_transition * (j_transition+1.))
+ CASE(8) !double branch
+ HoenlLondon = ((2. * j_transition + 1.)**2 + (2.*j_transition+1.) * u &
+ * (4.*j_transition**2 + 4.*j_transition - 7. + 2.*Y_transition) ) / (32. * (j_transition+1.))
+ HoenlLondon = HoenlLondon &
+ + (2. * j_transition + 1.) * ((4.*j_transition**2 + 4.*j_transition - 1.) - u &
+ * (8.*j_transition**3 + 12.*j_transition**2 - 2.*j_transition + 1. - 2.*Y_transition)) &
+ / (32. * j_transition * (j_transition+1.))
+ END SELECT
+
+ ! --- determine if lines alternate in intesity -> evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(k_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ eps = 1.0E16 * AlternationFactor * MAX(0.,HoenlLondon) * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * j_upper * (j_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst)
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+
+ j_lower = j_lower + 1.0
+ j_upper = j_upper + 1.0
+ j_transition = j_transition + 1.0
+
+ END DO !k
+ END DO !iBranch
+
+ CASE(4) ! 2Sigma -> 2Sigma
+
+ ! --- computing Hoenl-London factors for 2Sigma->2Sigma transitions for diatomic molecules
+ DO k = 0, 500
+ ! --- Branch 01: R1 branch
+ j_upper = REAL(k + 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,1) = (j_lower + 1.) * (j_lower + 2.) / (2. * j_lower + 3.)
+ ! --- Branch 02: R2 branch
+ j_upper = REAL(k + 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,2) = j_lower * (j_lower + 1.) / (2. * j_lower + 1.)
+ ! --- Branch 03: P1 branch
+ j_upper = REAL(k - 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,3) = j_lower * (j_lower - 1.) / (2. * j_lower - 1.)
+ ! --- Branch 04: P2 branch
+ j_upper = REAL(k - 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,4) = j_lower * (j_lower + 1.) / (2. * j_lower + 1.)
+ ! --- Branch 05: RG21 branch
+ j_upper = REAL(k + 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,5) = j_lower / ( (2. * j_lower - 1.) * (2. * j_lower + 1.) )
+ ! --- Branch 06: RQ21 Satelliten-Zweig
+ j_upper = REAL(k - 1.)
+ j_lower = REAL(k )
+ HoenlLondon_2s2s(k,6) = (j_lower + 1.) / ( (2. * j_lower + 1.) * (2. * j_lower + 3.) )
+ END DO
+
+ Lambda_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)
+ Lambda_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)
+ Y_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),16) / Bv_upper
+ Y_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),16) / Bv_lower
+
+ etot = 0.0
+ !PRINT*, kmax
+ DO iBranch = 1, 6
+ DO k = 0, kmax
+ j_upper = REAL(k + Deltak_upper_2s2s(iBranch))
+ j_lower = REAL(k + Deltak_lower_2s2s(iBranch))
+
+ IF((iBranch .EQ. 1) .OR. (iBranch .EQ. 3)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - .5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 0.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - .5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 0.)**4
+ ELSEIF ((iBranch .EQ. 2) .OR. (iBranch .EQ. 4)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + .5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 1.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + .5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 1.)**4
+ ELSEIF (iBranch .EQ. 5) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + .5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 1.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - .5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 0.)**4
+ ELSEIF (iBranch .EQ. 6) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - .5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 0.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + .5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 1.)**4
+ END IF
+
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ ! --- evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(j_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ eps = 1.0E16 * AlternationFactor * HoenlLondon_2s2s(k,iBranch) * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * j_upper * (j_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst)
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+ END DO ! k
+ END DO ! iBranch
+
+ CASE(5) ! 2Pi -> 2Pi
+
+ ! --- computing Hoenl-London factors for 2Pi->2Pi transitions for diatomic molecules
+ DO k = 3, 500
+ ! --- Branch 01: P1 branch
+ j_upper = REAL(k - 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,1) = (j_lower-1.5) * (j_lower+1.5) / (4.*j_lower*ckovacs(j_upper-1.0,+1.0) &
+ * ckovacs(j_lower,+1.) ) * (ukovacs(j_upper-1.,+1.) * ukovacs(j_lower,+1.) + 4. * (j_lower-.5) * (j_lower+.5 ) )
+ ! --- Branch 02: Q1 branch
+ j_upper = REAL(k ) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,2) = (j_lower+.5) / (2. * j_lower*(j_lower+1.) * ckovacs(j_upper,+1.) * ckovacs(j_lower,+1.) ) &
+ * ( 1.5 * ukovacs(j_upper,+1.) * ukovacs(j_lower,+1.) + 2.*(j_lower-0.5 ) * (j_lower+1.5) )**2
+ ! --- Branch 03: R1 branch
+ j_upper = REAL(k + 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,3) = (j_lower-.5) * (j_lower+2.5) / (4. * (j_lower+1.) * ckovacs(j_upper+1.,+1.) &
+ * ckovacs(j_lower,+1.) ) * (ukovacs(j_upper+1.,+1.) * ukovacs(j_lower,+1.) + 4. * (j_lower+.5) * (j_lower+1.5) )**2
+ ! --- Branch 04: QP21 branch
+ j_upper = REAL(k ) + .5
+ j_lower = REAL(k - 1.) + .5
+ HoenlLondon_2p2p(k,4) = (j_lower-1.5) * (j_lower+1.5) / (4. * j_lower * ckovacs(j_upper-1.,-1.) &
+ * ckovacs(j_lower,+1.) ) * (ukovacs(j_upper-1.,-1.) * ukovacs(j_lower,+1.) - 4. * (j_lower-0.5) * (j_lower+0.5) )**2
+ ! --- Branch 05: RQ21 branch
+ j_upper = REAL(k ) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,5) = (j_lower + 0.5) / (2. * j_lower * (j_lower+1.) * ckovacs(j_upper,-1.) &
+ * ckovacs(j_lower,+1.) ) * (1.5*ukovacs(j_upper,-1.) * ukovacs(j_lower,+1.) - 2. * (j_lower-.5) * (j_lower+1.5) )**2
+ ! --- Branch 06: SR21 branch
+ j_upper = REAL(k + 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,6) = (j_lower-.5) * (j_lower+2.5) / (4. * (j_lower+1.) * ckovacs(j_upper+1.,-1.) &
+ * ckovacs(j_lower,+1.) ) * (ukovacs(j_upper+1.,-1.) * ukovacs(j_lower,+1.) - 4. * (j_lower+0.5) * (j_lower+1.5) )**2
+ ! --- Branch 07: OP12 branch
+ j_upper = REAL(k - 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,7) = (j_lower-1.5) * (j_lower+1.5) / (4. * j_lower* ckovacs(j_upper-1.,+1.) &
+ * ckovacs(j_lower,-1.) ) * (ukovacs(j_upper-1.,+1.) * ukovacs(j_lower,-1.) - 4. * (j_lower-0.5) * (j_lower+0.5) )**2
+ ! --- Branch 08: PQ12 branch
+ j_upper = REAL(k ) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,8) = (j_lower+0.5) / (2. * j_lower * (j_lower+1.) * ckovacs(j_upper,+1.) * ckovacs(j_lower,-1.) ) &
+ * (1.5 * ukovacs(j_upper,+1.) * ukovacs(j_lower,-1.) - 2. * (j_lower-.5) * (j_lower+ 1.5) )**2
+ ! --- Branch 09: RQ12 branch
+ j_upper = REAL(k + 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,9) = (j_lower-.5) * (j_lower+2.5) / (4. * (j_lower+1.) * ckovacs(j_upper+1.,+1.) &
+ * ckovacs(j_lower,-1.) ) * (ukovacs(j_upper+1.,+1.) * ukovacs(j_lower,-1.)- 4. * (j_lower+.5) * (j_lower+1.5) )**2
+ ! --- Branch 10: P2 branch
+ j_upper = REAL(k - 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,10) = (j_lower-1.5) * (j_lower+1.5) / (4. * j_lower * ckovacs(j_upper-1.,-1.) &
+ * ckovacs(j_lower,-1.) ) * (ukovacs(j_upper-1.,-1.) * ukovacs(j_lower,-1.) + 4. * (j_lower-.5) * (j_lower+.5) )**2
+ ! --- Branch 11: Q2 branch
+ j_upper = REAL(k ) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,11) = (j_lower+.5) / (2. * j_lower * (j_lower+1.) * ckovacs(j_upper,-1.) * ckovacs(j_lower,-1.) ) &
+ * (1.5 * ukovacs(j_upper,-1.) * ukovacs(j_lower,-1.) + 2. * (j_lower-.5) * (j_lower+1.5) )**2
+ ! --- Branch 12: R2 branch
+ j_upper = REAL(k + 1.) + .5
+ j_lower = REAL(k ) + .5
+ HoenlLondon_2p2p(k,12) = (j_lower-.5) * (j_lower+2.5) / (4. * (j_lower+1.) * ckovacs(j_upper+1.,-1.) &
+ * ckovacs(j_lower,-1.) ) * (ukovacs(j_upper+1.,-1.) * ukovacs(j_lower,-1.) + 4. * (j_lower-.5) * (j_lower+1.5) )**2
+ END DO
+
+ Lambda_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)
+ Lambda_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)
+ Y_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),16) / Bv_upper
+ Y_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),16) / Bv_lower
+
+ etot = 0.0
+
+ DO iBranch = 1, 12
+ DO k = 3, kmax
+ j_upper = REAL(k + Deltak_upper_2p2p(iBranch)) + .5
+ j_lower = REAL(k + Deltak_lower_2p2p(iBranch)) + .5
+
+ IF((iBranch .EQ. 1) .OR. (iBranch .EQ. 2) .OR. (iBranch .EQ. 3)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - 0.5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 0.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - 0.5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 0.)**4
+ ELSEIF ((iBranch .EQ. 4) .OR. (iBranch .EQ. 5) .OR. (iBranch .EQ. 6)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + 0.5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 1.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 - 0.5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 0.)**4
+ ELSEIF ((iBranch .EQ. 7) .OR. (iBranch .EQ. 8) .OR. (iBranch .EQ. 9)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 - 0.5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 0.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + 0.5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 1.)**4
+ ELSEIF ((iBranch .EQ. 10) .OR. (iBranch .EQ. 11) .OR. (iBranch .EQ. 12)) THEN
+ F_upper = Bv_upper * ( (j_upper+0.5)**2 - Lambda_upper**2 + 0.5 * SQRT(4. * (j_upper+0.5)**2 &
+ + Y_upper * (Y_upper-4.) * Lambda_upper**2) ) - Dv_upper * (j_upper + 1.)**4
+ F_lower = Bv_lower * ( (j_lower+0.5)**2 - Lambda_lower**2 + 0.5 * SQRT(4. * (j_lower+0.5)**2 &
+ + Y_lower * (Y_lower-4.) * Lambda_lower**2) ) - Dv_lower * (j_lower + 1.)**4
+ END IF
+
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ ! --- evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(j_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ eps = 1.0E16 * AlternationFactor * HoenlLondon_2p2p(k,iBranch) * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * j_upper * (j_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst) * 0.66 ! TODO: y 0.66?
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+ END DO ! k
+ END DO ! iBranch
+
+ CASE(6) ! 3Pi -> 3Pi
+
+ ! --- computing Hoenl-London factors for 3Pi->3Pi transitions for diatomic molecules
+ DO k = 0, 500
+ ! --- Branch 01: R1 branch
+ j_upper = REAL(k + 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,1) = (j_lower + 1.) * (j_lower - 1.) / (3. * j_lower)
+ ! --- Branch 02: P1 branch
+ j_upper = REAL(k - 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,2) = j_lower * (j_lower + 2.) / (3. * (j_lower + 1.))
+ ! --- Branch 03: R2 branch
+ j_upper = REAL(k + 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,3) = (j_lower + 1.) * (j_lower - 1.) / (3. * j_lower)
+ ! --- Branch 04: Q2 branch
+ j_upper = REAL(k ) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,4) = (2. * j_lower + 1.) / (3. * j_lower * (j_lower + 1.))
+ ! --- Branch 05: P2 branch
+ j_upper = REAL(k - 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,5) = j_lower * (j_lower + 2.) / (3. * (j_lower + 1.))
+ ! --- Branch 06: R3 branch
+ j_upper = REAL(k + 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,6) = (j_lower + 1.) * (j_lower - 1.) / (3. * j_lower)
+ ! --- Branch 07: Q3 branch
+ j_upper = REAL(k ) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,7) = (2. * j_lower + 1.) / (3. * j_lower * (j_lower + 1.))
+ ! --- Branch 08: P3 branch
+ j_upper = REAL(k - 1.) + 1.
+ j_lower = REAL(k ) + 1.
+ HoenlLondon_3p3p(k,8) = j_lower * (j_lower + 2.) / (3. * (j_lower + 1.))
+ END DO
+
+ Lambda_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),17)
+ Lambda_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),17)
+ Y_upper = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),16) / Bv_upper
+ Y_lower = SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),16) / Bv_lower
+
+ etot = 0.0
+
+ DO iBranch = 1, 8
+ DO k = 0, kmax
+ j_upper = REAL(k + Deltak_upper_3p3p(iBranch)) + 1.
+ j_lower = REAL(k + Deltak_lower_3p3p(iBranch)) + 1.
+ Z1_upper = Lambda_upper**2 * Y_upper * (Y_upper-4.) + 4./3. + 4. * j_upper * (j_upper + 1.)
+ Z1_lower = Lambda_lower**2 * Y_lower * (Y_lower-4.) + 4./3. + 4. * j_lower * (j_lower + 1.)
+ Z2_upper = (Lambda_upper**2 * Y_upper * (Y_upper-1.) - 4./9. - 2. * j_upper * (j_upper + 1.)) / (3.*Z1_upper) ! TODO: + or - 4/9?
+ Z2_lower = (Lambda_lower**2 * Y_lower * (Y_lower-1.) - 4./9. - 2. * j_lower * (j_lower + 1.)) / (3.*Z1_lower) ! TODO: + or - 4/9?
+
+ IF((iBranch .EQ. 1) .OR. (iBranch .EQ. 2)) THEN
+ F_upper = Bv_upper * (j_upper * (j_upper + 1.) - SQRT(Z1_upper) - 2. * Z2_upper) - Dv_upper * (j_upper - 0.5)**4
+ F_lower = Bv_lower * (j_lower * (j_lower + 1.) - SQRT(Z1_lower) - 2. * Z2_lower) - Dv_lower * (j_lower - 0.5)**4
+ ELSEIF ((iBranch .EQ. 3) .OR. (iBranch .EQ. 4) .OR. (iBranch .EQ. 5)) THEN
+ F_upper = Bv_upper * (j_upper * (j_upper + 1.) + 4. * Z2_upper) - Dv_upper * (j_upper + 0.5)**4
+ F_lower = Bv_lower * (j_lower * (j_lower + 1.) + 4. * Z2_lower) - Dv_lower * (j_lower + 0.5)**4
+ ELSEIF ((iBranch .EQ. 6) .OR. (iBranch .EQ. 7) .OR. (iBranch .EQ. 8)) THEN
+ F_upper = Bv_upper * (j_upper * (j_upper + 1.) + SQRT(Z1_upper) - 2. * Z2_upper) - Dv_upper * (j_upper + 1.5)**4
+ F_lower = Bv_lower * (j_lower * (j_lower + 1.) + SQRT(Z1_lower) - 2. * Z2_lower) - Dv_lower * (j_lower + 1.5)**4
+ END IF
+ nubar = nubar0 + (F_upper - F_lower) / (100.*PlanckConst*c)
+ r2 = EXP( (F_upper-F_lower) / (BoltzmannConst*RadiationInput(iSpec)%Trot) ) * r1
+
+ ! --- evaluate the alternation factor for homocuclear molecules
+ IF(SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12) .EQ. 0.0) THEN
+ AlternationFactor = 1.0
+ ELSE
+ AlternationFactor = 1.0 + (-1.0)**NINT(j_lower &
+ + SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,1),12)) &
+ / (2.0*SpeciesRadiation(iSpec)%EnergyLevelProperties(SpeciesRadiation(iSpec)%BandProperties(iBand,2),11) + 1.0) !Radiation: kexp=INT(jl+altnat(uplev)+0.1)
+ END IF
+
+ eps = 1.0E16 * AlternationFactor * HoenlLondon_3p3p(k,iBranch) * (nubar**2 * a0e)**2 * cint2 &
+ * EXP(-(cint1 + (Bv_upper * j_upper * (j_upper + 1.)) / RadiationInput(iSpec)%Trot) / BoltzmannConst)
+ abstot = (nubar**(-5)) * (r2 - 1.0) * eps / (2.E10 * PlanckConst * c**2)
+
+ etot = etot + eps
+
+ ! --- calculate line profile and add radiative energy to emission
+ IF(eps .GE. 1.0E-25) THEN
+ CALL Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+ END IF
+
+ END DO !k
+
+ END DO ! iBranch
+
+ CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation transition type is not implemented! (unknown case)')
+ END SELECT
+
+ END DO
+
+ END DO
+
+ ! hilf = LEN_TRIM(RadiationInput(iSpec)%RadiationSpectraFileName)
+ ! RadiationInput(iSpec)%RadiationSpectraFileName = RadiationInput(iSpec)%RadiationSpectraFileName(1:hilf-4)
+ ! WRITE(*,*) '*** CALCULATED ', TRIM(RadiationInput(iSpec)%RadiationSpectraFileName), ' ***'
+ END IF
+
+ TempOut_Em = 0.0
+ TempOut_Abs = 0.0
+ DO iWave=1, RadiationParameter%WaveLenDiscr
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ TempOut_Em = TempOut_Em + 4.*Pi*epsilon_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ TempOut_Abs = TempOut_Abs + abs_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ Radiation_Absorption_SpeciesWave(iWaveCoarse, iSpec) = Radiation_Absorption_SpeciesWave(iWaveCoarse, iSpec) + abs_iSpec(iWave)*RadiationParameter%WaveLenIncr
+ END DO
+ Radiation_ElemEnergy_Species(iSpec,iElem,1) = TempOut_Em
+ Radiation_ElemEnergy_Species(iSpec,iElem,2) = TempOut_Abs
+
+ END DO
+
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ Radiation_Emission_spec(iWaveCoarse,iElem) = Radiation_Emission_spec(iWaveCoarse,iElem) + epsilon_mol(iWave)/RadiationParameter%WaveLenReductionFactor
+ END DO
+
+! --- add contribution to total emission
+ em_mol = epsilon_mol(1) * RadiationParameter%WaveLenIncr
+ DO i=2, RadiationParameter%WaveLenDiscr
+ em_mol = em_mol + epsilon_mol(i) * RadiationParameter%WaveLenIncr
+ END DO
+
+
+ ! WRITE(*,*) '*** MOLECULAR BOUND-BOUND RADIATION SUCCESSFULLY DONE***'
+ ! WRITE(*,*) ''
+
+END SUBROUTINE radiation_molecules
+
+
+
+
+REAL FUNCTION ukovacs(rj, dlam)
+!===================================================================================================================================
+! function of kovacs to derive the Hoenl-London factors
+!===================================================================================================================================
+! MODULES
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: rj, dlam
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+
+ ukovacs = 2. * (rj + dlam + .5)
+ RETURN
+
+END FUNCTION ukovacs
+
+
+
+
+REAL FUNCTION ckovacs(rj, dlam)
+!===================================================================================================================================
+! function of kovacs to derive the Hoenl-London factors
+!===================================================================================================================================
+! MODULES
+
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: rj, dlam
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+
+ ckovacs = 4. * (rj + .5) * (rj + dlam + .5)
+ RETURN
+
+END FUNCTION ckovacs
+
+
+
+
+SUBROUTINE Radiation_Molecular_Transition_Line_Profile(Radiation_Profile, nubar, Voigt_int, Voigt_int_distmax, &
+ epsilon_mol, epsilon_iSpec, eps, Radiation_Absorption_spec, abs_iSpec, abstot, iElem)
+!===================================================================================================================================
+! calculates emission profile functions and adds radiative energy to emission array
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Radiation_Vars, ONLY : RadiationParameter
+ USE MOD_Mesh_Tools, ONLY : GetGlobalElemID
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(INOUT) :: Radiation_Profile(:), epsilon_mol(:), epsilon_iSpec(:), Radiation_Absorption_spec(:,:), &
+ abs_iSpec(:)
+ REAL, INTENT(IN) :: nubar, Voigt_int_distmax, eps, abstot,Voigt_int(-1001:1001)
+ INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER :: startwavelength_int, endwavelength_int, i, iWave, iWaveCoarse
+ LOGICAL :: add_radline
+!===================================================================================================================================
+
+! --- determination of indices for first and last entry of Voigt-profiles on wavelength axis
+ startwavelength_int = MAX(1, INT(((1./(100.*nubar)) - Voigt_int_distmax - RadiationParameter%MinWaveLen) &
+ / RadiationParameter%WaveLenIncr) + 1)
+ endwavelength_int = MIN(RadiationParameter%WaveLenDiscr, INT(((1./(100.*nubar)) + Voigt_int_distmax &
+ - RadiationParameter%MinWaveLen) / RadiationParameter%WaveLenIncr) + 1)
+
+ add_radline = .FALSE.
+
+ IF ( (startwavelength_int .LT. endwavelength_int) .AND. &
+ (((1./(100.*nubar))+Voigt_int_distmax) .GT. RadiationParameter%MinWaveLen) .AND. &
+ (((1./(100.*nubar))-Voigt_int_distmax) .LT. RadiationParameter%MaxWaveLen)) THEN
+! IF ( (startwavelength_int .LT. endwavelength_int) .AND. &
+! (((1./(100.*nubar))+Voigt_int_distmax) .GT. RadiationParameter%MinWaveLen) ) THEN
+
+ add_radline = .TRUE.
+
+ ! --- determine transition lines of previous computed Voigt-profiles
+ CALL Radiation_Voigt_wavelength_interpolation(Voigt_int, Voigt_int_distmax, (1./(100.*nubar)), &
+ Radiation_Profile, startwavelength_int, endwavelength_int)
+
+ IF (add_radline) THEN
+
+! istart = MIN(istart,startwavelength_int) ! TODO: ???
+! iend = MAX(iend, endwavelength_int)
+
+ ! --- add radiative energy to emission
+ DO i=0 , (endwavelength_int-startwavelength_int + 0)
+ epsilon_iSpec(startwavelength_int+i) &
+ = epsilon_iSpec(startwavelength_int+i) + MAX(0.0,eps)/1.E10 * Radiation_Profile(startwavelength_int+i)
+ epsilon_mol(startwavelength_int+i) &
+ = epsilon_mol(startwavelength_int+i) + MAX(0.0,eps)/1.E10 * Radiation_Profile(startwavelength_int+i)
+ abs_iSpec(startwavelength_int+i) &
+ = abs_iSpec(startwavelength_int+i)+MAX(0.0,abstot)/1.E10*Radiation_Profile(startwavelength_int+i)
+ iWave = startwavelength_int+i
+ iWaveCoarse = INT((iWave-1)/RadiationParameter%WaveLenReductionFactor) + 1
+ IF (iWaveCoarse.GT.RadiationParameter%WaveLenDiscrCoarse) iWaveCoarse = RadiationParameter%WaveLenDiscrCoarse
+ Radiation_Absorption_spec(iWaveCoarse,GetGlobalElemID(iElem)) &
+ = Radiation_Absorption_spec(iWaveCoarse,GetGlobalElemID(iElem))+MAX(0.0,abstot)/1.E10*Radiation_Profile(iWave)/RadiationParameter%WaveLenReductionFactor
+ END DO
+
+ END IF
+
+ END IF
+
+END SUBROUTINE Radiation_Molecular_Transition_Line_Profile
+
+
+
+
+SUBROUTINE Radiation_Voigt_wavelength_interpolation(Voigt_int, Voigt_int_distmax, centerwavelength, &
+ Radiation_Profile, startwavelength_int, endwavelength_int)
+!===================================================================================================================================
+! distributes transition lines with precomputed integrated Voigt-profiles (Voigt_int)
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_Radiation_Vars, ONLY : RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ REAL, INTENT(IN) :: Voigt_int(-1001:1001), centerwavelength, Voigt_int_distmax
+ ! TODO Voigt_int_nmax in Voigt_int(:)
+ REAL, INTENT(INOUT) :: Radiation_Profile(:)
+ INTEGER, INTENT(INOUT) :: startwavelength_int, endwavelength_int
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ INTEGER, PARAMETER :: Voigt_int_nmax = 1001
+ INTEGER :: i!, width_int
+ REAL :: startvalue, Voigt_int_value, Voigt_int_value_old
+ REAL :: weighting_int_left, weighting_int_right
+ INTEGER :: index_left,index_right
+ !REAL, ALLOCATABLE :: help_Radiation_Profile(:)
+!===================================================================================================================================
+
+! --- extrapolation of left point
+ startvalue = Voigt_int(-Voigt_int_nmax) &
+ - (Voigt_int(-Voigt_int_nmax+1)-Voigt_int(-Voigt_int_nmax))/RadiationParameter%WaveLenIncr &
+ * (centerwavelength - Voigt_int_distmax - RadiationParameter%WaveLen(startwavelength_int))
+ IF (startvalue .LT. 0.0) startvalue = 0.0
+
+
+! --- determination of number of wavelength array indices within the corresponding Voigt profile width
+
+! width_int = endwavelength_int - startwavelength_int
+
+! IF (width_int .EQ. 0.0) THEN
+! WRITE(*,'(A,F8.4,A)') 'Warning: line at ', centerwavelength*1.E9, &
+! 'nm is neglected due to a too small wavelength discretization'
+! END IF
+
+! --- determination of transition lines
+
+ Radiation_Profile(startwavelength_int) = startvalue
+! Radiation_Profile(endwavelength_int+1) = 1.0
+
+ Voigt_int_value_old = 0.0!startvalue
+ Voigt_int_value = 0.0
+
+ DO i=1, (endwavelength_int-startwavelength_int)
+
+ index_left = INT(SIGN(ABS((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength)) &
+ / (Voigt_int_distmax/REAL(Voigt_int_nmax)), &
+ RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength))
+
+ IF ((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength).LT.0.0) THEN
+ index_right = index_left
+ index_left = index_left - 1
+ ELSE
+ index_right = index_left + 1
+ END IF
+
+ IF(index_right.GT.Voigt_int_nmax) CYCLE
+! IF(index_left.LT.(-Voigt_int_nmax)) CYCLE
+
+ weighting_int_left = 1. - ABS(REAL(index_left)-((RadiationParameter%WaveLen(startwavelength_int+i)-centerwavelength) &
+ / (Voigt_int_distmax/REAL(Voigt_int_nmax))))
+ weighting_int_right = 1. - weighting_int_left
+
+ Voigt_int_value = weighting_int_left * Voigt_int(index_left) + weighting_int_right * Voigt_int(index_right)
+
+ Radiation_Profile(startwavelength_int + i) = Voigt_int_value - Voigt_int_value_old
+
+ Voigt_int_value_old = Voigt_int_value
+
+ END DO
+
+! DO i=1, width_int+1
+ DO i=1, (endwavelength_int-startwavelength_int)
+ Radiation_Profile(startwavelength_int+i) = Radiation_Profile(startwavelength_int+i) / RadiationParameter%WaveLenIncr
+ END DO
+
+END SUBROUTINE Radiation_Voigt_wavelength_interpolation
+
+
+
+
+END MODULE MOD_Radiation_Molecules
diff --git a/src/radiation/radiation_solver/radiation_readin.f90 b/src/radiation/radiation_solver/radiation_readin.f90
new file mode 100644
index 000000000..94296f3f4
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_readin.f90
@@ -0,0 +1,279 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Radiation_ReadIn
+!===================================================================================================================================
+! Module for Radiation
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE Radiation_readin_atoms
+ MODULE PROCEDURE Radiation_readin_atoms
+END INTERFACE
+
+INTERFACE Radiation_readin_molecules
+ MODULE PROCEDURE Radiation_readin_molecules
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: Radiation_readin_atoms, Radiation_readin_molecules
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE Radiation_readin_atoms(iSpec)
+!===================================================================================================================================
+! Reads-in species constants for atomic radiation
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : PlanckConst, c
+USE MOD_Radiation_Vars, ONLY : SpeciesRadiation, RadiationInput
+USE MOD_ReadInTools
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iSpec
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ CHARACTER(32) :: hilf
+ INTEGER :: errtemp, iLine, iLevel, EnLevelIndex, NumOfLevels
+ REAL :: dump
+!===================================================================================================================================
+ WRITE(UNIT=hilf,FMT='(I0)') iSpec
+ RadiationInput(iSpec)%RadiationSpectraFileName = GETSTR('Radiation-Species'//TRIM(hilf)//'-SpectraFileName','none')
+ IF (RadiationInput(iSpec)%RadiationSpectraFileName.EQ.'none') THEN
+ SpeciesRadiation(iSpec)%nLevels = 0
+ SpeciesRadiation(iSpec)%nLines = 0
+ ! STOP
+ END IF
+
+ IF (RadiationInput(iSpec)%RadiationSpectraFileName.NE.'none') THEN
+ OPEN( UNIT= 42, file = RadiationInput(iSpec)%RadiationSpectraFileName, status = 'old', form = 'formatted')
+ errtemp=0
+ READ(42,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%nLevels
+ ! ALLOCATE(SpeciesRadiation(iSpec)%Level(SpeciesRadiation(iSpec)%nLevels,5))
+ NumOfLevels= 0
+ DO iLevel =1, SpeciesRadiation(iSpec)%nLevels
+ READ(42,*,IOSTAT = errtemp) dump,dump, EnLevelIndex, dump, dump
+ NumOfLevels = MAX(NumOfLevels, EnLevelIndex)
+ END DO
+ REWIND(42)
+ READ(42,*,IOSTAT = errtemp) dump
+ ALLOCATE(SpeciesRadiation(iSpec)%Level(NumOfLevels,5)) ! TODO change to max no of energy levels
+ SpeciesRadiation(iSpec)%Level = 0.0
+ ALLOCATE(SpeciesRadiation(iSpec)%NumDensExc(SpeciesRadiation(iSpec)%nLevels))
+ DO iLevel =1, SpeciesRadiation(iSpec)%nLevels
+ READ(42,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%Level(iLevel,1), SpeciesRadiation(iSpec)%Level(iLevel,2), &
+ EnLevelIndex, SpeciesRadiation(iSpec)%Level(iLevel,4), SpeciesRadiation(iSpec)%Level(iLevel,5)
+ SpeciesRadiation(iSpec)%Level(iLevel,2) = SpeciesRadiation(iSpec)%Level(iLevel,2)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%Level(EnLevelIndex,3) = iLevel
+ IF (SpeciesRadiation(iSpec)%Level(iLevel,4) .EQ. 0.) SpeciesRadiation(iSpec)%Level(iLevel,4) = 3.
+ END DO
+ SWRITE(*,'(A6,I6,A17)') ' Found ',SpeciesRadiation(iSpec)%nLevels,' Level entries in File:'
+ SWRITE(*,*) RadiationInput(iSpec)%RadiationSpectraFileName
+
+ READ(42,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%nLines
+ ALLOCATE(SpeciesRadiation(iSpec)%LinesReal(SpeciesRadiation(iSpec)%nLines,3))
+ ALLOCATE(SpeciesRadiation(iSpec)%LinesInt(SpeciesRadiation(iSpec)%nLines,4))
+ DO iLine =1, SpeciesRadiation(iSpec)%nLines
+ READ(42,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%LinesReal(iLine,1), SpeciesRadiation(iSpec)%LinesInt(iLine,1),&
+ SpeciesRadiation(iSpec)%LinesInt(iLine,2),&
+ SpeciesRadiation(iSpec)%LinesInt(iLine,3),SpeciesRadiation(iSpec)%LinesInt(iLine,4), &
+ SpeciesRadiation(iSpec)%LinesReal(iLine,2), &
+ SpeciesRadiation(iSpec)%LinesReal(iLine,3), dump
+ SpeciesRadiation(iSpec)%LinesReal(iLine,1) = SpeciesRadiation(iSpec)%LinesReal(iLine,1)*1.E-10 !in m instead of Angstrom
+ END DO
+ SWRITE(*,'(A6,I6,A17)') ' Found ',SpeciesRadiation(iSpec)%nLines,' Line entries in File:'
+ SWRITE(*,*) RadiationInput(iSpec)%RadiationSpectraFileName
+
+ CLOSE(unit=42)
+ END IF
+END SUBROUTINE Radiation_readin_atoms
+
+
+
+
+
+SUBROUTINE Radiation_readin_molecules(iSpec)
+!===================================================================================================================================
+! Reads-in species constants for molecular radiation
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : PlanckConst, c
+USE MOD_Radiation_Vars, ONLY : SpeciesRadiation, RadiationInput
+USE MOD_ReadInTools
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+ INTEGER, INTENT(IN) :: iSpec
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ CHARACTER(66) :: hilf
+ INTEGER :: dump, length, errtemp, iLoop, i, charlen, numLines
+ REAL :: realdump
+!===================================================================================================================================
+
+ WRITE(UNIT=hilf,FMT='(I0)') iSpec
+ RadiationInput(iSpec)%RadiationSpectraFileName = GETSTR('Radiation-Species'//TRIM(hilf)//'-SpectraFileName','none')
+ IF (RadiationInput(iSpec)%RadiationSpectraFileName.EQ.'none') THEN
+ SpeciesRadiation(iSpec)%nBands = 0
+ ! STOP
+ END IF
+
+ IF (RadiationInput(iSpec)%RadiationSpectraFileName.NE.'none') THEN
+ OPEN( UNIT= 304, file = RadiationInput(iSpec)%RadiationSpectraFileName, status = 'old', form = 'formatted')
+ errtemp=0
+
+ SpeciesRadiation(iSpec)%nBands = 0
+ DO
+ READ(304,*,IOSTAT = errtemp) hilf
+ IF (errtemp.NE.0) EXIT
+ IF (hilf(1:5).EQ.'[band') SpeciesRadiation(iSpec)%nBands = SpeciesRadiation(iSpec)%nBands + 1
+ END DO
+ REWIND(304)
+ ALLOCATE(SpeciesRadiation(iSpec)%BandName(SpeciesRadiation(iSpec)%nBands))
+ ALLOCATE(SpeciesRadiation(iSpec)%NumMolecularTransitions(SpeciesRadiation(iSpec)%nBands))
+
+ READ(304,*,IOSTAT = errtemp) hilf
+ DO WHILE (hilf(1:7) .NE. '[Energy')
+ READ(304,*,IOSTAT = errtemp) hilf
+ END DO
+ READ(304,*,IOSTAT = errtemp) length, dump, dump, dump, dump
+ ALLOCATE(SpeciesRadiation(iSpec)%EnergyLevelName(length))
+ DO iLoop=1, length
+ READ(304,*,IOSTAT = errtemp) hilf
+ DO WHILE (hilf(1:1).EQ.'c')
+ READ(304,*,IOSTAT = errtemp) hilf
+ END DO
+ SpeciesRadiation(iSpec)%EnergyLevelName(iLoop) = TRIM(hilf)
+ END DO
+
+ ALLOCATE(SpeciesRadiation(iSpec)%BandProperties(SpeciesRadiation(iSpec)%nBands,4))
+ DO iLoop=1, SpeciesRadiation(iSpec)%nBands
+ DO WHILE (hilf(1:5).NE.'[band')
+ READ(304,*,IOSTAT = errtemp) hilf
+ END DO
+ charlen = LEN_TRIM(hilf)
+ hilf(1:charlen-7) = hilf(7:charlen-1)
+ hilf(charlen-6:charlen) = ' '
+ hilf=TRIM(hilf)
+ SpeciesRadiation(iSpec)%BandName(iLoop) = hilf
+
+ READ(304,*,IOSTAT = errtemp) hilf
+
+ READ(304,*,IOSTAT = errtemp) hilf
+ DO WHILE (hilf(1:1).EQ.'c')
+ READ(304,*,IOSTAT = errtemp) hilf
+ END DO
+ BACKSPACE(304)
+ READ(304,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%BandProperties(iLoop,1), &
+ SpeciesRadiation(iSpec)%BandProperties(iLoop,2), &
+ SpeciesRadiation(iSpec)%BandProperties(iLoop,3), realdump
+ SpeciesRadiation(iSpec)%BandProperties(iLoop,4) = NINT(realdump)
+ END DO
+
+ ALLOCATE(SpeciesRadiation(iSpec)%EnergyLevelProperties(length,17))
+ DO iLoop=1, length
+ REWIND(304)
+ DO WHILE (hilf .NE. '['//TRIM(SpeciesRadiation(iSpec)%EnergyLevelName(iLoop))//']')
+ READ(304,*,IOSTAT = errtemp) hilf
+ IF (hilf(1:1).EQ.'c') CYCLE
+ END DO
+ READ(304,*,IOSTAT = errtemp) hilf
+ i=0
+ DO WHILE (i.NE.17)
+ READ(304,*,IOSTAT = errtemp) hilf
+ IF (hilf(1:1).EQ.'c') CYCLE
+ BACKSPACE(304)
+ i = i + 1
+ READ(304,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,i)
+ END DO
+ END DO
+
+ DO iLoop=1, length
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,15)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,15)*0.01
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,2)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,2)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,3)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,3)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,4)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,4)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,5)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,5)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,6)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,6)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,7)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,7)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,8)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,8)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,9)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,9)*PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,13)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,13) &
+ * PlanckConst*c*100.
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,14)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,14) &
+ * PlanckConst*c*100.
+
+ SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,16)=SpeciesRadiation(iSpec)%EnergyLevelProperties(iLoop,16) &
+ * PlanckConst*c*100.
+ END DO
+
+ ALLOCATE(SpeciesRadiation(iSpec)%Bands(SpeciesRadiation(iSpec)%nBands))
+ DO iLoop=1, SpeciesRadiation(iSpec)%nBands
+ REWIND(304)
+ DO WHILE (hilf .NE. '[transition-'//TRIM(SpeciesRadiation(iSpec)%BandName(iLoop))//']')
+ READ(304,*,IOSTAT = errtemp) hilf
+ END DO
+ READ(304,*,IOSTAT = errtemp) numLines, dump, dump, dump, dump
+ SpeciesRadiation(iSpec)%NumMolecularTransitions(iLoop) = numLines
+ ALLOCATE(SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(numLines,5))
+ READ(304,*,IOSTAT = errtemp) hilf
+ DO i = 1, numLines
+ READ(304,*,IOSTAT = errtemp) SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,1), &
+ SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,2), SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,3), &
+ SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,4)
+ ! PRINT*, SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,1), &
+ ! SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,2), SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,3), &
+ ! SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,4)!, SpeciesRadiation(iSpec)%Bands(iLoop)%MolTransLines(i,5)
+ END DO
+ END DO
+
+ SpeciesRadiation(iSpec)%nLevels = length ! TODO: check!
+
+ SWRITE(*,'(A6,I6,A17)') ' Found ',length,' energy levels in File:'
+ SWRITE(*,*) TRIM(RadiationInput(iSpec)%RadiationSpectraFileName)
+ DO iLoop = 1,length
+ SWRITE(*,*) TRIM(SpeciesRadiation(iSpec)%EnergyLevelName(iLoop))
+ END DO
+
+ SWRITE(*,'(A6,I6,A17)') ' Found ',SpeciesRadiation(iSpec)%nBands,' transition bands in File:'
+ SWRITE(*,*) TRIM(RadiationInput(iSpec)%RadiationSpectraFileName)
+ DO iLoop = 1,SpeciesRadiation(iSpec)%nBands
+ SWRITE(*,*) TRIM(SpeciesRadiation(iSpec)%BandName(iLoop)), ' (', &
+ SpeciesRadiation(iSpec)%NumMolecularTransitions(iLoop), 'lines)'
+ END DO
+
+ CLOSE(unit=304)
+ END IF
+END SUBROUTINE Radiation_readin_molecules
+
+
+END MODULE MOD_Radiation_ReadIn
diff --git a/src/radiation/radiation_solver/radiation_vars.f90 b/src/radiation/radiation_solver/radiation_vars.f90
new file mode 100644
index 000000000..4584dca85
--- /dev/null
+++ b/src/radiation/radiation_solver/radiation_vars.f90
@@ -0,0 +1,123 @@
+#include "piclas.h"
+!==================================================================================================================================
+! Copyright (c) 2010 - 2019 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+MODULE MOD_Radiation_Vars
+!===================================================================================================================================
+! Contains the radiation variables
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+SAVE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+TYPE tRadiationInput ! DSMC output
+ REAL :: Ttrans(4) ! Temperature (Tx, Ty, Tz, Tt)
+ REAL :: NumDens ! Particle density
+ REAL :: Tvib ! Vibrational Temp
+ REAL :: Trot ! Rotational Temp
+ REAL :: Telec ! Electronic Temp
+ REAL :: IonizationEn ! ionization energy [1/cm]
+ REAL :: Radius
+ REAL :: Starkex ! Exponent for Stark broadening
+ INTEGER :: NuclCharge ! nuclear charge (0: atom, 1: single-ionized atom, ...)
+ CHARACTER(LEN=256) :: RadiationSpectraFileName
+ LOGICAL :: DoRadiation ! Flag to consider/cycle species
+END TYPE
+
+TYPE(tRadiationInput), ALLOCATABLE :: RadiationInput(:)
+
+REAL :: NumDensElectrons ! Electron Density
+REAL :: TElectrons ! Electron Temperature
+
+TYPE tRadiationParameter ! Radiation Wavelength Parameter
+ REAL :: MinWaveLen ! minimum spectral wavelength
+ REAL :: MaxWaveLen ! maximum spectral wavelength
+ INTEGER :: WaveLenDiscr ! number of points in calculated spectrum
+ INTEGER :: WaveLenDiscrCoarse ! number of points in calculated spectrum
+ INTEGER :: WaveLenDiscrOutput ! number of points in calculated spectrum
+ INTEGER :: WaveLenReductionFactorOutput ! number of points in calculated spectrum
+ INTEGER :: WaveLenReductionFactor
+ REAL :: WaveLenIncr ! wavelength increments
+ REAL :: WaveLenIncrCoarse
+ REAL, ALLOCATABLE :: WaveLen(:) ! wavelength array
+ REAL, ALLOCATABLE :: WaveLenCoarse(:)
+END TYPE tRadiationParameter
+
+TYPE(tRadiationParameter) :: RadiationParameter
+
+TYPE tRadiationSwitches ! Radiation types and mechanisms
+ INTEGER :: RadType ! 1: particle radiation, 2: black body radiation
+ LOGICAL :: ff ! Switch for free-free radiation
+ LOGICAL :: bf ! Switch for bound-free radiation
+ LOGICAL :: bb_at ! Switch for atomic line radiation
+ LOGICAL :: bb_mol ! Switch for molecular band radiation
+ LOGICAL :: MacroRadInput ! Switch for input of DSMC files
+ LOGICAL :: SortCellsY ! Sorts Cells in y-direction for manually created input files (e.g. Laux's test case)
+ LOGICAL :: UseElectronicExcitation ! Switch for using electronic excitation energies (t) OR T_electron for atoms and sqrt(T_vib*T_electron) for molecules (f)
+END TYPE tRadiationSwitches
+
+TYPE(tRadiationSwitches) :: RadiationSwitches
+
+TYPE tMolecBands ! Radiation Wavelength Parameter
+ REAL,ALLOCATABLE :: MolTransLines(:,:) ! (no transition lines, (vu, vl, sumre/fcf, Franck-Condon-Factor, SRe2))
+END TYPE tMolecBands
+
+TYPE tSpeciesRadiation
+ TYPE(tMolecBands),ALLOCATABLE :: Bands(:)
+ REAL, ALLOCATABLE :: Level(:,:) ! (length, (degeneracy ge, level energy, Energy level index , quant num of released elec, Gaunt fac))
+ REAL, ALLOCATABLE :: LinesReal(:,:) ! (length, (center wl, A_ul, stark HW))
+ INTEGER, ALLOCATABLE :: LinesInt(:,:) ! (length, (lower level, upper level, degeneracy lower level, degeneracy upper level))
+ REAL, ALLOCATABLE :: NumDensExc(:) ! (nLevels)
+ REAL :: PartFunc ! PartitionFunction
+ INTEGER :: nLevels
+ INTEGER :: nLines
+ INTEGER :: nBands !number of Bands
+ CHARACTER(LEN=256) :: RadiationSpectraFileName
+ CHARACTER(LEN=256),ALLOCATABLE :: EnergyLevelName(:)
+ CHARACTER(LEN=256),ALLOCATABLE :: BandName(:)
+ INTEGER, ALLOCATABLE :: BandProperties(:,:) !(numBands)(up level, low level, Type Index, smf)
+ REAL, ALLOCATABLE :: EnergyLevelProperties(:,:) !(numEnergyLevel)(degen, te(elev_mol/eterm), D0, we, wexe, weye, weze, be, alpha, mu, nuspin, altnat, de, betae, re, A, Lambda)
+ INTEGER, ALLOCATABLE :: NumMolecularTransitions(:) ! number of transitions(numBands)
+END TYPE tSpeciesRadiation
+
+TYPE(tSpeciesRadiation), ALLOCATABLE :: SpeciesRadiation(:) ! (nSpec)
+
+REAL, ALLOCATABLE :: Radiation_Absorption_SpeciesWave(:,:)
+!REAL, ALLOCATABLE :: Radiation_NumDens
+REAL, ALLOCPOINT :: Radiation_ElemEnergy_Species(:,:,:)! (number of species, number of mesh elements, 2(Emission,Absorption))
+
+
+
+REAL,ALLOCPOINT :: Radiation_Emission_spec(:,:) ! (WaveLen(:), number of mesh elements)
+REAL,ALLOCPOINT :: Radiation_Absorption_spec(:,:) ! (WaveLen(:), number of mesh elements)
+INTEGER(KIND = 2), ALLOCPOINT :: Radiation_Absorption_SpecPercent(:,:,:) ! 1:RadiationParameter%WaveLenDiscrCoarse ,1:nSpecies, 1:nGlobalElems, KIND=2? TODO
+
+REAL,ALLOCPOINT :: MacroRadInputParameters(:,:,:) ! DSMC Output file (iElem, iSpec, 5 (density, Tvib, Trot, Telec, Ttrans_mean))
+
+#if USE_MPI
+INTEGER :: MacroRadInputParameters_Shared_Win
+REAL,ALLOCPOINT :: MacroRadInputParameters_Shared(:,:,:)
+INTEGER :: Radiation_Emission_Spec_Shared_Win
+REAL,ALLOCPOINT :: Radiation_Emission_Spec_Shared(:,:)
+INTEGER :: Radiation_Absorption_Spec_Shared_Win
+REAL,ALLOCPOINT :: Radiation_Absorption_Spec_Shared(:)
+INTEGER :: Radiation_Absorption_SpecPercent_Shared_Win
+INTEGER(KIND = 2),ALLOCPOINT :: Radiation_Absorption_SpecPercent_Shared(:)
+INTEGER :: Radiation_ElemEnergy_Species_Shared_Win
+REAL,ALLOCPOINT :: Radiation_ElemEnergy_Species_Shared(:,:,:)
+#endif
+!===================================================================================================================================
+END MODULE MOD_Radiation_Vars
diff --git a/src/radiation/radiative_transfer/radtrans_init.f90 b/src/radiation/radiative_transfer/radtrans_init.f90
new file mode 100644
index 000000000..aa907ccbf
--- /dev/null
+++ b/src/radiation/radiative_transfer/radtrans_init.f90
@@ -0,0 +1,842 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RadiationTrans_Init
+!===================================================================================================================================
+! Initialization of Radiative Transfer
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE InitRadiationTransport
+ MODULE PROCEDURE InitRadiationTransport
+END INTERFACE
+
+PUBLIC::InitRadiationTransport, DefineParametersRadiationTrans, HALTON, FinalizeRadiationTransport
+!===================================================================================================================================
+
+CONTAINS
+
+!==================================================================================================================================
+!> Define parameters for radiative transfer
+!==================================================================================================================================
+SUBROUTINE DefineParametersRadiationTrans()
+! MODULES
+USE MOD_ReadInTools ,ONLY: prms,addStrListEntry
+IMPLICIT NONE
+!==================================================================================================================================
+CALL prms%SetSection("Radiation Transport")
+
+CALL prms%CreateLogicalOption('Radiation-AdaptivePhotonNumEmission', 'HM','.FALSE.')
+CALL prms%CreateIntOption('Radiation-RadObservationPointMethod', 'HM','0')
+CALL prms%CreateIntOption( 'Radiation-DirectionModel', 'HM','1')
+CALL prms%CreateIntOption( 'Radiation-NumPhotonsPerCell', 'HM','1')
+CALL prms%CreateIntOption( 'Radiation-AbsorptionModel', 'HM','1')
+CALL prms%CreateIntOption( 'Radiation-PhotonPosModel', 'HM','1')
+CALL prms%CreateIntOption( 'Radiation-PhotonWaveLengthModel', 'HM','1')
+CALL prms%CreateRealArrayOption('Radiation-ObservationMidPoint', 'HM', '0.,0.,0.')
+CALL prms%CreateRealArrayOption('Radiation-ObservationSlitFunction', 'Slit function for convolution, trapezoid, 1:topwidth[A] 2:basewidth[A]', '0.,0.')
+CALL prms%CreateRealOption('Radiation-ObservationDiameter', 'HM')
+CALL prms%CreateRealArrayOption('Radiation-ObservationViewDirection', 'HM', '0.,0.,0.')
+CALL prms%CreateRealOption('Radiation-ObservationAngularAperture', 'HM')
+CALL prms%CreateLogicalOption('Radiation-ObservationCalcFullSpectra','.FALSE.')
+CALL prms%CreateLogicalOption('Radiation-ObservationDoConvolution','Consider instrumental broadening?','.FALSE.')
+CALL prms%CreateRealOption('Radiation-ShockTubeDiameter', 'Diameter of shock tube in m', '0.0')
+CALL prms%CreateIntOption( 'Radiation-nSurfSample' , 'Define polynomial degree of radiation BC sampling. Default: nSurfSample (which itself defaults to NGeo)')
+
+END SUBROUTINE DefineParametersRadiationTrans
+
+SUBROUTINE InitRadiationTransport()
+!===================================================================================================================================
+! Initialization of the radiative transfer solver
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: Pi, c
+USE MOD_ReadInTools
+USE MOD_RadiationTrans_Vars
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,ElemMidPoint_Shared, GEO, nComputeNodeElems
+USE MOD_Globals_Vars ,ONLY: BoltzmannConst, PlanckConst
+USE MOD_Particle_Boundary_Sampling ,ONLY: InitParticleBoundarySampling
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides,nSurfSample
+USE MOD_Radiation_Vars ,ONLY: RadiationParameter, Radiation_Emission_Spec, Radiation_Absorption_Spec, RadiationSwitches
+USE MOD_Radiation_Vars ,ONLY: Radiation_Absorption_SpecPercent
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservation_Emission
+USE MOD_Radiation ,ONLY: radiation_main
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting
+USE MOD_Output ,ONLY: PrintStatusLineRadiation
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Particle_Vars ,ONLY: Symmetry, nSpecies
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_Particle_Mesh_Build ,ONLY: BuildMesh2DInfo
+USE MOD_SuperB_Tools ,ONLY: FindLinIndependentVectors, GramSchmidtAlgo
+#if USE_MPI
+USE MOD_RadiationTrans_Vars ,ONLY: RadTransObsVolumeFrac_Shared_Win, RadTransObsVolumeFrac_Shared
+USE MOD_Radiation_Vars ,ONLY: Radiation_Absorption_Spec_Shared_Win, RadiationInput
+USE MOD_Radiation_Vars ,ONLY: Radiation_Emission_Spec_Shared_Win, MacroRadInputParameters
+USE MOD_Radiation_Vars ,ONLY: Radiation_Absorption_SpecPercent_Shared_Win
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWallProc,PhotonSampWall_Shared_Win_allocated
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall_Shared,PhotonSampWall_Shared_Win,PhotonSampWallProc
+#else
+USE MOD_Mesh_Vars ,ONLY: nElems
+#endif
+USE MOD_RayTracing_Vars ,ONLY: Ray
+USE MOD_Photon_Tracking ,ONLY: InitPhotonSurfSample
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iWave, iElem, firstElem, lastElem, ElemDisp, DisplRank, iSpec, currentRank
+REAL :: LocTemp, ObsLengt, MaxSumTemp(2), GlobalMaxTemp(2), tmp
+LOGICAL :: ElemInCone
+REAL,ALLOCATABLE :: Radiation_ShockTube_Spec(:,:)
+INTEGER :: io_error
+CHARACTER(LEN=3) :: hilf
+!===================================================================================================================================
+SWRITE(UNIT_StdOut,'(132("-"))')
+SWRITE(UNIT_stdOut,'(A)') ' INIT RADIATION TRANSPORT SOLVER ...'
+
+ALLOCATE(RadiationElemAbsEnergy(2,1:nGlobalElems))
+RadiationElemAbsEnergy=0.0
+ALLOCATE(RadiationElemAbsEnergySpec(nSpecies,1:nGlobalElems))
+RadiationElemAbsEnergySpec=0.0
+
+RadiationDirectionModel = GETINT('Radiation-DirectionModel')
+RadTrans%NumPhotonsPerCell = GETINT('Radiation-NumPhotonsPerCell')
+RadiationAbsorptionModel = GETINT('Radiation-AbsorptionModel')
+RadiationPhotonPosModel = GETINT('Radiation-PhotonPosModel')
+RadiationPhotonWaveLengthModel = GETINT('Radiation-PhotonWaveLengthModel')
+RadEmiAdaptPhotonNum = GETLOGICAL('Radiation-AdaptivePhotonNumEmission')
+RadObservationPointMethod = GETINT('Radiation-RadObservationPointMethod')
+ObservationDoConvolution = GETLOGICAL('Radiation-ObservationDoConvolution')
+RadObservationPoint%ShockTubeDiameter = GETREAL('Radiation-ShockTubeDiameter')
+WRITE(UNIT=hilf,FMT='(I0)') nSurfSample
+Ray%nSurfSample = GETINT('Radiation-nSurfSample',hilf)
+
+! Build surface containers
+CALL InitPhotonSurfSample()
+
+IF (RadObservationPointMethod.GT.0) THEN
+ RadObservationPoint%AngularAperture = GETREAL('Radiation-ObservationAngularAperture')
+ RadObservationPoint%Diameter = GETREAL('Radiation-ObservationDiameter')
+ RadObservationPoint%MidPoint = GETREALARRAY('Radiation-ObservationMidPoint',3)
+ RadObservationPoint%ViewDirection = GETREALARRAY('Radiation-ObservationViewDirection',3)
+ IF(.NOT.ALL(RadObservationPoint%ViewDirection(:).EQ.0.)) THEN
+ RadObservationPoint%ViewDirection = RadObservationPoint%ViewDirection / VECNORM(RadObservationPoint%ViewDirection)
+ END IF
+ RadObservationPoint%SlitFunction = GETREALARRAY('Radiation-ObservationSlitFunction',2)
+ IF(RadObservationPoint%SlitFunction(1).GT.RadObservationPoint%SlitFunction(2)) THEN
+ tmp = RadObservationPoint%SlitFunction(1)
+ RadObservationPoint%SlitFunction(1) = RadObservationPoint%SlitFunction(2)
+ RadObservationPoint%SlitFunction(2) = tmp
+ END IF
+ RadObservationPoint%OrthoNormBasis(1:3,1) = RadObservationPoint%ViewDirection(1:3)
+ CALL FindLinIndependentVectors(RadObservationPoint%OrthoNormBasis(1:3,1), RadObservationPoint%OrthoNormBasis(1:3,2), RadObservationPoint%OrthoNormBasis(1:3,3))
+ CALL GramSchmidtAlgo(RadObservationPoint%OrthoNormBasis(1:3,1), RadObservationPoint%OrthoNormBasis(1:3,2), RadObservationPoint%OrthoNormBasis(1:3,3))
+ IF (RadObservationPointMethod.EQ.2) RadObservationPoint%Diameter = 0.0
+ ObsLengt = RadObservationPoint%Diameter/(2.*TAN(RadObservationPoint%AngularAperture/2.))
+ RadObservationPoint%StartPoint(1:3) = RadObservationPoint%MidPoint(1:3) - ObsLengt*RadObservationPoint%ViewDirection(1:3)
+ RadObservationPoint%Area = Pi*RadObservationPoint%Diameter*RadObservationPoint%Diameter/4.
+ IF (RadObservationPointMethod.EQ.2) THEN
+ RadObservationPoint%CalcFullSpectra = GETLOGICAL('Radiation-ObservationCalcFullSpectra')
+ IF (RadObservationPoint%CalcFullSpectra) THEN
+ RadEmiAdaptPhotonNum = .TRUE.
+ RadTrans%NumPhotonsPerCell = RadiationParameter%WaveLenDiscrCoarse
+ END IF
+ END IF
+END IF
+
+IF(Symmetry%Order.EQ.2) CALL BuildMesh2DInfo()
+IF (RadObservationPointMethod.GT.0) THEN
+ ALLOCATE(RadObservation_Emission(RadiationParameter%WaveLenDiscrCoarse),RadObservation_Emission_Conv(RadiationParameter%WaveLenDiscrCoarse), &
+ RadObservation_EmissionPart(RadiationParameter%WaveLenDiscrCoarse))
+ RadObservation_Emission = 0.0
+ RadObservation_Emission_Conv = 0.0
+ RadObservation_EmissionPart = 0
+END IF
+
+#if USE_MPI
+ ! allocate shared array for Radiation_Emission/Absorption_Spec
+CALL Allocate_Shared((/2,nGlobalElems/),RadiationElemAbsEnergy_Shared_Win,RadiationElemAbsEnergy_Shared)
+CALL MPI_WIN_LOCK_ALL(0,RadiationElemAbsEnergy_Shared_Win,IERROR)
+
+IF (myComputeNodeRank.EQ.0) RadiationElemAbsEnergy_Shared = 0.
+CALL BARRIER_AND_SYNC(RadiationElemAbsEnergy_Shared_Win,MPI_COMM_SHARED)
+
+ ! allocate shared array for Radiation_Emission/Absorption_Spec
+CALL Allocate_Shared((/nSpecies,nGlobalElems/),RadiationElemAbsEnergySpec_Shared_Win,RadiationElemAbsEnergySpec_Shared)
+CALL MPI_WIN_LOCK_ALL(0,RadiationElemAbsEnergySpec_Shared_Win,IERROR)
+
+IF (myComputeNodeRank.EQ.0) RadiationElemAbsEnergySpec_Shared = 0.
+CALL BARRIER_AND_SYNC(RadiationElemAbsEnergySpec_Shared_Win,MPI_COMM_SHARED)
+
+CALL Allocate_Shared((/nComputeNodeElems/), RadTransPhotPerCell_Shared_Win,RadTransPhotPerCell_Shared)
+CALL MPI_WIN_LOCK_ALL(0,RadTransPhotPerCell_Shared_Win,IERROR)
+CALL Allocate_Shared((/nComputeNodeElems/), Radiation_Emission_Spec_Total_Shared_Win,Radiation_Emission_Spec_Total_Shared)
+CALL MPI_WIN_LOCK_ALL(0,Radiation_Emission_Spec_Total_Shared_Win,IERROR)
+
+CALL Allocate_Shared((/nComputeNodeElems/), RadTransObsVolumeFrac_Shared_Win,RadTransObsVolumeFrac_Shared)
+CALL MPI_WIN_LOCK_ALL(0,RadTransObsVolumeFrac_Shared_Win,IERROR)
+
+RadTransPhotPerCell => RadTransPhotPerCell_Shared
+Radiation_Emission_Spec_Total => Radiation_Emission_Spec_Total_Shared
+RadTransObsVolumeFrac => RadTransObsVolumeFrac_Shared
+IF (myComputeNodeRank.EQ.0) THEN
+ RadTransPhotPerCell = 0
+ Radiation_Emission_Spec_Total = 0.0
+ RadTransObsVolumeFrac = 1.
+END IF
+CALL BARRIER_AND_SYNC(RadTransPhotPerCell_Shared_Win ,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(RadTransObsVolumeFrac_Shared_Win ,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Total_Shared_Win ,MPI_COMM_SHARED)
+
+IF (RadiationPhotonWaveLengthModel.EQ.1) THEN
+ CALL Allocate_Shared((/nComputeNodeElems/), Radiation_Emission_Spec_Max_Shared_Win,Radiation_Emission_Spec_Max_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,Radiation_Emission_Spec_Max_Shared_Win,IERROR)
+ Radiation_Emission_Spec_Max => Radiation_Emission_Spec_Max_Shared
+ IF (myComputeNodeRank.EQ.0) THEN
+ Radiation_Emission_Spec_Max = 0.0
+ END IF
+ CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Max_Shared_Win ,MPI_COMM_SHARED)
+END IF
+
+ALLOCATE(RadTransPhotPerCellLoc(nComputeNodeElems))
+RadTransPhotPerCellLoc = 0
+
+IF (RadObservationPointMethod.EQ.2) THEN
+ CALL Allocate_Shared((/7,nComputeNodeElems/), RadObservationPOI_Shared_Win,RadObservationPOI_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,RadObservationPOI_Shared_Win,IERROR)
+ RadObservationPOI => RadObservationPOI_Shared
+ IF (myComputeNodeRank.EQ.0) RadObservationPOI = 0.
+ CALL BARRIER_AND_SYNC(RadObservationPOI_Shared_Win ,MPI_COMM_SHARED)
+END IF
+#else
+! allocate local array for ElemInfo
+ALLOCATE(RadTransPhotPerCell(nElems),Radiation_Emission_Spec_Total(nElems),RadTransPhotPerCellLoc(nELems), RadTransObsVolumeFrac(nElems))
+RadTransPhotPerCell = 0
+RadTransPhotPerCellLoc = 0
+RadTransObsVolumeFrac = 1.0
+Radiation_Emission_Spec_Total=0.0
+IF (RadiationPhotonWaveLengthModel.EQ.1) THEN
+ ALLOCATE(Radiation_Emission_Spec_Max(nElems))
+ Radiation_Emission_Spec_Max=0.0
+END IF
+IF (RadObservationPointMethod.EQ.2) THEN
+ ALLOCATE(RadObservationPOI(7,nElems))
+ RadObservationPOI = 0.
+END IF
+#endif /*USE_MPI*/
+
+
+#if USE_MPI
+IF (RadiationSwitches%MacroRadInput) THEN
+ firstElem = INT(REAL( myComputeNodeRank *nComputeNodeElems)/REAL(nComputeNodeProcessors))+1
+ lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeElems)/REAL(nComputeNodeProcessors))
+ IF (nComputeNodeElems.NE.nComputeNodeProcessors) THEN
+ MaxSumTemp(1) = 0.0
+ DO iSpec = 1, nSpecies
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+ MaxSumTemp(1) = MaxSumTemp(1) + SUM(MacroRadInputParameters(firstElem:lastElem,iSpec,4))
+ END DO
+ CALL MPI_ALLREDUCE(MaxSumTemp(1), GlobalMaxTemp(1), 1, MPI_DOUBLE_PRECISION, MPI_SUM,MPI_COMM_SHARED,iError)
+ GlobalMaxTemp(1) = GlobalMaxTemp(1) / REAL(nComputeNodeProcessors)
+ MaxSumTemp(1) = 0.0
+ currentRank = 0
+ firstElem = 1
+ ElemLoop: DO iElem = 1, nComputeNodeElems
+ DO iSpec = 1, nSpecies
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+ MaxSumTemp(1) = MaxSumTemp(1) + MacroRadInputParameters(iElem,iSpec,4)
+ END DO
+ IF ((nComputeNodeElems - iElem).EQ.(nComputeNodeProcessors - currentRank - 1)) THEN
+ currentRank = currentRank + 1
+ IF (currentRank.EQ.myComputeNodeRank) THEN
+ firstElem = iElem + 1
+ lastElem = iElem + 1
+ EXIT ElemLoop
+ ELSE
+ CYCLE ElemLoop
+ END IF
+ END IF
+ IF (MaxSumTemp(1).GE.GlobalMaxTemp(1)) THEN
+ currentRank = currentRank + 1
+ IF (currentRank.GT.myComputeNodeRank) THEN
+ lastElem = iElem
+ EXIT ElemLoop
+ END IF
+ IF (currentRank.EQ.myComputeNodeRank) firstElem = MIN(iElem+1, nComputeNodeElems)
+ MaxSumTemp(1) = 0.0
+ END IF
+ END DO ElemLoop
+ IF (myRank+1.EQ.nComputeNodeProcessors) lastElem = nComputeNodeElems
+ END IF
+
+ MaxSumTemp(2) = REAL(myRank)
+ MaxSumTemp(1) = 0.0
+ DO iSpec = 1, nSpecies
+ IF(.NOT.RadiationInput(iSpec)%DoRadiation) CYCLE
+ MaxSumTemp(1) = MaxSumTemp(1) + SUM(MacroRadInputParameters(firstElem:lastElem,iSpec,4))
+ END DO
+ CALL MPI_ALLREDUCE(MaxSumTemp, GlobalMaxTemp, 1, MPI_2DOUBLE_PRECISION, MPI_MAXLOC,MPI_COMM_PICLAS,iError)
+ DisplRank = NINT(GlobalMaxTemp(2))
+ELSE
+ firstElem = INT(REAL( myComputeNodeRank *nComputeNodeElems)/REAL(nComputeNodeProcessors))+1
+ lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeElems)/REAL(nComputeNodeProcessors))
+ DisplRank = 0
+END IF
+#else
+ firstElem = 1
+ lastElem = nElems
+ DisplRank = 0
+#endif
+SELECT CASE(RadiationSwitches%RadType)
+CASE(1) !calls radition solver module
+ SWRITE(UNIT_stdOut,'(A)') ' Calculate Radiation Data per Cell ...'
+ ElemDisp = INT((lastElem-firstElem+1)/100)
+ ElemDisp = MAX(1,ElemDisp)
+
+ DO iElem = firstElem, lastElem
+ IF((myRank.EQ.DisplRank).AND.(MOD(iElem-firstElem,ElemDisp).EQ.0)) CALL PrintStatusLineRadiation(REAL(iElem),REAL(firstElem),REAL(lastElem),.FALSE.,DisplRank)
+ IF (RadObservationPointMethod.EQ.1) THEN
+ CALL ElemInObsCone(iElem, ElemInCone)
+ IF (.NOT.ElemInCone) CYCLE
+ ELSE IF (RadObservationPointMethod.EQ.2) THEN
+ CALL ElemOnLineOfSight(iELem, ElemInCone)
+ IF (.NOT.ElemInCone) CYCLE
+ END IF
+ CALL radiation_main(iElem)
+ DO iWave = 1, RadiationParameter%WaveLenDiscrCoarse
+ Radiation_Emission_Spec_Total(iElem) = Radiation_Emission_Spec_Total(iElem) &
+ + 4.*Pi*Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ IF (RadiationPhotonWaveLengthModel.EQ.1) Radiation_Emission_Spec_Max(iElem) = MAX(Radiation_Emission_Spec_Max(iElem), &
+ 4.*Pi*Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor)
+ END DO
+ IF (RadiationParameter%WaveLenReductionFactor.GT.1) THEN
+ IF (MOD(RadiationParameter%WaveLenDiscr,RadiationParameter%WaveLenDiscrCoarse).NE.0) THEN
+ Radiation_Emission_Spec_Total(iElem) = Radiation_Emission_Spec_Total(iElem) &
+ + 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iElem) * RadiationParameter%WaveLenIncr
+ IF (RadiationPhotonWaveLengthModel.EQ.1) Radiation_Emission_Spec_Max(iElem) = MAX(Radiation_Emission_Spec_Max(iElem), &
+ 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iElem) * RadiationParameter%WaveLenIncr*(RadiationParameter%WaveLenReductionFactor+1.))
+ END IF
+ END IF
+ END DO
+CASE(2) ! Black body radiation
+
+ DO iElem = firstElem, lastElem
+ IF (ElemMidPoint_Shared(1,iElem).LT.1) THEN
+ LocTemp = 10000. !GEO%ElemMidPoint(2,iElem)/GEO%ymaxglob*10000.
+ ELSE
+ LocTemp = 10000. !GEO%ElemMidPoint(2,iElem)/GEO%ymaxglob*10000
+ END IF
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ IF (LocTemp.GT.0.0) Radiation_Emission_Spec(iWave, iElem) = 2.*PlanckConst*c*c/(RadiationParameter%WaveLen(iWave)**5. &
+ *(EXP(PlanckConst*c/(RadiationParameter%WaveLen(iWave)*BoltzmannConst*LocTemp))-1.) )
+ Radiation_Emission_Spec_Total(iElem) = Radiation_Emission_Spec_Total(iElem) &
+ + 4.*Pi*Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr
+ END DO
+ END DO
+ DO iElem = firstElem, lastElem
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ Radiation_Absorption_Spec(iWave, GetGlobalElemID(iElem)) = 1.
+ Radiation_Absorption_SpecPercent(iWave,:,GetGlobalElemID(iElem)) = 10000
+ END DO
+ END DO
+CASE(3) !only radiation
+ SWRITE(UNIT_stdOut,'(A)') ' Calculate Radiation Data per Cell ...'
+ DO iElem = firstElem, lastElem
+ IF(MPIroot.AND.(MOD(iElem,10).EQ.0)) CALL PrintStatusLineRadiation(REAL(iElem),REAL(firstElem),REAL(lastElem),.FALSE.)
+ CALL radiation_main(iElem)
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ Radiation_Emission_Spec_Total(iElem) = Radiation_Emission_Spec_Total(iElem) &
+ + 4.*Pi*Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr
+ END DO
+ END DO
+CASE(4) !Shocktube mode
+ ALLOCATE(Radiation_ShockTube_Spec(RadiationParameter%WaveLenDiscr,nGlobalElems))
+ SWRITE(UNIT_stdOut,'(A)') ' Calculate Radiation Data per Cell ...'
+ DO iElem = firstElem, lastElem
+ IF(MPIroot.AND.(MOD(iElem,10).EQ.0)) CALL PrintStatusLineRadiation(REAL(iElem),REAL(firstElem),REAL(lastElem),.FALSE.)
+ CALL radiation_main(iElem)
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ Radiation_Emission_Spec_Total(iElem) = Radiation_Emission_Spec_Total(iElem) &
+ + 4.*Pi*Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr
+ IF(Radiation_Absorption_Spec(iWave, iElem).EQ.0.0) THEN
+ Radiation_ShockTube_Spec(iWave,iElem) = Radiation_Emission_Spec(iWave, iElem)*RadObservationPoint%ShockTubeDiameter
+ ELSE
+ Radiation_ShockTube_Spec(iWave,iElem) = Radiation_Emission_Spec(iWave, iElem)/Radiation_Absorption_Spec(iWave, iElem) * &
+ (1.-EXP(-Radiation_Absorption_Spec(iWave, iElem)*RadObservationPoint%ShockTubeDiameter))
+ END IF
+ END DO
+ END DO
+
+ OPEN(unit=40,file='Radiation_Shocktube.csv',status='replace',action='write', iostat=io_error)
+ DO iElem=1,nGlobalElems
+ WRITE(40,CSVFORMAT,ADVANCE="NO") ',', ElemMidPoint_Shared(1,iElem)
+ END DO
+ WRITE(40,*)
+ DO iWave =1,RadiationParameter%WaveLenDiscr
+ WRITE(40,'(E23.16E3)',ADVANCE="NO") RadiationParameter%WaveLen(iWave)*1.E9
+ DO iElem = 1,nGlobalElems
+ WRITE(40,CSVFORMAT,ADVANCE="NO") ',', Radiation_ShockTube_Spec(iWave,iElem)
+ END DO
+ WRITE(40,*)
+ END DO
+
+CASE DEFAULT
+ CALL abort(__STAMP__,' ERROR: Radiation type is not implemented! (unknown case)')
+END SELECT
+
+
+#if USE_MPI
+ CALL BARRIER_AND_SYNC(RadTransObsVolumeFrac_Shared_Win ,MPI_COMM_SHARED)
+ IF (RadiationPhotonWaveLengthModel.EQ.1) THEN
+ CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Max_Shared_Win,MPI_COMM_SHARED)
+ END IF
+ CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Total_Shared_Win,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Emission_Spec_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_Spec_Shared_Win ,MPI_COMM_SHARED)
+ IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLGATHERV( MPI_IN_PLACE &
+ , 0 &
+ , MPI_DATATYPE_NULL &
+ , Radiation_Absorption_Spec &
+ , RadiationParameter%WaveLenDiscrCoarse *recvcountElem &
+ , RadiationParameter%WaveLenDiscrCoarse *displsElem &
+ , MPI_DOUBLE_PRECISION &
+ , MPI_COMM_LEADERS_SHARED &
+ , IERROR)
+ END IF
+ END IF
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_Spec_Shared_Win ,MPI_COMM_SHARED)
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_SpecPercent_Shared_Win ,MPI_COMM_SHARED)
+ IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLGATHERV( MPI_IN_PLACE &
+ , 0 &
+ , MPI_DATATYPE_NULL &
+ , Radiation_Absorption_SpecPercent &
+ , RadiationParameter%WaveLenDiscrCoarse *nSpecies*recvcountElem &
+ , RadiationParameter%WaveLenDiscrCoarse *nSpecies*displsElem &
+ , MPI_INTEGER2 &
+ , MPI_COMM_LEADERS_SHARED &
+ , IERROR)
+ END IF
+ END IF
+ CALL BARRIER_AND_SYNC(Radiation_Absorption_SpecPercent_Shared_Win ,MPI_COMM_SHARED)
+ IF (RadObservationPointMethod.EQ.2) CALL BARRIER_AND_SYNC(RadObservationPOI_Shared_Win ,MPI_COMM_SHARED)
+ !print*, 'AHAAAA', SUM(RadObservationPOI(7,:))
+ !read*
+#endif
+ RadTrans%GlobalRadiationPower = 0.0
+ RadTrans%ScaledGlobalRadiationPower = 0.0
+ DO iElem = firstElem, lastElem
+ RadTrans%GlobalRadiationPower = RadTrans%GlobalRadiationPower + Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem)
+ IF (RadialWeighting%DoRadialWeighting) THEN
+ RadTrans%ScaledGlobalRadiationPower = RadTrans%ScaledGlobalRadiationPower &
+ + Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem) &
+ /(1. + ElemMidPoint_Shared(2,iElem)/GEO%ymaxglob*(RadialWeighting%PartScaleFactor-1.))
+ END IF
+ END DO
+#if USE_MPI
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RadTrans%GlobalRadiationPower,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
+ IF (RadialWeighting%DoRadialWeighting) THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RadTrans%ScaledGlobalRadiationPower,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError)
+ END IF
+#endif /*USE_MPI*/
+ RadTrans%GlobalPhotonNum = RadTrans%NumPhotonsPerCell * nGlobalElems
+
+
+
+
+#if USE_MPI
+ALLOCATE(PhotonSampWallProc(2,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+PhotonSampWallProc=0.0
+!> Then shared arrays for boundary sampling
+CALL Allocate_Shared((/2,Ray%nSurfSample,Ray%nSurfSample,nComputeNodeSurfTotalSides/),PhotonSampWall_Shared_Win,PhotonSampWall_Shared)
+PhotonSampWall_Shared_Win_allocated = .TRUE.
+CALL MPI_WIN_LOCK_ALL(0,PhotonSampWall_Shared_Win,IERROR)
+PhotonSampWall => PhotonSampWall_Shared
+
+IF (myComputeNodeRank.EQ.0) PhotonSampWall = 0.
+CALL BARRIER_AND_SYNC(PhotonSampWall_Shared_Win,MPI_COMM_SHARED)
+#else
+ALLOCATE(PhotonSampWall(2,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+PhotonSampWall=0.0
+#endif
+
+SWRITE(UNIT_stdOut,'(A)')' INIT RADIATION TRANSPORT SOLVER DONE!'
+SWRITE(UNIT_StdOut,'(132("-"))')
+END SUBROUTINE InitRadiationTransport
+
+
+SUBROUTINE HALTON( ind, dims, rand )
+!===================================================================================================================================
+! Halton sequence for reducing stochastical noise in radiative transfer
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+INTEGER, INTENT(IN) :: ind, dims
+REAL, INTENT(OUT) :: rand(dims)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: t(dims),j, i1, d
+REAL :: primeinv(dims)
+!===================================================================================================================================
+ t(1:dims) = ABS(ind)
+ DO i1 = 1, dims
+ primeinv(i1) = 1.0/REAL(PRIME(i1))
+ END DO
+ rand = 0.0
+
+ DO WHILE (ANY(t(1:dims).NE.0))
+ do j = 1, dims
+ d = MOD(t(j), PRIME(j))
+ rand(j) = rand(j) + REAL(d) * primeinv(j)
+ primeinv(j) = primeinv(j) / REAL(PRIME( j ))
+ t(j) = ( t(j) / PRIME ( j ) )
+ END DO
+ END DO
+
+ RETURN
+END SUBROUTINE HALTON
+
+SUBROUTINE ElemInObsCone(ElemID, ElemInCone)
+!===================================================================================================================================
+! Routine to check if element is in opening cone of observation angle of radiative transfer
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,ElemInfo_Shared, BoundsOfElem_Shared, SideIsSymSide, SideInfo_Shared
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPoint, RadTransObsVolumeFrac
+USE MOD_Particle_Vars ,ONLY: Symmetry
+USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D
+USE MOD_Photon_TrackingTools ,ONLY: PhotonIntersectionWithSide2DDir, PhotonThroughSideCheck3DDir
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+INTEGER, INTENT(IN) :: ElemID
+LOGICAL, INTENT(OUT) :: ElemInCone
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iNode, MCVar, iGlobalElem, iPoint, iLocSide, nlocSides, TempSideID, localSideID, TriNum
+LOGICAL :: NodeInCone(8), InsideFlag, ThroughSide
+REAL :: NodePoint(3), ConeDist, ConeRadius, orthoDist, RandomPos(3)
+!===================================================================================================================================
+ElemInCone = .FALSE.
+NodeInCone = .FALSE.
+MCVar = 1000000
+DO iNode = 1, 8
+ NodePoint(1:3) = NodeCoords_Shared(1:3,ElemInfo_Shared(ELEM_FIRSTNODEIND,ElemID)+iNode)
+ ConeDist = DOT_PRODUCT(NodePoint(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+ orthoDist = VECNORM(NodePoint(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+ IF (orthoDist.LE.ConeRadius) THEN
+ NodeInCone(iNode) = .TRUE.
+ END IF
+END DO
+
+IF (ALL(NodeInCone)) THEN
+ ElemInCone = .TRUE.
+ELSE IF (ANY(NodeInCone)) THEN
+ iGlobalElem = GetGlobalElemID(ElemID)
+ RadTransObsVolumeFrac(ElemID) = 0.0
+ ElemInCone = .TRUE.
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iGlobalElem) )
+ DO iPoint = 1, MCVar
+ InsideFlag=.FALSE.
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos)
+ RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:))
+ IF(Symmetry%Order.LE.2) RandomPos(3) = 0.
+ IF(Symmetry%Order.LE.1) RandomPos(2) = 0.
+ CALL ParticleInsideQuad3D(RandomPos,iGlobalElem,InsideFlag)
+ END DO
+ ConeDist = DOT_PRODUCT(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+ orthoDist = VECNORM(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+ IF (orthoDist.LE.ConeRadius) RadTransObsVolumeFrac(ElemID) = RadTransObsVolumeFrac(ElemID) + 1./REAL(MCVar)
+ END DO
+ END ASSOCIATE
+ELSE
+ nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID)
+ SideLoop: DO iLocSide=1,nlocSides
+ TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
+ localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
+ ! Side is not one of the 6 local sides
+ IF (localSideID.LE.0) CYCLE
+ IF(Symmetry%Axisymmetric) THEN
+ IF (SideIsSymSide(TempSideID)) CYCLE
+ ThroughSide = .FALSE.
+ CALL PhotonIntersectionWithSide2DDir(localSideID,ElemID,ThroughSide, RadObservationPoint%StartPoint(1:3),RadObservationPoint%ViewDirection(1:3))
+ IF (ThroughSide) THEN
+ ElemInCone = .TRUE.
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iGlobalElem) )
+ DO iPoint = 1, MCVar
+ InsideFlag=.FALSE.
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos)
+ RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:))
+ IF(Symmetry%Order.LE.2) RandomPos(3) = 0.
+ IF(Symmetry%Order.LE.1) RandomPos(2) = 0.
+ CALL ParticleInsideQuad3D(RandomPos,iGlobalElem,InsideFlag)
+ END DO
+ ConeDist = DOT_PRODUCT(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+ orthoDist = VECNORM(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+ IF (orthoDist.LE.ConeRadius) RadTransObsVolumeFrac(ElemID) = RadTransObsVolumeFrac(ElemID) + 1./REAL(MCVar)
+ END DO
+ END ASSOCIATE
+ EXIT SideLoop
+ END IF
+ ELSE
+ DO TriNum = 1,2
+ ThroughSide = .FALSE.
+ CALL PhotonThroughSideCheck3DDir(localSideID,ElemID,ThroughSide,TriNum, RadObservationPoint%StartPoint(1:3),RadObservationPoint%ViewDirection(1:3))
+ IF (ThroughSide) THEN
+ ElemInCone = .TRUE.
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,iGlobalElem) )
+ DO iPoint = 1, MCVar
+ InsideFlag=.FALSE.
+ DO WHILE(.NOT.InsideFlag)
+ CALL RANDOM_NUMBER(RandomPos)
+ RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:))
+ IF(Symmetry%Order.LE.2) RandomPos(3) = 0.
+ IF(Symmetry%Order.LE.1) RandomPos(2) = 0.
+ CALL ParticleInsideQuad3D(RandomPos,iGlobalElem,InsideFlag)
+ END DO
+ ConeDist = DOT_PRODUCT(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+ orthoDist = VECNORM(RandomPos(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+ IF (orthoDist.LE.ConeRadius) RadTransObsVolumeFrac(ElemID) = RadTransObsVolumeFrac(ElemID) + 1./REAL(MCVar)
+ END DO
+ END ASSOCIATE
+ EXIT SideLoop
+ END IF
+ END DO
+ END IF
+ END DO SideLoop
+END IF
+
+END SUBROUTINE ElemInObsCone
+
+
+SUBROUTINE ElemOnLineOfSight(ElemID, ElemInCone)
+!===================================================================================================================================
+! Routine to check if element is on line of sight of radiative transfer
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared, SideInfo_Shared, SideIsSymSide
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPoint, RadObservationPOI
+USE MOD_Particle_Vars ,ONLY: Symmetry
+USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D
+USE MOD_Photon_TrackingTools ,ONLY: PhotonIntersectionWithSide2DDir, PhotonThroughSideCheck3DDir
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+INTEGER, INTENT(IN) :: ElemID
+LOGICAL, INTENT(OUT) :: ElemInCone
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iLocSide, nlocSides, TempSideID, localSideID, TriNum
+INTEGER :: nThroughSide, BCType
+LOGICAL :: ThroughSide, IsSymElem
+REAL :: IntersectionPos(1:3), Distance(2)
+REAL :: length
+!===================================================================================================================================
+ElemInCone = .FALSE.
+IsSymElem = .FALSE.
+nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID)
+nThroughSide = 0
+SideLoop: DO iLocSide=1,nlocSides
+ TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
+ localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
+ ! Side is not one of the 6 local sides
+ IF (localSideID.LE.0) CYCLE
+ IF(Symmetry%Axisymmetric) THEN
+ IF (SideIsSymSide(TempSideID)) CYCLE
+ IF (SideInfo_Shared(SIDE_BCID,TempSideID).GT.0) THEN
+ BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,TempSideID)))
+ IF (BCType.EQ.PartBound%SymmetryAxis) IsSymElem = .TRUE.
+ END IF
+ ThroughSide = .FALSE.
+ CALL PhotonIntersectionWithSide2DDir(localSideID,ElemID,ThroughSide, RadObservationPoint%StartPoint(1:3),&
+ RadObservationPoint%ViewDirection(1:3), IntersectionPos(1:3), Distance(nThroughSide+1))
+ IF (ThroughSide) THEN
+ ElemInCone = .TRUE.
+ RadObservationPOI(1+nThroughSide*3:3+nThroughSide*3, ElemID) = IntersectionPos(1:3)
+ nThroughSide = nThroughSide + 1
+ IF (nThroughSide.EQ.2) THEN
+ IF (Distance(2).LT.Distance(1)) THEN
+ IntersectionPos(1:3) = RadObservationPOI(1:3, ElemID)
+ RadObservationPOI(1:3, ElemID) = RadObservationPOI(4:6, ElemID)
+ RadObservationPOI(4:6, ElemID) = IntersectionPos(1:3)
+ END IF
+ RadObservationPOI(7, ElemID) = VECNORM(RadObservationPOI(4:6, ElemID)-RadObservationPOI(1:3, ElemID))
+ EXIT SideLoop
+ END IF
+ END IF
+ ELSE
+ DO TriNum = 1,2
+ ThroughSide = .FALSE.
+ CALL PhotonThroughSideCheck3DDir(localSideID,ElemID,ThroughSide,TriNum, RadObservationPoint%StartPoint(1:3),RadObservationPoint%ViewDirection(1:3))
+ IF (ThroughSide) THEN
+ ElemInCone = .TRUE.
+ EXIT SideLoop
+ END IF
+ END DO
+ END IF
+END DO SideLoop
+IF (ElemInCone.AND.(nThroughSide.NE.2)) THEN
+ IF (IsSymElem) THEN
+ IF (nThroughSide.NE.1) THEN
+ CALL abort(&
+ __STAMP__&
+ ,' Cannot find 1 POI of LOS in Elem', ElemID)
+ END IF
+ RadObservationPOI(4:6, ElemID) = RadObservationPOI(1:3, ElemID)
+ length = -RadObservationPoint%StartPoint(2)/RadObservationPoint%ViewDirection(2)
+ RadObservationPOI(2:3, ElemID) = 0.0
+ RadObservationPOI(1, ElemID) = RadObservationPoint%StartPoint(1) + length*RadObservationPoint%ViewDirection(1)
+ RadObservationPOI(7, ElemID) = VECNORM(RadObservationPOI(4:6, ElemID)-RadObservationPOI(1:3, ElemID))
+ RETURN
+ END IF
+ CALL abort(&
+ __STAMP__&
+ ,' Cannot find POI of LOS in Elem', ElemID)
+END IF
+
+END SUBROUTINE ElemOnLineOfSight
+
+INTEGER FUNCTION PRIME(n)
+!===================================================================================================================================
+! contains prime numbers for initialization of Halton sequence
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER, PARAMETER :: prime_max=50
+INTEGER, SAVE :: icall = 0, npvec(prime_max)
+INTEGER, INTENT(IN) :: n
+!===================================================================================================================================
+ IF (icall.EQ.0) THEN
+ icall = 1
+ npvec(1:50) = (/ &
+ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, &
+ 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, &
+ 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, &
+ 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, &
+ 179, 181, 191, 193, 197, 199, 211, 223, 227, 229 /)
+ END IF
+ IF (n.EQ.-1) THEN
+ PRIME = prime_max
+ ELSE IF (n.EQ.0) THEN
+ PRIME = 1
+ ELSE IF (n.LE.prime_max) THEN
+ PRIME = npvec(n)
+ ELSE
+ PRIME = -1
+ write ( *, '(a)' ) ' '
+ write ( *, '(a)' ) 'PRIME - Fatal error!'
+ write ( *, '(a,i8)' ) ' Illegal prime index N = ', n
+ write ( *, '(a,i8)' ) ' N should be between 1 and PRIME_MAX =', prime_max
+ stop 1
+ END IF
+
+ RETURN
+END FUNCTION PRIME
+
+
+SUBROUTINE FinalizeRadiationTransport()
+!===================================================================================================================================
+!> Deallocating radiation variables
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_RadiationTrans_Vars
+#if USE_MPI
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+USE MOD_MPI_Shared
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID2D_Shared_Win,SideNormalEdge2D_Shared_Win
+#endif
+USE MOD_Particle_Vars ,ONLY: Symmetry
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID2D_Shared,SideNormalEdge2D_Shared
+!-----------------------------------------------------------------------------------------------------------------------------------
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+
+#if USE_MPI
+! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+CALL UNLOCK_AND_FREE(RadiationElemAbsEnergy_Shared_Win)
+CALL UNLOCK_AND_FREE(RadiationElemAbsEnergySpec_Shared_Win)
+CALL UNLOCK_AND_FREE(RadTransPhotPerCell_Shared_Win)
+CALL UNLOCK_AND_FREE(Radiation_Emission_Spec_Total_Shared_Win)
+CALL UNLOCK_AND_FREE(RadTransObsVolumeFrac_Shared_Win)
+IF(RadiationPhotonWaveLengthModel.EQ.1) CALL UNLOCK_AND_FREE(Radiation_Emission_Spec_Max_Shared_Win)
+IF(Symmetry%Order.EQ.2)THEN
+ CALL UNLOCK_AND_FREE(ElemSideNodeID2D_Shared_Win)
+ CALL UNLOCK_AND_FREE(SideNormalEdge2D_Shared_Win)
+END IF
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+#endif /*USE_MPI*/
+ADEALLOCATE(RadiationElemAbsEnergy_Shared)
+ADEALLOCATE(RadiationElemAbsEnergySpec_Shared)
+ADEALLOCATE(RadTransPhotPerCell_Shared)
+ADEALLOCATE(Radiation_Emission_Spec_Total_Shared)
+ADEALLOCATE(RadTransObsVolumeFrac_Shared)
+ADEALLOCATE(Radiation_Emission_Spec_Max_Shared)
+ADEALLOCATE(ElemSideNodeID2D_Shared)
+ADEALLOCATE(SideNormalEdge2D_Shared)
+
+END SUBROUTINE FinalizeRadiationTransport
+
+END MODULE MOD_RadiationTrans_Init
diff --git a/src/radiation/radiative_transfer/radtrans_main.f90 b/src/radiation/radiative_transfer/radtrans_main.f90
new file mode 100644
index 000000000..ab6f8db9b
--- /dev/null
+++ b/src/radiation/radiative_transfer/radtrans_main.f90
@@ -0,0 +1,580 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RadTransport
+!===================================================================================================================================
+! Module for the main radiation transport routines
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE RadTrans_main
+ MODULE PROCEDURE RadTrans_main
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: RadTrans_main
+!===================================================================================================================================
+
+CONTAINS
+
+SUBROUTINE RadTrans_main()
+!===================================================================================================================================
+!> Main routine for the Radiation Transport
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Particle_Mesh_Vars ,ONLY: GEO, nComputeNodeElems, ElemMidPoint_Shared, ElemVolume_Shared
+USE MOD_RadiationTrans_Vars ,ONLY: Radiation_Emission_Spec_Total, RadTrans, RadEmiAdaptPhotonNum, RadTransObsVolumeFrac
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationDirectionModel, RadTransPhotPerCellLoc, RadObservationPoint
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_RadiationTrans_Vars ,ONLY: RadTransPhotPerCell, RadiationPhotonWaveLengthModel
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPointMethod
+USE MOD_Photon_Tracking ,ONLY: PhotonTriaTracking, Photon2DSymTracking
+USE MOD_Radiation_Vars ,ONLY: RadiationSwitches
+USE MOD_DSMC_Vars ,ONLY: RadialWeighting
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Output ,ONLY: PrintStatusLineRadiation
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_Particle_Vars ,ONLY: Symmetry
+#if USE_MPI
+USE MOD_RadiationTrans_Vars ,ONLY: RadTransPhotPerCell_Shared_Win
+#else
+USE MOD_Mesh_Vars ,ONLY: nElems
+#endif /*USE_MPI*/
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iElem, nPhotons, iPhot, globPhotNum, nPhotonsCN, photonCount, iPhotLoc, photVisCount, LocPhotNum, PhotDisp
+INTEGER :: firstElem, lastElem, firstPhoton, lastPhoton
+REAL :: RandRot(3,3) !, PartPos(1:3)
+!===================================================================================================================================
+ IF ((RadiationSwitches%RadType.EQ.3) .OR. (RadiationSwitches%RadType.EQ.4)) RETURN
+
+#if USE_MPI
+ firstElem = INT(REAL( myComputeNodeRank *nComputeNodeElems)/REAL(nComputeNodeProcessors))+1
+ lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeElems)/REAL(nComputeNodeProcessors))
+#else
+ firstElem = 1
+ lastElem = nElems
+#endif
+ SWRITE(UNIT_stdOut,'(A)') ' Distribute Photons to Processors ...'
+ IF (RadEmiAdaptPhotonNum) THEN
+ DO iElem = firstElem, lastElem
+ IF (RadObservationPoint%CalcFullSpectra) THEN
+ IF (Radiation_Emission_Spec_Total(iElem).GT.0.0) THEN
+ RadTransPhotPerCell(iElem) = RadTrans%NumPhotonsPerCell
+ ELSE
+ RadTransPhotPerCell(iElem) = 0
+ END IF
+ ELSE
+ IF (RadTrans%GlobalRadiationPower .EQ. 0.0) THEN !!!!TODO: check!!!
+ RadTransPhotPerCell(iElem) = 0
+ ELSE
+ IF (RadialWeighting%DoRadialWeighting) THEN
+ RadTransPhotPerCell(iElem) = INT(Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem) &
+ /(1. + ElemMidPoint_Shared(2,iElem)/GEO%ymaxglob*(RadialWeighting%PartScaleFactor-1.)) &
+ / RadTrans%ScaledGlobalRadiationPower*RadTrans%GlobalPhotonNum + 0.5)
+ ELSE
+ RadTransPhotPerCell(iElem) = INT(Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem) &
+ / RadTrans%GlobalRadiationPower*RadTrans%GlobalPhotonNum + 0.5)
+ END IF
+ END IF
+ END IF
+ END DO
+#if USE_MPI
+ CALL BARRIER_AND_SYNC(RadTransPhotPerCell_Shared_Win ,MPI_COMM_SHARED)
+ IF(myComputeNodeRank.EQ.0) nPhotons = SUM(RadTransPhotPerCell(:))
+ IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,nPhotons,1,MPI_INTEGER,MPI_SUM,MPI_COMM_LEADERS_SHARED,iError)
+ END IF
+ END IF
+ CALL MPI_BCAST(nPhotons,1, MPI_INTEGER,0,MPI_COMM_SHARED,iERROR)
+ nPhotonsCN = SUM(RadTransPhotPerCell(:))
+ firstPhoton = INT(REAL( myComputeNodeRank) *REAL(nPhotonsCN)/REAL(nComputeNodeProcessors))+1
+ lastPhoton = INT(REAL(myComputeNodeRank+1)*REAL(nPhotonsCN)/REAL(nComputeNodeProcessors))
+ photonCount = 0
+ DO iELem = 1, nComputeNodeElems
+ IF (photonCount.GT.lastPhoton) THEN
+ RadTransPhotPerCellLoc(iELem) = 0
+ ELSE IF ((photonCount.GT.firstPhoton).AND.((photonCount+RadTransPhotPerCell(iElem)).LE.lastPhoton)) THEN
+ RadTransPhotPerCellLoc(iELem) = RadTransPhotPerCell(iElem)
+ ELSE IF ((photonCount.LT.firstPhoton).AND.((photonCount+RadTransPhotPerCell(iElem)).GT.lastPhoton)) THEN
+ RadTransPhotPerCellLoc(iELem) = lastPhoton - firstPhoton + 1
+ ELSE IF ((photonCount+RadTransPhotPerCell(iElem)).GT.lastPhoton) THEN
+ RadTransPhotPerCellLoc(iELem) = lastPhoton - photonCount
+ ELSE IF ((photonCount+RadTransPhotPerCell(iElem)).GT.firstPhoton) THEN
+ RadTransPhotPerCellLoc(iELem) = photonCount+RadTransPhotPerCell(iElem) - firstPhoton + 1
+ ELSE
+ RadTransPhotPerCellLoc(iELem) = 0
+ END IF
+ photonCount = photonCount + RadTransPhotPerCell(iELem)
+ END DO
+#else
+ RadTransPhotPerCellLoc(:) = RadTransPhotPerCell(:)
+ nPhotons = SUM(RadTransPhotPerCell(:))
+#endif /*USE_MPI*/
+ RadTrans%GlobalPhotonNum = nPhotons
+ ELSE
+#if USE_MPI
+ IF(myComputeNodeRank.EQ.0) RadTransPhotPerCell(:) = RadTrans%NumPhotonsPerCell
+ CALL BARRIER_AND_SYNC(RadTransPhotPerCell_Shared_Win ,MPI_COMM_SHARED)
+#else
+ RadTransPhotPerCell(:) = RadTrans%NumPhotonsPerCell
+#endif
+ RadTransPhotPerCellLoc(:) = 0.0
+ RadTransPhotPerCellLoc(firstElem:lastElem) = RadTransPhotPerCell(firstElem:lastElem)
+ firstPhoton = 1
+ END IF
+
+ SWRITE(UNIT_stdOut,'(A)') ' Start Radiative Transport Calculation ...'
+ globPhotNum = 0
+ photonCount = 0
+ photVisCount = 0
+ LocPhotNum = SUM(RadTransPhotPerCellLoc(:))
+ PhotDisp = INT(LocPhotNum/100)
+ PhotDisp = MAX(1,PhotDisp)
+ DO iElem = 1, nComputeNodeElems
+ IF (RadTransPhotPerCellLoc(iElem).GT.0) THEN
+ IF (RadiationDirectionModel.EQ.2) RandRot = RandomRotMatrix()
+ locPhotLoop: DO iPhot = 1, RadTransPhotPerCellLoc(iElem)
+ IF(MPIroot.AND.(MOD(photVisCount,PhotDisp).EQ.0)) CALL PrintStatusLineRadiation(REAL(photVisCount),REAL(1),REAL(LocPhotNum),.TRUE.)
+ photVisCount = photVisCount + 1
+ PhotonProps%PhotonPos(1:3) = SetPhotonPos(iElem, globPhotNum)
+ PhotonProps%PhotonLastPos(1:3) = PhotonProps%PhotonPos(1:3)
+ PhotonProps%ElemID = GetGlobalElemID(iElem)
+ IF ((photonCount.LT.firstPhoton)) THEN
+ iPhotLoc = firstPhoton - photonCount + iPhot - 1
+ ELSE
+ iPhotLoc = iPhot
+ END IF
+ PhotonProps%PhotonDirection(1:3) = SetPhotonStartDirection(iElem, iPhotLoc, RandRot)
+ IF ((RadObservationPointMethod.EQ.2).AND.RadObservationPoint%CalcFullSpectra) THEN
+ PhotonProps%WaveLength = iPhotLoc
+ ELSE
+ IF (RadiationPhotonWaveLengthModel.EQ.1) THEN
+ PhotonProps%WaveLength = SetParticleWavelengthAR(iElem)
+ ELSE
+ PhotonProps%WaveLength = SetParticleWavelengthBiSec(iElem)
+ END IF
+ END IF
+ PhotonProps%PhotonEnergy = SetPhotonEnergy(iElem,PhotonProps%PhotonPos(1:3), PhotonProps%WaveLength)
+ IF (PhotonProps%PhotonEnergy.EQ.0.0) CYCLE locPhotLoop
+ IF(Symmetry%Axisymmetric) THEN
+ CALL Photon2DSymTracking()
+ ELSE
+ CALL PhotonTriaTracking()
+ END IF
+ END DO locPhotLoop
+ END IF
+ photonCount = photonCount + RadTransPhotPerCell(iELem)
+ END DO
+
+END SUBROUTINE RadTrans_main
+
+FUNCTION SetPhotonEnergy(iElem, Point, iWave)
+!===================================================================================================================================
+!> assigns each photon an energy
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_RadiationTrans_Vars ,ONLY : RadEmiAdaptPhotonNum, Radiation_Emission_Spec_Total, RadTrans, RadTransPhotPerCell
+USE MOD_RadiationTrans_Vars ,ONLY : RadObservationPoint, RadObservationPointMethod,RadTransObsVolumeFrac,RadObservationPOI
+USE MOD_Particle_Mesh_Vars ,ONLY : ElemVolume_Shared
+USE MOD_Radiation_Vars ,ONLY : RadiationParameter,Radiation_Emission_spec
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iElem
+REAL, INTENT(IN) :: Point(3)
+INTEGER, INTENT(IN), OPTIONAL :: iWave
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetPhotonEnergy
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!REAL :: ProjectedDist(3), Dist(3), ClosestPoint(3), FarthestPoint(3), Vec1(3), Vec2(3), fullangle
+REAL :: cosTheta, Dist(3), DistNorm(3), spaceangle, absdistnorm
+!===================================================================================================================================
+IF (RadEmiAdaptPhotonNum) THEN
+ SetPhotonEnergy = Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem) / RadTransPhotPerCell(iElem)
+ELSE
+ SetPhotonEnergy = Radiation_Emission_Spec_Total(iElem)*ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem) / (RadTrans%NumPhotonsPerCell)
+END IF
+
+IF (RadObservationPointMethod.EQ.1) THEN
+ Dist(1:3) = Point(1:3) - RadObservationPoint%MidPoint(1:3)
+ absdistnorm = VECNORM(Dist(1:3))
+ DistNorm(1:3) = Dist(1:3)/absdistnorm
+ cosTheta = DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3),DistNorm(1:3))/(VECNORM(RadObservationPoint%ViewDirection(1:3))*VECNORM(DistNorm(1:3)))
+ spaceangle = cosTheta * RadObservationPoint%Area/(absdistnorm*absdistnorm)
+! ProjectedDist(1:3) = Dist(1:3) - DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3),Dist(1:3))*RadObservationPoint%ViewDirection(1:3)
+! ClosestPoint(1:3) = RadObservationPoint%MidPoint(1:3) + RadObservationPoint%Diameter/2.*ProjectedDist(1:3)/VECNORM(ProjectedDist(1:3))
+! FarthestPoint(1:3) = RadObservationPoint%MidPoint(1:3) - RadObservationPoint%Diameter/2.*ProjectedDist(1:3)/VECNORM(ProjectedDist(1:3))
+! Vec1(1:3) = ClosestPoint(1:3) - Point(1:3)
+! Vec2(1:3) = FarthestPoint(1:3) - Point(1:3)
+! fullangle = ACOS(DOT_PRODUCT(Vec1,Vec2)/(VECNORM(Vec1)*VECNORM(Vec2)))
+ SetPhotonEnergy = SetPhotonEnergy * spaceangle/(4.*Pi)
+ELSEIF (RadObservationPointMethod.EQ.2) THEN
+ IF (RadObservationPoint%CalcFullSpectra) THEN
+ SetPhotonEnergy = Radiation_Emission_Spec(iWave, iElem) * RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor &
+ *ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem)
+ ELSE
+ SetPhotonEnergy = SetPhotonEnergy /(4.*Pi)
+ END IF
+ SetPhotonEnergy = SetPhotonEnergy / (ElemVolume_Shared(iElem)*RadTransObsVolumeFrac(iElem))*RadObservationPOI(7, iElem)
+END IF
+
+END FUNCTION SetPhotonEnergy
+
+FUNCTION SetPhotonPos(iElem, globPhotNum)
+!===================================================================================================================================
+!> assigns each photon a postion
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_RadiationTrans_Vars, ONLY : RadiationPhotonPosModel, RadObservationPointMethod, RadObservationPOI
+USE MOD_Particle_Mesh_Tools, ONLY : ParticleInsideQuad3D
+USE MOD_RadiationTrans_Init, ONLY : HALTON
+!USE MOD_PARTICLE_Vars, ONLY : Symmetry2DAxisymmetric
+USE MOD_Particle_Mesh_Vars, ONLY : BoundsOfElem_Shared
+USE MOD_Mesh_Tools, ONLY: GetGlobalElemID
+USE MOD_Photon_TrackingTools, ONLY: PointInObsCone
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iElem
+INTEGER, INTENT(INOUT) :: globPhotNum
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetPhotonPos(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+LOGICAL :: InsideFlag
+INTEGER :: globElemID
+!===================================================================================================================================
+ InsideFlag=.FALSE.
+ globElemID = GetGlobalElemID(iElem)
+ ASSOCIATE( Bounds => BoundsOfElem_Shared(1:2,1:3,globElemID) )
+ IF (RadObservationPointMethod.EQ.2) THEN
+ SetPhotonPos(1:3) = RadObservationPOI(1:3, iElem) + 0.5*(RadObservationPOI(4:6,iElem)-RadObservationPOI(1:3,iElem))
+ CALL ParticleInsideQuad3D(SetPhotonPos,globElemID,InsideFlag)
+ IF (.NOT.InsideFlag) THEN
+ IPWRITE(*,*) 'Photonpos not in Element! Pos:',SetPhotonPos
+ CALL abort(&
+ __STAMP__&
+ ,' Photon not in Element', iElem)
+ END IF
+ ELSE
+ DO WHILE(.NOT.InsideFlag)
+ SELECT CASE(RadiationPhotonPosModel)
+ CASE(1)
+ CALL RANDOM_NUMBER(SetPhotonPos)
+ CASE(2)
+ globPhotNum = globPhotNum + 1
+ CALL HALTON(globPhotNum,3,SetPhotonPos)
+ CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation-PhotonPosModel not implemented!. (unknown case)')
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+ SetPhotonPos = Bounds(1,:) + SetPhotonPos*(Bounds(2,:)-Bounds(1,:))
+ ! IF (Symmetry2DAxisymmetric) SetPhotonPos(3) = 0.0
+ CALL ParticleInsideQuad3D(SetPhotonPos,globElemID,InsideFlag)
+ IF (RadObservationPointMethod.EQ.1) THEN
+ IF (InsideFlag) THEN
+ InsideFlag = PointInObsCone(SetPhotonPos)
+ END IF
+ END IF
+ END DO
+ END IF
+ END ASSOCIATE
+END FUNCTION SetPhotonPos
+
+FUNCTION SetPhotonStartDirection(iElem, iPhot, RandRot)
+!===================================================================================================================================
+! assigns each photon a velocity vector (direction velocity is speed of light)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: Pi
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationDirectionModel, RadTransPhotPerCell, RadObservationPointMethod,RadObservationPoint
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iElem, iPhot
+REAL, INTENT(IN) :: RandRot(3,3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetPhotonStartDirection(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: iRan,RandomDirection(2), X_new, Y_new, start, incr, SpiralPos, SpiralStep
+INTEGER :: RadMod
+!===================================================================================================================================
+ SELECT CASE(RadiationDirectionModel)
+ CASE(1)
+ RadMod = RadiationDirectionModel
+ CASE(2)
+ IF (RadTransPhotPerCell(iElem).EQ.1) THEN
+ RadMod = 1
+ ELSE
+ RadMod = RadiationDirectionModel
+ END IF
+ CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation-DirectionModel not implemented!. (unknown case)')
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+ IF (RadObservationPointMethod.EQ.1) THEN
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(1) = RadObservationPoint%Diameter/2. * SQRT(iRan)
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(2) = iRan * 2. * Pi
+ SetPhotonStartDirection(1) = 0.0
+ SetPhotonStartDirection(2) = RandomDirection(1) * COS(RandomDirection(2))
+ SetPhotonStartDirection(3) = RandomDirection(1) * SIN(RandomDirection(2))
+ SetPhotonStartDirection(1:3) = MATMUL(RadObservationPoint%OrthoNormBasis, SetPhotonStartDirection(1:3))
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) + RadObservationPoint%MidPoint(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) - PhotonProps%PhotonPos(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) / VECNORM(SetPhotonStartDirection(1:3))
+ ELSEIF (RadObservationPointMethod.EQ.2) THEN
+! SetPhotonStartDirection(1:3) = RadObservationPoint%MidPoint(1:3)
+! SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) - RadObservationPoint%ViewDirection(1:3)
+ SetPhotonStartDirection(1:3) = -RadObservationPoint%ViewDirection(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) / VECNORM(SetPhotonStartDirection(1:3))
+ ELSE
+ SELECT CASE(RadMod)
+ CASE(1)
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(1) = 2.*iRan - 1.
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(2) = 2.*Pi*iRan - Pi
+ SetPhotonStartDirection(1) = SIN(RandomDirection(2))*SQRT(1.-RandomDirection(1)**2.)
+ SetPhotonStartDirection(2) = COS(RandomDirection(2))*SQRT(1.-RandomDirection(1)**2.)
+ SetPhotonStartDirection(3) = RandomDirection(1)
+ CASE(2)
+ SpiralStep = 0.1+1.2*REAL(RadTransPhotPerCell(iElem))
+ start = (-1. + 1./(REAL(RadTransPhotPerCell(iElem))-1.))
+ incr = (2.-2./(REAL(RadTransPhotPerCell(iElem))-1.))/(REAL(RadTransPhotPerCell(iElem))-1.)
+ SpiralPos = start + (REAL(iPhot)-1.) *incr
+ X_new = SpiralPos * SpiralStep
+ Y_new = Pi/2.*SIGN(1.,SpiralPos)*(1.-SQRT(1.-ABS(SpiralPos)))
+ SetPhotonStartDirection(1) = COS(X_new)*COS(Y_new)
+ SetPhotonStartDirection(2) = SIN(X_new)*COS(Y_new)
+ SetPhotonStartDirection(3) = SIN(Y_new)
+ SetPhotonStartDirection(1:3) = MATMUL(RandRot, SetPhotonStartDirection(1:3))
+ CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation-DirectionModel not implemented!. (unknown case)')
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+ END IF
+
+END FUNCTION SetPhotonStartDirection
+
+FUNCTION RandomRotMatrix()
+!===================================================================================================================================
+! Rotation matrix with random rotational angle to avoid preferred directions
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals_Vars, ONLY : Pi
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+ REAL :: RandomRotMatrix(3,3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+ REAL :: alpha(3) , A(3,3)
+!===================================================================================================================================
+ CALL RANDOM_NUMBER(alpha)
+ alpha(1:3) = 2.*alpha(1:3)*Pi
+ RandomRotMatrix = RESHAPE((/1.,0.,0.,0.,COS(alpha(1)),SIN(alpha(1)),0.,-SIN(alpha(1)), COS(alpha(1))/),(/3,3/))
+ A = RESHAPE((/COS(alpha(2)),0.,-SIN(alpha(2)),0.,1.,0.,SIN(alpha(2)),0.0, COS(alpha(2))/),(/3,3/))
+ RandomRotMatrix = MATMUL(A,RandomRotMatrix)
+ A = RESHAPE((/COS(alpha(3)),SIN(alpha(3)),0.,-SIN(alpha(3)),COS(alpha(3)),0.,0.,0.0, 1./),(/3,3/))
+ RandomRotMatrix = MATMUL(A, RandomRotMatrix)
+
+END FUNCTION RandomRotMatrix
+
+
+FUNCTION SetParticleWavelengthAR(iElem)
+!===================================================================================================================================
+! assigns wavelength to each photon (acceptance rejection)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_RadiationTrans_Vars, ONLY : Radiation_Emission_Spec_Max
+USE MOD_Radiation_Vars, ONLY: Radiation_Emission_spec, RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+INTEGER :: SetParticleWavelengthAR
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iWaveLength
+REAL :: iRan, iRadPower
+!===================================================================================================================================
+
+CALL RANDOM_NUMBER(iRan)
+iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse*iRan) + 1
+IF ((RadiationParameter%WaveLenReductionFactor.GT.1).AND.(iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse)) THEN
+ IF (MOD(RadiationParameter%WaveLenDiscr,RadiationParameter%WaveLenDiscrCoarse).NE.0) THEN
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iElem) * RadiationParameter%WaveLenIncr &
+ * (1.+RadiationParameter%WaveLenReductionFactor)
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+END IF
+CALL RANDOM_NUMBER(iRan)
+DO WHILE (iRan.GT.(iRadPower/Radiation_Emission_Spec_Max(iElem)))
+ CALL RANDOM_NUMBER(iRan)
+ iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse*iRan) + 1
+ IF ((RadiationParameter%WaveLenReductionFactor.GT.1).AND.(iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse)) THEN
+ IF (MOD(RadiationParameter%WaveLenDiscr,RadiationParameter%WaveLenDiscrCoarse).NE.0) THEN
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iElem) * RadiationParameter%WaveLenIncr &
+ * (1.+RadiationParameter%WaveLenReductionFactor)
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ CALL RANDOM_NUMBER(iRan)
+END DO
+SetParticleWavelengthAR = iWaveLength
+
+END FUNCTION SetParticleWavelengthAR
+
+
+FUNCTION SetParticleWavelengthBiSec(iElem)
+!===================================================================================================================================
+! assigns wavelength to each photon (bisection)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_RadiationTrans_Vars, ONLY : Radiation_Emission_Spec_Total
+USE MOD_Radiation_Vars, ONLY: Radiation_Emission_spec, RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+INTEGER :: SetParticleWavelengthBiSec
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iWaveLength, iWave, iWaveOld, iWaveMin, iWaveMax
+REAL :: iRan, iRadPower, iRadPower2
+!===================================================================================================================================
+
+ CALL RANDOM_NUMBER(iRan)
+ iWaveOld = 1
+ iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse/2)
+ iWaveMin = 1
+ iWaveMax = RadiationParameter%WaveLenDiscrCoarse
+ IF (iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse) THEN
+ iRadPower = Radiation_Emission_Spec_Total(iElem)
+ ELSE
+ iRadPower = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower = iRadPower + 4.*Pi*Radiation_Emission_Spec(iWave,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ END IF
+
+ DO
+ IF (iRan.GT.(iRadPower/Radiation_Emission_Spec_Total(iElem)))THEN
+ iWaveMin = iWaveLength
+ ELSE
+ iWaveMax = iWaveLength
+ END IF
+ iWaveOld = iWaveLength
+ iWaveLength = INT((iWaveMax+iWaveMin)/2)
+ IF (iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse) THEN
+ iRadPower = Radiation_Emission_Spec_Total(iElem)
+ ELSE
+ iRadPower = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower = iRadPower + 4.*Pi*Radiation_Emission_Spec(iWave,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ END IF
+ IF (ABS(iWaveOld-iWaveLength).LE.1) EXIT
+
+ END DO
+
+ iWaveOld = iWaveLength
+ IF (iRan.LT.(iRadPower/Radiation_Emission_Spec_Total(iElem))) THEN
+ IF (iWaveLength.EQ.1) THEN
+ iWaveLength = iWaveLength
+ ELSE
+ iWaveLength = iWaveLength - 1
+ iRadPower2 = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower2 = iRadPower2 + 4.*Pi*Radiation_Emission_Spec(iWave,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ IF (ABS(iRan-(iRadPower/Radiation_Emission_Spec_Total(iElem))).LT.ABS(iRan-(iRadPower2/Radiation_Emission_Spec_Total(iElem)))) THEN
+ iWaveLength = iWaveOld
+ END IF
+ END IF
+ ELSE
+ iWaveLength = iWaveLength + 1
+ iRadPower2 = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower2 = iRadPower2 + 4.*Pi*Radiation_Emission_Spec(iWave,iElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ IF (ABS(iRan-(iRadPower/Radiation_Emission_Spec_Total(iElem))).LT.ABS(iRan-(iRadPower2/Radiation_Emission_Spec_Total(iElem)))) THEN
+ iWaveLength = iWaveOld
+ END IF
+ END IF
+ SetParticleWavelengthBiSec = iWaveLength
+
+END FUNCTION SetParticleWavelengthBiSec
+
+END MODULE MOD_RadTransport
diff --git a/src/radiation/radiative_transfer/radtrans_output.f90 b/src/radiation/radiative_transfer/radtrans_output.f90
new file mode 100644
index 000000000..79608fa10
--- /dev/null
+++ b/src/radiation/radiative_transfer/radtrans_output.f90
@@ -0,0 +1,478 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RadTrans_Output
+!===================================================================================================================================
+! Module for output of radiative transfer solver
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE WriteRadiationToHDF5
+ MODULE PROCEDURE WriteRadiationToHDF5
+END INTERFACE
+
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: WriteRadiationToHDF5
+!===================================================================================================================================
+
+CONTAINS
+
+SUBROUTINE WriteRadiationToHDF5()
+!===================================================================================================================================
+! Writes Radiation values to HDF5
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_io_HDF5
+USE MOD_HDF5_output ,ONLY: WriteArrayToHDF5,WriteAttributeToHDF5,WriteHDF5Header
+USE MOD_Mesh_Vars ,ONLY: offsetElem,nGlobalElems, MeshFile
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPointMethod, RadObservation_Emission, RadObservationPoint
+USE MOD_RadiationTrans_Vars ,ONLY: Radiation_Emission_Spec_Total, RadTransPhotPerCell, RadObservation_EmissionPart
+USE MOD_RadiationTrans_Vars ,ONLY: ObservationDoConvolution, RadObservation_Emission_Conv
+USE MOD_Globals_Vars ,ONLY: ProjectName
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared
+USE MOD_Radiation_Vars ,ONLY: RadiationSwitches, Radiation_ElemEnergy_Species, RadiationParameter, Radiation_Absorption_Spec
+USE MOD_Particle_Vars ,ONLY: nSpecies
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_Photon_TrackingOutput,ONLY:WritePhotonSurfSampleToHDF5
+#if USE_MPI
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergySpec_Shared, RadiationElemAbsEnergy_Shared
+#else
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergySpec, RadiationElemAbsEnergy
+#endif /*USE_MPI*/
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+CHARACTER(LEN=255) :: FileString,Statedummy
+CHARACTER(LEN=255) :: SpecID
+INTEGER :: nVal, iElem, nVar, iSpec, nVarCount, nVarSpec, CNElemID, iWave
+REAL, ALLOCATABLE :: TempOutput(:,:)
+CHARACTER(LEN=255), ALLOCATABLE :: StrVarNames(:)
+REAL :: tmpPartNum, tmpEmission(2)
+INTEGER :: iWavetmp(2)
+!===================================================================================================================================
+SWRITE(UNIT_stdOut,'(a)',ADVANCE='NO') ' WRITE Radiation TO HDF5 FILE...'
+FileString=TRIM(ProjectName)//'_RadiationState.h5'
+Statedummy = 'RadiationState'
+IF (RadiationSwitches%RadType.EQ.1) THEN
+ nVarSpec=2 ! _Emission, _Absorption
+ nVar=nVarSpec*nSpecies+5 ! nVarSpec + Total_Emission, Total_Absorption, Total_Heatflux, and Total_PhotonNum
+ELSE
+ nVar=4
+END IF
+
+ALLOCATE(StrVarNames(nVar))
+ALLOCATE(TempOutput(nVar, PP_nElems))
+
+IF (RadiationSwitches%RadType.EQ.1) THEN
+ nVarCount=0
+ DO iSpec=1, nSpecies
+ WRITE(SpecID,'(I3.3)') iSpec
+ StrVarNames(nVarCount+1)='Spec'//TRIM(SpecID)//'_Emission'
+ StrVarNames(nVarCount+2)='Spec'//TRIM(SpecID)//'_Absorption'
+ nVarCount=nVarCount+nVarSpec
+
+ END DO
+ StrVarNames(nVarCount+1)='Total_Emission'
+ StrVarNames(nVarCount+2)='Total_Absorption'
+ StrVarNames(nVarCount+3)='Total_Heatflux'
+ StrVarNames(nVarCount+4)='Total_PhotonNum'
+ StrVarNames(nVarCount+5)='Mean_OpticalDepth'
+ELSE
+ StrVarNames(1)='Total_Emission'
+ StrVarNames(2)='Total_Absorption'
+ StrVarNames(3)='Total_Heatflux'
+ StrVarNames(4)='Total_PhotonNum'
+END IF
+
+IF(MPIRoot) THEN
+ CALL OpenDataFile(FileString,create=.TRUE.,single=.TRUE.,readOnly=.FALSE.)
+ CALL WriteHDF5Header(Statedummy,File_ID)
+ CALL WriteAttributeToHDF5(File_ID,'VarNamesAdd',nVar,StrArray=StrVarNames)
+ CALL WriteAttributeToHDF5(File_ID,'MeshFile',1,StrScalar=(/TRIM(MeshFile)/))
+ CALL CloseDataFile()
+END IF
+#if USE_MPI
+CALL MPI_ExchangeRadiationInfo()
+#endif /*USE_MPI*/
+
+CALL OpenDataFile(FileString,create=.false.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
+
+#if USE_MPI
+ASSOCIATE( RadiationElemAbsEnergySpec => RadiationElemAbsEnergySpec_Shared,&
+ RadiationElemAbsEnergy => RadiationElemAbsEnergy_Shared )
+#endif /*USE_MPI*/
+
+IF (RadiationSwitches%RadType.EQ.1) THEN
+ DO iElem=1,PP_nElems
+ CNElemID = GetCNElemID(iElem+offSetElem)
+ nVarCount=0
+ DO iSpec=1, nSpecies
+ TempOutput(nVarCount+1, iElem) = Radiation_ElemEnergy_Species(iSpec,CNElemID,1)
+ TempOutput(nVarCount+2, iElem) = RadiationElemAbsEnergySpec(iSpec, iElem+offSetElem)/ ElemVolume_Shared(CNElemID)
+ nVarCount=nVarCount+nVarSpec
+ END DO
+ TempOutput((nVarSpec*nSpecies+1), iElem) = Radiation_Emission_Spec_Total(CNElemID)
+ TempOutput((nVarSpec*nSpecies+2), iElem) = SUM(RadiationElemAbsEnergySpec(:, iElem+offSetElem))/ ElemVolume_Shared(CNElemID)
+ TempOutput(nVarSpec*nSpecies+3, iElem) = SUM(Radiation_ElemEnergy_Species(:,CNElemID,1))- SUM(RadiationElemAbsEnergySpec(:, iElem+offSetElem))/ ElemVolume_Shared(CNElemID)
+ TempOutput(nVarSpec*nSpecies+4, iElem) = RadTransPhotPerCell(CNElemID)
+ IF (RadiationElemAbsEnergy(2,iElem+offSetElem).GT.0) THEN
+ TempOutput(nVarSpec*nSpecies+5, iElem) = RadiationElemAbsEnergy(1,iElem+offSetElem)/RadiationElemAbsEnergy(2,iElem+offSetElem)
+ ELSE
+ TempOutput(nVarSpec*nSpecies+5, iElem) = 0.0
+ END IF
+ END DO
+ELSE IF (RadiationSwitches%RadType.EQ.2) THEN
+ DO iElem=1, PP_nElems
+ CNElemID = GetCNElemID(iElem+offSetElem)
+ TempOutput(1, iElem) = Radiation_Emission_Spec_Total(CNElemID)
+ TempOutput(2, iElem) = RadiationElemAbsEnergySpec(1,iElem+offSetElem)/ElemVolume_Shared(CNElemID)
+ TempOutput(3, iElem) = Radiation_Emission_Spec_Total(CNElemID)- RadiationElemAbsEnergySpec(1,iElem+offSetElem)/ElemVolume_Shared(CNElemID)
+ TempOutput(4, iElem) = RadTransPhotPerCell(CNElemID)
+ END DO
+ELSE IF (RadiationSwitches%RadType.EQ.3) THEN
+ DO iElem=1, PP_nElems
+ CNElemID = GetCNElemID(iElem+offSetElem)
+ TempOutput(1, iElem) = Radiation_Emission_Spec_Total(CNElemID)
+ TempOutput(2, iElem) = 0.0
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ TempOutput(2, iElem) = TempOutput(2, iElem) + Radiation_Absorption_Spec(iWave, iElem+offSetElem) * RadiationParameter%WaveLenIncr
+ END DO
+ TempOutput(3, iElem) = Radiation_Emission_Spec_Total(CNElemID) - TempOutput(2, iElem)
+ TempOutput(4, iElem) = RadTransPhotPerCell(CNElemID)
+ END DO
+ELSE IF (RadiationSwitches%RadType.EQ.4) THEN
+ DO iElem=1, PP_nElems
+ CNElemID = GetCNElemID(iElem+offSetElem)
+ TempOutput(1, iElem) = Radiation_Emission_Spec_Total(CNElemID)
+ TempOutput(2, iElem) = 0.0
+ DO iWave = 1, RadiationParameter%WaveLenDiscr
+ TempOutput(2, iElem) = TempOutput(2, iElem) + Radiation_Absorption_Spec(iWave, iElem+offSetElem) * RadiationParameter%WaveLenIncr
+ END DO
+ TempOutput(3, iElem) = Radiation_Emission_Spec_Total(CNElemID) - TempOutput(2, iElem)
+ TempOutput(4, iElem) = RadTransPhotPerCell(CNElemID)
+ END DO
+ELSE
+ CALL abort(__STAMP__,' ERROR: Radiation type is not implemented! (unknown case)')
+END IF
+
+#if USE_MPI
+END ASSOCIATE
+#endif /*USE_MPI*/
+
+nVal=nGlobalElems ! For the MPI case this must be replaced by the global number of elements (sum over all procs)
+ASSOCIATE (&
+ nVar => INT(nVar,IK) ,&
+ nGlobalElems => INT(nGlobalElems,IK) ,&
+ offsetElem => INT(offsetElem,IK) ,&
+ PP_nElems => INT(PP_nElems,IK))
+ CALL WriteArrayToHDF5(DataSetName='ElemData', rank=2,&
+ nValGlobal=(/nVar, nGlobalElems/),&
+ nVal= (/nVar, PP_nElems/),&
+ offset= (/0_IK, offsetElem /),&
+ collective=.TRUE., RealArray=TempOutput(:,:))
+END ASSOCIATE
+CALL CloseDataFile()
+SWRITE(*,*) 'DONE'
+
+CALL WritePhotonSurfSampleToHDF5()
+
+IF (RadObservationPointMethod.GT.0) THEN
+#if USE_MPI
+ IF (myRank.EQ.0) THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,RadObservation_Emission,RadiationParameter%WaveLenDiscrCoarse,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ ELSE
+ CALL MPI_REDUCE(RadObservation_Emission,0 ,RadiationParameter%WaveLenDiscrCoarse,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ ENDIF
+ IF (myRank.EQ.0) THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,RadObservation_EmissionPart,RadiationParameter%WaveLenDiscrCoarse,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ ELSE
+ CALL MPI_REDUCE(RadObservation_EmissionPart,0 ,RadiationParameter%WaveLenDiscrCoarse,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS,IERROR)
+ ENDIF
+#endif /*USE_MPI*/
+ IF (myRank.EQ.0) THEN
+ IF(ObservationDoConvolution) THEN
+
+ CALL SpectralConvolution(RadObservation_Emission,RadObservation_Emission_Conv)
+ OPEN(unit=20,file='Radiation_ObservationPoint.csv', status='replace',action='write')
+ WRITE(20,*) 'x,y1,y2,y3'
+ IF (RadObservationPointMethod.EQ.1) THEN
+ IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLenCoarse(iWave)*1.E10,',',RadObservation_Emission(iWave)/RadObservationPoint%Area,',',RadObservation_EmissionPart(iWave),',',RadObservation_Emission_Conv(iWave)/RadObservationPoint%Area
+ END DO
+ ELSE
+ IF (RadiationParameter%WaveLenReductionFactorOutput.GT.1) THEN
+ tmpPartNum=0.; tmpEmission=0.; iWavetmp(1)=0; iWavetmp(2)=1
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ IF (MOD(iWave,RadiationParameter%WaveLenReductionFactorOutput).EQ.0) THEN
+ iWavetmp(1) = iWavetmp(1) + 1
+ tmpPartNum = tmpPartNum + RadObservation_EmissionPart(iWave)
+ tmpEmission(1) = tmpEmission(1) + RadObservation_Emission(iWave)
+ tmpEmission(2) = tmpEmission(2) + RadObservation_Emission_Conv(iWave)
+ WRITE(20,*) (RadiationParameter%WaveLen(iWavetmp(2))+RadiationParameter%WaveLen(iWavetmp(2)+iWavetmp(1)-1))/2.*1.E10,',',tmpEmission(1)/RadObservationPoint%Area,',',tmpPartNum,',',tmpEmission(2)/RadObservationPoint%Area
+ tmpPartNum = 0.; tmpEmission= 0.
+ iWavetmp(1)=0; iWavetmp(2)=iWave
+ ELSE
+ iWavetmp(1) = iWavetmp(1) + 1
+ tmpPartNum = tmpPartNum + RadObservation_EmissionPart(iWave)
+ tmpEmission(1) = tmpEmission(1) + RadObservation_Emission(iWave)
+ tmpEmission(2) = tmpEmission(2) + RadObservation_Emission_Conv(iWave)
+ END IF
+ END DO
+ ELSE
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLen(iWave)*1.E10,',',RadObservation_Emission(iWave)/RadObservationPoint%Area,',',RadObservation_EmissionPart(iWave),',',RadObservation_Emission_Conv(iWave)/RadObservationPoint%Area
+ END DO
+ END IF
+ END IF
+ ELSEIF (RadObservationPointMethod.EQ.2) THEN
+ IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLenCoarse(iWave)*1.E10,',',RadObservation_Emission(iWave),',',RadObservation_EmissionPart(iWave),',',RadObservation_Emission_Conv(iWave)
+ END DO
+ ELSE
+ IF (RadiationParameter%WaveLenReductionFactorOutput.GT.1) THEN
+ tmpPartNum=0.; tmpEmission=0.; iWavetmp(1)=0; iWavetmp(2)=1
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ IF (MOD(iWave,RadiationParameter%WaveLenReductionFactorOutput).EQ.0) THEN
+ iWavetmp(1) = iWavetmp(1) + 1
+ tmpPartNum = tmpPartNum + RadObservation_EmissionPart(iWave)
+ tmpEmission(1) = tmpEmission(1) + RadObservation_Emission(iWave)
+ tmpEmission(2) = tmpEmission(2) + RadObservation_Emission_Conv(iWave)
+ WRITE(20,*) (RadiationParameter%WaveLen(iWavetmp(2))+RadiationParameter%WaveLen(iWavetmp(2)+iWavetmp(1)-1))/2.*1.E10,',',tmpEmission(1),',',tmpPartNum,',',tmpEmission(2)
+ tmpPartNum = 0.; tmpEmission= 0.
+ iWavetmp(1)=0; iWavetmp(2)=iWave
+ ELSE
+ iWavetmp(1) = iWavetmp(1) + 1
+ tmpPartNum = tmpPartNum + RadObservation_EmissionPart(iWave)
+ tmpEmission(1) = tmpEmission(1) + RadObservation_Emission(iWave)
+ tmpEmission(2) = tmpEmission(2) + RadObservation_Emission_Conv(iWave)
+ END IF
+ END DO
+ ELSE
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLen(iWave)*1.E10,',',RadObservation_Emission(iWave),',',RadObservation_EmissionPart(iWave),',',RadObservation_Emission_Conv(iWave)
+ END DO
+ END IF
+ END IF
+ END IF
+ CLOSE(unit=20)
+ ELSE
+ OPEN(unit=20,file='Radiation_ObservationPoint.csv', status='replace',action='write')
+ WRITE(20,*) 'x,y1,y2'
+ IF (RadObservationPointMethod.EQ.1) THEN
+ IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLenCoarse(iWave)*1.E10,',',RadObservation_Emission(iWave)/RadObservationPoint%Area,',',RadObservation_EmissionPart(iWave)
+ END DO
+ ELSE
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLen(iWave)*1.E10,',',RadObservation_Emission(iWave)/RadObservationPoint%Area,',',RadObservation_EmissionPart(iWave)
+ END DO
+ END IF
+ ELSEIF (RadObservationPointMethod.EQ.2) THEN
+ IF (RadiationParameter%WaveLenReductionFactor.NE.1) THEN
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLenCoarse(iWave)*1.E10,',',RadObservation_Emission(iWave),',',RadObservation_EmissionPart(iWave)
+ END DO
+ ELSE
+ DO iWave=1, RadiationParameter%WaveLenDiscrCoarse
+ WRITE(20,*) RadiationParameter%WaveLen(iWave)*1.E10,',',RadObservation_Emission(iWave),',',RadObservation_EmissionPart(iWave)
+ END DO
+ END IF
+ END IF
+ CLOSE(unit=20)
+ END IF
+
+ END IF
+END IF
+
+END SUBROUTINE WriteRadiationToHDF5
+
+
+#if USE_MPI
+SUBROUTINE MPI_ExchangeRadiationInfo()
+!===================================================================================================================================
+! MPI routine for output of radiative transfer solver
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergy, RadiationElemAbsEnergy_Shared, RadiationElemAbsEnergy_Shared_Win
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergySpec, RadiationElemAbsEnergySpec_Shared, RadiationElemAbsEnergySpec_Shared_Win
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_Particle_Vars ,ONLY: nSpecies
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+INTEGER :: MessageSize
+!===================================================================================================================================
+! collect the information from the proc-local shadow arrays in the compute-node shared array
+MessageSize = 2*nGlobalElems
+
+IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(RadiationElemAbsEnergy,RadiationElemAbsEnergy_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR)
+ELSE
+ CALL MPI_REDUCE(RadiationElemAbsEnergy,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR)
+ENDIF
+CALL BARRIER_AND_SYNC(RadiationElemAbsEnergy_Shared_Win ,MPI_COMM_SHARED)
+
+IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RadiationElemAbsEnergy_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_LEADERS_SHARED,iError)
+ END IF
+
+ CALL BARRIER_AND_SYNC(RadiationElemAbsEnergy_Shared_Win ,MPI_COMM_SHARED)
+END IF
+
+MessageSize = nSpecies*nGlobalElems
+
+IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(RadiationElemAbsEnergySpec,RadiationElemAbsEnergySpec_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR)
+ELSE
+ CALL MPI_REDUCE(RadiationElemAbsEnergySpec,0 ,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,0,MPI_COMM_SHARED,IERROR)
+ENDIF
+CALL BARRIER_AND_SYNC(RadiationElemAbsEnergySpec_Shared_Win ,MPI_COMM_SHARED)
+
+IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RadiationElemAbsEnergySpec_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_LEADERS_SHARED,iError)
+ END IF
+
+ CALL BARRIER_AND_SYNC(RadiationElemAbsEnergySpec_Shared_Win ,MPI_COMM_SHARED)
+END IF
+
+END SUBROUTINE MPI_ExchangeRadiationInfo
+#endif /*USE_MPI*/
+
+
+SUBROUTINE SpectralConvolution(RadObservation_Emission, RadObservation_Emission_Conv)
+!===================================================================================================================================
+! calculates spectral concolution with slit function/instrumental broadening profile/spectral resolution function
+!===================================================================================================================================
+! MODULES
+! USE MOD_Globals
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPoint
+USE MOD_Radiation_Vars ,ONLY: RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+REAL, INTENT(IN) :: RadObservation_Emission(:)
+REAL, INTENT(INOUT) :: RadObservation_Emission_Conv(:)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: topwidth, basewidth
+INTEGER :: iWave_min, iWave, i
+REAL :: topwidth_half, basewidth_half, slope
+REAL :: wavelength_min_base, wavelength_max_base, wavelength_min_top, wavelength_max_top
+REAL :: fractionl, fractionr, delta_base, delta_top
+!===================================================================================================================================
+topwidth = RadObservationPoint%SlitFunction(1)*1.E-10
+basewidth = RadObservationPoint%SlitFunction(2)*1.E-10
+iWave_min = 1
+
+basewidth_half = 0.5 * basewidth
+topwidth_half = 0.5 * topwidth
+slope = 1. / (basewidth_half-topwidth_half)
+RadObservation_Emission_Conv=0.0
+DO iWave=1, RadiationParameter%WaveLenDiscr
+ wavelength_min_base = RadiationParameter%WaveLen(iWave) - basewidth_half
+ wavelength_max_base = RadiationParameter%WaveLen(iWave) + basewidth_half
+ wavelength_min_top = RadiationParameter%WaveLen(iWave) - topwidth_half
+ wavelength_max_top = RadiationParameter%WaveLen(iWave) + topwidth_half
+ ! --- start index determination
+ DO WHILE(RadiationParameter%WaveLen(iWave_min+1) .LT. wavelength_min_base)
+ iWave_min = iWave_min + 1
+ END DO
+ ! --- slit function
+ DO i = iWave_min, RadiationParameter%WaveLenDiscr-1
+ IF(RadiationParameter%WaveLen(i) .LT. wavelength_min_base) THEN
+ fractionl = 0.
+ IF(RadiationParameter%WaveLen(i+1) .GT. wavelength_min_top) THEN
+ STOP 'slit function: step width is too big!'
+ END IF
+ fractionr = slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ delta_base = RadiationParameter%WaveLen(i+1) - wavelength_min_base
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_min_top) THEN
+ fractionl = slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ fractionr = slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ delta_base = RadiationParameter%WaveLenIncr
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i ) .LT. wavelength_min_top) THEN
+ fractionl = slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) + basewidth_half)
+ fractionr = 1.
+ delta_base = wavelength_min_top - RadiationParameter%WaveLen(i)
+ delta_top = RadiationParameter%WaveLen(i+1) - wavelength_min_top
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_max_top) THEN
+ fractionl = 0.
+ fractionr = 0.
+ delta_base = 0.
+ delta_top = RadiationParameter%WaveLenIncr
+ ELSEIF(RadiationParameter%WaveLen(i ) .LT. wavelength_max_top) THEN
+ fractionl = 1.
+ fractionr = - slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ delta_base = RadiationParameter%WaveLen(i+1) - wavelength_max_top
+ delta_top = wavelength_max_top - RadiationParameter%WaveLen(i)
+ ELSEIF(RadiationParameter%WaveLen(i+1) .LT. wavelength_max_base) THEN
+ fractionl = - slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ fractionr = - slope * (RadiationParameter%WaveLen(i+1) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ delta_base = RadiationParameter%WaveLenIncr
+ delta_top = 0.
+ ELSEIF(RadiationParameter%WaveLen(i) .LT. wavelength_max_base) THEN
+ fractionl = - slope * (RadiationParameter%WaveLen(i ) - RadiationParameter%WaveLen(iWave) - basewidth_half)
+ fractionr = 0.
+ delta_base = wavelength_max_base - RadiationParameter%WaveLen(i)
+ delta_top = 0.
+ ELSE
+ exit
+ END IF
+
+ RadObservation_Emission_Conv(iWave) = RadObservation_Emission_Conv(iWave) &
+ + ((fractionl+fractionr)*.5*delta_base+delta_top) &
+ * RadObservation_Emission(i+1)*1.E10
+
+ END DO
+END DO
+
+END SUBROUTINE SpectralConvolution
+
+END MODULE MOD_RadTrans_Output
diff --git a/src/radiation/radiative_transfer/radtrans_vars.f90 b/src/radiation/radiative_transfer/radtrans_vars.f90
new file mode 100644
index 000000000..d0c962a3e
--- /dev/null
+++ b/src/radiation/radiative_transfer/radtrans_vars.f90
@@ -0,0 +1,89 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RadiationTrans_Vars
+!===================================================================================================================================
+! Contains the radiative transfer variables
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+SAVE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+LOGICAL :: useParticleRadiationSolver
+INTEGER :: RadObservationPointMethod
+LOGICAL :: ObservationDoConvolution
+
+TYPE tRadObservationPoint
+ REAL :: StartPoint(3)
+ REAL :: Area
+ REAL :: AngularAperture
+ REAL :: ViewDirection(3)
+ REAL :: MidPoint(3)
+ REAL :: Diameter
+ REAL :: OrthoNormBasis(3,3)
+ LOGICAL :: CalcFullSpectra
+ REAL :: SlitFunction(2)
+ REAL :: ShockTubeDiameter
+END TYPE
+
+TYPE(tRadObservationPoint) :: RadObservationPoint
+REAL,ALLOCATABLE :: RadObservation_Emission(:)
+REAL,ALLOCATABLE :: RadObservation_Emission_Conv(:)
+INTEGER,ALLOCATABLE :: RadObservation_EmissionPart(:)
+
+TYPE tRadTrans
+ INTEGER :: NumPhotonsPerCell
+ REAL :: GlobalRadiationPower
+ REAL :: ScaledGlobalRadiationPower
+ INTEGER :: GlobalPhotonNum
+END TYPE
+
+TYPE (tRadTrans) :: RadTrans
+
+INTEGER :: RadiationAbsorptionModel
+INTEGER :: RadiationDirectionModel
+INTEGER :: RadiationPhotonPosModel
+INTEGER :: RadiationPhotonWaveLengthModel
+LOGICAL :: RadEmiAdaptPhotonNum
+
+REAL, ALLOCATABLE :: RadiationElemAbsEnergy(:,:)
+REAL, ALLOCATABLE :: RadiationElemAbsEnergySpec(:,:)
+REAL,ALLOCPOINT :: Radiation_Emission_Spec_Total(:)
+REAL,ALLOCPOINT :: Radiation_Emission_Spec_Max(:)
+INTEGER,ALLOCPOINT :: RadTransPhotPerCell(:) ! (WaveLen(:), number of mesh elements)
+INTEGER, ALLOCATABLE :: RadTransPhotPerCellLoc(:)
+REAL, ALLOCPOINT :: RadTransObsVolumeFrac(:)
+REAL, ALLOCPOINT :: RadObservationPOI(:,:)
+#if USE_MPI
+INTEGER :: RadTransPhotPerCell_Shared_Win
+INTEGER,ALLOCPOINT :: RadTransPhotPerCell_Shared(:)
+INTEGER :: RadTransObsVolumeFrac_Shared_Win
+REAL,ALLOCPOINT :: RadTransObsVolumeFrac_Shared(:)
+INTEGER :: Radiation_Emission_Spec_Total_Shared_Win
+REAL,ALLOCPOINT :: Radiation_Emission_Spec_Total_Shared(:)
+INTEGER :: Radiation_Emission_Spec_Max_Shared_Win
+REAL,ALLOCPOINT :: Radiation_Emission_Spec_Max_Shared(:)
+INTEGER :: RadiationElemAbsEnergy_Shared_Win
+REAL,POINTER :: RadiationElemAbsEnergy_Shared(:,:)
+INTEGER :: RadiationElemAbsEnergySpec_Shared_Win
+REAL,POINTER :: RadiationElemAbsEnergySpec_Shared(:,:)
+INTEGER :: RadObservationPOI_Shared_Win
+REAL,ALLOCPOINT :: RadObservationPOI_Shared(:,:)
+#endif
+!===================================================================================================================================
+END MODULE MOD_RadiationTrans_Vars
diff --git a/src/radiation/radiative_transfer/tracking/radtrans_tools.f90.bak b/src/radiation/radiative_transfer/tracking/radtrans_tools.f90.bak
new file mode 100644
index 000000000..45afa924f
--- /dev/null
+++ b/src/radiation/radiative_transfer/tracking/radtrans_tools.f90.bak
@@ -0,0 +1,1176 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Photon_TrackingTools
+!===================================================================================================================================
+! Routines for photon tracking in radiave transfer solver
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+
+INTERFACE PhotonThroughSideCheck3DFast
+ MODULE PROCEDURE PhotonThroughSideCheck3DFast
+END INTERFACE
+
+PUBLIC :: PhotonThroughSideCheck3DFast, PhotonIntersectionWithSide, CalcAbsoprtion, PerfectPhotonReflection, DiffusePhotonReflection
+PUBLIC :: CalcWallAbsoprtion, PointInObsCone, PhotonIntersectSensor, PhotonThroughSideCheck3DDir, PhotonIntersectionWithSide2DDir
+PUBLIC :: PhotonIntersectionWithSide2D, RotatePhotonIn2DPlane, PerfectPhotonReflection2D,DiffusePhotonReflection2D, PhotonOnLineOfSight
+!-----------------------------------------------------------------------------------------------------------------------------------
+!-----------------------------------------------------------------------------------------------------------------------------------
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE PhotonThroughSideCheck3DFast(iLocSide,Element,ThroughSide,TriNum, IsMortar)
+!===================================================================================================================================
+!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalix_photon_startd trajectory
+!> vector and the vectors from two of the three nodes to the old particle position is calculated. If the determinants for the three
+!> possible combinations are greater than x_photon_startro, then the particle went through this triangle of the side.
+!> Note that if this is a mortar side, the side of the small neighbouring mortar element has to be checked. Thus, the orientation
+!> is reversed.
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals_Vars ,ONLY: EpsMach
+USE MOD_Particle_Mesh_Vars, ONLY : NodeCoords_Shared, ElemSideNodeID_Shared
+USE MOD_RadiationTrans_Vars, ONLY:PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+INTEGER,INTENT(IN) :: TriNum
+LOGICAL,INTENT(OUT) :: ThroughSide
+LOGICAL, INTENT(IN), OPTIONAL :: IsMortar
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: CNElemID
+INTEGER :: n, NodeID
+REAL :: Px, Py, Pz
+REAL :: Vx, Vy, Vz!, Vall
+REAL :: xNode(3), yNode(3), zNode(3), Ax(3), Ay(3), Az(3)
+REAL :: det(3)
+!===================================================================================================================================
+CNElemID = GetCNElemID(Element)
+ThroughSide = .FALSE.
+
+Px = PhotonProps%PhotonLastPos(1)
+Py = PhotonProps%PhotonLastPos(2)
+Pz = PhotonProps%PhotonLastPos(3)
+
+! Normalix_photon_startd particle trajectory (PartPos - lastPartPos)/ABS(PartPos - lastPartPos)
+Vx = PhotonProps%PhotonDirection(1)
+Vy = PhotonProps%PhotonDirection(2)
+Vz = PhotonProps%PhotonDirection(3)
+! Get the coordinates of the first node and the vector from the particle position to the node
+xNode(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNode(1) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNode(1) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+Ax(1) = xNode(1) - Px
+Ay(1) = yNode(1) - Py
+Az(1) = zNode(1) - Pz
+! Get the vectors to the other two nodes, depending on the triangle number
+IF(PRESENT(IsMortar)) THEN
+ ! Note: reverse orientation in the mortar case, as the side is treated from the perspective of the smaller neighbouring element
+ ! (TriNum=1: NodeID=3,2; TriNum=2: NodeID=4,3)
+ xNode(2) = NodeCoords_Shared(1,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+ yNode(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+ zNode(2) = NodeCoords_Shared(3,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+
+ Ax(2) = xNode(2) - Px
+ Ay(2) = yNode(2) - Py
+ Az(2) = zNode(2) - Pz
+
+ xNode(3) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+ yNode(3) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+ zNode(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+
+ Ax(3) = xNode(3) - Px
+ Ay(3) = yNode(3) - Py
+ Az(3) = zNode(3) - Pz
+ELSE
+ DO n = 2,3
+ NodeID = n+TriNum-1 ! m = true node number of the sides (TriNum=1: NodeID=2,3; TriNum=2: NodeID=3,4)
+ xNode(n) = NodeCoords_Shared(1,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ yNode(n) = NodeCoords_Shared(2,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ zNode(n) = NodeCoords_Shared(3,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+
+ Ax(n) = xNode(n) - Px
+ Ay(n) = yNode(n) - Py
+ Az(n) = zNode(n) - Pz
+ END DO
+END IF
+!--- check whether v and the vectors from the particle to the two edge nodes build
+!--- a right-hand-szstem. If yes for all edges: vector goes potentially through side
+det(1) = ((Ay(1) * Vz - Az(1) * Vy) * Ax(3) + &
+ (Az(1) * Vx - Ax(1) * Vz) * Ay(3) + &
+ (Ax(1) * Vy - Ay(1) * Vx) * Az(3))
+
+det(2) = ((Ay(2) * Vz - Az(2) * Vy) * Ax(1) + &
+ (Az(2) * Vx - Ax(2) * Vz) * Ay(1) + &
+ (Ax(2) * Vy - Ay(2) * Vx) * Az(1))
+
+det(3) = ((Ay(3) * Vz - Az(3) * Vy) * Ax(2) + &
+ (Az(3) * Vx - Ax(3) * Vz) * Ay(2) + &
+ (Ax(3) * Vy - Ay(3) * Vx) * Az(2))
+
+! Comparison of the determinants with eps, where a x_photon_startro is stored (due to machine precision)
+IF ((det(1).ge.-epsMach).AND.(det(2).ge.-epsMach).AND.(det(3).ge.-epsMach)) THEN
+ ThroughSide = .TRUE.
+END IF
+
+RETURN
+
+END SUBROUTINE PhotonThroughSideCheck3DFast
+
+
+SUBROUTINE PhotonThroughSideCheck3DDir(iLocSide,CNElemID,ThroughSide,TriNum,StartPoint,Dir)
+!===================================================================================================================================
+!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalix_photon_startd trajectory
+!> vector and the vectors from two of the three nodes to the old particle position is calculated. If the determinants for the three
+!> possible combinations are greater than x_photon_startro, then the particle went through this triangle of the side.
+!> Note that if this is a mortar side, the side of the small neighbouring mortar element has to be checked. Thus, the orientation
+!> is reversed.
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals_Vars ,ONLY: EpsMach
+USE MOD_Particle_Mesh_Vars, ONLY : NodeCoords_Shared, ElemSideNodeID_Shared
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: CNElemID
+INTEGER,INTENT(IN) :: TriNum
+LOGICAL,INTENT(OUT) :: ThroughSide
+REAL, INTENT(IN) :: StartPoint(3), Dir(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: n, NodeID
+REAL :: Px, Py, Pz
+REAL :: Vx, Vy, Vz!, Vall
+REAL :: xNode(3), yNode(3), zNode(3), Ax(3), Ay(3), Az(3)
+REAL :: det(3)
+!===================================================================================================================================
+ThroughSide = .FALSE.
+
+Px = StartPoint(1)
+Py = StartPoint(2)
+Pz = StartPoint(3)
+
+! Normalix_photon_startd particle trajectory (PartPos - lastPartPos)/ABS(PartPos - lastPartPos)
+Vx = Dir(1)
+Vy = Dir(2)
+Vz = Dir(3)
+! Get the coordinates of the first node and the vector from the particle position to the node
+xNode(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNode(1) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNode(1) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+Ax(1) = xNode(1) - Px
+Ay(1) = yNode(1) - Py
+Az(1) = zNode(1) - Pz
+! Get the vectors to the other two nodes, depending on the triangle number
+
+DO n = 2,3
+ NodeID = n+TriNum-1 ! m = true node number of the sides (TriNum=1: NodeID=2,3; TriNum=2: NodeID=3,4)
+ xNode(n) = NodeCoords_Shared(1,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ yNode(n) = NodeCoords_Shared(2,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ zNode(n) = NodeCoords_Shared(3,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+
+ Ax(n) = xNode(n) - Px
+ Ay(n) = yNode(n) - Py
+ Az(n) = zNode(n) - Pz
+END DO
+
+!--- check whether v and the vectors from the particle to the two edge nodes build
+!--- a right-hand-szstem. If yes for all edges: vector goes potentially through side
+det(1) = ((Ay(1) * Vz - Az(1) * Vy) * Ax(3) + &
+ (Az(1) * Vx - Ax(1) * Vz) * Ay(3) + &
+ (Ax(1) * Vy - Ay(1) * Vx) * Az(3))
+
+det(2) = ((Ay(2) * Vz - Az(2) * Vy) * Ax(1) + &
+ (Az(2) * Vx - Ax(2) * Vz) * Ay(1) + &
+ (Ax(2) * Vy - Ay(2) * Vx) * Az(1))
+
+det(3) = ((Ay(3) * Vz - Az(3) * Vy) * Ax(2) + &
+ (Az(3) * Vx - Ax(3) * Vz) * Ay(2) + &
+ (Ax(3) * Vy - Ay(3) * Vx) * Az(2))
+
+! Comparison of the determinants with eps, where a x_photon_startro is stored (due to machine precision)
+IF ((det(1).ge.-epsMach).AND.(det(2).ge.-epsMach).AND.(det(3).ge.-epsMach)) THEN
+ ThroughSide = .TRUE.
+END IF
+
+RETURN
+
+END SUBROUTINE PhotonThroughSideCheck3DDir
+
+
+SUBROUTINE PhotonIntersectionWithSide2D(iLocSide,Element,ThroughSide,IntersectionPos,isLastSide,Distance)
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+! MODULES
+USE MOD_Particle_Mesh_Vars, ONLY : ElemSideNodeID2D_Shared, NodeCoords_Shared
+USE MOD_RadiationTrans_Vars, ONLY : PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: ThroughSide
+INTEGER,INTENT(IN) :: iLocSide, Element
+REAL, INTENT(OUT) :: IntersectionPos(3)
+REAL, INTENT(OUT) :: Distance
+LOGICAL, INTENT(IN) :: isLastSide
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: CNElemID
+REAL :: y_photon_start,x_photon_start,yNode1,xNode1,yNode2,xNode2,sy,sz,sx
+REAL :: l1,S1,l2,S2,l,S
+REAL :: beta, alpha, deltay, a, b, c, tmpsqrt
+!===================================================================================================================================
+ CNElemID = GetCNElemID(Element)
+ ThroughSide = .FALSE.
+
+ xNode1 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+ yNode1 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+ xNode2 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+ yNode2 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+
+ x_photon_start=PhotonProps%PhotonLastPos(1)
+ y_photon_start=PhotonProps%PhotonLastPos(2)
+
+ sx=PhotonProps%PhotonDirection(1)
+ sy=PhotonProps%PhotonDirection(2)
+ sz=PhotonProps%PhotonDirection(3)
+
+ IF (sx .EQ. 0.0) THEN
+ l = (x_photon_start-xNode1)/(xNode2-xNode1)
+ a = sy*sy + sz*sz
+ b = 2*sy*y_photon_start
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*l*yNode1*yNode1 - l*l*yNode1*yNode1 &
+ - 2.*yNode1*yNode2*l + 2.*yNode1*yNode2*l*l - yNode2*yNode2*l*l
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ S1 = (-b+SQRT(tmpsqrt))/(2.*a)
+ S2 = (-b-SQRT(tmpsqrt))/(2.*a)
+
+ IF(isLastSide) THEN
+ IF (ALMOSTEQUAL(S1,S2)) THEN
+ RETURN ! TODO
+ ELSE IF (ABS(S1).GT.ABS(S2)) THEN
+ S=S1
+ ELSE
+ S=S2
+ END IF
+ ELSE
+ IF (S1.LE.0.0) THEN
+ S = S2
+ ELSE
+ IF (S2.GT.0.0) THEN
+ IF(S2.GT.S1) THEN
+ S = S1
+ ELSE
+ S = S2
+ END IF
+ ELSE
+ S = S1
+ END IF
+ END IF
+ END IF
+
+
+ ELSE
+ alpha = (xNode1 - x_photon_start) / sx
+ beta = (xNode2 - xNode1) / sx
+ deltay = (yNode2 - yNode1)
+ a = beta*beta*sy*sy - deltay*deltay + beta*beta*sz*sz
+ b = 2.*beta*sy*y_photon_start + 2.*alpha*beta*sy*sy - 2.*deltay*yNode1 + 2.*alpha*beta*sz*sz
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*alpha*sy*y_photon_start + alpha*alpha*sy*sy + sz*sz*alpha*alpha
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ l1 = (-b + SQRT(tmpsqrt))/(2.*a)
+ S1 = (xNode1-x_photon_start+(xNode2-xNode1)*l1)/sx
+ l2 = (-b - SQRT(tmpsqrt))/(2.*a)
+ S2 = (xNode1-x_photon_start+(xNode2-xNode1)*l2)/sx
+
+ IF (isLastSide) THEN
+ IF (ALMOSTEQUAL(S1,S2).AND.ALMOSTEQUAL(ABS(l1),ABS(l2))) THEN
+ RETURN
+ ELSE IF (ALMOSTEQUAL(S1,S2)) THEN
+ IF (ABS(l1).GT.ABS(l2)) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF (ALMOSTZERO(S1).AND.ALMOSTZERO(S2)) THEN
+ IF (ABS(l1).GT.ABS(l2)) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF (ABS(S1).GT.ABS(S2)) THEN !though same spot again, caused by numerical inaccuray (discard shorter solution)
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF ((l1.LE.0.0).OR.(l1.GE.1.0)) THEN !if 1 is not a valid intersection -> 2
+ l = l2; S = S2
+ ELSE !1 is valid intersection
+ IF ((S1.LE.0.0)) THEN !1 would be moving backwards -> 2
+ l = l2; S = S2
+ ELSE
+ IF ((l2.GT.0.0).AND.(l2.LT.1.0).AND.(S2.GT.0.0)) THEN !1 and 2 valid -> chose shorter one
+ IF (S2.GT.S1) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE !1 is only valid intersection -> 1
+ l=l1; S=S1
+ END IF
+ END IF
+ END IF
+
+ END IF
+
+ IF((S .GT. 0.0) .AND. (0.0 .LE. l) .AND. (l .LE. 1.0)) THEN
+ ThroughSide = .TRUE.
+ IntersectionPos(1) = PhotonProps%PhotonLastPos(1) + S*sx
+ IntersectionPos(2) = PhotonProps%PhotonLastPos(2) + S*sy
+ IntersectionPos(3) = S*sz
+ Distance = S
+ END IF
+
+END SUBROUTINE PhotonIntersectionWithSide2D
+
+
+SUBROUTINE PhotonIntersectionWithSide2DDir(iLocSide,CNElemID,ThroughSide,StartPoint, Dir, IntersectionPos, Distance)
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+! MODULES
+USE MOD_Particle_Mesh_Vars, ONLY : ElemSideNodeID2D_Shared, NodeCoords_Shared
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: ThroughSide
+INTEGER,INTENT(IN) :: iLocSide, CNElemID
+REAL, INTENT(OUT), OPTIONAL :: IntersectionPos(3), Distance
+REAL,INTENT(IN) :: StartPoint(3), Dir(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: y_photon_start,x_photon_start,yNode1,xNode1,yNode2,xNode2,sy,sz,sx
+REAL :: l1,S1,l2,S2,l,S
+REAL :: beta, alpha, deltay, a, b, c, tmpsqrt
+!===================================================================================================================================
+ ThroughSide = .FALSE.
+
+ xNode1 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+ yNode1 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+ xNode2 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+ yNode2 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+
+ x_photon_start=StartPoint(1)
+ y_photon_start=StartPoint(2)
+
+ sx=Dir(1)
+ sy=Dir(2)
+ sz=Dir(3)
+
+ IF (sx .EQ. 0.0) THEN
+ l = (x_photon_start-xNode1)/(xNode2-xNode1)
+ a = sy*sy + sz*sz
+ b = 2*sy*y_photon_start
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*l*yNode1*yNode1 - l*l*yNode1*yNode1 &
+ - 2.*yNode1*yNode2*l + 2.*yNode1*yNode2*l*l - yNode2*yNode2*l*l
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ S1 = (-b+SQRT(tmpsqrt))/(2.*a)
+ S2 = (-b-SQRT(tmpsqrt))/(2.*a)
+
+ IF (S1.LE.0.0) THEN
+ S = S2
+ ELSE
+ IF (S2.GT.0.0) THEN
+ IF(S2.GT.S1) THEN
+ S = S1
+ ELSE
+ S = S2
+ END IF
+ ELSE
+ S = S1
+ END IF
+ END IF
+ ELSE
+ alpha = (xNode1 - x_photon_start) / sx
+ beta = (xNode2 - xNode1) / sx
+ deltay = (yNode2 - yNode1)
+ a = beta*beta*sy*sy - deltay*deltay + beta*beta*sz*sz
+ b = 2.*beta*sy*y_photon_start + 2.*alpha*beta*sy*sy - 2.*deltay*yNode1 + 2.*alpha*beta*sz*sz
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*alpha*sy*y_photon_start + alpha*alpha*sy*sy + sz*sz*alpha*alpha
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ l1 = (-b + SQRT(tmpsqrt))/(2.*a)
+ S1 = (xNode1-x_photon_start+(xNode2-xNode1)*l1)/sx
+ l2 = (-b - SQRT(tmpsqrt))/(2.*a)
+ S2 = (xNode1-x_photon_start+(xNode2-xNode1)*l2)/sx
+
+ IF ((l1.LE.0.0).OR.(l1.GE.1.0)) THEN !if 1 is not a valid intersection -> 2
+ l = l2; S = S2
+ ELSE !1 is valid intersection
+ IF ((S1.LE.0.0)) THEN !1 would be moving backwards -> 2
+ l = l2; S = S2
+ ELSE
+ IF ((l2.GT.0.0).AND.(l2.LT.1.0).AND.(S2.GT.0.0)) THEN !1 and 2 valid -> chose shorter one
+ IF (S2.GT.S1) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE !1 is only valid intersection -> 1
+ l=l1; S=S1
+ END IF
+ END IF
+ END IF
+
+ END IF
+
+ IF((S .GT. 0.0) .AND. (0.0 .LE. l) .AND. (l .LE. 1.0)) THEN
+ ThroughSide = .TRUE.
+ IF (PRESENT(IntersectionPos)) THEN
+ IntersectionPos(1) = StartPoint(1) + S*sx
+ IntersectionPos(2) = StartPoint(2) + S*sy
+ IntersectionPos(3) = S*sz
+ Distance = S
+ END IF
+ END IF
+END SUBROUTINE PhotonIntersectionWithSide2DDir
+
+SUBROUTINE RotatePhotonIn2DPlane(IntersectionPos)
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+! MODULES
+USE MOD_RadiationTrans_Vars, ONLY:PhotonProps
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+REAL, INTENT(OUT) :: IntersectionPos(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: NewYPho, NewYVelo
+ !===================================================================================================================================
+PhotonProps%PhotonLastPos(1:3) = IntersectionPos(1:3)
+NewYPho = SQRT(PhotonProps%PhotonLastPos(2)**2 + PhotonProps%PhotonLastPos(3)**2)
+! Rotation: Vy' = Vy * cos(alpha) + Vz * sin(alpha) = Vy * y/y' + Vz * z/y'
+! Vz' = - Vy * sin(alpha) + Vz * cos(alpha) = - Vy * z/y' + Vz * y/y'
+! Right-hand system, using new y and z positions after tracking, position vector and velocity vector DO NOT have to
+! coincide (as opposed to Bird 1994, p. 391, where new positions are calculated with the velocity vector)
+NewYVelo = (PhotonProps%PhotonDirection(2)*PhotonProps%PhotonLastPos(2) &
+ + PhotonProps%PhotonDirection(3)*PhotonProps%PhotonLastPos(3))/NewYPho
+PhotonProps%PhotonDirection(3) = (-PhotonProps%PhotonDirection(2)*PhotonProps%PhotonLastPos(3) &
+ + PhotonProps%PhotonDirection(3)*PhotonProps%PhotonLastPos(2))/NewYPho
+PhotonProps%PhotonLastPos(2) = NewYPho
+PhotonProps%PhotonLastPos(3) = 0.0
+PhotonProps%PhotonDirection(2) = NewYVelo
+PhotonProps%PhotonPos(1:3) = PhotonProps%PhotonLastPos(1:3)
+
+END SUBROUTINE RotatePhotonIn2DPlane
+
+
+
+SUBROUTINE PhotonIntersectionWithSide(iLocSide,Element,TriNum, IntersectionPos, IsMortar)
+!--------------------------------------------------------------------------------------------------!
+! Based on PerfectReflection3D
+!--------------------------------------------------------------------------------------------------!
+USE MOD_Particle_Mesh_Vars, ONLY : ElemSideNodeID_Shared, NodeCoords_Shared
+USE MOD_RadiationTrans_Vars, ONLY:PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER,INTENT(IN) :: iLocSide !
+ INTEGER,INTENT(IN) :: Element !
+ INTEGER,INTENT(IN) :: TriNum !
+ REAL,INTENT(OUT) :: IntersectionPos(1:3)
+ LOGICAL, INTENT(IN), OPTIONAL :: IsMortar
+! Local variable declaration !
+ INTEGER :: CNElemID
+ INTEGER :: Node1, Node2 !
+ REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal !
+ REAL :: bx,by,bz, ax,ay,az, dist
+ REAL :: xNod, yNod, zNod,IntersecPara !
+ REAL :: Vector1(1:3), Vector2(1:3), VectorShift(1:3) !
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+
+ CNElemID = GetCNElemID(Element)
+
+ PoldX = PhotonProps%PhotonLastPos(1)
+ PoldY = PhotonProps%PhotonLastPos(2)
+ PoldZ = PhotonProps%PhotonLastPos(3)
+
+ xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+ !---- Calculate normal vector:
+ IF(PRESENT(IsMortar)) THEN
+ Node1 = TriNum+2 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+1 ! and 1-3 and 1-4 for second triangle
+ ELSE
+ Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+ END IF
+
+ Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+ Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+ Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+ Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+ Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+ Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+ nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+ nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+ nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+ nx = nx/nVal
+ ny = ny/nVal
+ nz = nz/nVal
+
+ !---- Calculate Intersection
+
+ bx = PoldX - xNod
+ by = PoldY - yNod
+ bz = PoldZ - zNod
+
+ ax = bx - nx * (bx * nx + by * ny + bz * nz)
+ ay = by - ny * (bx * nx + by * ny + bz * nz)
+ az = bz - nz * (bx * nx + by * ny + bz * nz)
+
+ dist = SQRT(((ay * bz - az * by) * (ay * bz - az * by) + &
+ (az * bx - ax * bz) * (az * bx - ax * bz) + &
+ (ax * by - ay * bx) * (ax * by - ay * bx))/ &
+ (ax * ax + ay * ay + az * az))
+
+ ! If vector from old point to new point goes through the node, a will be x_photon_startro
+ ! dist is then simply length of vector b instead of |axb|/|a|
+ IF (dist.NE.dist) dist = SQRT(bx*bx+by*by+bz*bz)
+
+ VectorShift(1) = PhotonProps%PhotonDirection(1)
+ VectorShift(2) = PhotonProps%PhotonDirection(2)
+ VectorShift(3) = PhotonProps%PhotonDirection(3)
+
+ IntersecPara = VectorShift(1) * nx + VectorShift(2) * ny + VectorShift(3) * nz
+ IntersecPara = dist / IntersecPara
+
+ IntersectionPos(1) = PoldX + IntersecPara * VectorShift(1)
+ IntersectionPos(2) = PoldY + IntersecPara * VectorShift(2)
+ IntersectionPos(3) = PoldZ + IntersecPara * VectorShift(3)
+
+ RETURN
+END SUBROUTINE PhotonIntersectionWithSide
+
+
+SUBROUTINE CalcAbsoprtionMC(IntersectionPos,Element, DONE)
+!--------------------------------------------------------------------------------------------------!
+! Calculates absorbed energy of photons along their paths stochastically
+!--------------------------------------------------------------------------------------------------!
+USE MOD_RadiationTrans_Vars, ONLY:PhotonProps,RadiationElemAbsEnergy, RadiationElemAbsEnergySpec
+USE MOD_Radiation_Vars, ONLY:Radiation_Absorption_spec, Radiation_Absorption_SpecPercent
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER, INTENT(IN) :: Element
+ REAL, INTENT(IN) :: IntersectionPos(3)
+ LOGICAL, INTENT(OUT) :: DONE
+! Local variable declaration !
+!--------------------------------------------------------------------------------------------------!
+ REAL :: iRan, DistanceVec(3), Distance, opticalPath
+!--------------------------------------------------------------------------------------------------!
+ IF ((Radiation_Absorption_Spec(PhotonProps%WaveLength,Element).GT.0.0)&
+ .AND.(SUM(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)).GT.0)) THEN
+ DistanceVec(1:3) = PhotonProps%PhotonPos(1:3) - IntersectionPos(1:3)
+ Distance = SQRT(DistanceVec(1)*DistanceVec(1) + DistanceVec(2)*DistanceVec(2) + DistanceVec(3)*DistanceVec(3))
+ CALL RANDOM_NUMBER(iRan)
+ opticalPath = Distance*Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ IF (-LOG(iRan).LT.opticalPath) THEN
+ RadiationElemAbsEnergySpec(:,Element) = RadiationElemAbsEnergySpec(:,Element) &
+ + PhotonProps%PhotonEnergy*(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))&
+ /SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))))
+ DONE = .TRUE.
+ ELSE
+ PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+ END IF
+ ELSE
+ PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+ END IF
+ RadiationElemAbsEnergy(1,Element) = RadiationElemAbsEnergy(1,Element) + opticalPath
+ RadiationElemAbsEnergy(2,Element) = RadiationElemAbsEnergy(2,Element) + 1.0
+
+END SUBROUTINE CalcAbsoprtionMC
+
+
+SUBROUTINE CalcAbsoprtionAnalytic(IntersectionPos,Element, DONE)
+!--------------------------------------------------------------------------------------------------!
+! Calculates absorbed energy of photons along their paths analytically
+!--------------------------------------------------------------------------------------------------!
+!DEC$ ATTRIBUTES FORCEINLINE :: ParticleThroughSideLastPosCheck
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY:PhotonProps, RadTrans
+ USE MOD_RadiationTrans_Vars, ONLY:RadiationElemAbsEnergy, RadiationElemAbsEnergySpec
+ USE MOD_Radiation_Vars, ONLY:Radiation_Absorption_spec, Radiation_Absorption_SpecPercent
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER, INTENT(IN) :: Element
+ REAL, INTENT(IN) :: IntersectionPos(3)
+ LOGICAL, INTENT(OUT) :: DONE
+! Local variable declaration !
+!--------------------------------------------------------------------------------------------------!
+ REAL :: DistanceVec(3), Distance, LostEnergy, opticalPath
+!--------------------------------------------------------------------------------------------------!
+ IF ((Radiation_Absorption_Spec(PhotonProps%WaveLength,Element).GT.0.0)&
+ .AND.(SUM(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)).GT.0)) THEN
+ DistanceVec(1:3) = PhotonProps%PhotonPos(1:3) - IntersectionPos(1:3)
+ Distance = SQRT(DistanceVec(1)*DistanceVec(1) + DistanceVec(2)*DistanceVec(2) + DistanceVec(3)*DistanceVec(3))
+ opticalPath = Distance*Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ IF (CHECKEXP(opticalPath)) THEN
+ LostEnergy = PhotonProps%PhotonEnergy*(1.-EXP(-opticalPath))
+ ELSE
+ LostEnergy = PhotonProps%PhotonEnergy
+ DONE = .TRUE.
+ END IF
+ IF (SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))).EQ.0.0) THEN
+ print*,'arg',Element,PhotonProps%WaveLength, Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ print*, 'percent', Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)
+ END IF
+ PhotonProps%PhotonEnergy = PhotonProps%PhotonEnergy - LostEnergy
+ RadiationElemAbsEnergySpec(:,Element) = RadiationElemAbsEnergySpec(:,Element) &
+ + LostEnergy*(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))&
+ /SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))))
+ ELSE
+ opticalPath = 0.0
+ END IF
+! IF (PhotonProps%PhotonEnergy.LE.(RadTrans%GlobalRadiationPower/(1000.*RadTrans%GlobalPhotonNum))) THEN
+! DONE = .TRUE.
+! ELSE
+
+! END IF
+ PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+ RadiationElemAbsEnergy(1,Element) = RadiationElemAbsEnergy(1,Element) + opticalPath
+ RadiationElemAbsEnergy(2,Element) = RadiationElemAbsEnergy(2,Element) + 1.0
+
+END SUBROUTINE CalcAbsoprtionAnalytic
+
+
+SUBROUTINE CalcAbsoprtion(IntersectionPos,Element, DONE)
+ !--------------------------------------------------------------------------------------------------!
+! Calculates absorbed energy of photons along their paths
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY : RadiationAbsorptionModel
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER, INTENT(IN) :: Element
+ REAL, INTENT(IN) :: IntersectionPos(3)
+ LOGICAL, INTENT(INOUT) :: DONE
+! Local variable declaration !
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+ IF (RadiationAbsorptionModel.EQ.1) THEN
+ CALL CalcAbsoprtionAnalytic(IntersectionPos,Element, DONE)
+ ELSE IF (RadiationAbsorptionModel.EQ.2) THEN
+ CALL CalcAbsoprtionMC(IntersectionPos,Element, DONE)
+ ELSE
+ CALL Abort(&
+ __STAMP__,&
+ 'AbsorptionModel must be 1 or 2!')
+ END IF
+
+END SUBROUTINE CalcAbsoprtion
+
+SUBROUTINE PerfectPhotonReflection(iLocSide,Element,TriNum, IntersectionPos, IntersecAlreadyCalc)
+!--------------------------------------------------------------------------------------------------!
+! Determines velocity vectors of photons after a perfect reflection at a boundary
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_Particle_Mesh_Vars, ONLY : NodeCoords_Shared, ElemSideNodeID_Shared
+ USE MOD_RadiationTrans_Vars, ONLY : PhotonProps
+ USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER,INTENT(IN) :: iLocSide !
+ INTEGER,INTENT(IN) :: Element !
+ INTEGER,INTENT(IN) :: TriNum !
+ REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+ LOGICAL, INTENT(IN) :: IntersecAlreadyCalc
+ ! Local variable declaration
+ INTEGER :: CNElemID
+ INTEGER :: Node1, Node2 !
+ REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal !
+ REAL :: xNod, yNod, zNod
+ REAL :: VelX, VelY, VelZ
+ REAL :: Vector1(1:3), Vector2(1:3), POI_fak, ProjVel
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+
+ CNElemID = GetCNElemID(Element)
+ PoldX = PhotonProps%PhotonLastPos(1)
+ PoldY = PhotonProps%PhotonLastPos(2)
+ PoldZ = PhotonProps%PhotonLastPos(3)
+
+ VelX = PhotonProps%PhotonDirection(1)
+ VelY = PhotonProps%PhotonDirection(2)
+ VelZ = PhotonProps%PhotonDirection(3)
+
+ xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+ !---- Calculate normal vector:
+
+ Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+
+ Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+ Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+ Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+ Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+ Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+ Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+ nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+ nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+ nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+ nx = nx/nVal
+ ny = ny/nVal
+ nz = nz/nVal
+
+ !---- Calculate Point of Intersection (POI)
+ IF (.NOT.IntersecAlreadyCalc) THEN
+ POI_fak = (Vector2(2)*(Vector1(1)*(zNod-PoldZ)+Vector1(3)*(PoldX-xNod)) &
+ +Vector1(2)*(Vector2(1)*(PoldZ-zNod)+Vector2(3)*(xNod-PoldX)) &
+ +yNod*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)) &
+ +PoldY*(Vector1(1)*Vector2(3)-Vector1(3)*Vector2(1))) &
+ /(Vector1(2)*(Vector2(3)*VelX-Vector2(1)*VelZ) &
+ + Vector2(2)*(Vector1(1)*VelZ-Vector1(3)*VelX) &
+ + VelY*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)))
+
+ IntersectionPos(1) = PoldX + POI_fak * VelX
+ IntersectionPos(2) = PoldY + POI_fak * VelY
+ IntersectionPos(3) = PoldZ + POI_fak * VelZ
+ END IF
+
+ !---- Calculate new velocity vector
+ ProjVel = nx*PhotonProps%PhotonDirection(1)+ny*PhotonProps%PhotonDirection(2) &
+ +nz*PhotonProps%PhotonDirection(3)
+ VelX=PhotonProps%PhotonDirection(1)-2.*ProjVel*nx
+ VelY=PhotonProps%PhotonDirection(2)-2.*ProjVel*ny
+ VelZ=PhotonProps%PhotonDirection(3)-2.*ProjVel*nz
+
+ !---- Assign new values to "old" variables to continue loop
+
+ PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+ PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+ PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+ PhotonProps%PhotonDirection(1) = VelX
+ PhotonProps%PhotonDirection(2) = VelY
+ PhotonProps%PhotonDirection(3) = VelZ
+ RETURN
+END SUBROUTINE PerfectPhotonReflection
+
+SUBROUTINE PerfectPhotonReflection2D(iLocSide,Element, IntersectionPos)
+!--------------------------------------------------------------------------------------------------!
+! Determines velocity vectors of photons after a perfect reflection at a boundary (2D rotationally symmetric)
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_Particle_Mesh_Vars, ONLY : SideNormalEdge2D_Shared
+ USE MOD_RadiationTrans_Vars, ONLY : PhotonProps
+ USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER,INTENT(IN) :: iLocSide !
+ INTEGER,INTENT(IN) :: Element !
+ REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+ ! Local variable declaration !
+ INTEGER :: CNElemID !
+ REAL :: nx, ny, nz, nValIntersec
+ REAL :: VelX, VelY, VelZ
+ REAL :: ProjVel
+!--------------------------------------------------------- -----------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+ CNElemID = GetCNElemID(Element)
+
+ nx = SideNormalEdge2D_Shared(1,iLocSide, CNElemID)
+ nValIntersec = SQRT(IntersectionPos(2)*IntersectionPos(2) + IntersectionPos(3)*IntersectionPos(3))
+ ny = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+ nz = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+
+ !---- Calculate new velocity vector
+ ProjVel = nx*PhotonProps%PhotonDirection(1)+ny*PhotonProps%PhotonDirection(2) &
+ +nz*PhotonProps%PhotonDirection(3)
+ VelX=PhotonProps%PhotonDirection(1)-2.*ProjVel*nx
+ VelY=PhotonProps%PhotonDirection(2)-2.*ProjVel*ny
+ VelZ=PhotonProps%PhotonDirection(3)-2.*ProjVel*nz
+
+ !---- Assign new values to "old" variables to continue loop
+
+ PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+ PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+ PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+ PhotonProps%PhotonDirection(1) = VelX
+ PhotonProps%PhotonDirection(2) = VelY
+ PhotonProps%PhotonDirection(3) = VelZ
+END SUBROUTINE PerfectPhotonReflection2D
+
+SUBROUTINE DiffusePhotonReflection(iLocSide,Element,TriNum, IntersectionPos, IntersecAlreadyCalc)
+!--------------------------------------------------------------------------------------------------!
+! Determines velocity vectors of photons after a diffuse reflection at a boundary
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_Particle_Mesh_Vars, ONLY : ElemSideNodeID_Shared, NodeCoords_Shared
+ USE MOD_RadiationTrans_Vars, ONLY : PhotonProps
+ USE Ziggurat
+ USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER,INTENT(IN) :: iLocSide !
+ INTEGER,INTENT(IN) :: Element !
+ INTEGER,INTENT(IN) :: TriNum !
+ REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+ LOGICAL, INTENT(IN) :: IntersecAlreadyCalc
+ ! Local variable declaration !
+ INTEGER :: CNElemID
+ INTEGER :: Node1, Node2 !
+ REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal !
+ REAL :: xNod, yNod, zNod, VecX, VecY, VecZ
+ REAL :: VelX, VelY, VelZ, VeloCx, VeloCy, VeloCz, NormVec, RanNum
+ REAL :: Vector1(1:3), Vector2(1:3), POI_fak
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+ CNElemID = GetCNElemID(Element)
+ PoldX = PhotonProps%PhotonLastPos(1)
+ PoldY = PhotonProps%PhotonLastPos(2)
+ PoldZ = PhotonProps%PhotonLastPos(3)
+
+ VelX = PhotonProps%PhotonDirection(1)
+ VelY = PhotonProps%PhotonDirection(2)
+ VelZ = PhotonProps%PhotonDirection(3)
+
+ xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+ zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+ !---- Calculate normal vector:
+
+ Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+
+ Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+ Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+ Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+ Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+ Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+ Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+ nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+ nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+ nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+ nx = nx/nVal
+ ny = ny/nVal
+ nz = nz/nVal
+
+ !---- Calculate Point of Intersection (POI)
+ !---- Calculate Point of Intersection (POI)
+ IF (.NOT.IntersecAlreadyCalc) THEN
+ POI_fak = (Vector2(2)*(Vector1(1)*(zNod-PoldZ)+Vector1(3)*(PoldX-xNod)) &
+ +Vector1(2)*(Vector2(1)*(PoldZ-zNod)+Vector2(3)*(xNod-PoldX)) &
+ +yNod*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)) &
+ +PoldY*(Vector1(1)*Vector2(3)-Vector1(3)*Vector2(1))) &
+ /(Vector1(2)*(Vector2(3)*VelX-Vector2(1)*VelZ) &
+ + Vector2(2)*(Vector1(1)*VelZ-Vector1(3)*VelX) &
+ + VelY*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)))
+
+ IntersectionPos(1) = PoldX + POI_fak * VelX
+ IntersectionPos(2) = PoldY + POI_fak * VelY
+ IntersectionPos(3) = PoldZ + POI_fak * VelZ
+ END IF
+ !---- Calculate new velocity vector (Extended Maxwellian Model)
+
+ VeloCx = rnor() !normal distri
+ VeloCy = rnor() !normal distri
+ CALL RANDOM_NUMBER(RanNum)
+ VeloCz = SQRT(-2.*LOG(RanNum)) ! rayleigh distri
+
+ !---- Transformation local distribution -> global coordinates
+ VecX = Vector1(1) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+ VecY = Vector1(2) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+ VecZ = Vector1(3) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+
+ VelX = VecX*VeloCx + (nz*VecY-ny*VecZ)*VeloCy - nx*VeloCz
+ VelY = VecY*VeloCx + (nx*VecZ-nz*VecX)*VeloCy - ny*VeloCz
+ VelZ = VecZ*VeloCx + (ny*VecX-nx*VecY)*VeloCy - nz*VeloCz
+ !---- Assign new values to "old" variables to continue loop
+
+ PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+ PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+ PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+ !---- saving new particle velocity
+ NormVec = SQRT(VelX*VelX + VelY*VelY + VelZ*VelZ)
+ PhotonProps%PhotonDirection(1) = VelX / NormVec
+ PhotonProps%PhotonDirection(2) = VelY / NormVec
+ PhotonProps%PhotonDirection(3) = VelZ / NormVec
+
+ RETURN
+END SUBROUTINE DiffusePhotonReflection
+
+
+SUBROUTINE DiffusePhotonReflection2D(iLocSide,Element, IntersectionPos)
+!--------------------------------------------------------------------------------------------------!
+! Determines velocity vectors of photons after a diffuse reflection at a boundary (2D rotationally symmetric)
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_Particle_Mesh_Vars, ONLY : SideNormalEdge2D_Shared
+ USE MOD_RadiationTrans_Vars, ONLY : PhotonProps
+ USE Ziggurat
+ USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER,INTENT(IN) :: iLocSide !
+ INTEGER,INTENT(IN) :: Element !
+ REAL, INTENT(IN) :: IntersectionPos(1:3)
+ ! Local variable declaration
+ INTEGER :: CNElemID
+ REAL :: nx, ny, nz, nValIntersec, VecX, VecY, VecZ
+ REAL :: VelX, VelY, VelZ, VeloCx, VeloCy, VeloCz, NormVec, RanNum
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+ CNElemID = GetCNElemID(Element)
+ nx = SideNormalEdge2D_Shared(1,iLocSide, CNElemID)
+ nValIntersec = SQRT(IntersectionPos(2)*IntersectionPos(2) + IntersectionPos(3)*IntersectionPos(3))
+ ny = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+ nz = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+
+ VecX = SideNormalEdge2D_Shared(3,iLocSide, CNElemID)
+ VecY = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(4,iLocSide, CNElemID)
+ VecZ = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(4,iLocSide, CNElemID)
+ !---- Calculate new velocity vector (Extended Maxwellian Model)
+
+ VeloCx = rnor() !normal distri
+ VeloCy = rnor() !normal distri
+ CALL RANDOM_NUMBER(RanNum)
+ VeloCz = SQRT(-2.*LOG(RanNum)) ! rayleigh distri
+
+ VelX = VecX*VeloCx + (nz*VecY-ny*VecZ)*VeloCy - nx*VeloCz
+ VelY = VecY*VeloCx + (nx*VecZ-nz*VecX)*VeloCy - ny*VeloCz
+ VelZ = VecZ*VeloCx + (ny*VecX-nx*VecY)*VeloCy - nz*VeloCz
+ !---- Assign new values to "old" variables to continue loop
+
+ PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+ PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+ PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+ !---- saving new particle velocity
+ NormVec = SQRT(VelX*VelX + VelY*VelY + VelZ*VelZ)
+ PhotonProps%PhotonDirection(1) = VelX / NormVec
+ PhotonProps%PhotonDirection(2) = VelY / NormVec
+ PhotonProps%PhotonDirection(3) = VelZ / NormVec
+
+END SUBROUTINE DiffusePhotonReflection2D
+
+SUBROUTINE CalcWallAbsoprtion(GlobSideID, DONE)
+!--------------------------------------------------------------------------------------------------!
+! Calculates the absorbed energy if a photon hits a wall
+!--------------------------------------------------------------------------------------------------!
+ USE MOD_RadiationTrans_Vars, ONLY : PhotonSampWall, PhotonProps
+ USE MOD_Particle_Boundary_Vars, ONLY:PartBound, GlobalSide2SurfSide
+ USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE !
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration !
+ INTEGER, INTENT(IN) :: GlobSideID
+ LOGICAL, INTENT(OUT) :: DONE
+! Local variable declaration !
+!--------------------------------------------------------------------------------------------------!
+ REAL :: iRan
+ INTEGER :: SurfSideID
+!--------------------------------------------------------------------------------------------------!
+ SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,GlobSideID)
+ CALL RANDOM_NUMBER(iRan)
+ DONE = .FALSE.
+ IF (PartBound%PhotonEnACC(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobSideID))).GT.iRan) THEN
+ DONE = .TRUE.
+ PhotonSampWall(1,SurfSideID) = PhotonSampWall(1,SurfSideID) + 1.
+ PhotonSampWall(2,SurfSideID) = PhotonSampWall(2,SurfSideID) + PhotonProps%PhotonEnergy
+ END IF
+
+END SUBROUTINE CalcWallAbsoprtion
+
+LOGICAL FUNCTION PointInObsCone(Point)
+!===================================================================================================================================
+! checks if a point is in the opening cone of an external observer
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Point(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: ConeDist, ConeRadius, orthoDist
+!===================================================================================================================================
+PointInObsCone = .FALSE.
+ConeDist = DOT_PRODUCT(Point(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+orthoDist = VECNORM(Point(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+IF (orthoDist.LE.ConeRadius) PointInObsCone = .TRUE.
+
+END FUNCTION PointInObsCone
+
+LOGICAL FUNCTION PhotonIntersectSensor(Point, Direction)
+!===================================================================================================================================
+! checks if the photon's apth intersect with the opening cone of an external observer
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Point(3), Direction(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: projectedDist, DirectionVec(3)
+!===================================================================================================================================
+PhotonIntersectSensor = .FALSE.
+
+projectedDist = DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3), Direction(1:3))
+IF (projectedDist.LT.0.0) THEN
+ DirectionVec(1:3) = RadObservationPoint%MidPoint(1:3) - Point(1:3)
+ !distance to travel
+ projectedDist = DOT_PRODUCT(DirectionVec(1:3), RadObservationPoint%ViewDirection(1:3))/projectedDist
+ ! actual intersection point
+ DirectionVec(1:3) = Point(1:3) + projectedDist*Direction(1:3)
+ !Vector from midpoint of sensor
+ DirectionVec(1:3) = DirectionVec(1:3) - RadObservationPoint%MidPoint(1:3)
+ !distance to midpoint
+ projectedDist = VECNORM(DirectionVec(1:3))
+ IF (projectedDist.LE.RadObservationPoint%Diameter/2.) PhotonIntersectSensor = .TRUE.
+END IF
+
+END FUNCTION PhotonIntersectSensor
+
+LOGICAL FUNCTION PhotonOnLineOfSight(Direction)
+!===================================================================================================================================
+! checks if a photon is on the simulated line of sight
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Direction(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: SkalarFactors(3)
+INTEGER :: iDir, jDir
+!===================================================================================================================================
+PhotonOnLineOfSight = .FALSE.
+DO iDir = 1, 3
+ IF (Direction(iDir).EQ.0.0) THEN
+ IF (RadObservationPoint%ViewDirection(iDir).NE.0.0) THEN
+ RETURN
+ ELSE
+ SkalarFactors(iDir) = 0.0
+ END IF
+ ELSE
+ IF (RadObservationPoint%ViewDirection(iDir).EQ.0.0) THEN
+ RETURN
+ ELSE
+ SkalarFactors(iDir) = Direction(iDir)/ RadObservationPoint%ViewDirection(iDir)
+ END IF
+ END IF
+END DO
+PhotonOnLineOfSight = .TRUE.
+DO iDir = 1, 2
+ DO jDir = iDir+1 , 3
+ IF (SkalarFactors(iDir).EQ.0.0) CYCLE
+ IF (SkalarFactors(jDir).EQ.0.0) CYCLE
+ IF (.NOT.ALMOSTEQUAL(SkalarFactors(iDir),SkalarFactors(jDir))) THEN
+ PhotonOnLineOfSight = .FALSE.
+ RETURN
+ END IF
+ END DO
+END DO
+
+END FUNCTION PhotonOnLineOfSight
+
+END MODULE MOD_Photon_TrackingTools
diff --git a/src/radiation/radiative_transfer/tracking/radtrans_tracking.f90 b/src/radiation/radiative_transfer/tracking/radtrans_tracking.f90
new file mode 100644
index 000000000..af4e42171
--- /dev/null
+++ b/src/radiation/radiative_transfer/tracking/radtrans_tracking.f90
@@ -0,0 +1,1234 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Photon_Tracking
+!===================================================================================================================================
+! Routines for photon tracking in radiave transfer solver
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+
+INTERFACE PhotonTriaTracking
+ MODULE PROCEDURE PhotonTriaTracking
+END INTERFACE
+
+PUBLIC :: PhotonTriaTracking, Photon2DSymTracking
+PUBLIC :: InitPhotonSurfSample
+!-----------------------------------------------------------------------------------------------------------------------------------
+!-----------------------------------------------------------------------------------------------------------------------------------
+!===================================================================================================================================
+
+CONTAINS
+
+
+!===================================================================================================================================
+!> Allocate photon surface sampling containers
+!===================================================================================================================================
+SUBROUTINE InitPhotonSurfSample()
+! MODULES
+USE MOD_Globals
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea,PhotonSurfSideSamplingMidPoints
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideSamplingMidPoints_Shared,PhotonSurfSideSamplingMidPoints_Shared_Win
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea_Shared,PhotonSurfSideArea_Shared_Win
+#else
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
+#endif /*USE_MPI*/
+USE MOD_Particle_Vars ,ONLY: Symmetry
+USE MOD_Basis ,ONLY: LegendreGaussNodesAndWeights
+USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_CalcSymmetryArea, DSMC_1D_CalcSymmetryArea
+USE MOD_Mesh_Vars ,ONLY: NGeo
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared,NodeCoords_Shared
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared
+USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod
+USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D
+USE MOD_Particle_Surfaces ,ONLY: EvaluateBezierPolynomialAndGradient
+USE MOD_RayTracing_Vars ,ONLY: Ray
+USE MOD_Interpolation ,ONLY: GetNodesAndWeights
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+! Space-separated list of input and output types. Use: (int|real|logical|...)_(in|out|inout)_dim(n)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iSide,firstSide,lastSide
+! surface area
+INTEGER :: SideID,ElemID,CNElemID,LocSideID
+INTEGER :: p,q,iSample,jSample
+INTEGER :: TriNum, Node1, Node2
+REAL :: area,nVal
+REAL,DIMENSION(2,3) :: gradXiEta3D
+REAL,DIMENSION(:),ALLOCATABLE :: Xi_NGeo,wGP_NGeo
+REAL :: XiOut(1:2),E,F,G,D,tmp1,tmpI2,tmpJ2
+REAL :: xNod(3), Vector1(3), Vector2(3), nx, ny, nz
+LOGICAL :: UseBezierControlPointsForArea
+REAL,ALLOCATABLE :: xIP_VISU(:),wIP_VISU(:)
+REAL,ALLOCATABLE :: RayXiEQ_SurfSample(:) ! position of RayXiEQ_SurfSample
+REAL :: dRayXiEQ_SurfSample ! deltaXi in [-1,1]
+!===================================================================================================================================
+
+#if USE_MPI
+CALL Allocate_Shared((/Ray%nSurfSample,Ray%nSurfSample,nComputeNodeSurfTotalSides/),PhotonSurfSideArea_Shared_Win,PhotonSurfSideArea_Shared)
+CALL MPI_WIN_LOCK_ALL(0,PhotonSurfSideArea_Shared_Win,IERROR)
+CALL Allocate_Shared((/3,Ray%nSurfSample,Ray%nSurfSample,nComputeNodeSurfTotalSides/),PhotonSurfSideSamplingMidPoints_Shared_Win,PhotonSurfSideSamplingMidPoints_Shared)
+CALL MPI_WIN_LOCK_ALL(0,PhotonSurfSideSamplingMidPoints_Shared_Win,IERROR)
+PhotonSurfSideArea => PhotonSurfSideArea_Shared
+PhotonSurfSideSamplingMidPoints => PhotonSurfSideSamplingMidPoints_Shared
+
+firstSide = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))+1
+lastSide = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeSurfTotalSides)/REAL(nComputeNodeProcessors))
+#else
+ALLOCATE(PhotonSurfSideArea(1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+ALLOCATE(PhotonSurfSideSamplingMidPoints(1:3,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+
+firstSide = 1
+lastSide = nGlobalSurfSides
+#endif /*USE_MPI*/
+
+#if USE_MPI
+IF (myComputeNodeRank.EQ.0) THEN
+#endif /*USE_MPI*/
+ PhotonSurfSideArea=0.
+ PhotonSurfSideSamplingMidPoints=0.
+#if USE_MPI
+END IF
+CALL BARRIER_AND_SYNC(PhotonSurfSideArea_Shared_Win,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(PhotonSurfSideSamplingMidPoints_Shared_Win,MPI_COMM_SHARED)
+#endif /*USE_MPI*/
+
+! Calculate equidistant surface points
+ALLOCATE(RayXiEQ_SurfSample(0:Ray%nSurfSample))
+dRayXiEQ_SurfSample =2./REAL(Ray%nSurfSample)
+DO q=0,Ray%nSurfSample
+ RayXiEQ_SurfSample(q) = dRayXiEQ_SurfSample * REAL(q) - 1.
+END DO
+
+! get interpolation points and weights
+ALLOCATE( Xi_NGeo( 0:NGeo) &
+ , wGP_NGeo(0:NGeo) )
+CALL LegendreGaussNodesAndWeights(NGeo,Xi_NGeo,wGP_NGeo)
+
+! compute area of sub-faces
+tmp1=dRayXiEQ_SurfSample/2.0 !(b-a)/2
+
+ALLOCATE(xIP_VISU(0:Ray%nSurfSample),wIP_VISU(0:Ray%nSurfSample))
+! Build basis for surface sampling on VISU nodes, and not on Ray%NodeType, which default to VISU_INNER
+! because VISU nodes are hard-coded in piclas2vtk
+CALL GetNodesAndWeights(Ray%nSurfSample, 'VISU', xIP_VISU, wIP=wIP_VISU)
+
+DO iSide = firstSide,LastSide
+ ! get global SideID. This contains only nonUniqueSide, no special mortar treatment required
+ SideID = SurfSide2GlobalSide(SURF_SIDEID,iSide)
+
+ UseBezierControlPointsForArea = .FALSE.
+
+ IF (TrackingMethod.EQ.TRIATRACKING) THEN
+ ElemID = SideInfo_Shared(SIDE_ELEMID ,SideID)
+ CNElemID = GetCNElemID(ElemID)
+ LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID)
+ IF((Symmetry%Order.NE.3).AND.Ray%nSurfSample.GT.1) CALL abort(__STAMP__,'Ray%nSurfSample>1 not implemented for this symmetry!')
+
+ IF(Symmetry%Order.EQ.3) THEN
+ ! Check if triangles are used for the calculation of the surface area or not
+ IF(Ray%nSurfSample.GT.1)THEN
+ ! Do not use triangles
+ UseBezierControlPointsForArea = .TRUE.
+ ELSE
+ xNod(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1)
+ area = 0.
+ DO TriNum = 1,2
+ Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+ Vector1(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(Node1,LocSideID,CNElemID)+1) - xNod(1:3)
+ Vector2(1:3) = NodeCoords_Shared(1:3,ElemSideNodeID_Shared(Node2,LocSideID,CNElemID)+1) - xNod(1:3)
+ nx = - Vector1(2) * Vector2(3) + Vector1(3) * Vector2(2) !NV (inwards)
+ ny = - Vector1(3) * Vector2(1) + Vector1(1) * Vector2(3)
+ nz = - Vector1(1) * Vector2(2) + Vector1(2) * Vector2(1)
+ nVal = SQRT(nx*nx + ny*ny + nz*nz)
+ area = area + nVal/2.
+ END DO
+ PhotonSurfSideArea(1,1,iSide) = area
+ END IF ! Ray%nSurfSample.GT.1
+ ELSE IF(Symmetry%Order.EQ.2) THEN
+ PhotonSurfSideArea(1,1,iSide) = DSMC_2D_CalcSymmetryArea(LocSideID, CNElemID)
+ ELSE IF(Symmetry%Order.EQ.1) THEN
+ PhotonSurfSideArea(1,1,iSide) = DSMC_1D_CalcSymmetryArea(LocSideID, CNElemID)
+ END IF
+ ELSE ! TrackingMethod.NE.TRIATRACKING
+ UseBezierControlPointsForArea = .TRUE.
+ END IF ! TrackingMethod.EQ.TRIATRACKIN
+
+ ! Instead of triangles use Bezier control points (curved or triangle tracking with Ray%nSurfSample>1)
+ IF(UseBezierControlPointsForArea)THEN
+ DO jSample=1,Ray%nSurfSample
+ DO iSample=1,Ray%nSurfSample
+ area=0.
+ tmpI2=(RayXiEQ_SurfSample(iSample-1)+RayXiEQ_SurfSample(iSample))/2. ! (a+b)/2
+ tmpJ2=(RayXiEQ_SurfSample(jSample-1)+RayXiEQ_SurfSample(jSample))/2. ! (a+b)/2
+ ASSOCIATE( xi => 0.5*(xIP_VISU(iSample)+xIP_VISU(iSample-1)), eta => 0.5*(xIP_VISU(jSample)+xIP_VISU(jSample-1)) )
+ CALL EvaluateBezierPolynomialAndGradient((/xi,eta/),NGeo,3,BezierControlPoints3D(1:3,0:NGeo,0:NGeo,SideID) &
+ ,Point=PhotonSurfSideSamplingMidPoints(1:3,iSample,jSample,iSide))
+ END ASSOCIATE
+ DO q=0,NGeo
+ DO p=0,NGeo
+ XiOut(1)=tmp1*Xi_NGeo(p)+tmpI2
+ XiOut(2)=tmp1*Xi_NGeo(q)+tmpJ2
+ CALL EvaluateBezierPolynomialAndGradient(XiOut,NGeo,3,BezierControlPoints3D(1:3,0:NGeo,0:NGeo,SideID) &
+ ,Gradient=gradXiEta3D)
+ ! calculate first fundamental form
+ E=DOT_PRODUCT(gradXiEta3D(1,1:3),gradXiEta3D(1,1:3))
+ F=DOT_PRODUCT(gradXiEta3D(1,1:3),gradXiEta3D(2,1:3))
+ G=DOT_PRODUCT(gradXiEta3D(2,1:3),gradXiEta3D(2,1:3))
+ D=SQRT(E*G-F*F)
+ area = area+tmp1*tmp1*D*wGP_NGeo(p)*wGP_NGeo(q)
+ END DO
+ END DO
+ PhotonSurfSideArea(iSample,jSample,iSide) = area
+ END DO ! iSample=1,Ray%nSurfSample
+ END DO ! jSample=1,Ray%nSurfSample
+ END IF ! UseBezierControlPointsForArea
+
+END DO ! iSide = firstSide,lastSide
+
+#if USE_MPI
+CALL BARRIER_AND_SYNC(PhotonSurfSideArea_Shared_Win,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(PhotonSurfSideSamplingMidPoints_Shared_Win,MPI_COMM_SHARED)
+#endif /*USE_MPI*/
+
+END SUBROUTINE InitPhotonSurfSample
+
+
+!===================================================================================================================================
+!> Deallocate photon surface sampling containers
+!===================================================================================================================================
+SUBROUTINE FinalizePhotonSurfSample()
+! MODULES
+USE MOD_Globals
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea,PhotonSurfSideSamplingMidPoints
+#if USE_MPI
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideSamplingMidPoints_Shared,PhotonSurfSideSamplingMidPoints_Shared_Win
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea_Shared,PhotonSurfSideArea_Shared_Win,PhotonSampWall_Shared_Win_allocated
+USE MOD_MPI_Shared
+#endif /*USE_MPI*/
+USE MOD_Photon_TrackingVars
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!===================================================================================================================================
+#if USE_MPI
+! First, free every shared memory window. This requires MPI_BARRIER as per MPI3.1 specification
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+CALL UNLOCK_AND_FREE(PhotonSurfSideSamplingMidPoints_Shared_Win)
+CALL UNLOCK_AND_FREE(PhotonSurfSideArea_Shared_Win)
+IF(PhotonSampWall_Shared_Win_allocated) CALL UNLOCK_AND_FREE(PhotonSampWall_Shared_Win)
+PhotonSampWall_Shared_Win_allocated = .FALSE.
+CALL MPI_BARRIER(MPI_COMM_SHARED,iERROR)
+ADEALLOCATE(PhotonSampWall_Shared)
+ADEALLOCATE(PhotonSurfSideSamplingMidPoints_Shared)
+ADEALLOCATE(PhotonSurfSideArea_Shared)
+#endif /*USE_MPI*/
+
+ADEALLOCATE(PhotonSurfSideSamplingMidPoints)
+ADEALLOCATE(PhotonSurfSideArea)
+END SUBROUTINE FinalizePhotonSurfSample
+
+
+SUBROUTINE PhotonTriaTracking()
+!===================================================================================================================================
+! Routine for tracking of moving particles and boundary interaction using triangulated sides.
+! 1) Loop over all particles that are still inside
+! 2) Perform tracking until the particle is considered "done" (either localized or deleted)
+! 2a) Perform a check based on the determinant of (3x3) matrix of the vectors from the particle position to the nodes of each
+! triangle (ParticleInsideQuad3D)
+! 2b) If particle is not within the given element in a), the side through which the particle went is determined by checking
+! each side of the element (ParticleThroughSideCheck3DFast)
+! 2c) If no sides are found, the particle is deleted (very rare case). If multiple possible sides are found, additional
+! treatment is required, where the particle path is reconstructed (which side was crossed first) by comparing the ratio
+! the determinants
+! 3) In case of a boundary, determine the intersection and perform the appropriate boundary interaction (GetBoundaryInteraction)
+!===================================================================================================================================
+! MODULES
+USE MOD_Preproc
+USE MOD_Globals
+USE MOD_Particle_Mesh_Vars
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps,PhotonModeBPO,UsePhotonTriaTracking
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservation_Emission, RadObservationPointMethod, RadObservation_EmissionPart
+USE MOD_Photon_TrackingTools ,ONLY: PhotonThroughSideCheck3DFast, PhotonIntersectionWithSide,CalcAbsoprtion,PhotonOnLineOfSight
+USE MOD_Photon_TrackingTools ,ONLY: PerfectPhotonReflection, DiffusePhotonReflection, CalcWallAbsoprtion, PointInObsCone
+USE MOD_Photon_TrackingTools ,ONLY: PeriodicPhotonBC
+USE MOD_Photon_TrackingTools ,ONLY: PhotonIntersectSensor
+USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties
+USE MOD_part_tools ,ONLY: StoreLostPhotonProperties
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationAbsorptionModel
+USE MOD_RayTracing_Vars ,ONLY: RayForceAbsorption
+USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER(KIND=8),PARAMETER :: MaxIterPhoton(1:2)=(/1000,1000000000/) ! Maximum number of cycles in the do while loop for each photon for bilinear and TriaTracking
+INTEGER(KIND=8) :: IterPhoton(2)
+INTEGER :: NblocSideID, NbElemID, ind, nbSideID, nMortarElems, BCType, localSideID, iPBC, GlobSideID
+INTEGER :: ElemID,OldElemID,nlocSides
+INTEGER :: LocalSide
+INTEGER :: NrOfThroughSides, ind2
+INTEGER :: SideID,TempSideID,iLocSide
+INTEGER :: TriNum, LocSidesTemp(1:6),TriNumTemp(1:6), GlobSideTemp(1:6)
+INTEGER :: SecondNrOfThroughSides, indSide
+INTEGER :: DoneLastElem(1:4,1:6) ! 1:3: 1=Element,2=LocalSide,3=TriNum 1:2: 1=last 2=beforelast
+LOGICAL :: ThroughSide, Done, TempPointSelect(2), LastInterPointSelect(2),DummyPointSelect(2),FallBack
+LOGICAL :: oldElemIsMortar, isMortarSideTemp(1:6), doCheckSide, InterPointSelect(2), InterPointSelectTemp(2,6)
+REAL :: minRatio, intersecDist, intersecDistVec(3)
+REAL :: IntersectionPos(1:3), IntersectionPosTemp(1:3)
+REAL :: DistTemp(1:6)
+LOGICAL :: PhotonLost
+!===================================================================================================================================
+Done = .FALSE.
+ElemID = PhotonProps%ElemID
+SideID = 0
+GlobSideID = 0
+DoneLastElem(:,:) = 0
+InterPointSelect = .FALSE.
+LastInterPointSelect = .FALSE.
+IterPhoton = 0_8
+TriNum = 1
+
+! 1) Loop tracking until Photon is considered "done" (either absorbed or deleted)
+THEWHILELOOP: DO WHILE (.NOT.Done)
+ IterPhoton(2) = IterPhoton(2) + 1_8 ! Stop when MaxIterPhoton(2) is reached with this counter
+ IF(IterPhoton(2).GE.MaxIterPhoton(2))THEN
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,99999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF
+ PhotonLost=.FALSE.
+ InterPointSelectTemp = .FALSE.
+ oldElemIsMortar = .FALSE.
+ NrOfThroughSides = 0
+ LocSidesTemp(:) = 0
+ DistTemp = 0.0
+ TriNumTemp(:) = 0
+ GlobSideTemp = 0
+ isMortarSideTemp = .FALSE.
+ FallBack = .FALSE.
+ nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID)
+ LocSideLoop: DO iLocSide=1,nlocSides
+ TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
+ localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
+ ! Side is not one of the 6 local sides
+ IF (localSideID.LE.0) CYCLE
+ NbElemID = SideInfo_Shared(SIDE_NBELEMID,TempSideID)
+ IF (NbElemID.LT.0) THEN ! Mortar side
+ nMortarElems = MERGE(4,2,SideInfo_Shared(SIDE_NBELEMID,TempSideID).EQ.-1)
+ DO ind = 1, nMortarElems
+ nbSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide + ind
+ NbElemID = SideInfo_Shared(SIDE_NBELEMID,nbSideID)
+ ! If small mortar element not defined, abort. Every available information on the compute-node is kept in shared memory, so
+ ! no way to recover it during runtime
+ IF (NbElemID.LT.1) CALL ABORT(__STAMP__,'Small mortar element not defined!',ElemID)
+ ! For small mortar sides, SIDE_NBSIDEID contains the SideID of the corresponding big mortar side
+ nbSideID = SideInfo_Shared(SIDE_NBSIDEID,nbSideID)
+ NblocSideID = SideInfo_Shared(SIDE_LOCALID,nbSideID)
+ DO TriNum = 1,2
+ ThroughSide = .FALSE.
+ CALL PhotonThroughSideCheck3DFast(NblocSideID,NbElemID,ThroughSide,TriNum, .TRUE.)
+ IF (ThroughSide) THEN
+ ! Store the information for this side for future checks, if this side was already treated
+ oldElemIsMortar = .TRUE.
+ NrOfThroughSides = NrOfThroughSides + 1
+ LocSidesTemp(NrOfThroughSides) = NblocSideID
+ TriNumTemp(NrOfThroughSides) = TriNum
+ GlobSideTemp(NrOfThroughSides) = nbSideID
+ isMortarSideTemp(NrOfThroughSides) = .TRUE.
+ SideID = nbSideID
+ LocalSide = NblocSideID
+ END IF
+ END DO
+ END DO
+ ELSE ! Regular side
+ ! Select A) TriaTracking or 2) Tracing on bilinear sides
+ IF(UsePhotonTriaTracking)THEN
+ ! A) TriaTracking
+ DO TriNum = 1,2
+ ThroughSide = .FALSE.
+ CALL PhotonThroughSideCheck3DFast(localSideID,ElemID,ThroughSide,TriNum)
+ IF (ThroughSide) THEN
+ NrOfThroughSides = NrOfThroughSides + 1
+ LocSidesTemp(NrOfThroughSides) = localSideID
+ TriNumTemp(NrOfThroughSides) = TriNum
+ GlobSideTemp(NrOfThroughSides) = TempSideID
+ SideID = TempSideID
+ LocalSide = localSideID
+ END IF
+ END DO
+ ELSE
+ ! 2) Tracing on bilinear sides (bilinear algorithm for intersection calculation))
+ GlobSideID = GetGlobalNonUniqueSideID(ElemID,localSideID)
+ ThroughSide = .FALSE.
+ !CALL ComputeBiLinearIntersection(foundHit,PartTrajectory,lengthPartTrajectory,locAlpha,xi,eta,iPart,SideID,alpha2=currentIntersect%alpha)
+ IF (SideInfo_Shared(SIDE_NBELEMID,TempSideID).EQ.DoneLastElem(1,1)) THEN
+ DummyPointSelect = LastInterPointSelect
+ ELSE
+ DummyPointSelect = (/.FALSE.,.FALSE./)
+ END IF
+ CALL PhotonComputeBiLinearIntersection(ThroughSide,GlobSideID, intersecDist,TempPointSelect, DummyPointSelect)
+! print*,intersecDist, SideInfo_Shared(SIDE_NBELEMID,TempSideID), DoneLastElem(1,1), DummyPointSelect, 'ThroughSide',ThroughSide,'which', TempPointSelect
+ IF(ThroughSide)THEN
+ NrOfThroughSides = NrOfThroughSides + 1
+ LocSidesTemp(NrOfThroughSides) = localSideID
+ GlobSideTemp(NrOfThroughSides) = TempSideID
+ DistTemp(NrOfThroughSides) = intersecDist
+ SideID = TempSideID
+ LocalSide = localSideID
+ InterPointSelect = TempPointSelect(1:2)
+ InterPointSelectTemp(1:2,NrOfThroughSides) = TempPointSelect(1:2)
+ IntersectionPos(1:3) = PhotonProps%PhotonPos(1:3) + intersecDist*PhotonProps%PhotonDirection(1:3)
+! print*, NrOfThroughSides, SideID, IntersectionPos
+ END IF ! foundHit
+ END IF ! UsePhotonTriaTracking
+ END IF ! Mortar or regular side
+ END DO LocSideLoop ! iLocSide=1,6
+
+ IF ((NrOfThroughSides.EQ.0).AND.(.NOT.UsePhotonTriaTracking)) THEN
+ ! Check if tracking fails to converge
+ IterPhoton(1) = IterPhoton(1) + 1_8 ! Stop when MaxIterPhoton(2) is reached with this counter
+ IF(IterPhoton(1).GE.MaxIterPhoton(1))THEN
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,9999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF
+ FallBack = .TRUE.
+ LocSideLoop2: DO iLocSide=1,nlocSides
+ TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
+ localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
+ ! Side is not one of the 6 local sides
+ IF (localSideID.LE.0) CYCLE
+ NbElemID = SideInfo_Shared(SIDE_NBELEMID,TempSideID)
+ IF (NbElemID.LT.0) THEN ! Mortar side
+ CALL ABORT(__STAMP__,'Mortars not allowed for photon tracing!')
+ ELSE ! Regular side
+ ! A) TriaTracking
+ DO TriNum = 1,2
+ ThroughSide = .FALSE.
+ CALL PhotonThroughSideCheck3DFast(localSideID,ElemID,ThroughSide,TriNum)
+ IF (ThroughSide) THEN
+ CALL PhotonIntersectionWithSide(localSideID,ElemID,TriNum, IntersectionPos, PhotonLost)
+ IF (PhotonLost) CYCLE
+ NrOfThroughSides = NrOfThroughSides + 1
+ LocSidesTemp(NrOfThroughSides) = localSideID
+ TriNumTemp(NrOfThroughSides) = TriNum
+ GlobSideTemp(NrOfThroughSides) = TempSideID
+ ind = MAXLOC(ABS(PhotonProps%PhotonDirection),1)
+ intersecDist = (IntersectionPos(ind) - PhotonProps%PhotonPos(ind))/PhotonProps%PhotonDirection(ind)
+ InterPointSelect = (/.TRUE.,.TRUE./)
+ InterPointSelectTemp(1:2,NrOfThroughSides) = InterPointSelect
+ SideID = TempSideID
+ LocalSide = localSideID
+ END IF
+ END DO
+ END IF
+ END DO LocSideLoop2
+ END IF
+!
+ TriNum = TriNumTemp(1)
+ ! ----------------------------------------------------------------------------
+ ! Additional treatment if particle did not cross any sides or it crossed multiple sides
+ IF (NrOfThroughSides.NE.1) THEN
+ ! 2c) If no sides are found, the particle is deleted (very rare case). If multiple possible sides are found, additional
+ ! treatment is required, where the particle path is reconstructed (which side was crossed first) by comparing the ratio
+ ! the determinants
+ IF (NrOfThroughSides.EQ.0) THEN
+ ! Particle appears to have not crossed any of the checked sides (NrOfThroughSides=0). Deleted!
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ ELSE IF (NrOfThroughSides.GT.1) THEN
+ IF(UsePhotonTriaTracking.OR.FallBack)THEN
+ ! Use the slower search method if particle appears to have crossed more than one side (possible for irregular hexagons
+ ! and in the case of mortar elements)
+ SecondNrOfThroughSides = 0
+ minRatio = 1E90
+ oldElemIsMortar = .FALSE.
+ DO ind2 = 1, NrOfThroughSides
+ doCheckSide = .TRUE.
+ ! Check if this side was already treated
+ DO indSide = 2, 6
+ IF((DoneLastElem(1,indSide).EQ.ElemID).AND. &
+ (DoneLastElem(4,indSide).EQ.GlobSideTemp(ind2)).AND. &
+ (DoneLastElem(3,indSide).EQ.TriNumTemp(ind2))) THEN
+ doCheckSide = .FALSE.
+ END IF
+ END DO
+ IF (doCheckSide) THEN
+ IF (isMortarSideTemp(ind2)) THEN ! Mortar side
+ NbElemID = SideInfo_Shared(SIDE_ELEMID,GlobSideTemp(ind2))
+ ! Get the determinant between the old and new particle position and the nodes of the triangle which was crossed
+ CALL PhotonIntersectionWithSide(LocSidesTemp(ind2),NbElemID,TriNumTemp(ind2), IntersectionPosTemp, PhotonLost, .TRUE.)
+ IF(PhotonLost)THEN
+ ! Error in Photon TriaTracking! PhotonIntersectionWithSide() cannot determine intersection because photon is
+ ! parallel to side
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF ! PhotonLost
+ intersecDistVec(1:3) = IntersectionPosTemp(1:3) - PhotonProps%PhotonLastPos(1:3)
+ intersecDist = DOT_PRODUCT(intersecDistVec, intersecDistVec)
+ ! If the particle is inside the neighboring mortar element, it moved through this side
+ ! Ratio is always negative since detM(=detLastPartPos) is negative or zero, i.e. maximum abs is wanted
+ ! The closer the intersected side is to the last particle position the greater the absolute ratio will be
+ IF (intersecDist.LT.minRatio) THEN
+ IntersectionPos = IntersectionPosTemp
+ minRatio = intersecDist
+ SecondNrOfThroughSides = SecondNrOfThroughSides + 1
+ SideID = GlobSideTemp(ind2)
+ LocalSide = LocSidesTemp(ind2)
+ TriNum = TriNumTemp(ind2)
+ oldElemIsMortar = .TRUE.
+ END IF
+ ELSE ! Regular side
+ CALL PhotonIntersectionWithSide(LocSidesTemp(ind2),ElemID,TriNumTemp(ind2), IntersectionPosTemp, PhotonLost)
+ IF(PhotonLost)THEN
+ ! Error in Photon TriaTracking! PhotonIntersectionWithSide() cannot determine intersection because photon is
+ ! parallel to side
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF ! PhotonLost
+ intersecDistVec(1:3) = IntersectionPosTemp(1:3) - PhotonProps%PhotonLastPos(1:3)
+ intersecDist = DOT_PRODUCT(intersecDistVec, intersecDistVec)
+ IF (intersecDist.LT.minRatio) THEN
+ IntersectionPos = IntersectionPosTemp
+ minRatio = intersecDist
+ SecondNrOfThroughSides = SecondNrOfThroughSides + 1
+ SideID = GlobSideTemp(ind2)
+ LocalSide = LocSidesTemp(ind2)
+ TriNum = TriNumTemp(ind2)
+ oldElemIsMortar = .FALSE.
+ END IF
+ END IF ! isMortarSideTemp = T/F
+ END IF ! doCheckSide
+ END DO ! ind2 = 1, NrOfThroughSides
+ ! Particle that went through multiple sides first, but did not cross any sides during the second check -> Deleted!
+ IF (SecondNrOfThroughSides.EQ.0) THEN
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF
+ ELSE
+ ind2 = MINLOC(DistTemp(1:NrOfThroughSides),1)
+ IF (DistTemp(ind2).LE.0.0) THEN
+ IPWRITE(UNIT_StdOut,*) "NrOfThroughSides =", NrOfThroughSides, "DistTemp(1:NrOfThroughSides) =",DistTemp(1:NrOfThroughSides)
+ CALL abort(__STAMP__,' ERROR: Side Distance is negative!')
+ END IF
+ SideID = GlobSideTemp(ind2)
+ LocalSide = LocSidesTemp(ind2)
+ TriNum = 1
+ intersecDist = DistTemp(ind2)
+ oldElemIsMortar = .FALSE.
+ InterPointSelect = InterPointSelectTemp(1:2,ind2)
+ IntersectionPos(1:3) = PhotonProps%PhotonLastPos(1:3) + intersecDist*PhotonProps%PhotonDirection(1:3)
+ END IF
+ END IF ! NrOfThroughSides.EQ.0/.GT.1
+ END IF ! NrOfThroughSides.NE.1
+
+ ! Dummy flag
+ !IF((.NOT.UsePhotonTriaTracking).AND.(.NOT.FallBack)) TriNum=1
+
+ ! Dummy flag: only if both flags are false, set TriNum=1
+ IF(.NOT.(UsePhotonTriaTracking.OR.FallBack)) TriNum=1
+ ! ----------------------------------------------------------------------------
+ ! 3) In case of a boundary, perform the appropriate boundary interaction
+ IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN
+ OldElemID=ElemID
+ iPBC = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))
+ BCType = PartBound%TargetBoundCond(iPBC)
+ SELECT CASE(BCType)
+ CASE(1) !PartBound%OpenBC)
+ IF(UsePhotonTriaTracking.OR.Fallback)THEN
+ IF(NrOfThroughSides.LT.2)THEN
+ CALL PhotonIntersectionWithSide(LocalSide,ElemID,TriNum, IntersectionPos, PhotonLost)
+ IF(PhotonLost)THEN
+ ! Error in open BC Photon TriaTracking! PhotonIntersectionWithSide() cannot determine intersection because photon is
+ ! parallel to side
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF ! PhotonLost
+ END IF ! NrOfThroughSides.LT.2
+ END IF
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ IF (RadObservationPointMethod.EQ.1) THEN
+ IF (PointInObsCone(IntersectionPos(1:3))) THEN
+ IF (PhotonIntersectSensor(IntersectionPos(1:3), PhotonProps%PhotonDirection(1:3))) THEN
+ RadObservation_Emission(PhotonProps%WaveLength) = RadObservation_Emission(PhotonProps%WaveLength) + PhotonProps%PhotonEnergy
+ RadObservation_EmissionPart(PhotonProps%WaveLength) = RadObservation_EmissionPart(PhotonProps%WaveLength) + 1
+ END IF
+ END IF
+ ELSE IF (RadObservationPointMethod.EQ.2) THEN
+ IF (PhotonOnLineOfSight(PhotonProps%PhotonDirection(1:3))) THEN
+ RadObservation_Emission(PhotonProps%WaveLength) = RadObservation_Emission(PhotonProps%WaveLength) + PhotonProps%PhotonEnergy
+ RadObservation_EmissionPart(PhotonProps%WaveLength) = RadObservation_EmissionPart(PhotonProps%WaveLength) + 1
+ END IF
+ END IF
+ DONE = .TRUE.
+
+ CASE(2) ! PartBound%ReflectiveBC
+ ! Backup photon direction for ray tracing
+ IF(RadiationAbsorptionModel.EQ.0) PhotonProps%PhotonDirectionBeforeReflection(1:3) = PhotonProps%PhotonDirection(1:3)
+
+ ! Check if specular of diffuse reflection
+ IF (PartBound%PhotonSpecularReflection(iPBC)) THEN
+ ! Specular reflection
+ IF ((NrOfThroughSides.LT.2).AND.(UsePhotonTriaTracking.OR.Fallback)) THEN
+ CALL PerfectPhotonReflection(LocalSide, ElemID, TriNum, IntersectionPos, .FALSE.)
+ ELSE
+ !TriNum=1
+ CALL PerfectPhotonReflection(LocalSide, ElemID, TriNum, IntersectionPos, .TRUE.)
+ END IF
+ ELSE
+ ! Diffuse reflection
+ IF ((NrOfThroughSides.LT.2).AND.(UsePhotonTriaTracking.OR.Fallback)) THEN
+ CALL DiffusePhotonReflection(LocalSide, ElemID, TriNum, IntersectionPos, .FALSE.)
+ ELSE
+ CALL DiffusePhotonReflection(LocalSide, ElemID, TriNum, IntersectionPos, .TRUE.)
+ END IF
+ END IF
+
+ ! Check if ray tracing is active
+ IF(RadiationAbsorptionModel.EQ.0)THEN
+ CALL CalcAbsoprtion(IntersectionPos(1:3), ElemID, DONE, before = .TRUE.)
+ IF (.NOT.DONE) THEN
+ CALL CalcWallAbsoprtion(IntersectionPos(1:3),SideID, DONE, RayForceAbsorption)
+ CALL CalcAbsoprtion(IntersectionPos(1:3), ElemID, DONE, before = .FALSE.)
+ END IF ! .NOT.DONE
+ ELSE
+ CALL CalcAbsoprtion(IntersectionPos(1:3), ElemID, DONE)
+ IF (.NOT.DONE) CALL CalcWallAbsoprtion(IntersectionPos(1:3),SideID, DONE)
+ END IF ! RadiationAbsorptionModel.EQ.0
+
+ CASE(3) ! PartBound%PeriodicBC
+ IF((NrOfThroughSides.LT.2).AND.(UsePhotonTriaTracking.OR.Fallback))THEN
+ CALL PhotonIntersectionWithSide(LocalSide,ElemID,TriNum, IntersectionPos, PhotonLost)
+ IF(PhotonLost)THEN
+ ! Error in periodic Photon TriaTracking! PhotonIntersectionWithSide() cannot determine intersection because photon is
+ ! parallel to side
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ END IF ! PhotonLost
+ END IF ! NrOfThroughSides.LT.2
+ CALL CalcAbsoprtion(IntersectionPos(1:3), ElemID, DONE)
+ ! Move photon across periodic BC
+ CALL PeriodicPhotonBC(LocalSide,ElemID,TriNum,IntersectionPos,.TRUE.,SideID)
+ CASE DEFAULT
+ CALL abort(__STAMP__,' ERROR: PartBound not associated!. (unknown case)',BCType,999.)
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+
+
+ IF ((BCType.EQ.2).OR.(BCType.EQ.10)) THEN
+ DoneLastElem(:,:) = 0
+ LastInterPointSelect = .FALSE.
+ ELSE
+ DO ind2= 5, 1, -1
+ DoneLastElem(:,ind2+1) = DoneLastElem(:,ind2)
+ END DO
+ DoneLastElem(1,1) = OldElemID
+ DoneLastElem(2,1) = LocalSide
+ DoneLastElem(3,1) = TriNum
+ DoneLastElem(4,1) = SideID
+ LastInterPointSelect= InterPointSelect
+ END IF
+ ELSE ! BC(SideID).LE.0
+ DO ind2= 5, 1, -1
+ DoneLastElem(:,ind2+1) = DoneLastElem(:,ind2)
+ END DO
+ DoneLastElem(1,1) = ElemID
+ DoneLastElem(2,1) = LocalSide
+ DoneLastElem(3,1) = TriNum
+ DoneLastElem(4,1) = SideID
+ LastInterPointSelect = InterPointSelect
+
+ IF (oldElemIsMortar) THEN
+ ElemID = SideInfo_Shared(SIDE_ELEMID,SideID)
+ CALL PhotonIntersectionWithSide(LocalSide,ElemID,TriNum, IntersectionPos, PhotonLost, IsMortar=.TRUE.)
+ ELSE
+ ! For bilinear tracing, the intersection point is already calculated by the tracking algorithm itself
+ IF(UsePhotonTriaTracking) CALL PhotonIntersectionWithSide(LocalSide,ElemID,TriNum, IntersectionPos, PhotonLost)
+ END IF
+
+ ! Check if lost during intersection
+ IF(PhotonLost)THEN
+ ! Error in Photon TriaTracking! PhotonIntersectionWithSide() cannot determine intersection because photon is parallel to side
+ CALL StoreLostPhotonProperties(ElemID,TRIM(__FILE__),__LINE__,999)
+ Done = .TRUE.
+ EXIT THEWHILELOOP
+ ELSE
+ ! Absorption
+ IF (oldElemIsMortar) THEN
+ CALL CalcAbsoprtion(IntersectionPos(1:3),DoneLastElem(1,1), DONE)
+ ELSE
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ ElemID = SideInfo_Shared(SIDE_NBELEMID,SideID)
+ END IF
+ END IF ! PhotonLost
+ END IF ! BC(SideID).GT./.LE. 0
+
+ ! Check if output to PartStateBoundary is activated
+ IF(PhotonModeBPO.EQ.2)THEN
+ CALL StoreBoundaryParticleProperties(0,&
+ 999,&
+ IntersectionPos,&
+ UNITVECTOR(PhotonProps%PhotonDirection(1:3)),(/0.0,0.0,1.0/),&
+ iPartBound=0,&
+ mode=2,&
+ MPF_optIN=0.0,&
+ Velo_optIN=PhotonProps%PhotonDirection(1:3))
+ END IF ! PhotonModeBPO.EQ.2
+
+ IF (ElemID.LT.1) CALL abort(__STAMP__ ,'ERROR: Element not defined! Please increase the size of the halo region (HaloEpsVelo)!')
+END DO THEWHILELOOP ! .NOT.PartisDone
+
+
+END SUBROUTINE PhotonTriaTracking
+
+
+
+SUBROUTINE Photon2DSymTracking()
+!===================================================================================================================================
+! Routine for tracking of moving particles and boundary interaction using triangulated sides.
+! 1) Loop over all particles that are still inside
+! 2) Perform tracking until the particle is considered "done" (either localized or deleted)
+! 2a) Perform a check based on the determinant of (3x3) matrix of the vectors from the particle position to the nodes of each
+! triangle (ParticleInsideQuad3D)
+! 2b) If particle is not within the given element in a), the side through which the particle went is determined by checking
+! each side of the element (ParticleThroughSideCheck3DFast)
+! 2c) If no sides are found, the particle is deleted (very rare case). If multiple possible sides are found, additional
+! treatment is required, where the particle path is reconstructed (which side was crossed first) by comparing the ratio
+! the determinants
+! 3) In case of a boundary, determine the intersection and perform the appropriate boundary interaction (GetBoundaryInteraction)
+!===================================================================================================================================
+! MODULES
+USE MOD_Preproc
+USE MOD_Globals
+USE MOD_Particle_Mesh_Vars
+USE MOD_Particle_Boundary_Vars, ONLY:PartBound
+USE MOD_Photon_TrackingVars, ONLY:PhotonProps
+USE MOD_RadiationTrans_Vars, ONLY:RadObservation_Emission, RadObservationPointMethod,RadObservation_EmissionPart
+USE MOD_Photon_TrackingTools, ONLY:CalcAbsoprtion, CalcWallAbsoprtion, DiffusePhotonReflection2D, PointInObsCone
+USE MOD_Photon_TrackingTools, ONLY:PhotonIntersectionWithSide2D, RotatePhotonIn2DPlane, PerfectPhotonReflection2D
+USE MOD_Photon_TrackingTools, ONLY:PhotonIntersectSensor, PhotonOnLineOfSight
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NbElemID, ind, nbSideID, nMortarElems, BCType, NblocSideID, OrigElem
+INTEGER :: ElemID, OldElemID, LocalSide, NrOfThroughSides, localSideID, nlocSides
+INTEGER :: SideID, TempSideID, iLocSide, correctSide, LastSide
+INTEGER :: LocSidesTemp(1:6), GlobSideTemp(1:6)
+LOGICAL :: oldElemIsMortar, isMortarSideTemp(1:6), isLastSide, ThroughSide, Done
+REAL :: IntersectionPos(1:6), IntersectionPosTemp(1:6,4), DistanceTemp(1:6), Distance
+!===================================================================================================================================
+Done = .FALSE.
+ElemID = PhotonProps%ElemID
+OrigElem = ElemID
+SideID = 0
+LastSide = 0
+! 1) Loop tracking until Photon is considered "done" (either absorbed or deleted)
+DO WHILE (.NOT.Done)
+ oldElemIsMortar = .FALSE.
+ NrOfThroughSides = 0
+ LocSidesTemp = 0
+ GlobSideTemp = 0
+ DistanceTemp = 0.0
+ IntersectionPosTemp = 0.0
+ isMortarSideTemp = .FALSE.
+ nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID)
+ DO iLocSide=1,nlocSides
+ isLastSide = .FALSE.
+ TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide
+ localSideID = SideInfo_Shared(SIDE_LOCALID,TempSideID)
+ ! Side is not one of the 6 local sides
+ IF (localSideID.LE.0) CYCLE
+ IF (SideIsSymSide(TempSideID)) CYCLE
+ IF (SideInfo_Shared(SIDE_BCID,TempSideID).GT.0) THEN
+ IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,TempSideID))).EQ.11) CYCLE
+ END IF
+ IF (LastSide.EQ.TempSideID) isLastSide = .TRUE.
+ NbElemID = SideInfo_Shared(SIDE_NBELEMID,TempSideID)
+ IF (NbElemID.LT.0) THEN ! Mortar side
+ nMortarElems = MERGE(4,2,SideInfo_Shared(SIDE_NBELEMID,TempSideID).EQ.-1)
+ DO ind = 1, nMortarElems
+ isLastSide = .FALSE.
+ nbSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide + ind
+ NbElemID = SideInfo_Shared(SIDE_NBELEMID,nbSideID)
+ ! If small mortar element not defined, abort. Every available information on the compute-node is kept in shared memory, so
+ ! no way to recover it during runtime
+ IF (LastSide.EQ.nbSideID) isLastSide = .TRUE.
+ IF (NbElemID.LT.1) CALL abort(__STAMP__,'Small mortar element not defined!',ElemID)
+ ! For small mortar sides, SIDE_NBSIDEID contains the SideID of the corresponding big mortar side
+ nbSideID = SideInfo_Shared(SIDE_NBSIDEID,nbSideID)
+ NblocSideID = SideInfo_Shared(SIDE_LOCALID,nbSideID)
+ ThroughSide = .FALSE.
+ CALL PhotonIntersectionWithSide2D(NblocSideID,NbElemID,ThroughSide,IntersectionPos, isLastSide,Distance)
+ IF (ThroughSide) THEN
+ ! Store the information for this side for future checks, if this side was already treated
+ oldElemIsMortar = .TRUE.
+ NrOfThroughSides = NrOfThroughSides + 1
+ LocSidesTemp(NrOfThroughSides) = NblocSideID
+ GlobSideTemp(NrOfThroughSides) = nbSideID
+ DistanceTemp(NrOfThroughSides) = Distance
+ IntersectionPosTemp(1:3,NrOfThroughSides) = IntersectionPos(1:3)
+ isMortarSideTemp(NrOfThroughSides) = .TRUE.
+ SideID = nbSideID
+ LocalSide = NblocSideID
+ END IF
+ END DO
+ ELSE ! Regular side
+ ThroughSide = .FALSE.
+ CALL PhotonIntersectionWithSide2D(localSideID,ElemID,ThroughSide,IntersectionPos, isLastSide, Distance)
+ IF (ThroughSide) THEN
+ NrOfThroughSides = NrOfThroughSides + 1
+ SideID = TempSideID
+ LocalSide = localSideID
+ LocSidesTemp(NrOfThroughSides) = localSideID
+ GlobSideTemp(NrOfThroughSides) = TempSideID
+ DistanceTemp(NrOfThroughSides) = Distance
+ IntersectionPosTemp(1:3,NrOfThroughSides) = IntersectionPos(1:3)
+ END IF
+ END IF ! Mortar or regular side
+ END DO ! iLocSide=1,4
+ ! ----------------------------------------------------------------------------
+ ! Addition treatment if particle did not cross any sides or it crossed multiple sides
+ IF (NrOfThroughSides.NE.1) THEN
+ ! 2c) If no sides are found, the particle is deleted (very rare case). If multiple possible sides are found, additional
+ ! treatment is required, where the particle path is reconstructed (which side was crossed first) by comparing the ratio
+ ! the determinants
+ IF (NrOfThroughSides.EQ.0) THEN
+ ! Particle appears to have not crossed any of the checked sides. Deleted!
+ IPWRITE(*,*) 'Error in Photon 2DAxisTracking! Photon lost. Element:', ElemID
+ IPWRITE(*,*) 'LastPos: ', PhotonProps%PhotonLastPos(1:3)
+ IPWRITE(*,*) 'Pos: ', PhotonProps%PhotonPos(1:3)
+ IPWRITE(*,*) 'Direction:', PhotonProps%PhotonDirection(1:3)
+ IPWRITE(*,*) 'OrigElem:', OrigElem
+ IPWRITE(*,*) 'Photon deleted!'
+ Done = .TRUE.
+ EXIT
+ ELSE IF (NrOfThroughSides.GT.1) THEN
+ correctSide = MINLOC(DistanceTemp(1:NrOfThroughSides),DIM=1)
+ oldElemIsMortar = isMortarSideTemp(correctSide)
+ SideID = GlobSideTemp(correctSide)
+ LocalSide = LocSidesTemp(correctSide)
+ IntersectionPos(1:3) = IntersectionPosTemp(1:3,correctSide)
+ END IF
+ END IF ! NrOfThroughSides.NE.1
+ ! ----------------------------------------------------------------------------
+ ! 3) In case of a boundary, perform the appropriate boundary interaction
+ IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN
+ OldElemID=ElemID
+ BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))
+ SELECT CASE(BCType)
+ CASE(1) !PartBound%OpenBC)
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ DONE = .TRUE.
+ IF (RadObservationPointMethod.EQ.1) THEN
+ IF (PointInObsCone(IntersectionPos(1:3))) THEN
+ IF (PhotonIntersectSensor(IntersectionPos(1:3), PhotonProps%PhotonDirection(1:3))) THEN
+ RadObservation_Emission(PhotonProps%WaveLength) = RadObservation_Emission(PhotonProps%WaveLength) + PhotonProps%PhotonEnergy
+ RadObservation_EmissionPart(PhotonProps%WaveLength) = RadObservation_EmissionPart(PhotonProps%WaveLength) + 1
+ END IF
+ END IF
+ ELSE IF (RadObservationPointMethod.EQ.2) THEN
+ IF (PhotonOnLineOfSight(PhotonProps%PhotonDirection(1:3))) THEN
+ RadObservation_Emission(PhotonProps%WaveLength) = RadObservation_Emission(PhotonProps%WaveLength) + PhotonProps%PhotonEnergy
+ RadObservation_EmissionPart(PhotonProps%WaveLength) = RadObservation_EmissionPart(PhotonProps%WaveLength) + 1
+ END IF
+ END IF
+ CYCLE
+ CASE(2)
+ IF (PartBound%PhotonSpecularReflection(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID)))) THEN
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ IF (.NOT.DONE) CALL PerfectPhotonReflection2D(LocalSide,ElemID, IntersectionPos)
+ ELSE
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ IF (.NOT.DONE) CALL CalcWallAbsoprtion(IntersectionPos(1:3),SideID, DONE)
+ IF (.NOT.DONE) CALL DiffusePhotonReflection2D(LocalSide,ElemID, IntersectionPos)
+ END IF
+ LastSide = SideID
+ CASE DEFAULT
+ CALL abort(__STAMP__,' ERROR: PartBound not associated!. (unknown case)',999,999.)
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+ ELSE ! BC(SideID).LE.0
+ IF (oldElemIsMortar) THEN
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ ElemID = SideInfo_Shared(SIDE_ELEMID,SideID)
+ LastSide = SideID
+ ELSE
+ CALL CalcAbsoprtion(IntersectionPos(1:3),ElemID, DONE)
+ ElemID = SideInfo_Shared(SIDE_NBELEMID,SideID)
+ LastSide = SideInfo_Shared(SIDE_NBSIDEID,SideID)
+ END IF
+ END IF ! BC(SideID).GT./.LE. 0
+
+ IF (.NOT.DONE) CALL RotatePhotonIn2DPlane(IntersectionPos(1:3))
+ IF (ElemID.LT.1) THEN
+ CALL abort(__STAMP__ ,'ERROR: Element not defined! Please increase the size of the halo region (HaloEpsVelo)!')
+ END IF
+END DO ! .NOT.PartisDone
+END SUBROUTINE Photon2DSymTracking
+
+SUBROUTINE PhotonComputeBiLinearIntersection(isHit,SideID, Dist,PointSelect,OldPointSelect,ElemCheck_Opt)
+!===================================================================================================================================
+! Compute the Intersection with planar surface, improved version by
+! Haselbacher, A.; Najjar, F. M. & Ferry, J. P., An efficient and robust particle-localization algorithm for unstructured grids
+! Journal of Computational Physics, Elsevier BV, 2007, 225, 2198-2213
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: EpsMach
+USE MOD_Utils ,ONLY: QuadraticSolver
+USE MOD_Mesh_Tools ,ONLY: GetCNSideID, GetCNElemID
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_Particle_Surfaces_Vars ,ONLY: BaseVectors0,BaseVectors1,BaseVectors2,BaseVectors3,SideNormVec,epsilonTol!,BaseVectorsScale
+USE MOD_Particle_Surfaces ,ONLY: CalcNormAndTangBilinear
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+#ifdef CODE_ANALYZE
+USE MOD_Particle_Surfaces_Vars ,ONLY: BezierControlPoints3D
+USE MOD_Particle_Tracking_Vars ,ONLY: MPIRankOut
+USE MOD_Mesh_Vars ,ONLY: NGeo
+#endif /*CODE_ANALYZE*/
+#if USE_MPI
+!USE MOD_Mesh_Vars ,ONLY: BC
+#endif /*USE_MPI*/
+USE MOD_Particle_Intersection ,ONLY: ComputeXi,ComputeSurfaceDistance2
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER,INTENT(IN) :: SideID
+LOGICAL,INTENT(IN),OPTIONAL :: ElemCheck_Opt
+REAL, INTENT(OUT) :: Dist
+LOGICAL,INTENT(OUT) :: PointSelect(2)
+LOGICAL,INTENT(IN) :: OldPointSelect(2)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: isHit
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL,DIMENSION(4) :: a1,a2
+REAL,DIMENSION(1:3,1:4) :: BiLinearCoeff,NormalCoeff
+REAL :: A,B,C,alpha, xitild, etatild
+REAL :: xi(2),eta(2),t(2),scaleFac
+INTEGER :: CNSideID,InterType,nRoot
+LOGICAL :: ElemCheck
+!===================================================================================================================================
+
+! set alpha to minus one // no intersection
+alpha = -1.0
+xitild = -2.0
+etatild = -2.0
+Dist = 0.0
+isHit = .FALSE.
+PointSelect = .FALSE.
+CNSideID = GetCNSideID(SideID)
+! compute initial vectors
+BiLinearCoeff(:,1) = 0.25*BaseVectors3(:,SideID)
+BiLinearCoeff(:,2) = 0.25*BaseVectors1(:,SideID)
+BiLinearCoeff(:,3) = 0.25*BaseVectors2(:,SideID)
+BiLinearCoeff(:,4) = 0.25*BaseVectors0(:,SideID)
+
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(110("-"))')
+ WRITE(UNIT_stdout,'(A)') ' | Output of bilinear intersection equation constants: '
+ WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | SideNormVec : ',SideNormVec(1:3,CNSideID)
+ WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(1,1:4)
+ WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(2,1:4)
+ WRITE(UNIT_stdout,'(A,4(1X,G0))') ' | BilinearCoeff: ',BilinearCoeff(3,1:4)
+ WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | Beziercontrolpoint1: ',BezierControlPoints3D(:,0,0,SideID)
+ WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | Beziercontrolpoint2: ',BezierControlPoints3D(:,NGeo,0,SideID)
+ WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | Beziercontrolpoint3: ',BezierControlPoints3D(:,0,NGeo,SideID)
+ WRITE(UNIT_stdout,'(A,3(1X,G0))') ' | Beziercontrolpoint4: ',BezierControlPoints3D(:,NGeo,NGeo,SideID)
+ END IF
+#endif /*CODE_ANALYZE*/
+
+! Check if the site can be encountered. Both vectors are already normalized
+scaleFac = DOT_PRODUCT(PhotonProps%PhotonDirection,SideNormVec(1:3,CNSideID))
+IF (ABS(scaleFac).LT.epsilontol) RETURN
+
+! Haselbacher et al. define d = d - r_p
+BiLinearCoeff(:,4) = BiLinearCoeff(:,4) - PhotonProps%PhotonPos(1:3)
+
+! Calculate component normal to ray
+NormalCoeff(:,1) = BiLinearCoeff(:,1) - SUM(BiLinearCoeff(:,1)*PhotonProps%PhotonDirection(:))*PhotonProps%PhotonDirection
+NormalCoeff(:,2) = BiLinearCoeff(:,2) - SUM(BiLinearCoeff(:,2)*PhotonProps%PhotonDirection(:))*PhotonProps%PhotonDirection
+NormalCoeff(:,3) = BiLinearCoeff(:,3) - SUM(BiLinearCoeff(:,3)*PhotonProps%PhotonDirection(:))*PhotonProps%PhotonDirection
+NormalCoeff(:,4) = BiLinearCoeff(:,4) - SUM(BiLinearCoeff(:,4)*PhotonProps%PhotonDirection(:))*PhotonProps%PhotonDirection
+
+! A1 is X_xz = X_z - X_x
+A1(:) = NormalCoeff(3,:) - NormalCoeff(1,:)
+! A2 is X_yz = X_z - X_y
+A2(:) = NormalCoeff(3,:) - NormalCoeff(2,:)
+
+! Bring into quadratic form
+A = a1(1)*a2(3) - a2(1)*a1(3)
+B = a1(1)*a2(4) - a2(1)*a1(4) + a1(2)*a2(3) - a2(2)*a1(3)
+C = a1(2)*a2(4) - a2(2)*a1(4)
+
+! Scale with ^2 and cell-scale (~area) for getting coefficients at least approx. in the order of 1
+!scaleFac = scaleFac**2 * BaseVectorsScale(SideID) !<...>^2 * cell-scale
+!scaleFac = 1./scaleFac
+!A = A * scaleFac
+!B = B * scaleFac
+!C = C * scaleFac
+
+CALL QuadraticSolver(A,B,C,nRoot,Eta(1),Eta(2))
+
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A)') ' | Output after QuadraticSolver: '
+ WRITE(UNIT_stdout,'(A,I0,A,2(1X,G0))') ' | number of root: ',nRoot,' | Eta: ',Eta(1:2)
+ END IF
+#endif /*CODE_ANALYZE*/
+
+! nRoot equals the number of possible intersections with the bilinear surface. However, only values between [-1,1] are valid
+SELECT CASE(nRoot)
+ ! No intersection
+ CASE(0) ! nRoot = 0
+ RETURN
+
+ ! One possible intersection
+ CASE(1) ! nRoot = 1
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A)') ' | nRoot = 1 '
+ END IF
+#endif /*CODE_ANALYZE*/
+ ! Check if eta is valid
+ IF (ABS(eta(1)).LE.1.0) THEN
+ ! check for Xi only, if eta is possible
+ xi(1) = ComputeXi(eta(1),A1=A1,A2=A2)
+
+ IF (Xi(1).EQ.HUGE(1.)) THEN
+ RETURN
+ IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' Both denominators zero when calculating Xi in bilinear intersection'
+ IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global SideID: ', SideID
+ IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global ElemID: ', SideInfo_Shared(SIDE_ELEMID,SideID)
+ IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' LastPhotonPos: ', PhotonProps%PhotonPos(1:3)
+ IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' PhotonDirection: ', PhotonProps%PhotonDirection(1:3)
+ CALL ABORT(__STAMP__,'Invalid intersection with bilinear side!',SideID)
+ END IF
+
+ IF( ABS(xi(1)).LE.1.0) THEN
+ ! compute alpha only with valid xi and eta
+ t(1) = ComputeSurfaceDistance2(BiLinearCoeff,xi(1),eta(1),PhotonProps%PhotonDirection)
+ IF ((t(1).GT.ABS(EpsMach)).AND.(.NOT.OldPointSelect(1))) THEN
+ alpha = t(1)
+ xitild = xi(1)
+ etatild = eta(1)
+ isHit = .TRUE.
+ Dist = t(1)
+ PointSelect(1) = .TRUE.
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A,G0,A,G0)') ' | t(1): ',t(1),' | epsilonTolerance: ',epsilontol
+ END IF
+#endif /*CODE_ANALYZE*/
+ ! This is the only possible intersection, so we are done
+ RETURN
+ ELSE ! t is not in range
+ RETURN
+ END IF
+ ELSE ! xi not in range
+ RETURN
+ END IF ! ABS(xi(1)).LE.1.0
+ ELSE ! eta not in range
+ RETURN
+ END IF ! ABS(eta(1)).LE.1.0
+
+ CASE(2) ! nRoot = 2
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A)') ' | nRoot = 2 '
+ END IF
+#endif /*CODE_ANALYZE*/
+ InterType = 0
+ t(:) =-1.
+
+ ! Check if eta(1)) is valid
+ IF (ABS(eta(1)).LE.1.0) THEN
+ ! check for Xi only, if eta is possible
+ xi(1) = ComputeXi(eta(1),A1=A1,A2=A2)
+
+ IF (Xi(1).EQ.HUGE(1.)) THEN
+ return
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' Both denominators zero when calculating Xi in bilinear intersection'
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global SideID: ', SideID
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global ElemID: ', SideInfo_Shared(SIDE_ELEMID,SideID)
+! IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' LastPhotonPos: ', PhotonProps%PhotonPos(1:3)
+! IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' PhotonDirection: ', PhotonProps%PhotonDirection(1:3)
+! CALL ABORT(__STAMP__,'Invalid intersection with bilinear side!',SideID)
+ END IF
+
+ IF( ABS(xi(1)).LE.1.0) THEN
+ ! compute alpha only with valid xi and eta
+ t(1) = ComputeSurfaceDistance2(BiLinearCoeff,xi(1),eta(1),PhotonProps%PhotonDirection)
+
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A,G0,A,G0)') ' | xi: ',xi(1),' | t: ',t(1)
+ END IF
+#endif /*CODE_ANALYZE*/
+
+ IF (t(1).GT.ABS(EpsMach)) THEN
+ InterType = InterType+1
+ isHit = .TRUE.
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A,E15.8,A,E15.8)') ' | t(1): ',t(1),' | epsilonTolerance: ',epsilontol
+ END IF
+#endif /*CODE_ANALYZE*/
+ END IF
+ END IF ! ABS(xi(1)).LE.1.0
+ END IF ! ABS(eta(1)).LE.1.0
+
+ ! Check if eta(2) is valid
+ IF (ABS(eta(2)).LE.1.0) THEN
+ ! check for Xi only, if eta is possible
+ xi(2) = ComputeXi(eta(2),A1=A1,A2=A2)
+
+ IF (Xi(2).EQ.HUGE(1.)) THEN
+ return
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' Both denominators zero when calculating Xi in bilinear intersection'
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global SideID: ', SideID
+! IPWRITE(UNIT_stdOut,'(I0,A,I0)') ' global ElemID: ', SideInfo_Shared(SIDE_ELEMID,SideID)
+! IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' LastPhotonPos: ', PhotonProps%PhotonPos(1:3)
+! IPWRITE(UNIT_stdOut,'(I0,A,3(1X,ES25.17E3))') ' PhotonDirection: ', PhotonProps%PhotonDirection(1:3)
+! CALL ABORT(__STAMP__,'Invalid intersection with bilinear side!',SideID)
+ END IF
+
+ IF( ABS(xi(2)).LE.1.0) THEN
+ ! compute alpha only with valid xi and eta
+ t(2) = ComputeSurfaceDistance2(BiLinearCoeff,xi(2),eta(2),PhotonProps%PhotonDirection)
+
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A,G0,A,G0)') ' | xi: ',xi(2),' | t: ',t(2)
+ END IF
+#endif /*CODE_ANALYZE*/
+
+ IF (t(2).GT.ABS(EpsMach)) THEN
+ InterType = InterType+2
+ isHit = .TRUE.
+#ifdef CODE_ANALYZE
+ IF(MPIRANKOUT.EQ.MyRank)THEN
+ WRITE(UNIT_stdout,'(A,E15.8,A,E15.8)') ' | t(2): ',t(2),' | epsilonTolerance: ',epsilontol
+ END IF
+#endif /*CODE_ANALYZE*/
+ END IF
+ END IF ! ABS(xi(2)).LE.1.0
+ END IF ! ABS(eta(2)).LE.1.0
+
+ SELECT CASE(InterType)
+ ! No intersection found, return
+ CASE(0)
+ RETURN
+
+ ! First intersection is only hit
+ CASE(1)
+ IF (.NOT.OldPointSelect(1)) THEN
+ alpha =t (1)
+ xitild =xi (1)
+ etatild=eta(1)
+ Dist = t(1)
+ PointSelect(1)=.TRUE.
+ ELSE
+ isHit = .FALSE.
+ RETURN
+ END IF
+ ! Second intersection is only hit
+ CASE(2)
+ IF (.NOT.OldPointSelect(2)) THEN
+ alpha =t (2)
+ xitild =xi (2)
+ etatild=eta(2)
+ Dist = t(2)
+ PointSelect(2)=.TRUE.
+ ELSE
+ isHit = .FALSE.
+ RETURN
+ END IF
+
+ ! Two intersections found, decide on the correct one
+ CASE(3)
+ ! If side is a BC side, take only the intersection encountered first
+ IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN
+ ! Check if the element is supposed to be checked
+ ElemCheck = .FALSE.
+ IF(PRESENT(ElemCheck_Opt))THEN
+ ElemCheck = ElemCheck_Opt
+ END IF
+
+ IF(ElemCheck)THEN
+ alpha =-1
+ xitild =-2
+ etatild=-2
+ ELSE
+ ! Apparently we don't care about the direction of the PartTrajectory
+ IF((ABS(t(1)).LT.ABS(t(2))).AND.(.NOT.OldPointSelect(1)))THEN
+ alpha =t (1)
+ xitild =xi (1)
+ etatild=eta(1)
+ Dist = t(1)
+ PointSelect(1)=.TRUE.
+ ELSE IF (.NOT.OldPointSelect(2)) THEN
+ alpha =t (2)
+ xitild =xi (2)
+ etatild=eta(2)
+ Dist = t(2)
+ PointSelect(2)=.TRUE.
+ ELSE
+ isHit = .FALSE.
+ END IF
+ END IF
+ ! Inner side with double intersection, particle leaves and enters element
+ ELSE
+ alpha =-1
+ xitild = 0.
+ etatild= 0.
+ isHit = .FALSE.
+ END IF
+ END SELECT ! InterType
+END SELECT ! nRoot
+
+END SUBROUTINE PhotonComputeBiLinearIntersection
+
+END MODULE MOD_Photon_Tracking
diff --git a/src/radiation/radiative_transfer/tracking/radtrans_tracking_output.f90 b/src/radiation/radiative_transfer/tracking/radtrans_tracking_output.f90
new file mode 100644
index 000000000..440f2f3c7
--- /dev/null
+++ b/src/radiation/radiative_transfer/tracking/radtrans_tracking_output.f90
@@ -0,0 +1,774 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Photon_TrackingOutput
+!===================================================================================================================================
+! Module for the main radiation transport routines
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: WritePhotonSurfSampleToHDF5,WritePhotonVolSampleToHDF5
+!===================================================================================================================================
+
+CONTAINS
+
+SUBROUTINE WritePhotonVolSampleToHDF5()
+!===================================================================================================================================
+! Writes Radiation values to HDF5
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_Mesh_Vars ,ONLY: nElems,MeshFile,offSetElem,sJ
+USE MOD_RayTracing_Vars ,ONLY: Ray,nVarRay,U_N_Ray,U_N_Ray_loc,N_DG_Ray,PREF_VDM_Ray,N_DG_Ray_loc,N_Inter_Ray
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergyLoc1st,RayElemPassedEnergyLoc2nd
+USE MOD_RayTracing_Vars ,ONLY: RaySecondaryVectorX,RaySecondaryVectorY,RaySecondaryVectorZ,ElemVolume,RayElemEmission
+USE MOD_HDF5_output ,ONLY: GatheredWriteArray
+#if USE_MPI
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergy_Shared,RayElemOffset,RayElemPassedEnergyHO_Shared
+#else
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergy
+#endif /*USE_MPI*/
+USE MOD_io_HDF5
+USE MOD_HDF5_output ,ONLY: GenerateFileSkeleton
+USE MOD_HDF5_Output_ElemData ,ONLY: WriteAdditionalElemData
+USE MOD_Mesh_Vars ,ONLY: offsetElem,nGlobalElems
+USE MOD_ChangeBasis ,ONLY: ChangeBasis3D
+USE MOD_Interpolation_Vars ,ONLY: NodeType
+USE MOD_Interpolation ,ONLY: GetVandermonde
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared
+USE MOD_Photon_TrackingVars ,ONLY: RadiationVolState
+USE MOD_HDF5_Output_State ,ONLY: WriteElemDataToSeparateContainer
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+INTEGER :: iElem,iGlobalElem,iCNElem,Nloc,k,l,m
+CHARACTER(LEN=255), ALLOCATABLE :: StrVarNames(:)
+REAL :: UNMax(nVarRay,0:Ray%NMax,0:Ray%NMax,0:Ray%NMax,PP_nElems)
+#if USE_MPI
+INTEGER :: NlocOffset
+#endif /*USE_MPI*/
+REAL :: J_N(1,0:PP_N,0:PP_N,0:PP_N)
+REAL :: J_Nmax(1:1,0:Ray%NMax,0:Ray%NMax,0:Ray%NMax)
+REAL :: J_Nloc(1:1,0:Ray%NMax,0:Ray%NMax,0:Ray%NMax)
+REAL :: IntegrationWeight
+REAL :: Vdm_GaussN_NMax(0:PP_N,0:Ray%NMax) !< for interpolation to Analyze points (from NodeType nodes to Gauss-Lobatto nodes)
+REAL, ALLOCATABLE :: Vdm_GaussN_Nloc(:,:) !< for interpolation to Analyze points (from NodeType nodes to Gauss-Lobatto nodes)
+REAL, PARAMETER :: tolerance=1e-2
+!===================================================================================================================================
+SWRITE(UNIT_stdOut,'(a)',ADVANCE='NO') ' WRITE Radiation TO HDF5 FILE...'
+
+ALLOCATE(RayElemPassedEnergyLoc1st(1:nElems))
+ALLOCATE(RayElemPassedEnergyLoc2nd(1:nElems))
+ALLOCATE(ElemVolume(1:nElems))
+RayElemPassedEnergyLoc1st=-1.0
+RayElemPassedEnergyLoc2nd=-1.0
+ElemVolume=-1.0
+CALL AddToElemData(ElementOut,'RayElemPassedEnergy1st',RealArray=RayElemPassedEnergyLoc1st)
+CALL AddToElemData(ElementOut,'RayElemPassedEnergy2nd',RealArray=RayElemPassedEnergyLoc2nd)
+CALL AddToElemData(ElementOut,'RaySecondaryVectorX' ,RealArray=RaySecondaryVectorX)
+CALL AddToElemData(ElementOut,'RaySecondaryVectorY' ,RealArray=RaySecondaryVectorY)
+CALL AddToElemData(ElementOut,'RaySecondaryVectorZ' ,RealArray=RaySecondaryVectorZ)
+CALL AddToElemData(ElementOut,'ElemVolume' ,RealArray=ElemVolume)
+CALL AddToElemData(ElementOut,'Nloc',IntArray=N_DG_Ray_loc)
+
+! Copy data from shared array
+DO iElem = 1, nElems
+ N_DG_Ray_loc(iElem) = N_DG_Ray(iElem + offsetElem)
+END DO ! iElem = 1, nElems
+
+! Sanity check
+IF(ANY(N_DG_Ray_loc.LE.0)) CALL abort(__STAMP__,'N_DG_Ray_loc cannot contain zeros!')
+
+ALLOCATE(StrVarNames(1:nVarRay))
+StrVarNames(1)='RayElemPassedEnergy1st'
+StrVarNames(2)='RayElemPassedEnergy2nd'
+StrVarNames(3)='ElemVolume'
+StrVarNames(4)='PhotonEnergyDensity1st'
+StrVarNames(5)='PhotonEnergyDensity2nd'
+
+#if USE_MPI
+CALL ExchangeRayVolInfo()
+#endif /*USE_MPI*/
+
+! p-refinement: Interpolate lower degree to higher degree (other way around would require model=T)
+CALL GetVandermonde(PP_N, NodeType, Ray%NMax, Ray%NodeType, Vdm_GaussN_NMax, modal=.FALSE.)
+
+#if USE_MPI
+ASSOCIATE( RayElemPassedEnergy => RayElemPassedEnergy_Shared )
+#endif /*USE_MPI*/
+ DO iElem=1,PP_nElems
+ iGlobalElem = iElem+offSetElem
+ iCNElem = GetCNElemID(iGlobalElem)
+
+ ! 1. Elem-constant data
+ ! Primary energy
+ RayElemPassedEnergyLoc1st(iElem) = RayElemPassedEnergy(1,iGlobalElem) !/ ElemVolume_Shared(iCNElem)
+ ! Secondary energy
+ RayElemPassedEnergyLoc2nd(iElem) = RayElemPassedEnergy(2,iGlobalElem) !/ ElemVolume_Shared(iCNElem)
+ ! Activate volume emission
+ IF((RayElemPassedEnergyLoc1st(iElem).GT.0.0)) RayElemEmission(1,iElem) = .TRUE.
+ IF((RayElemPassedEnergyLoc2nd(iElem).GT.0.0)) RayElemEmission(2,iElem) = .TRUE.
+ ! Check if secondary energy is greater than zero
+ IF(RayElemPassedEnergyLoc2nd(iElem).GT.0.0)THEN
+ IF(RayElemPassedEnergy(6,iGlobalElem).LE.0.0) CALL abort(__STAMP__,'Secondary ray counter is zero but energy is not!')
+ ! x-, y- and z-direction of secondary energy
+ RaySecondaryVectorX(iElem) = RayElemPassedEnergy(3,iGlobalElem) / RayElemPassedEnergy(6,iGlobalElem)
+ RaySecondaryVectorY(iElem) = RayElemPassedEnergy(4,iGlobalElem) / RayElemPassedEnergy(6,iGlobalElem)
+ RaySecondaryVectorZ(iElem) = RayElemPassedEnergy(5,iGlobalElem) / RayElemPassedEnergy(6,iGlobalElem)
+ ELSE
+ RaySecondaryVectorX(iElem) = 0.
+ RaySecondaryVectorY(iElem) = 0.
+ RaySecondaryVectorZ(iElem) = 0.
+ END IF ! RayElemPassedEnergyLoc2nd(iElem).GT.0
+
+ ! Store element volume for later calculation of photon energy density
+ ElemVolume(iElem) = ElemVolume_Shared(iCNElem)
+
+ ! 2. Variable polynomial degree data
+ Nloc = N_DG_Ray_loc(iElem)
+ !U_N_Ray(iElem)%U(1:1,:,:,:) = RayElemPassedEnergy(1,iGlobalElem)
+ !U_N_Ray(iElem)%U(2:2,:,:,:) = RayElemPassedEnergy(2,iGlobalElem)
+#if USE_MPI
+ IF(nProcessors.GT.1)THEN
+ ! Get data from shared array
+ NlocOffset = (Nloc+1)**3
+ ASSOCIATE( i => RayElemOffset(iGlobalElem))
+ U_N_Ray(iGlobalElem)%U(1,:,:,:) = RESHAPE(RayElemPassedEnergyHO_Shared(1, i+1:i+NlocOffset), (/Nloc+1, Nloc+1, Nloc+1/))
+ U_N_Ray(iGlobalElem)%U(2,:,:,:) = RESHAPE(RayElemPassedEnergyHO_Shared(2, i+1:i+NlocOffset), (/Nloc+1, Nloc+1, Nloc+1/))
+ END ASSOCIATE
+ END IF ! nProcessors.GT.1
+#endif /*USE_MPI*/
+
+ ! Get the element volumes on Nloc
+ ! Apply integration weights and the Jacobian
+ ! Interpolate the Jacobian to the analyze grid: be careful we interpolate the inverse of the inverse of the Jacobian ;-)
+ J_N(1,0:PP_N,0:PP_N,0:PP_N)=1./sJ(:,:,:,iElem)
+ ! p-refinement: Interpolate lower degree to higher degree (other way around would require model=T)
+ J_Nloc = 0.
+ IF(PP_N.EQ.Nloc)THEN
+ J_Nloc(1,0:PP_N,0:PP_N,0:PP_N) = J_N(1,0:PP_N,0:PP_N,0:PP_N)
+ ELSE
+ ALLOCATE(Vdm_GaussN_Nloc(0:PP_N,0:Nloc))
+ IF(Nloc.LT.PP_N)THEN
+ CALL GetVandermonde(PP_N, NodeType, Nloc, Ray%NodeType, Vdm_GaussN_Nloc, modal=.TRUE.)
+ ELSE
+ CALL GetVandermonde(PP_N, NodeType, Nloc, Ray%NodeType, Vdm_GaussN_Nloc, modal=.FALSE.)
+ END IF ! Nloc.LT.PP_N
+ CALL ChangeBasis3D(1,PP_N,Nloc,Vdm_GaussN_Nloc,J_N(1:1,0:PP_N,0:PP_N,0:PP_N),J_Nloc(1:1,0:Nloc,0:Nloc,0:Nloc))
+ END IF ! PP_N.EQ.Nloc
+
+ ! Calculate the sub-volumes
+ DO m=0,Nloc
+ DO l=0,Nloc
+ DO k=0,Nloc
+ IntegrationWeight = N_Inter_Ray(Nloc)%wGP(k)*&
+ N_Inter_Ray(Nloc)%wGP(l)*&
+ N_Inter_Ray(Nloc)%wGP(m)*J_Nloc(1,k,l,m)
+ !UNMax(1:2,k,l,m,iElem) = UNMax(1:2,k,l,m,iElem) / IntegrationWeight
+ U_N_Ray(iGlobalElem)%U(3,k,l,m) = IntegrationWeight
+ END DO ! k
+ END DO ! l
+ END DO ! m
+ IF(PP_N.NE.Nloc) DEALLOCATE(Vdm_GaussN_Nloc)
+
+ ! Sanity checks: Low order
+ ! 1.) compare sum of sub-volumes with cell-const value and abort
+ ! 2.) compare sum of sub-cell energies with cell-const value and abort (1st and 2nd energies)
+ ! 1st energy
+ IF(RayElemPassedEnergyLoc1st(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(RayElemPassedEnergyLoc1st(iElem), SUM(U_N_Ray(iGlobalElem)%U(1,:,:,:)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "RayElemPassedEnergyLoc1st(iElem) = ", RayElemPassedEnergyLoc1st(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(U_N_Ray(iGlobalElem)%U(1,:,:,:)) = ", SUM(U_N_Ray(iGlobalElem)%U(1,:,:,:))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(U_N_Ray(iGlobalElem)%U(1,:,:,:))/RayElemPassedEnergyLoc1st(iElem)
+ CALL abort(__STAMP__,'Before: RayElemPassedEnergyLoc1st does not match U_N_Ray%U(1) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+ ! 2nd energy
+ IF(RayElemPassedEnergyLoc2nd(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(RayElemPassedEnergyLoc2nd(iElem), SUM(U_N_Ray(iGlobalElem)%U(2,:,:,:)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "RayElemPassedEnergyLoc2nd(iElem) = ", RayElemPassedEnergyLoc2nd(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(U_N_Ray(iGlobalElem)%U(2,:,:,:)) = ", SUM(U_N_Ray(iGlobalElem)%U(2,:,:,:))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(U_N_Ray(iGlobalElem)%U(2,:,:,:))/RayElemPassedEnergyLoc2nd(iElem)
+ CALL abort(__STAMP__,'Before: RayElemPassedEnergyLoc1st does not match U_N_Ray%U(2) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+ ! volume
+ IF(ElemVolume(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(ElemVolume(iElem), SUM(U_N_Ray(iGlobalElem)%U(3,:,:,:)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "ElemVolume(iElem) = ", ElemVolume(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(U_N_Ray(iGlobalElem)%U(3,:,:,:)) = ", SUM(U_N_Ray(iGlobalElem)%U(3,:,:,:))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(U_N_Ray(iGlobalElem)%U(3,:,:,:))/ElemVolume(iElem)
+ CALL abort(__STAMP__,'Before: ElemVolume(iElem) does not match U_N_Ray%U(3) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+
+ ! Calculate the photon energy density on Nloc
+ U_N_Ray(iGlobalElem)%U(4,:,:,:) = U_N_Ray(iGlobalElem)%U(1,:,:,:)/U_N_Ray(iGlobalElem)%U(3,:,:,:)
+ U_N_Ray(iGlobalElem)%U(5,:,:,:) = U_N_Ray(iGlobalElem)%U(2,:,:,:)/U_N_Ray(iGlobalElem)%U(3,:,:,:)
+
+ ! Map from Nloc to NMax for output to .h5 on the highest polynomial degree NMax
+ ! The higher order element volume UNMax(3,:,:,:,:) is over-written later on
+ IF(Nloc.EQ.Ray%Nmax)THEN
+ UNMax(:,:,:,:,iElem) = U_N_Ray(iGlobalElem)%U(:,:,:,:)
+ ELSE
+ CALL ChangeBasis3D(nVarRay, Nloc, Ray%NMax, PREF_VDM_Ray(Nloc,Ray%NMax)%Vdm, U_N_Ray(iGlobalElem)%U(:,:,:,:), UNMax(:,:,:,:,iElem))
+ END IF ! Nloc.Eq.Nmax
+
+ ! Copy data from global array (later used for emission)
+ U_N_Ray_loc(iElem)%U(:,:,:,:) = U_N_Ray(iGlobalElem)%U(:,:,:,:)
+
+ ! Apply integration weights and the Jacobian
+ ! Interpolate the Jacobian to the analyze grid: be careful we interpolate the inverse of the inverse of the Jacobian ;-)
+ J_N(1,0:PP_N,0:PP_N,0:PP_N)=1./sJ(:,:,:,iElem)
+ CALL ChangeBasis3D(1,PP_N,Ray%NMax,Vdm_GaussN_NMax,J_N(1:1,0:PP_N,0:PP_N,0:PP_N),J_Nmax(1:1,:,:,:))
+ DO m=0,Ray%NMax
+ DO l=0,Ray%NMax
+ DO k=0,Ray%NMax
+ IntegrationWeight = N_Inter_Ray(Ray%NMax)%wGP(k)*&
+ N_Inter_Ray(Ray%NMax)%wGP(l)*&
+ N_Inter_Ray(Ray%NMax)%wGP(m)*J_Nmax(1,k,l,m)
+ !UNMax(1:2,k,l,m,iElem) = UNMax(1:2,k,l,m,iElem) / IntegrationWeight
+ UNMax(3,k,l,m,iElem) = IntegrationWeight
+ END DO ! k
+ END DO ! l
+ END DO ! m
+
+ ! Sanity checks: High order
+ ! 1.) compare sum of sub-volumes with cell-const value and abort
+ ! 2.) compare sum of sub-cell energies with cell-const value and abort (1st and 2nd energies)
+ ! 1st energy
+ IF(RayElemPassedEnergyLoc1st(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(RayElemPassedEnergyLoc1st(iElem), SUM(UNMax(1,:,:,:,iElem)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "RayElemPassedEnergyLoc1st(iElem) = ", RayElemPassedEnergyLoc1st(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(UNMax(1,:,:,:,iElem)) = ", SUM(UNMax(1,:,:,:,iElem))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(UNMax(1,:,:,:,iElem))/RayElemPassedEnergyLoc1st(iElem)
+ CALL abort(__STAMP__,'After: RayElemPassedEnergyLoc1st does not match UNMax(1) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+ ! 2nd energy
+ IF(RayElemPassedEnergyLoc2nd(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(RayElemPassedEnergyLoc2nd(iElem), SUM(UNMax(2,:,:,:,iElem)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "RayElemPassedEnergyLoc2nd(iElem) = ", RayElemPassedEnergyLoc2nd(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(UNMax(2,:,:,:,iElem)) = ", SUM(UNMax(2,:,:,:,iElem))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(UNMax(1,:,:,:,iElem))/RayElemPassedEnergyLoc2nd(iElem)
+ CALL abort(__STAMP__,'After: RayElemPassedEnergyLoc1st does not match UNMax(2) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+ ! volume
+ IF(ElemVolume(iElem).GT.0.0)THEN
+ IF(.NOT.ALMOSTEQUALRELATIVE(ElemVolume(iElem), SUM(UNMax(3,:,:,:,iElem)), tolerance))THEN
+ IPWRITE(UNIT_StdOut,*) "iElem,iGlobalElem = ", iElem,iGlobalElem
+ IPWRITE(UNIT_StdOut,*) "ElemVolume(iElem) = ", ElemVolume(iElem)
+ IPWRITE(UNIT_StdOut,*) "SUM(UNMax(3,:,:,:,iElem)) = ", SUM(UNMax(3,:,:,:,iElem))
+ IPWRITE(UNIT_StdOut,*) "ratio =", SUM(UNMax(3,:,:,:,iElem))/ElemVolume(iElem)
+ CALL abort(__STAMP__,'After: ElemVolume(iElem) does not match UNMax(3) for tolerance = ',RealInfoOpt=tolerance)
+ END IF
+ END IF
+
+ END DO ! iElem=1,PP_nElems
+
+ ! Generate skeleton for the file with all relevant data on a single proc (MPIRoot)
+ ! Write file after last abort to prevent a corrupt output file (which might be used when restarting the simulation)
+ IF(MPIRoot) CALL GenerateFileSkeleton('RadiationVolState',nVarRay,StrVarNames,TRIM(MeshFile),0.,FileNameIn=RadiationVolState,NIn=Ray%NMax,NodeType_in=Ray%NodeType)
+#if USE_MPI
+ CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
+#endif
+
+ ! Sanity check
+ IF(ANY(ISNAN(UNMax))) CALL abort(__STAMP__,'Found one or more NaN in the array UNMax!')
+
+ ! Associate construct for integer KIND=8 possibility
+ ASSOCIATE (&
+ nVarRay => INT(nVarRay,IK) ,&
+ NMax => INT(Ray%NMax,IK) ,&
+ nGlobalElems => INT(nGlobalElems,IK) ,&
+ PP_nElems => INT(PP_nElems,IK) ,&
+ offsetElem => INT(offsetElem,IK) )
+ CALL GatheredWriteArray(RadiationVolState,create=.FALSE.,&
+ DataSetName='DG_Solution', rank=5,&
+ nValGlobal=(/nVarRay , NMax+1_IK , NMax+1_IK , NMax+1_IK , nGlobalElems/) , &
+ nVal= (/nVarRay , NMax+1_IK , NMax+1_IK , NMax+1_IK , PP_nElems/) , &
+ offset= (/0_IK , 0_IK , 0_IK , 0_IK , offsetElem/) , &
+ collective=.TRUE.,RealArray=UNMax)
+ END ASSOCIATE
+#if USE_MPI
+END ASSOCIATE
+#endif /*USE_MPI*/
+
+! Write all 'ElemData' arrays to a single container in the state.h5 file
+CALL WriteAdditionalElemData(RadiationVolState,ElementOut)
+
+! Write Nloc and the reflected vector to separate containers for element- and process-wise read-in during restart or loadbalance
+CALL WriteElemDataToSeparateContainer(RadiationVolState,ElementOut,'Nloc')
+CALL WriteElemDataToSeparateContainer(RadiationVolState,ElementOut,'RaySecondaryVectorX')
+CALL WriteElemDataToSeparateContainer(RadiationVolState,ElementOut,'RaySecondaryVectorY')
+CALL WriteElemDataToSeparateContainer(RadiationVolState,ElementOut,'RaySecondaryVectorZ')
+
+SWRITE(*,*) 'DONE'
+END SUBROUTINE WritePhotonVolSampleToHDF5
+
+
+SUBROUTINE WritePhotonSurfSampleToHDF5()
+!===================================================================================================================================
+!> write the final values of the surface sampling to a HDF5 state file
+!> additional performs all the final required computations
+!===================================================================================================================================
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+USE MOD_IO_HDF5
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfOutputSides,nGlobalOutputSides, nSurfBC
+USE MOD_Particle_Boundary_Vars ,ONLY: offsetComputeNodeSurfOutputSide, SurfBCName, nComputeNodeSurfSides
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfSide2GlobalSide, GlobalSide2SurfSide
+USE MOD_HDF5_Output ,ONLY: WriteAttributeToHDF5,WriteArrayToHDF5,WriteHDF5Header
+USE MOD_Mesh_Vars ,ONLY: MeshFile
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: mySurfRank
+#if USE_MPI
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF
+USE MOD_Particle_Boundary_Vars ,ONLY: nGlobalSurfSides
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea_Shared
+#else
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSurfSideArea
+#endif /*USE_MPI*/
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound
+USE MOD_Photon_TrackingVars ,ONLY: RadiationSurfState
+USE MOD_RayTracing_Vars ,ONLY: Ray
+!----------------------------------------------------------------------------------------------------------------------------------!
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+CHARACTER(LEN=255) :: Statedummy
+CHARACTER(LEN=255) :: H5_Name, H5_Name2
+CHARACTER(LEN=255),ALLOCATABLE :: Str2DVarNames(:)
+INTEGER :: GlobalSideID, iSurfSide, OutputCounter, SurfSideNb, p, q
+INTEGER,PARAMETER :: nVar2D=3
+REAL :: tstart,tend
+REAL, ALLOCATABLE :: helpArray(:,:,:,:)
+INTEGER, ALLOCATABLE :: helpArray2(:)
+!===================================================================================================================================
+#if USE_MPI
+CALL ExchangeRadiationSurfData()
+! Return if not a sampling leader
+IF (MPI_COMM_LEADERS_SURF.EQ.MPI_COMM_NULL) RETURN
+CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR)
+
+! Return if no sampling sides
+IF (nGlobalSurfSides.EQ.0) RETURN
+#endif /*USE_MPI*/
+IF (mySurfRank.EQ.0) THEN
+ WRITE(UNIT_stdOut,'(a)',ADVANCE='NO')' WRITE Radiation SurfSTATE TO HDF5 FILE...'
+ tstart=LOCALTIME()
+END IF
+
+! Generate skeleton for the file with all relevant data on a single proc (MPIRoot)
+#if USE_MPI
+IF (mySurfRank.EQ.0) THEN
+#endif /*USE_MPI*/
+ CALL OpenDataFile(RadiationSurfState,create=.TRUE.,single=.TRUE.,readOnly=.FALSE.)
+ Statedummy = 'RadiationSurfState'
+ ! Write file header
+ CALL WriteHDF5Header(Statedummy,File_ID)
+ CALL WriteAttributeToHDF5(File_ID , 'DSMC_nSurfSample' , 1 , IntegerScalar = Ray%nSurfSample )
+ CALL WriteAttributeToHDF5(File_ID , 'MeshFile' , 1 , StrScalar = (/TRIM(MeshFile)/) )
+ CALL WriteAttributeToHDF5(File_ID , 'BC_Surf' , nSurfBC , StrArray = SurfBCName )
+ CALL WriteAttributeToHDF5(File_ID , 'N' , 1 , IntegerScalar = Ray%nSurfSample )
+ CALL WriteAttributeToHDF5(File_ID , 'NodeType' , 1 , StrScalar = (/Ray%NodeType/) )
+ CALL WriteAttributeToHDF5(File_ID , 'Time' , 1 , RealScalar = 0. )
+
+ ALLOCATE(Str2DVarNames(1:nVar2D))
+ ! fill varnames for total values
+ Str2DVarNames(1) ='PhotonCount'
+ Str2DVarNames(2) ='HeatFlux'
+ Str2DVarNames(3) ='iBC'
+
+ CALL WriteAttributeToHDF5(File_ID,'VarNamesSurface',nVar2D,StrArray=Str2DVarNames)
+
+ CALL CloseDataFile()
+ DEALLOCATE(Str2DVarNames)
+#if USE_MPI
+END IF
+CALL MPI_BARRIER(MPI_COMM_LEADERS_SURF,iERROR)
+CALL OpenDataFile(RadiationSurfState,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_LEADERS_SURF)
+#else
+CALL OpenDataFile(RadiationSurfState,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.)
+#endif /*USE_MPI*/
+
+
+WRITE(H5_Name,'(A)') 'SurfaceData'
+WRITE(H5_Name2,'(A)') 'SurfaceDataGlobalSideIndex'
+#if USE_MPI
+ASSOCIATE(PhotonSurfSideArea => PhotonSurfSideArea_Shared)
+#endif
+
+ASSOCIATE (&
+ nSurfSample => INT(Ray%nSurfSample , IK) , &
+ nGlobalSides => INT(nGlobalOutputSides , IK) , &
+ LocalnBCSides => INT(nComputeNodeSurfOutputSides , IK) , &
+ offsetSurfSide => INT(offsetComputeNodeSurfOutputSide , IK) , &
+ nVar2D => INT(nVar2D , IK))
+
+ ALLOCATE(helpArray(nVar2D,1:nSurfSample,1:nSurfSample,LocalnBCSides))
+ ALLOCATE(helpArray2(LocalnBCSides))
+ OutputCounter = 0
+ DO iSurfSide = 1,nComputeNodeSurfSides
+ GlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ IF(SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID).GT.0) THEN
+ IF(GlobalSideID.LT.SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID)) THEN
+ SurfSideNb = GlobalSide2SurfSide(SURF_SIDEID,SideInfo_Shared(SIDE_NBSIDEID,GlobalSideID))
+ ! Add your contribution to my inner BC
+ PhotonSampWall(:,:,:,iSurfSide) = PhotonSampWall(:,:,:,iSurfSide) + PhotonSampWall(:,:,:,SurfSideNb)
+ ELSE
+ CYCLE
+ END IF
+ END IF
+ OutputCounter = OutputCounter + 1
+ helpArray(1,1:nSurfSample,1:nSurfSample,OutputCounter) = PhotonSampWall(1,1:nSurfSample,1:nSurfSample,iSurfSide)
+ helpArray2(OutputCounter) = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ ! SurfaceArea should be changed to 1:SurfMesh%nSides if inner sampling sides exist...
+ DO p = 1, INT(nSurfSample)
+ DO q = 1, INT(nSurfSample)
+ helpArray(2,p,q,OutputCounter) = PhotonSampWall(2,p,q,iSurfSide)/PhotonSurfSideArea(p,q,iSurfSide)
+ helpArray(3,p,q,OutputCounter) = PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobalSideID))
+ END DO ! q = 1, nSurfSample
+ END DO ! p = 1, nSurfSample
+ END DO
+ ! WARNING: Only the sampling leaders write the data to .h5
+ CALL WriteArrayToHDF5(DataSetName=H5_Name , rank=4 , &
+ nValGlobal =(/nVar2D , nSurfSample , nSurfSample , nGlobalSides/) , &
+ nVal =(/nVar2D , nSurfSample , nSurfSample , LocalnBCSides/) , &
+ offset =(/0_IK , 0_IK , 0_IK , offsetSurfSide/) , &
+ collective =.FALSE. , &
+ RealArray=helpArray(1:nVar2D,1:nSurfSample,1:nSurfSample,1:LocalnBCSides))
+ CALL WriteArrayToHDF5(DataSetName = H5_Name2 , rank = 1 , &
+ nValGlobal = (/nGlobalSides/) , &
+ nVal = (/LocalnBCSides/) , &
+ offset = (/offsetSurfSide/) , &
+ collective = .FALSE. , IntegerArray_i4 = helpArray2(1:INT(LocalnBCSides,4)))
+ DEALLOCATE(helpArray)
+ DEALLOCATE(helpArray2)
+END ASSOCIATE
+
+#if USE_MPI
+END ASSOCIATE
+#endif /*USE_MPI*/
+
+CALL CloseDataFile()
+
+IF (mySurfRank.EQ.0) THEN
+ tend=LOCALTIME()
+ WRITE(UNIT_stdOut,'(A,F0.3,A)',ADVANCE='YES')'DONE [',tend-tstart,'s]'
+END IF
+
+END SUBROUTINE WritePhotonSurfSampleToHDF5
+
+#if USE_MPI
+SUBROUTINE ExchangeRadiationSurfData()
+!===================================================================================================================================
+! exchange the surface data
+! only processes with samling sides in their halo region and the original process participate on the communication
+! structure is similar to particle communication
+! each process sends his halo-information directly to the origin process by use of a list, containing the surfsideids for sending
+! the receiving process adds the new data to his own sides
+!===================================================================================================================================
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+USE MOD_Particle_Boundary_Vars ,ONLY: SurfTotalSideOnNode, SurfMapping, nComputeNodeSurfTotalSides, GlobalSide2SurfSide
+USE MOD_Particle_MPI_Vars ,ONLY: SurfSendBuf,SurfRecvBuf
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWallProc, PhotonSampWall_Shared, PhotonSampWall_Shared_Win
+USE MOD_RayTracing_Vars ,ONLY: Ray
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_LEADERS_SURF, MPI_COMM_SHARED, nSurfLeaders,myComputeNodeRank,mySurfRank
+USE MOD_MPI_Shared
+!----------------------------------------------------------------------------------------------------------------------------------!
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: MessageSize,nValues,iSurfSide,SurfSideID, SideID
+INTEGER :: iPos,iProc,p,q
+INTEGER :: RecvRequest(0:nSurfLeaders-1),SendRequest(0:nSurfLeaders-1)
+!===================================================================================================================================
+! nodes without sampling surfaces do not take part in this routine
+IF (.NOT.SurfTotalSideOnNode) RETURN
+
+MessageSize = 2*nComputeNodeSurfTotalSides*(Ray%nSurfSample**2)
+IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(PhotonSampWallProc, PhotonSampWall_Shared, MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ELSE
+ CALL MPI_REDUCE(PhotonSampWallProc, 0 , MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ENDIF
+! Nullify process-local array
+PhotonSampWallProc = 0.0
+
+! Update
+CALL BARRIER_AND_SYNC(PhotonSampWall_Shared_Win,MPI_COMM_SHARED)
+
+! prepare buffers for surf leader communication
+IF (myComputeNodeRank.EQ.0) THEN
+ nValues = 2
+
+ ! open receive buffer
+ DO iProc = 0,nSurfLeaders-1
+ ! ignore myself
+ IF (iProc.EQ.mySurfRank) CYCLE
+
+ ! Only open recv buffer if we are expecting sides from this leader node
+ IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE
+
+ ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc
+ MessageSize = SurfMapping(iProc)%nRecvSurfSides * nValues
+ CALL MPI_IRECV( SurfRecvBuf(iProc)%content &
+ , MessageSize &
+ , MPI_DOUBLE_PRECISION &
+ , iProc &
+ , 1209 &
+ , MPI_COMM_LEADERS_SURF &
+ , RecvRequest(iProc) &
+ , IERROR)
+ END DO ! iProc
+
+ ! build message
+ DO iProc = 0,nSurfLeaders-1
+ ! Ignore myself
+ IF (iProc .EQ. mySurfRank) CYCLE
+ ! Only assemble message if we are expecting sides to send to this leader node
+ IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE
+
+ ! Nullify everything
+ iPos = 0
+ SurfSendBuf(iProc)%content = 0.
+ DO iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides
+ SideID = SurfMapping(iProc)%SendSurfGlobalID(iSurfSide)
+ SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID)
+ ! Assemble message
+ DO q = 1,Ray%nSurfSample
+ DO p = 1,Ray%nSurfSample
+ SurfSendBuf(iProc)%content(iPos+1:iPos+2) = PhotonSampWall_Shared(:,p,q,SurfSideID)
+ iPos = iPos + 2
+ END DO ! p=0,Ray%nSurfSample
+ END DO ! q=0,Ray%nSurfSample
+ PhotonSampWall_Shared(:,:,:,SurfSideID)=0.
+ END DO ! iSurfSide = 1,SurfMapping(iProc)%nSendSurfSides
+ END DO
+
+ ! send message
+ DO iProc = 0,nSurfLeaders-1
+ ! ignore myself
+ IF (iProc.EQ.mySurfRank) CYCLE
+ ! Only open recv buffer if we are expecting sides from this leader node
+ IF (SurfMapping(iProc)%nSendSurfSides.EQ.0) CYCLE
+
+ ! Message is sent on MPI_COMM_LEADERS_SURF, so rank is indeed iProc
+ MessageSize = SurfMapping(iProc)%nSendSurfSides * nValues
+ CALL MPI_ISEND( SurfSendBuf(iProc)%content &
+ , MessageSize &
+ , MPI_DOUBLE_PRECISION &
+ , iProc &
+ , 1209 &
+ , MPI_COMM_LEADERS_SURF &
+ , SendRequest(iProc) &
+ , IERROR)
+ END DO ! iProc
+
+ ! Finish received number of sampling surfaces
+ DO iProc = 0,nSurfLeaders-1
+ ! ignore myself
+ IF (iProc.EQ.mySurfRank) CYCLE
+
+ IF (SurfMapping(iProc)%nSendSurfSides.NE.0) THEN
+ CALL MPI_WAIT(SendRequest(iProc),MPIStatus,IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR)
+ END IF
+
+ IF (SurfMapping(iProc)%nRecvSurfSides.NE.0) THEN
+ CALL MPI_WAIT(RecvRequest(iProc),MPIStatus,IERROR)
+ IF (IERROR.NE.MPI_SUCCESS) CALL ABORT(__STAMP__,' MPI Communication error',IERROR)
+ END IF
+ END DO ! iProc
+
+ ! add data do my list
+ DO iProc = 0,nSurfLeaders-1
+ ! ignore myself
+ IF (iProc.EQ.mySurfRank) CYCLE
+ ! Only open recv buffer if we are expecting sides from this leader node
+ IF (SurfMapping(iProc)%nRecvSurfSides.EQ.0) CYCLE
+
+ iPos=0
+ DO iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides
+ SideID = SurfMapping(iProc)%RecvSurfGlobalID(iSurfSide)
+ SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,SideID)
+ DO q = 1,Ray%nSurfSample
+ DO p = 1,Ray%nSurfSample
+ PhotonSampWall_Shared(:,p,q,SurfSideID) = PhotonSampWall_Shared(:,p,q,SurfSideID) &
+ + SurfRecvBuf(iProc)%content(iPos+1:iPos+2)
+ iPos = iPos + 2
+ END DO ! p=0,Ray%nSurfSample
+ END DO ! q=0,Ray%nSurfSample
+ END DO ! iSurfSide = 1,SurfMapping(iProc)%nRecvSurfSides
+ ! Nullify buffer
+ SurfRecvBuf(iProc)%content = 0.
+ END DO ! iProc
+END IF
+
+CALL BARRIER_AND_SYNC(PhotonSampWall_Shared_Win,MPI_COMM_SHARED)
+
+END SUBROUTINE ExchangeRadiationSurfData
+
+
+!===================================================================================================================================
+! Exchanges and add up the volume ray tracing data between all processes to have the global data available on each process
+! 1. Exchange the low-order data
+! 2. Exchange the high-order data
+!===================================================================================================================================
+SUBROUTINE ExchangeRayVolInfo()
+! MODULES
+USE MOD_Globals
+USE MOD_PreProc
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergy,RayElemPassedEnergy_Shared,RayElemPassedEnergy_Shared_Win,RayElemSize
+USE MOD_RayTracing_Vars ,ONLY: nVarRay,RayElemPassedEnergyHO_Shared,RayElemPassedEnergyHO_Shared_Win,N_DG_Ray,U_N_Ray,RayElemOffset
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+INTEGER :: MessageSize,offset,NlocOffset
+INTEGER(KIND=8) :: nGlobalEntries
+REAL, ALLOCATABLE :: RayElemPassedEnergyHO(:,:) ! <
+INTEGER :: iElem,Nloc
+CHARACTER(LEN=255):: hilf
+!===================================================================================================================================
+! Collect the information from the process-local shadow arrays in the compute-node shared array
+MessageSize = RayElemSize*nGlobalElems
+
+! 1. Exchange the low-order data
+! Reduce data to each node leader
+IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(RayElemPassedEnergy, RayElemPassedEnergy_Shared, MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ELSE
+ CALL MPI_REDUCE(RayElemPassedEnergy, 0 , MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ENDIF
+CALL BARRIER_AND_SYNC(RayElemPassedEnergy_Shared_Win, MPI_COMM_SHARED)
+
+! Synchronize data between node leaders with all-reduce
+IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RayElemPassedEnergy_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_LEADERS_SHARED,iError)
+ END IF
+
+ ! Synchronize data from node leaders to node workers
+ CALL BARRIER_AND_SYNC(RayElemPassedEnergy_Shared_Win, MPI_COMM_SHARED)
+END IF
+
+! 2. Exchange the high-order data
+! Only duplicate and reduce the data when more than one process are used
+IF(nProcessors.GT.1)THEN
+
+ nGlobalEntries = 0
+ DO iElem = 1, nGlobalElems
+ Nloc = N_DG_Ray(iElem)
+ nGlobalEntries = nGlobalEntries + INT((Nloc+1)**3,8)
+ END DO ! iElem = 1, nGlobalElems
+
+ ! Sanity check
+ IF(nGlobalEntries * INT(nVarRay,8).GT.INT(HUGE(1_4),8))THEN
+ IF(MPIRoot)THEN
+ WRITE(UNIT=hilf,FMT='(A,I0,A,I0)') "Number of entries in RayElemPassedEnergyHO(1:nVarRay,1:nGlobalEntries) "&
+ ,nGlobalEntries * INT(nVarRay,8)," is larger than ",HUGE(1_4)
+ CALL abort(__STAMP__,TRIM(hilf))
+ END IF
+ END IF
+
+ ALLOCATE(RayElemPassedEnergyHO(nVarRay,nGlobalEntries))
+ RayElemPassedEnergyHO=0.
+ ALLOCATE(RayElemOffset(nGlobalElems))
+ !> Shared arrays for high-order volume sampling
+ CALL Allocate_Shared((/nVarRay,INT(nGlobalEntries,4)/),RayElemPassedEnergyHO_Shared_Win,RayElemPassedEnergyHO_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,RayElemPassedEnergyHO_Shared_Win,IERROR)
+ CALL BARRIER_AND_SYNC(RayElemPassedEnergyHO_Shared_Win,MPI_COMM_SHARED)
+
+ ! Store data in local array
+ offset = 0
+ DO iElem = 1, nGlobalElems
+ Nloc = N_DG_Ray(iElem)
+ NlocOffset = (Nloc+1)**3
+ RayElemOffset(iElem) = offset
+ RayElemPassedEnergyHO(1,offset+1:offset+NlocOffset) = RESHAPE(U_N_Ray(iElem)%U(1,:,:,:),(/(Nloc+1)**3/))
+ RayElemPassedEnergyHO(2,offset+1:offset+NlocOffset) = RESHAPE(U_N_Ray(iElem)%U(2,:,:,:),(/(Nloc+1)**3/))
+ offset = offset + NlocOffset
+ END DO ! iElem = 1, nGlobalElems
+
+ MessageSize = nVarRay * INT(nGlobalEntries,4)
+
+ IF (myComputeNodeRank.EQ.0) THEN
+ CALL MPI_REDUCE(RayElemPassedEnergyHO, RayElemPassedEnergyHO_Shared, MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ ELSE
+ CALL MPI_REDUCE(RayElemPassedEnergyHO, 0 , MessageSize, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_SHARED, IERROR)
+ ENDIF
+ CALL BARRIER_AND_SYNC(RayElemPassedEnergyHO_Shared_Win, MPI_COMM_SHARED)
+
+ ! Synchronize data between node leaders with all-reduce
+ IF(nLeaderGroupProcs.GT.1)THEN
+ IF(myComputeNodeRank.EQ.0)THEN
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE,RayElemPassedEnergyHO_Shared,MessageSize,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_LEADERS_SHARED,iError)
+ END IF
+
+ ! Synchronize data from node leaders to node workers
+ CALL BARRIER_AND_SYNC(RayElemPassedEnergyHO_Shared_Win, MPI_COMM_SHARED)
+ END IF
+
+ DEALLOCATE(RayElemPassedEnergyHO)
+
+END IF ! nProcessors.GT.1
+
+END SUBROUTINE ExchangeRayVolInfo
+#endif /*USE_MPI*/
+
+END MODULE MOD_Photon_TrackingOutput
diff --git a/src/radiation/radiative_transfer/tracking/radtrans_tracking_tools.f90 b/src/radiation/radiative_transfer/tracking/radtrans_tracking_tools.f90
new file mode 100644
index 000000000..8610056b5
--- /dev/null
+++ b/src/radiation/radiative_transfer/tracking/radtrans_tracking_tools.f90
@@ -0,0 +1,1576 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Photon_TrackingTools
+!===================================================================================================================================
+! Routines for photon tracking in radiave transfer solver
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+
+INTERFACE PhotonThroughSideCheck3DFast
+ MODULE PROCEDURE PhotonThroughSideCheck3DFast
+END INTERFACE
+
+PUBLIC :: PhotonThroughSideCheck3DFast, PhotonIntersectionWithSide, CalcAbsoprtion, PerfectPhotonReflection, DiffusePhotonReflection
+PUBLIC :: CalcWallAbsoprtion, PointInObsCone, PhotonIntersectSensor, PhotonThroughSideCheck3DDir, PhotonIntersectionWithSide2DDir
+PUBLIC :: PhotonIntersectionWithSide2D, RotatePhotonIn2DPlane, PerfectPhotonReflection2D,DiffusePhotonReflection2D, PhotonOnLineOfSight
+PUBLIC :: PeriodicPhotonBC
+!-----------------------------------------------------------------------------------------------------------------------------------
+!-----------------------------------------------------------------------------------------------------------------------------------
+!===================================================================================================================================
+
+CONTAINS
+
+
+SUBROUTINE PhotonThroughSideCheck3DFast(iLocSide,Element,ThroughSide,TriNum, IsMortar)
+!===================================================================================================================================
+!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalix_photon_startd trajectory
+!> vector and the vectors from two of the three nodes to the old particle position is calculated. If the determinants for the three
+!> possible combinations are greater than x_photon_startro, then the particle went through this triangle of the side.
+!> Note that if this is a mortar side, the side of the small neighbouring mortar element has to be checked. Thus, the orientation
+!> is reversed.
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals_Vars ,ONLY: EpsMach
+USE MOD_Globals ,ONLY: abort
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemSideNodeID_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+INTEGER,INTENT(IN) :: TriNum
+LOGICAL,INTENT(OUT) :: ThroughSide
+LOGICAL, INTENT(IN), OPTIONAL :: IsMortar
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: CNElemID
+INTEGER :: n, NodeID
+REAL :: Px, Py, Pz
+REAL :: Vx, Vy, Vz!, Vall
+REAL :: xNode(3), yNode(3), zNode(3), Ax(3), Ay(3), Az(3)
+REAL :: det(3),tolerance
+!===================================================================================================================================
+CNElemID = GetCNElemID(Element)
+
+! Sanity check
+IF(CNElemID.LE.0) CALL abort(__STAMP__,'PhotonThroughSideCheck3DFast() found CNElemID<=0')
+
+ThroughSide = .FALSE.
+
+Px = PhotonProps%PhotonLastPos(1)
+Py = PhotonProps%PhotonLastPos(2)
+Pz = PhotonProps%PhotonLastPos(3)
+
+! Normalix_photon_startd particle trajectory (PartPos - lastPartPos)/ABS(PartPos - lastPartPos)
+Vx = PhotonProps%PhotonDirection(1)
+Vy = PhotonProps%PhotonDirection(2)
+Vz = PhotonProps%PhotonDirection(3)
+! Get the coordinates of the first node and the vector from the particle position to the node
+xNode(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNode(1) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNode(1) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+Ax(1) = xNode(1) - Px
+Ay(1) = yNode(1) - Py
+Az(1) = zNode(1) - Pz
+! Get the vectors to the other two nodes, depending on the triangle number
+IF(PRESENT(IsMortar)) THEN
+ ! Note: reverse orientation in the mortar case, as the side is treated from the perspective of the smaller neighbouring element
+ ! (TriNum=1: NodeID=3,2; TriNum=2: NodeID=4,3)
+ xNode(2) = NodeCoords_Shared(1,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+ yNode(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+ zNode(2) = NodeCoords_Shared(3,ElemSideNodeID_Shared(2+TriNum,iLocSide,CNElemID)+1)
+
+ Ax(2) = xNode(2) - Px
+ Ay(2) = yNode(2) - Py
+ Az(2) = zNode(2) - Pz
+
+ xNode(3) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+ yNode(3) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+ zNode(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1+TriNum,iLocSide,CNElemID)+1)
+
+ Ax(3) = xNode(3) - Px
+ Ay(3) = yNode(3) - Py
+ Az(3) = zNode(3) - Pz
+ELSE
+ DO n = 2,3
+ NodeID = n+TriNum-1 ! m = true node number of the sides (TriNum=1: NodeID=2,3; TriNum=2: NodeID=3,4)
+ xNode(n) = NodeCoords_Shared(1,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ yNode(n) = NodeCoords_Shared(2,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ zNode(n) = NodeCoords_Shared(3,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+
+ Ax(n) = xNode(n) - Px
+ Ay(n) = yNode(n) - Py
+ Az(n) = zNode(n) - Pz
+ END DO
+END IF
+!--- check whether v and the vectors from the particle to the two edge nodes build
+!--- a right-hand-szstem. If yes for all edges: vector goes potentially through side
+det(1) = ((Ay(1) * Vz - Az(1) * Vy) * Ax(3) + &
+ (Az(1) * Vx - Ax(1) * Vz) * Ay(3) + &
+ (Ax(1) * Vy - Ay(1) * Vx) * Az(3))
+
+det(2) = ((Ay(2) * Vz - Az(2) * Vy) * Ax(1) + &
+ (Az(2) * Vx - Ax(2) * Vz) * Ay(1) + &
+ (Ax(2) * Vy - Ay(2) * Vx) * Az(1))
+
+det(3) = ((Ay(3) * Vz - Az(3) * Vy) * Ax(2) + &
+ (Az(3) * Vx - Ax(3) * Vz) * Ay(2) + &
+ (Ax(3) * Vy - Ay(3) * Vx) * Az(2))
+
+! Changed tolerance from -epsMach to -0.1*epsMach because this check finds intersections, but when PhotonIntersectionWithSide() is
+! called, the photon vector and the side normal vector are perfectly parallel, e.g., v = (/0,0,-1/) and n=(/0,-1,0./), hence, the
+! scalar product is exactly zero and the routine breaks.
+tolerance = -0.1*epsMach
+! Comparison of the determinants with eps, where a x_photon_startro is stored (due to machine precision)
+IF(det(1).LT.tolerance) RETURN
+IF(det(2).LT.tolerance) RETURN
+IF(det(3).LT.tolerance) RETURN
+ThroughSide = .TRUE.
+
+RETURN
+END SUBROUTINE PhotonThroughSideCheck3DFast
+
+
+SUBROUTINE PhotonThroughSideCheck3DDir(iLocSide,CNElemID,ThroughSide,TriNum,StartPoint,Dir)
+!===================================================================================================================================
+!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalix_photon_startd trajectory
+!> vector and the vectors from two of the three nodes to the old particle position is calculated. If the determinants for the three
+!> possible combinations are greater than x_photon_startro, then the particle went through this triangle of the side.
+!> Note that if this is a mortar side, the side of the small neighbouring mortar element has to be checked. Thus, the orientation
+!> is reversed.
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals_Vars ,ONLY: EpsMach
+USE MOD_Particle_Mesh_Vars, ONLY : NodeCoords_Shared, ElemSideNodeID_Shared
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: CNElemID
+INTEGER,INTENT(IN) :: TriNum
+LOGICAL,INTENT(OUT) :: ThroughSide
+REAL, INTENT(IN) :: StartPoint(3), Dir(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: n, NodeID
+REAL :: Px, Py, Pz
+REAL :: Vx, Vy, Vz!, Vall
+REAL :: xNode(3), yNode(3), zNode(3), Ax(3), Ay(3), Az(3)
+REAL :: det(3)
+!===================================================================================================================================
+ThroughSide = .FALSE.
+
+Px = StartPoint(1)
+Py = StartPoint(2)
+Pz = StartPoint(3)
+
+! Normalix_photon_startd particle trajectory (PartPos - lastPartPos)/ABS(PartPos - lastPartPos)
+Vx = Dir(1)
+Vy = Dir(2)
+Vz = Dir(3)
+! Get the coordinates of the first node and the vector from the particle position to the node
+xNode(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNode(1) = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNode(1) = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+Ax(1) = xNode(1) - Px
+Ay(1) = yNode(1) - Py
+Az(1) = zNode(1) - Pz
+! Get the vectors to the other two nodes, depending on the triangle number
+
+DO n = 2,3
+ NodeID = n+TriNum-1 ! m = true node number of the sides (TriNum=1: NodeID=2,3; TriNum=2: NodeID=3,4)
+ xNode(n) = NodeCoords_Shared(1,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ yNode(n) = NodeCoords_Shared(2,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+ zNode(n) = NodeCoords_Shared(3,ElemSideNodeID_Shared(NodeID,iLocSide,CNElemID)+1)
+
+ Ax(n) = xNode(n) - Px
+ Ay(n) = yNode(n) - Py
+ Az(n) = zNode(n) - Pz
+END DO
+
+!--- check whether v and the vectors from the particle to the two edge nodes build
+!--- a right-hand-szstem. If yes for all edges: vector goes potentially through side
+det(1) = ((Ay(1) * Vz - Az(1) * Vy) * Ax(3) + &
+ (Az(1) * Vx - Ax(1) * Vz) * Ay(3) + &
+ (Ax(1) * Vy - Ay(1) * Vx) * Az(3))
+
+det(2) = ((Ay(2) * Vz - Az(2) * Vy) * Ax(1) + &
+ (Az(2) * Vx - Ax(2) * Vz) * Ay(1) + &
+ (Ax(2) * Vy - Ay(2) * Vx) * Az(1))
+
+det(3) = ((Ay(3) * Vz - Az(3) * Vy) * Ax(2) + &
+ (Az(3) * Vx - Ax(3) * Vz) * Ay(2) + &
+ (Ax(3) * Vy - Ay(3) * Vx) * Az(2))
+
+! Comparison of the determinants with eps, where a x_photon_startro is stored (due to machine precision)
+IF ((det(1).ge.-epsMach).AND.(det(2).ge.-epsMach).AND.(det(3).ge.-epsMach)) THEN
+ ThroughSide = .TRUE.
+END IF
+
+RETURN
+
+END SUBROUTINE PhotonThroughSideCheck3DDir
+
+
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+SUBROUTINE PhotonIntersectionWithSide2D(iLocSide,Element,ThroughSide,IntersectionPos,isLastSide,Distance)
+! MODULES
+USE MOD_Globals ,ONLY: abort
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID2D_Shared, NodeCoords_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: ThroughSide
+INTEGER,INTENT(IN) :: iLocSide, Element
+REAL, INTENT(OUT) :: IntersectionPos(3)
+REAL, INTENT(OUT) :: Distance
+LOGICAL, INTENT(IN) :: isLastSide
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: CNElemID
+REAL :: y_photon_start,x_photon_start,yNode1,xNode1,yNode2,xNode2,sy,sz,sx
+REAL :: l1,S1,l2,S2,l,S
+REAL :: beta, alpha, deltay, a, b, c, tmpsqrt
+!===================================================================================================================================
+CNElemID = GetCNElemID(Element)
+
+! Sanity check
+IF(CNElemID.LE.0) CALL abort(__STAMP__,'PhotonIntersectionWithSide2D() found CNElemID<=0')
+
+ThroughSide = .FALSE.
+
+xNode1 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+yNode1 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+xNode2 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+yNode2 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+
+x_photon_start=PhotonProps%PhotonLastPos(1)
+y_photon_start=PhotonProps%PhotonLastPos(2)
+
+sx=PhotonProps%PhotonDirection(1)
+sy=PhotonProps%PhotonDirection(2)
+sz=PhotonProps%PhotonDirection(3)
+
+IF (sx .EQ. 0.0) THEN
+ IF (xNode1.EQ.xNode2) THEN
+ l = (y_photon_start-yNode1)/(yNode2-yNode1)
+ ELSE
+ l = (x_photon_start-xNode1)/(xNode2-xNode1)
+ END IF
+ a = sy*sy + sz*sz
+ b = 2*sy*y_photon_start
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*l*yNode1*yNode1 - l*l*yNode1*yNode1 &
+ - 2.*yNode1*yNode2*l + 2.*yNode1*yNode2*l*l - yNode2*yNode2*l*l
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ S1 = (-b+SQRT(tmpsqrt))/(2.*a)
+ S2 = (-b-SQRT(tmpsqrt))/(2.*a)
+
+ IF(isLastSide) THEN
+ IF (ALMOSTEQUAL(S1,S2)) THEN
+ RETURN ! TODO
+ ELSE IF (ABS(S1).GT.ABS(S2)) THEN
+ S=S1
+ ELSE
+ S=S2
+ END IF
+ ELSE
+ IF (S1.LE.0.0) THEN
+ S = S2
+ ELSE
+ IF (S2.GT.0.0) THEN
+ IF(S2.GT.S1) THEN
+ S = S1
+ ELSE
+ S = S2
+ END IF
+ ELSE
+ S = S1
+ END IF
+ END IF
+ END IF
+
+
+ELSE
+ alpha = (xNode1 - x_photon_start) / sx
+ beta = (xNode2 - xNode1) / sx
+ deltay = (yNode2 - yNode1)
+ a = beta*beta*sy*sy - deltay*deltay + beta*beta*sz*sz
+ b = 2.*beta*sy*y_photon_start + 2.*alpha*beta*sy*sy - 2.*deltay*yNode1 + 2.*alpha*beta*sz*sz
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*alpha*sy*y_photon_start + alpha*alpha*sy*sy + sz*sz*alpha*alpha
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ l1 = (-b + SQRT(tmpsqrt))/(2.*a)
+ S1 = (xNode1-x_photon_start+(xNode2-xNode1)*l1)/sx
+ l2 = (-b - SQRT(tmpsqrt))/(2.*a)
+ S2 = (xNode1-x_photon_start+(xNode2-xNode1)*l2)/sx
+
+ IF (isLastSide) THEN
+ IF (ALMOSTEQUAL(S1,S2).AND.ALMOSTEQUAL(ABS(l1),ABS(l2))) THEN
+ RETURN
+ ELSE IF (ALMOSTEQUAL(S1,S2)) THEN
+ IF (ABS(l1).GT.ABS(l2)) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF (ALMOSTZERO(S1).AND.ALMOSTZERO(S2)) THEN
+ IF (ABS(l1).GT.ABS(l2)) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF (ABS(S1).GT.ABS(S2)) THEN !though same spot again, caused by numerical inaccuray (discard shorter solution)
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE IF ((l1.LE.0.0).OR.(l1.GE.1.0)) THEN !if 1 is not a valid intersection -> 2
+ l = l2; S = S2
+ ELSE !1 is valid intersection
+ IF ((S1.LE.0.0)) THEN !1 would be moving backwards -> 2
+ l = l2; S = S2
+ ELSE
+ IF ((l2.GT.0.0).AND.(l2.LT.1.0).AND.(S2.GT.0.0)) THEN !1 and 2 valid -> chose shorter one
+ IF (S2.GT.S1) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE !1 is only valid intersection -> 1
+ l=l1; S=S1
+ END IF
+ END IF
+ END IF
+
+END IF
+
+IF((S .GT. 0.0) .AND. (0.0 .LE. l) .AND. (l .LE. 1.0)) THEN
+ ThroughSide = .TRUE.
+ IntersectionPos(1) = PhotonProps%PhotonLastPos(1) + S*sx
+ IntersectionPos(2) = PhotonProps%PhotonLastPos(2) + S*sy
+ IntersectionPos(3) = S*sz
+ Distance = S
+END IF
+
+END SUBROUTINE PhotonIntersectionWithSide2D
+
+
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+SUBROUTINE PhotonIntersectionWithSide2DDir(iLocSide,CNElemID,ThroughSide,StartPoint, Dir, IntersectionPos, Distance)
+! MODULES
+USE MOD_Particle_Mesh_Vars, ONLY : ElemSideNodeID2D_Shared, NodeCoords_Shared
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+LOGICAL,INTENT(OUT) :: ThroughSide
+INTEGER,INTENT(IN) :: iLocSide, CNElemID
+REAL, INTENT(OUT), OPTIONAL :: IntersectionPos(3), Distance
+REAL,INTENT(IN) :: StartPoint(3), Dir(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: y_photon_start,x_photon_start,yNode1,xNode1,yNode2,xNode2,sy,sz,sx
+REAL :: l1,S1,l2,S2,l,S
+REAL :: beta, alpha, deltay, a, b, c, tmpsqrt
+!===================================================================================================================================
+ThroughSide = .FALSE.
+
+xNode1 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+yNode1 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID))
+xNode2 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+yNode2 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID))
+
+x_photon_start=StartPoint(1)
+y_photon_start=StartPoint(2)
+
+sx=Dir(1)
+sy=Dir(2)
+sz=Dir(3)
+
+IF (sx .EQ. 0.0) THEN
+ IF (xNode1.EQ.xNode2) THEN
+ l = (y_photon_start-yNode1)/(yNode2-yNode1)
+ ELSE
+ l = (x_photon_start-xNode1)/(xNode2-xNode1)
+ END IF
+ a = sy*sy + sz*sz
+ b = 2*sy*y_photon_start
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*l*yNode1*yNode1 - l*l*yNode1*yNode1 &
+ - 2.*yNode1*yNode2*l + 2.*yNode1*yNode2*l*l - yNode2*yNode2*l*l
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ S1 = (-b+SQRT(tmpsqrt))/(2.*a)
+ S2 = (-b-SQRT(tmpsqrt))/(2.*a)
+
+ IF (S1.LE.0.0) THEN
+ S = S2
+ ELSE
+ IF (S2.GT.0.0) THEN
+ IF(S2.GT.S1) THEN
+ S = S1
+ ELSE
+ S = S2
+ END IF
+ ELSE
+ S = S1
+ END IF
+ END IF
+ELSE
+ alpha = (xNode1 - x_photon_start) / sx
+ beta = (xNode2 - xNode1) / sx
+ deltay = (yNode2 - yNode1)
+ a = beta*beta*sy*sy - deltay*deltay + beta*beta*sz*sz
+ b = 2.*beta*sy*y_photon_start + 2.*alpha*beta*sy*sy - 2.*deltay*yNode1 + 2.*alpha*beta*sz*sz
+ c = y_photon_start*y_photon_start - yNode1*yNode1 + 2.*alpha*sy*y_photon_start + alpha*alpha*sy*sy + sz*sz*alpha*alpha
+ tmpsqrt = b*b - 4.*a*c
+ IF (tmpsqrt.LE.0.0) THEN
+ RETURN
+ END IF
+ l1 = (-b + SQRT(tmpsqrt))/(2.*a)
+ S1 = (xNode1-x_photon_start+(xNode2-xNode1)*l1)/sx
+ l2 = (-b - SQRT(tmpsqrt))/(2.*a)
+ S2 = (xNode1-x_photon_start+(xNode2-xNode1)*l2)/sx
+
+ IF ((l1.LE.0.0).OR.(l1.GE.1.0)) THEN !if 1 is not a valid intersection -> 2
+ l = l2; S = S2
+ ELSE !1 is valid intersection
+ IF ((S1.LE.0.0)) THEN !1 would be moving backwards -> 2
+ l = l2; S = S2
+ ELSE
+ IF ((l2.GT.0.0).AND.(l2.LT.1.0).AND.(S2.GT.0.0)) THEN !1 and 2 valid -> chose shorter one
+ IF (S2.GT.S1) THEN
+ l=l1; S=S1
+ ELSE
+ l=l2; S=S2
+ END IF
+ ELSE !1 is only valid intersection -> 1
+ l=l1; S=S1
+ END IF
+ END IF
+ END IF
+
+END IF
+
+IF((S .GT. 0.0) .AND. (0.0 .LE. l) .AND. (l .LE. 1.0)) THEN
+ ThroughSide = .TRUE.
+ IF (PRESENT(IntersectionPos)) THEN
+ IntersectionPos(1) = StartPoint(1) + S*sx
+ IntersectionPos(2) = StartPoint(2) + S*sy
+ IntersectionPos(3) = S*sz
+ Distance = S
+ END IF
+END IF
+END SUBROUTINE PhotonIntersectionWithSide2DDir
+
+
+!===================================================================================================================================
+!> Routine to check whether a photon crossed the given side.
+!===================================================================================================================================
+SUBROUTINE RotatePhotonIn2DPlane(IntersectionPos)
+! MODULES
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT/OUTPUT VARIABLES
+REAL, INTENT(OUT) :: IntersectionPos(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: NewYPho, NewYVelo
+!===================================================================================================================================
+PhotonProps%PhotonLastPos(1:3) = IntersectionPos(1:3)
+NewYPho = SQRT(PhotonProps%PhotonLastPos(2)**2 + PhotonProps%PhotonLastPos(3)**2)
+! Rotation: Vy' = Vy * cos(alpha) + Vz * sin(alpha) = Vy * y/y' + Vz * z/y'
+! Vz' = - Vy * sin(alpha) + Vz * cos(alpha) = - Vy * z/y' + Vz * y/y'
+! Right-hand system, using new y and z positions after tracking, position vector and velocity vector DO NOT have to
+! coincide (as opposed to Bird 1994, p. 391, where new positions are calculated with the velocity vector)
+NewYVelo = (PhotonProps%PhotonDirection(2)*PhotonProps%PhotonLastPos(2) &
+ + PhotonProps%PhotonDirection(3)*PhotonProps%PhotonLastPos(3))/NewYPho
+PhotonProps%PhotonDirection(3) = (-PhotonProps%PhotonDirection(2)*PhotonProps%PhotonLastPos(3) &
+ + PhotonProps%PhotonDirection(3)*PhotonProps%PhotonLastPos(2))/NewYPho
+PhotonProps%PhotonLastPos(2) = NewYPho
+PhotonProps%PhotonLastPos(3) = 0.0
+PhotonProps%PhotonDirection(2) = NewYVelo
+PhotonProps%PhotonPos(1:3) = PhotonProps%PhotonLastPos(1:3)
+
+END SUBROUTINE RotatePhotonIn2DPlane
+
+
+!===================================================================================================================================
+!>
+!===================================================================================================================================
+SUBROUTINE PhotonIntersectionWithSide(iLocSide,Element,TriNum, IntersectionPos, PhotonLost, IsMortar)
+USE MOD_Globals ,ONLY: abort,UNIT_StdOut
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared, NodeCoords_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+#if USE_MPI
+USE MOD_Globals ,ONLY: myRank
+#endif /*USE_MPI*/
+!--------------------------------------------------------------------------------------------------!
+ IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+INTEGER,INTENT(IN) :: TriNum
+LOGICAL,INTENT(OUT) :: PhotonLost
+REAL,INTENT(OUT) :: IntersectionPos(1:3)
+LOGICAL, INTENT(IN), OPTIONAL :: IsMortar
+! Local variable declaration
+INTEGER :: CNElemID
+INTEGER :: Node1, Node2
+REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal
+REAL :: bx,by,bz, ax,ay,az, dist
+REAL :: xNod, yNod, zNod,IntersecPara
+REAL :: Vector1(1:3), Vector2(1:3), VectorShift(1:3)
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+
+CNElemID = GetCNElemID(Element)
+
+! Sanity check
+IF(CNElemID.LE.0) THEN
+ IPWRITE(UNIT_StdOut,*) "Element =", Element
+ IPWRITE(UNIT_StdOut,*) "CNElemID =", CNElemID
+ CALL abort(__STAMP__,'PhotonIntersectionWithSide() found CNElemID<=0')
+END IF
+
+PoldX = PhotonProps%PhotonLastPos(1)
+PoldY = PhotonProps%PhotonLastPos(2)
+PoldZ = PhotonProps%PhotonLastPos(3)
+
+xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+!---- Calculate normal vector:
+IF(PRESENT(IsMortar)) THEN
+ Node1 = TriNum+2 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+1 ! and 1-3 and 1-4 for second triangle
+ELSE
+ Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+ Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+END IF
+
+Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+! Normal vector of side (one of the two triangles)
+nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+nx = nx/nVal
+ny = ny/nVal
+nz = nz/nVal
+
+!---- Calculate Intersection
+
+bx = PoldX - xNod
+by = PoldY - yNod
+bz = PoldZ - zNod
+
+ax = bx - nx * (bx * nx + by * ny + bz * nz)
+ay = by - ny * (bx * nx + by * ny + bz * nz)
+az = bz - nz * (bx * nx + by * ny + bz * nz)
+
+dist = SQRT(((ay * bz - az * by) * (ay * bz - az * by) + &
+ (az * bx - ax * bz) * (az * bx - ax * bz) + &
+ (ax * by - ay * bx) * (ax * by - ay * bx))/ &
+ (ax * ax + ay * ay + az * az))
+
+! If vector from old point to new point goes through the node, a will be x_photon_startro
+! dist is then simply length of vector b instead of |axb|/|a|
+IF (dist.NE.dist) dist = SQRT(bx*bx+by*by+bz*bz)
+
+VectorShift(1) = PhotonProps%PhotonDirection(1)
+VectorShift(2) = PhotonProps%PhotonDirection(2)
+VectorShift(3) = PhotonProps%PhotonDirection(3)
+
+! IntersecPara is zero when photon is perfectly perpendicular to side (cannot actually happen)
+PhotonLost=.FALSE.
+IntersecPara = VectorShift(1) * nx + VectorShift(2) * ny + VectorShift(3) * nz
+IF(ABS(IntersecPara).GT.0.0)THEN
+ IntersecPara = dist / IntersecPara
+ELSE
+ ! Mark photon as lost so that it is written to PartStateLost.h5
+ PhotonLost = .TRUE.
+ IntersectionPos = HUGE(1.0)
+ RETURN
+END IF ! ABS(IntersecPara).GT.0.0
+
+IntersectionPos(1) = PoldX + IntersecPara * VectorShift(1)
+IntersectionPos(2) = PoldY + IntersecPara * VectorShift(2)
+IntersectionPos(3) = PoldZ + IntersecPara * VectorShift(3)
+
+RETURN
+END SUBROUTINE PhotonIntersectionWithSide
+
+
+!===================================================================================================================================
+!> Calculate the absorbed energy in the (sub-)volume of each element. For higher-order sampling, the ray path between element entry
+!> and exit is sampled NbrOfSamples = MAX(30,(Nloc+1)**2) and a nearest neighbour search finds the nearest sub-volume element on
+!> which the energy is deposited. The sum of all sub-volume energies must equal the element-constant value, which is also
+!> determined. Not that only the energies are conserved and not the density, which is the ratio of energy and (sub-)volume when
+!> a change basis is used to switch between point sets (polynomial representations).
+!===================================================================================================================================
+SUBROUTINE CalcAbsorptionRayTrace(IntersectionPos,GlobalElemID,PhotonDir)
+USE MOD_Globals ,ONLY: VECNORM
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergy,Ray,U_N_Ray,N_DG_Ray
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER, INTENT(IN) :: GlobalElemID
+REAL, INTENT(IN) :: PhotonDir(3)
+REAL, INTENT(IN) :: IntersectionPos(3)
+! Local variable declaration
+INTEGER :: k,l,m,Nloc,NbrOfSamples,iIntersec,idx
+REAL :: SamplePos(3)
+REAL :: direction(3),subdirection(3),length,sublength
+REAL :: RandVal(3)
+!--------------------------------------------------------------------------------------------------!
+! Calculate the direction and length of the path of the ray through the element
+direction(1:3) = IntersectionPos(1:3)-PhotonProps%PhotonPos(1:3)
+length = VECNORM(direction(1:3))
+
+! Check primary or secondary direction
+IF(DOT_PRODUCT(PhotonDir,Ray%Direction).GT.0.0)THEN
+ ! 1st energy direction
+ idx = 1
+ELSE
+ ! 2nd energy direction
+ idx = 2
+ RayElemPassedEnergy(3:5,GlobalElemID) = RayElemPassedEnergy(3:5,GlobalElemID) + PhotonDir(1:3)
+ RayElemPassedEnergy(6,GlobalElemID) = RayElemPassedEnergy(6,GlobalElemID) + 1.0
+END IF
+RayElemPassedEnergy(idx,GlobalElemID) = RayElemPassedEnergy(idx,GlobalElemID) + PhotonProps%PhotonEnergy * length
+
+! High-order sampling: Use nearest Gauss point (NGP) from PIC deposition
+Nloc = N_DG_Ray(GlobalElemID)
+
+! Loop over number of sub-samples
+NbrOfSamples = MAX(30,(Nloc+1)**2) ! Nloc+1 ! must be at least 3 for this sampling method (one point between the two intersections of the element)!
+subdirection(1:3) = direction(1:3)/REAL(NbrOfSamples-1)
+sublength = VECNORM(subdirection(1:3))
+! Loop over the number of sub lengths and assign them to the nearest DOF. Choose the intersection points at random to prevent artifacts
+IF(ABS(direction(3)).GT.1e6*(ABS(direction(1))+ABS(direction(2))))THEN
+ ! only in z-dir
+ DO iIntersec = 1, NbrOfSamples-1
+ CALL RANDOM_NUMBER(RandVal(1))
+ SamplePos(1:3) = PhotonProps%PhotonPos(1:3) + (/1.0 , 1.0 , RandVal(1)/) * direction(1:3)
+ CALL GetNestestDOFInRefElem(Nloc,SamplePos(1:3),GlobalElemID,k,l,m)
+ U_N_Ray(GlobalElemID)%U(idx,k,l,m) = U_N_Ray(GlobalElemID)%U(idx,k,l,m) + sublength*PhotonProps%PhotonEnergy
+ END DO
+ELSE
+ DO iIntersec = 1, NbrOfSamples-1
+ CALL RANDOM_NUMBER(RandVal(1:3))
+ SamplePos(1:3) = PhotonProps%PhotonPos(1:3) + RandVal(1:3) * direction(1:3)
+ CALL GetNestestDOFInRefElem(Nloc,SamplePos(1:3),GlobalElemID,k,l,m)
+ U_N_Ray(GlobalElemID)%U(idx,k,l,m) = U_N_Ray(GlobalElemID)%U(idx,k,l,m) + sublength*PhotonProps%PhotonEnergy
+ END DO
+END IF ! ABS(direction(3).GT.1e6*(ABS(direction(1))+ABS(direction(2))))
+PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+
+! Store intersection point as new starting point
+PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+
+END SUBROUTINE CalcAbsorptionRayTrace
+
+
+!===================================================================================================================================
+!> Find the nearest DOF of a particle position (or sampled particle path coordinate) and return k,l,m
+!===================================================================================================================================
+SUBROUTINE GetNestestDOFInRefElem(Nloc,SamplePos,GlobalElemID,k,l,m)
+! MODULES
+USE MOD_globals
+USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem
+USE MOD_RayTracing_Vars ,ONLY: N_Inter_Ray
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+REAL,INTENT(IN) :: SamplePos(1:3)
+INTEGER,INTENT(IN) :: Nloc
+INTEGER,INTENT(IN) :: GlobalElemID
+INTEGER,INTENT(OUT) :: k,l,m
+!INTEGER :: kOld,lOld,mOld
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: IntersectionPosRef(3)
+!INTEGER :: ii,a,b
+!===================================================================================================================================
+! OLD METHOD FROM NEAREST GAUSS POINT
+
+!IF(MOD(Nloc,2).EQ.0) THEN
+! a = Nloc/2
+! b = a
+!ELSE
+! a = (Nloc+1)/2
+! b = a-1
+!END IF
+!
+!! Get position in reference element
+!CALL GetPositionInRefElem(SamplePos(1:3),IntersectionPosRef(1:3),GlobalElemID)
+!
+!k = a
+!DO ii = 0,b-1
+! IF(ABS(IntersectionPosRef(1)).GE.N_Inter_Ray(Nloc)%GaussBorder(Nloc-ii))THEN
+! k = Nloc-ii
+! EXIT
+! END IF
+!END DO
+!k = NINT((Nloc+SIGN(2.0*k-Nloc,IntersectionPosRef(1)))/2)
+!!! y-direction
+!l = a
+!DO ii = 0,b-1
+! IF(ABS(IntersectionPosRef(2)).GE.N_Inter_Ray(Nloc)%GaussBorder(Nloc-ii))THEN
+! l = Nloc-ii
+! EXIT
+! END IF
+!END DO
+!l = NINT((Nloc+SIGN(2.0*l-Nloc,IntersectionPosRef(2)))/2)
+!!! z-direction
+!m = a
+!DO ii = 0,b-1
+! IF(ABS(IntersectionPosRef(3)).GE.N_Inter_Ray(Nloc)%GaussBorder(Nloc-ii))THEN
+! m = Nloc-ii
+! EXIT
+! END IF
+!END DO
+!m = NINT((Nloc+SIGN(2.0*m-Nloc,IntersectionPosRef(3)))/2)
+!
+!kOld = k
+!lOld = l
+!mOld = m
+
+! Get reference position
+CALL GetPositionInRefElem(SamplePos(1:3),IntersectionPosRef(1:3),GlobalElemID)
+
+k = MINLOC(ABS(N_Inter_Ray(Nloc)%xGP(:) - IntersectionPosRef(1)),DIM=1) - 1
+l = MINLOC(ABS(N_Inter_Ray(Nloc)%xGP(:) - IntersectionPosRef(2)),DIM=1) - 1
+m = MINLOC(ABS(N_Inter_Ray(Nloc)%xGP(:) - IntersectionPosRef(3)),DIM=1) - 1
+!IPWRITE(UNIT_StdOut,*) "Nloc =", Nloc
+!IPWRITE(UNIT_StdOut,*) "N_Inter_Ray(Nloc)%xGP(:) =", N_Inter_Ray(Nloc)%xGP(:)
+!IPWRITE(UNIT_StdOut,*) "IntersectionPosRef =", IntersectionPosRef
+!
+!IF(kOld.ne.k .or. lOld.ne.l .or. mOld.ne.m)THEN
+! write(*,*) ""
+! IPWRITE(UNIT_StdOut , *) "k , l , m =" , k , l , m
+! IPWRITE(UNIT_StdOut , *) "kOld , lOld , mOld =" , kOld , lOld , mOld
+! CALL abort(__STAMP__,'not equal!')
+!END IF ! kOld.eq.k .or. lOld.ne.l .or. mOld.ne.m
+!
+! IPWRITE(UNIT_StdOut , *) "k , l , m =" , k , l , m
+! !IF(myrank.eq.0) read*; CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
+
+END SUBROUTINE GetNestestDOFInRefElem
+
+
+!===================================================================================================================================
+!> Calculates absorbed energy of photons along their paths stochastically
+!===================================================================================================================================
+SUBROUTINE CalcAbsoprtionMC(IntersectionPos,Element, DONE)
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergy
+USE MOD_Radiation_Vars ,ONLY: Radiation_Absorption_spec,Radiation_Absorption_SpecPercent
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergySpec
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+INTEGER, INTENT(IN) :: Element
+REAL, INTENT(IN) :: IntersectionPos(3)
+LOGICAL, INTENT(OUT) :: DONE
+! LOCAL VARIABLES
+!--------------------------------------------------------------------------------------------------!
+REAL :: iRan, DistanceVec(3), Distance, opticalPath
+!--------------------------------------------------------------------------------------------------!
+IF ((Radiation_Absorption_Spec(PhotonProps%WaveLength,Element).GT.0.0)&
+ .AND.(SUM(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)).GT.0.0)) THEN
+ DistanceVec(1:3) = PhotonProps%PhotonPos(1:3) - IntersectionPos(1:3)
+ Distance = SQRT(DistanceVec(1)*DistanceVec(1) + DistanceVec(2)*DistanceVec(2) + DistanceVec(3)*DistanceVec(3))
+ CALL RANDOM_NUMBER(iRan)
+ opticalPath = Distance*Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ IF (-LOG(iRan).LT.opticalPath) THEN
+ RadiationElemAbsEnergySpec(:,Element) = RadiationElemAbsEnergySpec(:,Element) &
+ + PhotonProps%PhotonEnergy*(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))&
+ /SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))))
+ DONE = .TRUE.
+ ELSE
+ PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+ END IF
+ELSE
+ PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+END IF
+RadiationElemAbsEnergy(1,Element) = RadiationElemAbsEnergy(1,Element) + opticalPath
+RadiationElemAbsEnergy(2,Element) = RadiationElemAbsEnergy(2,Element) + 1.0
+
+END SUBROUTINE CalcAbsoprtionMC
+
+
+!===================================================================================================================================
+!> Calculates absorbed energy of photons along their paths analytically
+!===================================================================================================================================
+SUBROUTINE CalcAbsoprtionAnalytic(IntersectionPos,Element, DONE)
+USE MOD_Globals
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationElemAbsEnergy, RadiationElemAbsEnergySpec
+USE MOD_Radiation_Vars ,ONLY: Radiation_Absorption_spec, Radiation_Absorption_SpecPercent
+!--------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER, INTENT(IN) :: Element
+REAL, INTENT(IN) :: IntersectionPos(3)
+LOGICAL, INTENT(INOUT) :: DONE
+! LOCAL VARIABLES
+!--------------------------------------------------------------------------------------------------!
+REAL :: DistanceVec(3), Distance, LostEnergy, opticalPath
+!--------------------------------------------------------------------------------------------------!
+IF ((Radiation_Absorption_Spec(PhotonProps%WaveLength,Element).GT.0.0)&
+ .AND.(SUM(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)).GT.0)) THEN
+ DistanceVec(1:3) = PhotonProps%PhotonPos(1:3) - IntersectionPos(1:3)
+ Distance = SQRT(DistanceVec(1)*DistanceVec(1) + DistanceVec(2)*DistanceVec(2) + DistanceVec(3)*DistanceVec(3))
+ opticalPath = Distance*Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ IF (CHECKEXP(opticalPath)) THEN
+ LostEnergy = PhotonProps%PhotonEnergy*(1.-EXP(-opticalPath))
+ ELSE
+ LostEnergy = PhotonProps%PhotonEnergy
+ DONE = .TRUE.
+ END IF
+ IF (SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))).EQ.0.0) THEN
+ print*,'arg',Element,PhotonProps%WaveLength, Radiation_Absorption_Spec(PhotonProps%WaveLength,Element)
+ print*, 'percent', Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element)
+ END IF
+ PhotonProps%PhotonEnergy = PhotonProps%PhotonEnergy - LostEnergy
+ RadiationElemAbsEnergySpec(:,Element) = RadiationElemAbsEnergySpec(:,Element) &
+ + LostEnergy*(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))&
+ /SUM(REAL(Radiation_Absorption_SpecPercent(PhotonProps%WaveLength,:,Element))))
+ELSE
+ opticalPath = 0.0
+END IF
+! IF (PhotonProps%PhotonEnergy.LE.(RadTrans%GlobalRadiationPower/(1000.*RadTrans%GlobalPhotonNum))) THEN
+! DONE = .TRUE.
+! ELSE
+
+! END IF
+PhotonProps%PhotonPos(1:3) = IntersectionPos(1:3)
+RadiationElemAbsEnergy(1,Element) = RadiationElemAbsEnergy(1,Element) + opticalPath
+RadiationElemAbsEnergy(2,Element) = RadiationElemAbsEnergy(2,Element) + 1.0
+
+END SUBROUTINE CalcAbsoprtionAnalytic
+
+
+!===================================================================================================================================
+!> Calculates absorbed energy of photons along their paths
+!===================================================================================================================================
+SUBROUTINE CalcAbsoprtion(IntersectionPos, Element, DONE, before)
+USE MOD_Globals
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationAbsorptionModel
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER, INTENT(IN) :: Element
+REAL, INTENT(IN) :: IntersectionPos(3)
+LOGICAL, INTENT(INOUT) :: DONE
+LOGICAL, INTENT(IN), OPTIONAL :: before !> before=T (before reflection), before=F (after reflection), before=NOT PRESENT (volume)
+! Local variable declaration
+!--------------------------------------------------------------------------------------------------!
+IF (RadiationAbsorptionModel.EQ.0) THEN
+ ! For ray tracing, check if routine is called be
+ IF(PRESENT(before))THEN
+ IF(before)THEN
+ ! Before reflection: Nothing to do as it is not yet known if the ray is absorbed at the surface
+ RETURN
+ ELSE
+ ! After reflection: Use old or new ray direction depending on whether the ray was absorbed
+ IF(DONE)THEN
+ ! Ray was absorbed at the wall
+ CALL CalcAbsorptionRayTrace(IntersectionPos, Element,PhotonProps%PhotonDirectionBeforeReflection)
+ ELSE
+ ! Ray was reflected at the wall
+ ! TODO: Not sure which ray vector should be used
+ !CALL CalcAbsorptionRayTrace(Element,PhotonProps%PhotonDirection)
+ CALL CalcAbsorptionRayTrace(IntersectionPos, Element,PhotonProps%PhotonDirectionBeforeReflection)
+ END IF ! DONE
+ END IF ! before
+ ELSE
+ CALL CalcAbsorptionRayTrace(IntersectionPos, Element,PhotonProps%PhotonDirection)
+ END IF ! PRESENT(before)
+ELSEIF (RadiationAbsorptionModel.EQ.1) THEN
+ CALL CalcAbsoprtionAnalytic(IntersectionPos,Element, DONE)
+ELSEIF (RadiationAbsorptionModel.EQ.2) THEN
+ CALL CalcAbsoprtionMC(IntersectionPos,Element, DONE)
+ELSE
+ CALL Abort(__STAMP__,'AbsorptionModel must be 1 or 2!')
+END IF
+
+END SUBROUTINE CalcAbsoprtion
+
+
+!===================================================================================================================================
+!> Determines velocity vectors of photons after a perfect reflection at a boundary
+!===================================================================================================================================
+SUBROUTINE PerfectPhotonReflection(iLocSide,Element,TriNum, IntersectionPos, IntersecAlreadyCalc)
+USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemSideNodeID_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+INTEGER,INTENT(IN) :: TriNum
+REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+LOGICAL, INTENT(IN) :: IntersecAlreadyCalc
+! Local variable declaration
+INTEGER :: CNElemID
+INTEGER :: Node1, Node2
+REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal
+REAL :: xNod, yNod, zNod
+REAL :: VelX, VelY, VelZ
+REAL :: Vector1(1:3), Vector2(1:3), POI_fak, ProjVel
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+
+CNElemID = GetCNElemID(Element)
+PoldX = PhotonProps%PhotonLastPos(1)
+PoldY = PhotonProps%PhotonLastPos(2)
+PoldZ = PhotonProps%PhotonLastPos(3)
+
+VelX = PhotonProps%PhotonDirection(1)
+VelY = PhotonProps%PhotonDirection(2)
+VelZ = PhotonProps%PhotonDirection(3)
+
+xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+!---- Calculate normal vector:
+
+Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+
+Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+nx = nx/nVal
+ny = ny/nVal
+nz = nz/nVal
+
+!---- Calculate Point of Intersection (POI)
+IF (.NOT.IntersecAlreadyCalc) THEN
+ POI_fak = (Vector2(2)*(Vector1(1)*(zNod-PoldZ)+Vector1(3)*(PoldX-xNod)) &
+ +Vector1(2)*(Vector2(1)*(PoldZ-zNod)+Vector2(3)*(xNod-PoldX)) &
+ +yNod*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)) &
+ +PoldY*(Vector1(1)*Vector2(3)-Vector1(3)*Vector2(1))) &
+ /(Vector1(2)*(Vector2(3)*VelX-Vector2(1)*VelZ) &
+ + Vector2(2)*(Vector1(1)*VelZ-Vector1(3)*VelX) &
+ + VelY*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)))
+
+ IntersectionPos(1) = PoldX + POI_fak * VelX
+ IntersectionPos(2) = PoldY + POI_fak * VelY
+ IntersectionPos(3) = PoldZ + POI_fak * VelZ
+END IF
+
+!---- Calculate new velocity vector
+ProjVel = nx*PhotonProps%PhotonDirection(1)+ny*PhotonProps%PhotonDirection(2) &
+ +nz*PhotonProps%PhotonDirection(3)
+VelX=PhotonProps%PhotonDirection(1)-2.*ProjVel*nx
+VelY=PhotonProps%PhotonDirection(2)-2.*ProjVel*ny
+VelZ=PhotonProps%PhotonDirection(3)-2.*ProjVel*nz
+
+!---- Assign new values to "old" variables to continue loop
+
+PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+PhotonProps%PhotonDirection(1) = VelX
+PhotonProps%PhotonDirection(2) = VelY
+PhotonProps%PhotonDirection(3) = VelZ
+RETURN
+END SUBROUTINE PerfectPhotonReflection
+
+
+SUBROUTINE PerfectPhotonReflection2D(iLocSide,Element, IntersectionPos)
+!--------------------------------------------------------------------------------------------------!
+!Based on PerfectReflection3D
+!--------------------------------------------------------------------------------------------------!
+USE MOD_Particle_Mesh_Vars ,ONLY: SideNormalEdge2D_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+! Local variable declaration
+INTEGER :: CNElemID
+REAL :: nx, ny, nz, nValIntersec
+REAL :: VelX, VelY, VelZ
+REAL :: ProjVel
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+CNElemID = GetCNElemID(Element)
+
+nx = SideNormalEdge2D_Shared(1,iLocSide, CNElemID)
+nValIntersec = SQRT(IntersectionPos(2)*IntersectionPos(2) + IntersectionPos(3)*IntersectionPos(3))
+ny = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+nz = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+
+!---- Calculate new velocity vector
+ProjVel = nx*PhotonProps%PhotonDirection(1)+ny*PhotonProps%PhotonDirection(2) &
+ +nz*PhotonProps%PhotonDirection(3)
+VelX=PhotonProps%PhotonDirection(1)-2.*ProjVel*nx
+VelY=PhotonProps%PhotonDirection(2)-2.*ProjVel*ny
+VelZ=PhotonProps%PhotonDirection(3)-2.*ProjVel*nz
+
+!---- Assign new values to "old" variables to continue loop
+
+PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+PhotonProps%PhotonDirection(1) = VelX
+PhotonProps%PhotonDirection(2) = VelY
+PhotonProps%PhotonDirection(3) = VelZ
+END SUBROUTINE PerfectPhotonReflection2D
+
+
+SUBROUTINE DiffusePhotonReflection(iLocSide,Element,TriNum, IntersectionPos, IntersecAlreadyCalc)
+!--------------------------------------------------------------------------------------------------!
+!Based on PerfectReflection3D
+!--------------------------------------------------------------------------------------------------!
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared, NodeCoords_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE Ziggurat
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+INTEGER,INTENT(IN) :: TriNum
+REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+LOGICAL, INTENT(IN) :: IntersecAlreadyCalc
+! Local variable declaration
+INTEGER :: CNElemID
+INTEGER :: Node1, Node2
+REAL :: PoldX, PoldY, PoldZ, nx, ny, nz, nVal
+REAL :: xNod, yNod, zNod, VecX, VecY, VecZ
+REAL :: VelX, VelY, VelZ, VeloCx, VeloCy, VeloCz, NormVec, RanNum
+REAL :: Vector1(1:3), Vector2(1:3), POI_fak
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+CNElemID = GetCNElemID(Element)
+PoldX = PhotonProps%PhotonLastPos(1)
+PoldY = PhotonProps%PhotonLastPos(2)
+PoldZ = PhotonProps%PhotonLastPos(3)
+
+VelX = PhotonProps%PhotonDirection(1)
+VelY = PhotonProps%PhotonDirection(2)
+VelZ = PhotonProps%PhotonDirection(3)
+
+xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+!---- Calculate normal vector:
+
+Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+
+Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+nx = Vector1(2) * Vector2(3) - Vector1(3) * Vector2(2)
+ny = Vector1(3) * Vector2(1) - Vector1(1) * Vector2(3)
+nz = Vector1(1) * Vector2(2) - Vector1(2) * Vector2(1)
+
+nVal = SQRT(nx*nx + ny*ny + nz*nz)
+
+nx = nx/nVal
+ny = ny/nVal
+nz = nz/nVal
+
+!---- Calculate Point of Intersection (POI)
+!---- Calculate Point of Intersection (POI)
+IF (.NOT.IntersecAlreadyCalc) THEN
+ POI_fak = (Vector2(2)*(Vector1(1)*(zNod-PoldZ)+Vector1(3)*(PoldX-xNod)) &
+ +Vector1(2)*(Vector2(1)*(PoldZ-zNod)+Vector2(3)*(xNod-PoldX)) &
+ +yNod*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)) &
+ +PoldY*(Vector1(1)*Vector2(3)-Vector1(3)*Vector2(1))) &
+ /(Vector1(2)*(Vector2(3)*VelX-Vector2(1)*VelZ) &
+ + Vector2(2)*(Vector1(1)*VelZ-Vector1(3)*VelX) &
+ + VelY*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)))
+
+ IntersectionPos(1) = PoldX + POI_fak * VelX
+ IntersectionPos(2) = PoldY + POI_fak * VelY
+ IntersectionPos(3) = PoldZ + POI_fak * VelZ
+END IF
+!---- Calculate new velocity vector (Extended Maxwellian Model)
+
+VeloCx = rnor() !normal distri
+VeloCy = rnor() !normal distri
+CALL RANDOM_NUMBER(RanNum)
+VeloCz = SQRT(-2.*LOG(RanNum)) ! rayleigh distri
+
+!---- Transformation local distribution -> global coordinates
+VecX = Vector1(1) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+VecY = Vector1(2) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+VecZ = Vector1(3) / SQRT( Vector1(1)**2 + Vector1(2)**2 + Vector1(3)**2 )
+
+VelX = VecX*VeloCx + (nz*VecY-ny*VecZ)*VeloCy - nx*VeloCz
+VelY = VecY*VeloCx + (nx*VecZ-nz*VecX)*VeloCy - ny*VeloCz
+VelZ = VecZ*VeloCx + (ny*VecX-nx*VecY)*VeloCy - nz*VeloCz
+!---- Assign new values to "old" variables to continue loop
+
+PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+!---- saving new particle velocity
+NormVec = SQRT(VelX*VelX + VelY*VelY + VelZ*VelZ)
+PhotonProps%PhotonDirection(1) = VelX / NormVec
+PhotonProps%PhotonDirection(2) = VelY / NormVec
+PhotonProps%PhotonDirection(3) = VelZ / NormVec
+
+RETURN
+END SUBROUTINE DiffusePhotonReflection
+
+
+SUBROUTINE DiffusePhotonReflection2D(iLocSide,Element, IntersectionPos)
+!--------------------------------------------------------------------------------------------------!
+!Based on PerfectReflection3D
+!--------------------------------------------------------------------------------------------------!
+USE MOD_Particle_Mesh_Vars ,ONLY: SideNormalEdge2D_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE Ziggurat
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: Element
+REAL, INTENT(IN) :: IntersectionPos(1:3)
+! Local variable declaration
+INTEGER :: CNElemID
+REAL :: nx, ny, nz, nValIntersec, VecX, VecY, VecZ
+REAL :: VelX, VelY, VelZ, VeloCx, VeloCy, VeloCz, NormVec, RanNum
+!--------------------------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
+CNElemID = GetCNElemID(Element)
+nx = SideNormalEdge2D_Shared(1,iLocSide, CNElemID)
+nValIntersec = SQRT(IntersectionPos(2)*IntersectionPos(2) + IntersectionPos(3)*IntersectionPos(3))
+ny = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+nz = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(2,iLocSide, CNElemID)
+
+VecX = SideNormalEdge2D_Shared(3,iLocSide, CNElemID)
+VecY = IntersectionPos(2)/nValIntersec * SideNormalEdge2D_Shared(4,iLocSide, CNElemID)
+VecZ = IntersectionPos(3)/nValIntersec * SideNormalEdge2D_Shared(4,iLocSide, CNElemID)
+!---- Calculate new velocity vector (Extended Maxwellian Model)
+
+VeloCx = rnor() !normal distri
+VeloCy = rnor() !normal distri
+CALL RANDOM_NUMBER(RanNum)
+VeloCz = SQRT(-2.*LOG(RanNum)) ! rayleigh distri
+
+VelX = VecX*VeloCx + (nz*VecY-ny*VecZ)*VeloCy - nx*VeloCz
+VelY = VecY*VeloCx + (nx*VecZ-nz*VecX)*VeloCy - ny*VeloCz
+VelZ = VecZ*VeloCx + (ny*VecX-nx*VecY)*VeloCy - nz*VeloCz
+!---- Assign new values to "old" variables to continue loop
+
+PhotonProps%PhotonLastPos(1) = IntersectionPos(1)
+PhotonProps%PhotonLastPos(2) = IntersectionPos(2)
+PhotonProps%PhotonLastPos(3) = IntersectionPos(3)
+
+!---- saving new particle velocity
+NormVec = SQRT(VelX*VelX + VelY*VelY + VelZ*VelZ)
+PhotonProps%PhotonDirection(1) = VelX / NormVec
+PhotonProps%PhotonDirection(2) = VelY / NormVec
+PhotonProps%PhotonDirection(3) = VelZ / NormVec
+
+END SUBROUTINE DiffusePhotonReflection2D
+
+
+SUBROUTINE PeriodicPhotonBC(iLocSide, Element, TriNum, IntersectionPos, IntersecAlreadyCalc, SideID)
+!----------------------------------------------------------------------------------------------------------------------------------!
+! Computes the periodic movement of a photon and updates PhotonLastPos, PhotonPos and IntersectionPos to the periodically moves
+! location
+!----------------------------------------------------------------------------------------------------------------------------------!
+! MODULES !
+!----------------------------------------------------------------------------------------------------------------------------------!
+USE MOD_Globals
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemSideNodeID_Shared, NodeCoords_Shared
+USE MOD_Mesh_Vars ,ONLY: BoundaryType
+USE MOD_Particle_Mesh_Vars ,ONLY: GEO
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+!USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT VARIABLES
+INTEGER,INTENT(IN) :: iLocSide
+INTEGER,INTENT(IN) :: TriNum
+INTEGER,INTENT(IN) :: SideID
+LOGICAL,INTENT(IN) :: IntersecAlreadyCalc
+!----------------------------------------------------------------------------------------------------------------------------------!
+! OUTPUT VARIABLES
+INTEGER,INTENT(INOUT) :: Element
+REAL, INTENT(INOUT) :: IntersectionPos(1:3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: PVID
+!INTEGER :: moved(2),locSideID
+! Local variable declaration
+INTEGER :: CNElemID
+INTEGER :: Node1, Node2
+REAL :: PoldX, PoldY, PoldZ
+REAL :: xNod, yNod, zNod
+REAL :: VelX, VelY, VelZ
+REAL :: Vector1(1:3), Vector2(1:3), POI_fak
+!===================================================================================================================================
+CNElemID = GetCNElemID(Element)
+PoldX = PhotonProps%PhotonLastPos(1)
+PoldY = PhotonProps%PhotonLastPos(2)
+PoldZ = PhotonProps%PhotonLastPos(3)
+
+VelX = PhotonProps%PhotonDirection(1)
+VelY = PhotonProps%PhotonDirection(2)
+VelZ = PhotonProps%PhotonDirection(3)
+
+xNod = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+yNod = NodeCoords_Shared(2,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+zNod = NodeCoords_Shared(3,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1)
+
+!---- Calculate normal vector:
+
+Node1 = TriNum+1 ! normal = cross product of 1-2 and 1-3 for first triangle
+Node2 = TriNum+2 ! and 1-3 and 1-4 for second triangle
+
+Vector1(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - xNod
+Vector1(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - yNod
+Vector1(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node1,iLocSide,CNElemID)+1) - zNod
+
+Vector2(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - xNod
+Vector2(2) = NodeCoords_Shared(2,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - yNod
+Vector2(3) = NodeCoords_Shared(3,ElemSideNodeID_Shared(Node2,iLocSide,CNElemID)+1) - zNod
+
+!---- Calculate Point of Intersection (POI)
+IF (.NOT.IntersecAlreadyCalc) THEN
+ POI_fak = (Vector2(2)*(Vector1(1)*(zNod-PoldZ)+Vector1(3)*(PoldX-xNod)) &
+ +Vector1(2)*(Vector2(1)*(PoldZ-zNod)+Vector2(3)*(xNod-PoldX)) &
+ +yNod*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)) &
+ +PoldY*(Vector1(1)*Vector2(3)-Vector1(3)*Vector2(1))) &
+ /(Vector1(2)*(Vector2(3)*VelX-Vector2(1)*VelZ) &
+ + Vector2(2)*(Vector1(1)*VelZ-Vector1(3)*VelX) &
+ + VelY*(Vector1(3)*Vector2(1)-Vector1(1)*Vector2(3)))
+
+ IntersectionPos(1) = PoldX + POI_fak * VelX
+ IntersectionPos(2) = PoldY + POI_fak * VelY
+ IntersectionPos(3) = PoldZ + POI_fak * VelZ
+END IF
+
+! Set last particle position on face
+PhotonProps%PhotonLastPos = IntersectionPos
+! Perform the periodic movement
+PVID = BoundaryType(SideInfo_Shared(SIDE_BCID,SideID),BC_ALPHA)
+PhotonProps%PhotonLastPos = PhotonProps%PhotonLastPos + SIGN( GEO%PeriodicVectors(1:3,ABS(PVID)),REAL(PVID))
+! Update particle positon after periodic BC
+!PartState(1:3,PartID) = PhotonProps%PhotonLastPos + (TrackInfo%lengthPartTrajectory-TrackInfo%alpha)*TrackInfo%PartTrajectory
+!TrackInfo%lengthPartTrajectory = TrackInfo%lengthPartTrajectory - TrackInfo%alpha
+
+! refmapping and tracing
+! Move particle from old element to new element
+Element = SideInfo_Shared(SIDE_NBELEMID,SideID)
+
+! Periodic movement the intersection point as it will be considered the starting point in the next iteration
+IntersectionPos = PhotonProps%PhotonLastPos
+
+! Periodic movement the photon position
+PhotonProps%PhotonPos = PhotonProps%PhotonLastPos
+
+END SUBROUTINE PeriodicPhotonBC
+
+
+!===================================================================================================================================
+!> Photon interactions with walls:
+!> Compare random number with photon accommodation and absorb/reflect depending on the outcome
+!>
+!> ForceWallSample (OPTIONAL): When true, the sampling is performed independent of the actual absorption/reflection outcome
+!===================================================================================================================================
+SUBROUTINE CalcWallAbsoprtion(IntersectionPos, GlobSideID, DONE, ForceWallSample)
+USE MOD_Globals ,ONLY: VECNORM
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps,PhotonSurfSideSamplingMidPoints
+USE MOD_Particle_Boundary_Vars ,ONLY: PartBound, GlobalSide2SurfSide
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+#if USE_MPI
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWallProc
+#else
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall
+#endif /*USE_MPI*/
+USE MOD_RayTracing_Vars ,ONLY: Ray
+!--------------------------------------------------------------------------------------------------!
+IMPLICIT NONE
+!--------------------------------------------------------------------------------------------------!
+! argument list declaration
+REAL, INTENT(IN) :: IntersectionPos(3)
+INTEGER, INTENT(IN) :: GlobSideID
+LOGICAL, INTENT(OUT) :: DONE
+LOGICAL, INTENT(IN), OPTIONAL :: ForceWallSample !>
+! Local variable declaration
+!--------------------------------------------------------------------------------------------------!
+REAL :: iRan,PhotonEnACC,distance,distanceMin
+INTEGER :: SurfSideID,p,q,pp,qq
+LOGICAL :: ForceWallSampleLoc
+!--------------------------------------------------------------------------------------------------!
+#if USE_MPI
+ASSOCIATE( PhotonSampWall => PhotonSampWallProc )
+#endif /*USE_MPI*/
+SurfSideID = GlobalSide2SurfSide(SURF_SIDEID,GlobSideID)
+! Check if photon is to be added to PhotonSampWall independent of the actual absorption/reflection
+IF(PRESENT(ForceWallSample))THEN
+ ForceWallSampleLoc = ForceWallSample
+ ! Sample impact
+ IF(ForceWallSampleLoc)THEN
+ IF(Ray%nSurfSample.GT.1)THEN
+ distanceMin = HUGE(1.)
+ DO pp = 1, Ray%nSurfSample
+ DO qq = 1, Ray%nSurfSample
+ distance = VECNORM(IntersectionPos(1:3) - PhotonSurfSideSamplingMidPoints(1:3,pp,qq,SurfSideID))
+ IF(distance.LT.distanceMin)THEN
+ p = pp
+ q = qq
+ distanceMin = distance
+ END IF ! distance.LT.distanceMin
+ END DO ! q = 1, Ray%nSurfSample
+ END DO ! p = 1, Ray%nSurfSample
+ PhotonSampWall(1,p,q,SurfSideID) = PhotonSampWall(1,p,q,SurfSideID) + 1.0
+ PhotonSampWall(2,p,q,SurfSideID) = PhotonSampWall(2,p,q,SurfSideID) + PhotonProps%PhotonEnergy
+ ELSE
+ PhotonSampWall(1,1,1,SurfSideID) = PhotonSampWall(1,1,1,SurfSideID) + 1.0
+ PhotonSampWall(2,1,1,SurfSideID) = PhotonSampWall(2,1,1,SurfSideID) + PhotonProps%PhotonEnergy
+ END IF ! Ray%nSurfSample.GT.1
+ END IF ! ForceWallSampleLoc
+ELSE
+ ForceWallSampleLoc = .FALSE.
+END IF ! PRESENT(ForceWallSample)
+DONE = .FALSE. ! initialize
+PhotonEnACC = PartBound%PhotonEnACC(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,GlobSideID)))
+IF(PhotonEnACC.LE.0.0) RETURN ! Skip sides without absorption (pure reflection)
+CALL RANDOM_NUMBER(iRan)
+IF (PhotonEnACC.GT.iRan) THEN
+ DONE = .TRUE.
+ ! Do not sample twice
+ IF(.NOT.ForceWallSampleLoc)THEN
+ IF(Ray%nSurfSample.GT.1)THEN
+ distanceMin = HUGE(1.)
+ DO pp = 1, Ray%nSurfSample
+ DO qq = 1, Ray%nSurfSample
+ distance = VECNORM(IntersectionPos(1:3) - PhotonSurfSideSamplingMidPoints(1:3,pp,qq,SurfSideID))
+ IF(distance.LT.distanceMin)THEN
+ p = pp
+ q = qq
+ END IF ! distance.LT.distanceMin
+ END DO ! q = 1, Ray%nSurfSample
+ END DO ! p = 1, Ray%nSurfSample
+ PhotonSampWall(1,p,q,SurfSideID) = PhotonSampWall(1,p,q,SurfSideID) + 1.0
+ PhotonSampWall(2,p,q,SurfSideID) = PhotonSampWall(2,p,q,SurfSideID) + PhotonProps%PhotonEnergy
+ ELSE
+ PhotonSampWall(1,1,1,SurfSideID) = PhotonSampWall(1,1,1,SurfSideID) + 1.0
+ PhotonSampWall(2,1,1,SurfSideID) = PhotonSampWall(2,1,1,SurfSideID) + PhotonProps%PhotonEnergy
+ END IF ! Ray%nSurfSample.GT.1
+ END IF ! .NOT.ForceWallSampleLoc
+END IF
+#if USE_MPI
+END ASSOCIATE
+#endif /*USE_MPI*/
+END SUBROUTINE CalcWallAbsoprtion
+
+
+LOGICAL FUNCTION PointInObsCone(Point)
+!===================================================================================================================================
+! Checks if a point is in the opening cone of an external observer
+!===================================================================================================================================
+! MODULES
+ USE MOD_Globals
+ USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Point(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: ConeDist, ConeRadius, orthoDist
+!===================================================================================================================================
+PointInObsCone = .FALSE.
+ConeDist = DOT_PRODUCT(Point(1:3) - RadObservationPoint%StartPoint(1:3), RadObservationPoint%ViewDirection(1:3))
+ConeRadius = TAN(RadObservationPoint%AngularAperture/2.) * ConeDist
+orthoDist = VECNORM(Point(1:3) - RadObservationPoint%StartPoint(1:3) - ConeDist*RadObservationPoint%ViewDirection(1:3))
+IF (orthoDist.LE.ConeRadius) PointInObsCone = .TRUE.
+
+END FUNCTION PointInObsCone
+
+
+LOGICAL FUNCTION PhotonIntersectSensor(Point, Direction)
+!===================================================================================================================================
+! Checks if the photon's apth intersect with the opening cone of an external observer
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Point(3), Direction(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: projectedDist, DirectionVec(3)
+!===================================================================================================================================
+PhotonIntersectSensor = .FALSE.
+
+projectedDist = DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3), Direction(1:3))
+IF (projectedDist.LT.0.0) THEN
+ DirectionVec(1:3) = RadObservationPoint%MidPoint(1:3) - Point(1:3)
+ !distance to travel
+ projectedDist = DOT_PRODUCT(DirectionVec(1:3), RadObservationPoint%ViewDirection(1:3))/projectedDist
+ ! actual intersection point
+ DirectionVec(1:3) = Point(1:3) + projectedDist*Direction(1:3)
+ !Vector from midpoint of sensor
+ DirectionVec(1:3) = DirectionVec(1:3) - RadObservationPoint%MidPoint(1:3)
+ !distance to midpoint
+ projectedDist = VECNORM(DirectionVec(1:3))
+ IF (projectedDist.LE.RadObservationPoint%Diameter/2.) PhotonIntersectSensor = .TRUE.
+END IF
+
+END FUNCTION PhotonIntersectSensor
+
+
+LOGICAL FUNCTION PhotonOnLineOfSight(Direction)
+!===================================================================================================================================
+! Checks if a photon is on the simulated line of sight
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_RadiationTrans_Vars, ONLY: RadObservationPoint
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+REAL, INTENT(IN) :: Direction(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: SkalarFactors(3)
+INTEGER :: iDir, jDir
+!===================================================================================================================================
+PhotonOnLineOfSight = .FALSE.
+DO iDir = 1, 3
+ IF (Direction(iDir).EQ.0.0) THEN
+ IF (RadObservationPoint%ViewDirection(iDir).NE.0.0) THEN
+ RETURN
+ ELSE
+ SkalarFactors(iDir) = 0.0
+ END IF
+ ELSE
+ IF (RadObservationPoint%ViewDirection(iDir).EQ.0.0) THEN
+ RETURN
+ ELSE
+ SkalarFactors(iDir) = Direction(iDir)/ RadObservationPoint%ViewDirection(iDir)
+ END IF
+ END IF
+END DO
+PhotonOnLineOfSight = .TRUE.
+DO iDir = 1, 2
+ DO jDir = iDir+1 , 3
+ IF (SkalarFactors(iDir).EQ.0.0) CYCLE
+ IF (SkalarFactors(jDir).EQ.0.0) CYCLE
+ IF (.NOT.ALMOSTEQUAL(SkalarFactors(iDir),SkalarFactors(jDir))) THEN
+ PhotonOnLineOfSight = .FALSE.
+ RETURN
+ END IF
+ END DO
+END DO
+
+END FUNCTION PhotonOnLineOfSight
+
+END MODULE MOD_Photon_TrackingTools
diff --git a/src/radiation/radiative_transfer/tracking/radtrans_tracking_vars.f90 b/src/radiation/radiative_transfer/tracking/radtrans_tracking_vars.f90
new file mode 100644
index 000000000..0751d3007
--- /dev/null
+++ b/src/radiation/radiative_transfer/tracking/radtrans_tracking_vars.f90
@@ -0,0 +1,73 @@
+!==================================================================================================================================
+! Copyright (c) 2023 - 2023 Marcel Pfeiffer, Stephen Copplestone
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_Photon_TrackingVars
+!===================================================================================================================================
+! Contains the tadiation transport variables
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+SAVE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL RAY TRACING VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+TYPE tPhotonProps
+ REAL :: PhotonPos(3) !>
+ REAL :: PhotonLastPos(3) !>
+ REAL :: PhotonDirection(3) !>
+ REAL :: PhotonDirectionBeforeReflection(3) !>
+ REAL :: PhotonEnergy !>
+ INTEGER :: ElemID !>
+ INTEGER :: WaveLength !>
+END TYPE
+
+TYPE (tPhotonProps) :: PhotonProps !>
+
+REAL,ALLOCPOINT :: PhotonSampWallHDF5(:,:,:,:)
+#if USE_MPI
+INTEGER :: PhotonSampWallHDF5_Shared_Win
+REAL,POINTER :: PhotonSampWallHDF5_Shared(:,:,:,:)
+#endif
+
+REAL,ALLOCPOINT :: PhotonSampWall(:,:,:,:)
+REAL,ALLOCATABLE :: PhotonSampWall_loc(:,:,:)
+
+INTEGER :: PhotonModeBPO !> 0: Output nothing to PartStateBoundary.h5
+ !> 1: Output the initial position of the rays and their direction vector
+ !> 2: Output initial position and all calculated intersection points calculated in radtrans_tracking.f90
+LOGICAL :: UsePhotonTriaTracking !> True/False: Use TriaTracking methods for photon tracking or Bilinear methods (default is True)
+
+#if USE_MPI
+INTEGER :: PhotonSampWall_Shared_Win
+REAL,POINTER :: PhotonSampWall_Shared(:,:,:,:)
+LOGICAL :: PhotonSampWall_Shared_Win_allocated
+REAL,ALLOCATABLE :: PhotonSampWallProc(:,:,:,:)
+#endif /*USE_MPI*/
+
+REAL,ALLOCPOINT,DIMENSION(:,:,:,:) :: PhotonSurfSideSamplingMidPoints !> Mid point of supersampled surface side
+REAL,ALLOCPOINT,DIMENSION(:,:,:) :: PhotonSurfSideArea !> Area of supersampled surface side
+
+#if USE_MPI
+REAL,POINTER,DIMENSION(:,:,:,:) :: PhotonSurfSideSamplingMidPoints_Shared !> Physical coordinate of the center of supersampled surface side
+INTEGER :: PhotonSurfSideSamplingMidPoints_Shared_Win
+REAL,POINTER,DIMENSION(:,:,:) :: PhotonSurfSideArea_Shared !> Area of supersampled surface side
+INTEGER :: PhotonSurfSideArea_Shared_Win
+#endif /*USE_MPI*/
+
+
+CHARACTER(LEN=255) :: RadiationSurfState,RadiationVolState !> Output file names for surface and volume sampling
+!===================================================================================================================================
+END MODULE MOD_Photon_TrackingVars
diff --git a/src/radiation/ray_tracing/raytrace.f90 b/src/radiation/ray_tracing/raytrace.f90
new file mode 100644
index 000000000..4af20b53f
--- /dev/null
+++ b/src/radiation/ray_tracing/raytrace.f90
@@ -0,0 +1,817 @@
+!==================================================================================================================================
+! Copyright (c) 2018 - 2019 Marcel Pfeiffer
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RayTracing
+!===================================================================================================================================
+! Module for the main radiation transport routines
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+INTERFACE RayTracing
+ MODULE PROCEDURE RayTracing
+END INTERFACE
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Private Part ---------------------------------------------------------------------------------------------------------------------
+! Public Part ----------------------------------------------------------------------------------------------------------------------
+PUBLIC :: RayTracing
+PUBLIC :: ReadRayTracingDataFromH5
+!===================================================================================================================================
+
+CONTAINS
+
+!===================================================================================================================================
+!> Main routine for the Radiation Transport
+!===================================================================================================================================
+SUBROUTINE RayTracing()
+! MODULES
+USE MOD_Globals
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_RayTracing_Vars ,ONLY: RayPartBound,NumRays,Ray,RayElemPassedEnergy,RayElemSize,N_DG_Ray_loc
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+USE MOD_Photon_Tracking ,ONLY: PhotonTriaTracking
+USE MOD_Mesh_Tools ,ONLY: GetGlobalElemID
+USE MOD_Output ,ONLY: PrintStatusLineRadiation
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID
+USE MOD_part_emission_tools ,ONLY: InsideQuadrilateral
+USE MOD_Particle_Boundary_Vars ,ONLY: nComputeNodeSurfTotalSides,PartBound,SurfSide2GlobalSide
+USE MOD_Particle_Mesh_Vars ,ONLY: SideInfo_Shared
+USE MOD_Particle_Boundary_Tools ,ONLY: StoreBoundaryParticleProperties
+USE MOD_Particle_Boundary_Vars ,ONLY: PartStateBoundary,nVarPartStateBoundary
+USE MOD_Photon_TrackingOutput ,ONLY: WritePhotonSurfSampleToHDF5,WritePhotonVolSampleToHDF5
+#if USE_MPI
+USE MOD_MPI_Shared_Vars
+USE MOD_MPI_Shared
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall_Shared, PhotonSampWall_Shared_Win,PhotonSampWallProc
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall_Shared_Win_allocated
+USE MOD_RayTracing_Vars ,ONLY: RayElemPassedEnergy_Shared,RayElemPassedEnergy_Shared_Win
+#endif /*USE_MPI*/
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWall,PhotonModeBPO
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems,nElems
+USE MOD_RayTracing_Vars ,ONLY: UseRayTracing,PerformRayTracing,RayElemEmission
+USE MOD_DSMC_Vars ,ONLY: DSMC
+USE MOD_RayTracing_Init ,ONLY: FinalizeRayTracing
+USE MOD_RayTracing_Vars ,ONLY: RaySecondaryVectorX,RaySecondaryVectorY,RaySecondaryVectorZ
+USE MOD_Particle_Boundary_Vars ,ONLY: nPartBound
+! IMPLICIT VARIABLE HANDLING
+ IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: NonUniqueGlobalSideID,iSurfSide,iBC,iPartBound
+INTEGER :: CNElemID, iRay, photonCount, RayVisCount, LocRayNum, RayDisp
+LOGICAL :: FoundComputeNodeSurfSide
+INTEGER :: ALLOCSTAT
+REAL :: RectPower,SumPhotonEnACC
+REAL :: StartT,EndT ! Timer
+!===================================================================================================================================
+
+IF(.NOT.UseRayTracing) RETURN
+
+#if USE_MPI
+PhotonSampWall_Shared_Win_allocated = .FALSE.
+#endif /*USE_MPI*/
+
+! Allocate process-local element arrays which are either filled from the global shared array when ray tracing is performed or read
+! from .h5 when a restart is performed
+ALLOCATE(N_DG_Ray_loc(1:nElems))
+N_DG_Ray_loc = -1
+ALLOCATE(RayElemEmission(1:2,1:nElems))
+RayElemEmission = .FALSE.
+ALLOCATE(RaySecondaryVectorX(1:nElems))
+ALLOCATE(RaySecondaryVectorY(1:nElems))
+ALLOCATE(RaySecondaryVectorZ(1:nElems))
+RaySecondaryVectorX=-1.0
+RaySecondaryVectorY=-1.0
+RaySecondaryVectorZ=-1.0
+
+IF(.NOT.PerformRayTracing)THEN
+ CALL ReadRayTracingDataFromH5(onlySurfData=.FALSE.)
+ RETURN
+END IF
+
+! Sanity check: Not all boundaries are allowed to perfectly reflect rays. Otherwise, the simulation will never end!
+SumPhotonEnACC = 0.
+DO iPartBound = 1,nPartBound
+ IF(PartBound%PhotonEnACC(iPartBound).LT.0.0) CALL CollectiveStop(__STAMP__,'Part-Boundary[$]-PhotonEnACC is smaller than zero!',&
+ RealInfo=PartBound%PhotonEnACC(iPartBound))
+ IF(PartBound%PhotonEnACC(iPartBound).GT.1.0) CALL CollectiveStop(__STAMP__,'Part-Boundary[$]-PhotonEnACC is larger than unity!',&
+ RealInfo=PartBound%PhotonEnACC(iPartBound))
+ SumPhotonEnACC = SumPhotonEnACC + PartBound%PhotonEnACC(iPartBound)
+END DO
+IF(SumPhotonEnACC.LE.0.0) CALL CollectiveStop(__STAMP__,'The sum of all Part-Boundary[$]-PhotonEnACC is zero, which is not allowed!')
+
+GETTIME(StartT)
+SWRITE(UNIT_stdOut,'(A)') ' Start Ray Tracing Calculation ...'
+
+! Sanity check
+IF(nComputeNodeSurfTotalSides.EQ.0) CALL abort(__STAMP__,'nComputeNodeSurfTotalSides is zero, no surfaces for ray tracing found! ')
+
+! Allocate global arrays
+ALLOCATE(RayElemPassedEnergy(RayElemSize,1:nGlobalElems))
+RayElemPassedEnergy=0.0
+
+#if USE_MPI
+ALLOCATE(PhotonSampWallProc(2,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+PhotonSampWallProc=0.0
+!> Shared arrays for volume sampling
+CALL Allocate_Shared((/RayElemSize,nGlobalElems/),RayElemPassedEnergy_Shared_Win,RayElemPassedEnergy_Shared)
+CALL MPI_WIN_LOCK_ALL(0,RayElemPassedEnergy_Shared_Win,IERROR)
+!> Shared arrays for boundary sampling
+CALL Allocate_Shared((/2,Ray%nSurfSample,Ray%nSurfSample,nComputeNodeSurfTotalSides/),PhotonSampWall_Shared_Win,PhotonSampWall_Shared)
+PhotonSampWall_Shared_Win_allocated = .TRUE.
+CALL MPI_WIN_LOCK_ALL(0,PhotonSampWall_Shared_Win,IERROR)
+PhotonSampWall => PhotonSampWall_Shared
+IF(myComputeNodeRank.EQ.0) RayElemPassedEnergy_Shared = 0.
+IF(myComputeNodeRank.EQ.0) PhotonSampWall = 0.
+CALL BARRIER_AND_SYNC(RayElemPassedEnergy_Shared_Win,MPI_COMM_SHARED)
+CALL BARRIER_AND_SYNC(PhotonSampWall_Shared_Win,MPI_COMM_SHARED)
+#else
+ALLOCATE(PhotonSampWall(2,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nComputeNodeSurfTotalSides))
+PhotonSampWall=0.0
+#endif
+
+photonCount = 0
+RayVisCount = 0
+IF(nProcessors.GT.NumRays) CALL abort(__STAMP__,'Use more rays! Number of processes > Number of rays')
+LocRayNum = NumRays/nProcessors
+IF(myrank.LT.MOD(NumRays,nProcessors)) LocRayNum = LocRayNum + 1
+! Output to screen every 20 rays to show that the tool is still running
+RayDisp = MAX(1,INT(LocRayNum/100)) ! This value cannot be zero
+RectPower = Ray%IntensityAmplitude * Ray%Area / REAL(NumRays)
+
+! This array is not de-allocated during load balance as it is only written to .h5 during WriteStateToHDF5()
+IF(.NOT.ALLOCATED(PartStateBoundary))THEN
+ ALLOCATE(PartStateBoundary(1:nVarPartStateBoundary,1:MIN(1000,LocRayNum)), STAT=ALLOCSTAT)
+ IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_init.f90: Cannot allocate PartStateBoundary array!')
+ PartStateBoundary=0.
+END IF ! .NOT.ALLOCATED(PartStateBoundary)
+
+DO iRay = 1, LocRayNum
+ IF(MPIroot.AND.(MOD(RayVisCount,RayDisp).EQ.0)) CALL PrintStatusLineRadiation(REAL(RayVisCount),0.0,REAL(LocRayNum),.TRUE.)
+ RayVisCount = RayVisCount + 1
+ PhotonProps%PhotonPos(1:3) = SetRayPos()
+ PhotonProps%PhotonLastPos(1:3) = PhotonProps%PhotonPos(1:3)
+ PhotonProps%PhotonDirection(1:3) = Ray%Direction ! (/0.0,0.0,-1.0/)! SetPhotonStartDirection(iCNElem, iPhotLoc, RandRot)
+
+ ! Loop over all sides of a specific iPartBoundary and find the side where the ray enters the domain
+ ! count number of nSides connected to iPartBoundary BCSideID
+
+ PhotonProps%ElemID = -1 ! Initialize
+
+ FoundComputeNodeSurfSide = .FALSE.
+ SurfLoop: DO iSurfSide = 1,nComputeNodeSurfTotalSides
+ NonUniqueGlobalSideID = SurfSide2GlobalSide(SURF_SIDEID,iSurfSide)
+ ! Check if the surface side has a neighbor (and is therefore an inner BCs)
+ IF(SideInfo_Shared(SIDE_NBSIDEID,NonUniqueGlobalSideID).LE.0) THEN ! BC side
+ ! Get field BC index of side and compare with BC index of the corresponding particle boundary index of the emission side
+ iBC = SideInfo_Shared(SIDE_BCID,NonUniqueGlobalSideID) ! Get field BC index from non-unique global side index
+ IF(iBC.NE.PartBound%MapToFieldBC(RayPartBound)) CYCLE SurfLoop ! Correct BC not found, check next side
+ FoundComputeNodeSurfSide = .TRUE.
+ ! Check if ray starting position is within the quadrilateral that is spanned by the four corner nodes of the side
+ IF(InsideQuadrilateral(PhotonProps%PhotonPos(1:2),NonUniqueGlobalSideID))THEN
+ ! Found CN element index
+ CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,NonUniqueGlobalSideID))
+ ! Set global element index for current ray
+ PhotonProps%ElemID = GetGlobalElemID(CNElemID)
+ PhotonProps%PhotonEnergy = RectPower
+ EXIT SurfLoop
+ END IF ! InsideQuadrilateral(X,NonUniqueGlobalSideID)
+ END IF ! SideInfo_Shared(SIDE_NBSIDEID,NonUniqueGlobalSideID).LE.0
+ END DO SurfLoop! iSurfSide = 1,nComputeNodeSurfTotalSides
+
+ ! Sanity check: nComputeNodeSurfTotalSides > 0 and the correct PartBCIndex for those sides
+ IF(.NOT.FoundComputeNodeSurfSide)THEN
+ IPWRITE(UNIT_StdOut,*) ": nComputeNodeSurfTotalSides =", nComputeNodeSurfTotalSides
+ IPWRITE(UNIT_StdOut,*) ": RayPartBound =", RayPartBound
+ !IPWRITE(UNIT_StdOut,'(I0,A,I0,A)') ": Set Part-Boundary",RayPartBound,"-BoundaryParticleOutput = T"
+ IF(.NOT.DSMC%CalcSurfaceVal)THEN
+ IPWRITE(UNIT_StdOut,*) ": Set Particles-DSMC-CalcSurfaceVal = T to build the mappings for SurfSide2GlobalSide(:,:)!"
+ END IF ! .NOT.DSMC%CalcSurfaceVal
+ CALL abort(__STAMP__,'No boundary found in list of nComputeNodeSurfTotalSides for defined RayPartBound!')
+ END IF ! FoundComputeNodeSurfSide
+
+ ! Sanity check
+ IF(PhotonProps%ElemID.LE.0)THEN
+ IPWRITE(UNIT_StdOut,*) "PhotonProps%PhotonPos(1:3) =", PhotonProps%PhotonPos(1:3)
+ CALL abort(__STAMP__,'Ray starting element not found!')
+ ELSE
+ ! Check if output to PartStateBoundary is activated
+ IF(PhotonModeBPO.GE.1)THEN
+ ! Output ray starting position and direction vector to .h5 for debugging
+ CALL StoreBoundaryParticleProperties(iRay,&
+ 999,&
+ PhotonProps%PhotonPos(1:3),&
+ UNITVECTOR(PhotonProps%PhotonDirection(1:3)),(/0.0,0.0,1.0/),&
+ iPartBound=RayPartBound,&
+ mode=2,&
+ MPF_optIN=0.0,&
+ Velo_optIN=PhotonProps%PhotonDirection(1:3))
+ END IF ! PhotonModeBPO.GE.1
+ END IF !PhotonProps%ElemID.LE.0
+
+ CALL PhotonTriaTracking()
+END DO
+
+! Print 100%
+IF(MPIroot)THEN
+ CALL PrintStatusLineRadiation(REAL(RayVisCount),0.0,REAL(LocRayNum),.TRUE.)
+ WRITE(UNIT_StdOut,'(A)') " "
+END IF
+
+! Output to h5
+CALL WritePhotonSurfSampleToHDF5()
+
+! Load surface data to create local PhotonSampWall_loc array
+! This currently requires .h5 access instead of internal mapping/distribution of info
+CALL ReadRayTracingDataFromH5(onlySurfData=.TRUE.)
+
+CALL WritePhotonVolSampleToHDF5()
+
+CALL FinalizeRayTracing()
+
+! Deactivate in order to skip this routine during load balance
+PerformRayTracing = .FALSE.
+
+GETTIME(EndT)
+CALL DisplayMessageAndTime(EndT-StartT, ' DONE!', DisplayDespiteLB=.TRUE., DisplayLine=.FALSE.)
+
+END SUBROUTINE RayTracing
+
+
+!===================================================================================================================================
+!> Read ray tracing volume and surface data (instead of running the actual ray tracing calculation)
+!> 1.) Get surface sampled values
+!> 2.) Get element polynomial
+!===================================================================================================================================
+SUBROUTINE ReadRayTracingDataFromH5(onlySurfData)
+! MODULES
+USE MOD_Globals
+USE MOD_IO_HDF5
+USE MOD_PreProc
+USE MOD_HDF5_Input ,ONLY: ReadArray,DatasetExists,GetDataSize,nDims,HSize,File_ID
+USE MOD_Photon_TrackingVars ,ONLY: RadiationSurfState,RadiationVolState,PhotonSampWall_loc
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWallHDF5
+USE MOD_Mesh_Vars ,ONLY: offsetElem,nElems,nGlobalElems
+USE MOD_RayTracing_Vars ,ONLY: N_DG_Ray_loc,Ray,nVarRay,U_N_Ray_loc,PREF_VDM_Ray,N_Inter_Ray,RayElemEmission
+USE MOD_ChangeBasis ,ONLY: ChangeBasis3D
+USE MOD_RayTracing_Vars ,ONLY: RaySecondaryVectorX,RaySecondaryVectorY,RaySecondaryVectorZ
+USE MOD_Mesh_Vars ,ONLY: nBCSides,offsetElem,SideToElem
+USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,myComputeNodeRank
+USE MOD_Photon_TrackingVars ,ONLY: PhotonSampWallHDF5_Shared,PhotonSampWallHDF5_Shared_Win
+#endif /*USE_MPI*/
+!#if MPI
+!#endif /*MPI*/
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+LOGICAL,INTENT(IN) :: onlySurfData
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iElem,Nloc,iVar,k,l,m,iSurfSideHDF5,nSurfSidesHDF5,BCSideID,iLocSide,locElemID,GlobalSideID,SideID
+INTEGER :: nSurfSampleHDF5
+LOGICAL :: ContainerExists
+REAL :: N_DG_Ray_locREAL(1:nElems)
+REAL :: UNMax(nVarRay,0:Ray%NMax,0:Ray%NMax,0:Ray%NMax,PP_nElems)
+REAL :: UNMax_loc(nVarRay,0:Ray%NMax,0:Ray%NMax,0:Ray%NMax)
+INTEGER, ALLOCATABLE :: GlobalSideIndex(:)
+!===================================================================================================================================
+
+! 1.) Get surface sampled values
+#if USE_MPI
+! Only shared memory leaders load the data from .h5
+IF(myComputeNodeRank.EQ.0)THEN
+#endif
+ CALL OpenDataFile(RadiationSurfState,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_LEADERS)
+ CALL DatasetExists(File_ID,'SurfaceDataGlobalSideIndex',ContainerExists)
+ IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'SurfaceDataGlobalSideIndex container not in '//TRIM(RadiationSurfState))
+ CALL GetDataSize(File_ID,'SurfaceDataGlobalSideIndex',nDims,HSize,attrib=.FALSE.)
+ nSurfSidesHDF5 = INT(HSize(1),4)
+ DEALLOCATE(HSize)
+ IF(nSurfSidesHDF5.LT.1) CALL abort(__STAMP__,'Number of surf sample sides .h5 file is less than 1')
+ ALLOCATE(GlobalSideIndex(nSurfSidesHDF5))
+ CALL ReadArray('SurfaceDataGlobalSideIndex',1,(/INT(nSurfSidesHDF5,IK)/),0_IK,1,IntegerArray_i4=GlobalSideIndex)
+#if USE_MPI
+END IF
+! Node leaders notify the processes on their node
+CALL MPI_BCAST(nSurfSidesHDF5,1,MPI_INTEGER,0,MPI_COMM_SHARED,iERROR)
+#else
+ALLOCATE(PhotonSampWallHDF5(1:3,1:Ray%nSurfSample,1:Ray%nSurfSample,1:nSurfSidesHDF5))
+#endif
+
+
+#if USE_MPI
+CALL Allocate_Shared((/3,Ray%nSurfSample,Ray%nSurfSample,nSurfSidesHDF5/),PhotonSampWallHDF5_Shared_Win,PhotonSampWallHDF5_Shared)
+CALL MPI_WIN_LOCK_ALL(0,PhotonSampWallHDF5_Shared_Win,IERROR)
+PhotonSampWallHDF5 => PhotonSampWallHDF5_Shared
+! Only shared memory leaders load the data from .h5
+IF(myComputeNodeRank.EQ.0)THEN
+#endif
+ CALL DatasetExists(File_ID,'SurfaceData',ContainerExists)
+ IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'[SurfaceData] container not in '//TRIM(RadiationSurfState))
+ CALL GetDataSize(File_ID,'SurfaceData',nDims,HSize,attrib=.FALSE.)
+ ! Check if data hast the format [nVar x nSurfSample x nSurfSample x nSurfSidesHDF5]
+ IF(INT(HSize(2),4).NE.INT(HSize(3),4)) CALL abort(__STAMP__,'Wrong dimension of [SurfaceData] in '//TRIM(RadiationSurfState))
+ nSurfSampleHDF5 = INT(HSize(2),4)
+ DEALLOCATE(HSize)
+ IF(nSurfSampleHDF5.NE.Ray%nSurfSample)THEN
+ SWRITE(UNIT_stdOut,'(A)') ' Number of nSurfSample in .h5 file differs from the ini file parameter "RayTracing-nSurfSample'
+ SWRITE(UNIT_stdOut,'(A)') ' '
+ SWRITE(UNIT_stdOut,'(A,I0)') ' nSurfSampleHDF5 : ', nSurfSampleHDF5
+ SWRITE(UNIT_stdOut,'(A,I0)') ' RayTracing-nSurfSample: ', Ray%nSurfSample
+ CALL abort(__STAMP__,'Number of nSurfSample in .h5 file differs from the ini file parameter "RayTracing-nSurfSample"!')
+ END IF ! nSurfSampleHDF5.NE.Ray%nSurfSample
+ CALL ReadArray('SurfaceData',4,(/3_IK,INT(Ray%nSurfSample,IK),INT(Ray%nSurfSample,IK),INT(nSurfSidesHDF5,IK)/),0_IK,1,RealArray=PhotonSampWallHDF5)
+ CALL CloseDataFile()
+ ! Small hack: replace 3rd index with global ID
+ DO iSurfSideHDF5 = 1, nSurfSidesHDF5
+ PhotonSampWallHDF5(3,:,:,iSurfSideHDF5) = REAL(GlobalSideIndex(iSurfSideHDF5))
+ END DO ! iSurfSideHDF5 = 1, nSurfSidesHDF5
+#if USE_MPI
+END IF
+! This sync/barrier is required as it cannot be guaranteed that the zeros have been written to memory by the time the MPI_REDUCE
+! is executed (see MPI specification). Until the Sync is complete, the status is undefined, i.e., old or new value or utter nonsense.
+CALL BARRIER_AND_SYNC(PhotonSampWallHDF5_Shared_Win,MPI_COMM_SHARED)
+#endif /*USE_MPI*/
+
+ALLOCATE(PhotonSampWall_loc(1:Ray%nSurfSample,1:Ray%nSurfSample,1:nBCSides))
+PhotonSampWall_loc = -1.0
+! Loop through large loop (TODO: can this be made cheaper?)
+DO iSurfSideHDF5 = 1, nSurfSidesHDF5
+#if USE_MPI
+ GlobalSideID = INT(PhotonSampWallHDF5(3,1,1,iSurfSideHDF5))
+#else
+ GlobalSideID = GlobalSideIndex(iSurfSideHDF5)
+#endif /*USE_MPI*/
+ ! Loop through process-local (hopefully small) loop
+ DO BCSideID = 1, nBCSides
+ locElemID = SideToElem(S2E_ELEM_ID,BCSideID)
+ iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID)
+ SideID = GetGlobalNonUniqueSideID(offsetElem+locElemID,iLocSide)
+ IF(GlobalSideID.EQ.SideID)THEN
+ PhotonSampWall_loc(1:Ray%nSurfSample,1:Ray%nSurfSample,BCSideID) = PhotonSampWallHDF5(2,1:Ray%nSurfSample,1:Ray%nSurfSample,iSurfSideHDF5)
+ ! Check if element fas already been flagged an emission element (either volume or surface emission)
+ IF(.NOT.RayElemEmission(1,locElemID))THEN
+ IF(ANY(PhotonSampWall_loc(1:Ray%nSurfSample,1:Ray%nSurfSample,BCSideID).GT.0.0)) RayElemEmission(1,locElemID) = .TRUE.
+ END IF ! .NOT.RayElemEmission(1,locElemID)
+ END IF ! GlobalSideID.EQ.
+ END DO ! BCSideID = 1,nBCSides
+END DO ! iSurfSideHDF5 = 1, nSurfSidesHDF5
+
+
+! Check if only the surface data is to be loaded (non-restart and non-load balance case)
+IF(onlySurfData) RETURN
+
+! 2. Get local element polynomial
+CALL OpenDataFile(RadiationVolState,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
+CALL DatasetExists(File_ID,'Nloc',ContainerExists)
+IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'Nloc container does not exist in '//TRIM(RadiationVolState))
+! Array is stored as REAL value, hence, convert back to integer
+CALL ReadArray('Nloc',2,(/1_IK,INT(nElems,IK)/),INT(offsetElem,IK),2,RealArray=N_DG_Ray_locREAL)
+N_DG_Ray_loc = INT(N_DG_Ray_locREAL)
+! Sanity check
+IF(ANY(N_DG_Ray_loc.LE.0)) CALL abort(__STAMP__,'N_DG_Ray_loc cannot contain zeros!')
+
+! Get local ray tracing solution (the local DG solution in physical space)
+ALLOCATE(U_N_Ray_loc(1:nElems))
+DO iElem = 1, nElems
+ Nloc = N_DG_Ray_loc(iElem)
+ ALLOCATE(U_N_Ray_loc(iElem)%U(nVarRay,0:Nloc,0:Nloc,0:Nloc))
+ U_N_Ray_loc(iElem)%U = 0.
+END DO ! iElem = 1, nElems
+! Associate construct for integer KIND=8 possibility
+ASSOCIATE (&
+ nVarRay8 => INT(nVarRay,IK) ,&
+ NMax8 => INT(Ray%NMax,IK) ,&
+ nGlobalElems => INT(nGlobalElems,IK) ,&
+ PP_nElems => INT(PP_nElems,IK) ,&
+ offsetElem => INT(offsetElem,IK) &
+ )
+ !Nres => INT(N_Restart,4) ,&
+ !Nres8 => INT(N_Restart,IK) ,&
+ CALL DatasetExists(File_ID,'DG_Solution',ContainerExists)
+ IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'DG_Solution container does not exist in '//TRIM(RadiationVolState))
+ CALL ReadArray('DG_Solution' ,5,(/nVarRay8,NMax8+1_IK,NMax8+1_IK,NMax8+1_IK,PP_nElems/),OffsetElem,5,RealArray=UNMax)
+
+ ! Map from NMax to local polynomial degree
+ DO iElem = 1, nElems
+ Nloc = N_DG_Ray_loc(iElem)
+ ASSOCIATE( NMax => Ray%NMax)
+ IF(Nloc.EQ.NMax)THEN
+ U_N_Ray_loc(iElem)%U(1:nVarRay,0:NMax,0:NMax,0:NMax) = UNMax(1:nVarRay,0:NMax,0:NMax,0:NMax,iElem)
+ ELSEIF(Nloc.GT.NMax)THEN
+ CALL ChangeBasis3D(nVarRay, NMax, Nloc, PREF_VDM_Ray(NMax, Nloc)%Vdm, UNMax(1:nVarRay,0:NMax,0:NMax,0:NMax,iElem), U_N_Ray_loc(iElem)%U(1:nVarRay,0:Nloc,0:Nloc,0:Nloc))
+ ELSE
+ !transform the slave side to the same degree as the master: switch to Legendre basis
+ CALL ChangeBasis3D(nVarRay, NMax, NMax, N_Inter_Ray(NMax)%sVdm_Leg, UNMax(1:nVarRay,0:NMax,0:NMax,0:NMax,iElem), UNMax_loc)
+ ! switch back to nodal basis
+ CALL ChangeBasis3D(nVarRay, Nloc, Nloc, N_Inter_Ray(Nloc)%Vdm_Leg, UNMax_loc(1:nVarRay,0:Nloc,0:Nloc,0:Nloc), U_N_Ray_loc(iElem)%U(1:nVarRay,0:Nloc,0:Nloc,0:Nloc))
+ END IF ! Nloc.EQ.NMax
+ END ASSOCIATE
+
+ ! Sanity check: Very small negative numbers might occur due to the interpolation
+ DO iVar = 1, nVarRay
+ DO m=0,Nloc
+ DO l=0,Nloc
+ DO k=0,Nloc
+ IF(U_N_Ray_loc(iElem)%U(iVar,k,l,m).LT.0.) U_N_Ray_loc(iElem)%U(iVar,k,l,m) = 0.0
+ END DO ! k
+ END DO ! l
+ END DO ! m
+ END DO ! iVar = 1, nVarRay
+
+ ! Check for emission elements and flag for later volume emission
+ DO iVar = 1, 2
+ DO m=0,Nloc
+ DO l=0,Nloc
+ DO k=0,Nloc
+ IF(U_N_Ray_loc(iElem)%U(iVar,k,l,m).GT.0.) RayElemEmission(iVar,iElem) = .TRUE.
+ END DO ! k
+ END DO ! l
+ END DO ! m
+ END DO ! iVar = 1, nVarRay
+ END DO ! iElem = 1, nElems
+END ASSOCIATE
+
+CALL DatasetExists(File_ID,'RaySecondaryVectorX',ContainerExists)
+IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'RaySecondaryVectorX container does not exist in '//TRIM(RadiationVolState))
+CALL ReadArray('RaySecondaryVectorX',2,(/1_IK,INT(nElems,IK)/),INT(offsetElem,IK),2,RealArray=RaySecondaryVectorX)
+
+CALL DatasetExists(File_ID,'RaySecondaryVectorY',ContainerExists)
+IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'RaySecondaryVectorY container does not exist in '//TRIM(RadiationVolState))
+CALL ReadArray('RaySecondaryVectorY',2,(/1_IK,INT(nElems,IK)/),INT(offsetElem,IK),2,RealArray=RaySecondaryVectorY)
+
+CALL DatasetExists(File_ID,'RaySecondaryVectorZ',ContainerExists)
+IF(.NOT.ContainerExists) CALL CollectiveStop(__STAMP__,'RaySecondaryVectorZ container does not exist in '//TRIM(RadiationVolState))
+CALL ReadArray('RaySecondaryVectorZ',2,(/1_IK,INT(nElems,IK)/),INT(offsetElem,IK),2,RealArray=RaySecondaryVectorZ)
+
+CALL CloseDataFile()
+
+
+END SUBROUTINE ReadRayTracingDataFromH5
+
+
+FUNCTION SetPhotonEnergy(iCNElem, Point, iWave)
+!===================================================================================================================================
+!> Calculation of the vibrational temperature (zero-point search) for the TSHO (Truncated Simple Harmonic Oscillator)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: Pi
+USE MOD_RadiationTrans_Vars ,ONLY: RadEmiAdaptPhotonNum, Radiation_Emission_Spec_Total, RadTrans, RadTransPhotPerCell
+USE MOD_RadiationTrans_Vars ,ONLY: RadObservationPoint, RadObservationPointMethod,RadTransObsVolumeFrac,RadObservationPOI
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared
+USE MOD_Radiation_Vars ,ONLY: RadiationParameter,Radiation_Emission_spec
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iCNElem
+REAL, INTENT(IN) :: Point(3)
+INTEGER, INTENT(IN), OPTIONAL :: iWave
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetPhotonEnergy
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+!REAL :: ProjectedDist(3), Dist(3), ClosestPoint(3), FarthestPoint(3), Vec1(3), Vec2(3), fullangle
+REAL :: cosTheta, Dist(3), DistNorm(3), spaceangle, absdistnorm
+!===================================================================================================================================
+IF (RadEmiAdaptPhotonNum) THEN
+ SetPhotonEnergy = Radiation_Emission_Spec_Total(iCNElem)*ElemVolume_Shared(iCNElem)*RadTransObsVolumeFrac(iCNElem) / RadTransPhotPerCell(iCNElem)
+ELSE
+ SetPhotonEnergy = Radiation_Emission_Spec_Total(iCNElem)*ElemVolume_Shared(iCNElem)*RadTransObsVolumeFrac(iCNElem) / (RadTrans%NumPhotonsPerCell)
+END IF
+
+IF (RadObservationPointMethod.EQ.1) THEN
+ Dist(1:3) = Point(1:3) - RadObservationPoint%MidPoint(1:3)
+ absdistnorm = VECNORM(Dist(1:3))
+ DistNorm(1:3) = Dist(1:3)/absdistnorm
+ cosTheta = DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3),DistNorm(1:3))/(VECNORM(RadObservationPoint%ViewDirection(1:3))*VECNORM(DistNorm(1:3)))
+ spaceangle = cosTheta * RadObservationPoint%Area/(absdistnorm*absdistnorm)
+! ProjectedDist(1:3) = Dist(1:3) - DOT_PRODUCT(RadObservationPoint%ViewDirection(1:3),Dist(1:3))*RadObservationPoint%ViewDirection(1:3)
+! ClosestPoint(1:3) = RadObservationPoint%MidPoint(1:3) + RadObservationPoint%Diameter/2.*ProjectedDist(1:3)/VECNORM(ProjectedDist(1:3))
+! FarthestPoint(1:3) = RadObservationPoint%MidPoint(1:3) - RadObservationPoint%Diameter/2.*ProjectedDist(1:3)/VECNORM(ProjectedDist(1:3))
+! Vec1(1:3) = ClosestPoint(1:3) - Point(1:3)
+! Vec2(1:3) = FarthestPoint(1:3) - Point(1:3)
+! fullangle = ACOS(DOT_PRODUCT(Vec1,Vec2)/(VECNORM(Vec1)*VECNORM(Vec2)))
+ SetPhotonEnergy = SetPhotonEnergy * spaceangle/(4.*Pi)
+ELSEIF (RadObservationPointMethod.EQ.2) THEN
+ IF (RadObservationPoint%CalcFullSpectra) THEN
+ SetPhotonEnergy = Radiation_Emission_Spec(iWave, iCNElem) * RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor &
+ *ElemVolume_Shared(iCNElem)*RadTransObsVolumeFrac(iCNElem)
+ ELSE
+ SetPhotonEnergy = SetPhotonEnergy /(4.*Pi)
+ END IF
+ SetPhotonEnergy = SetPhotonEnergy / (ElemVolume_Shared(iCNElem)*RadTransObsVolumeFrac(iCNElem))*RadObservationPOI(7, iCNElem)
+END IF
+
+END FUNCTION SetPhotonEnergy
+
+
+FUNCTION SetRayPos()
+!===================================================================================================================================
+!> Calculation of the vibrational temperature (zero-point search) for the TSHO (Truncated Simple Harmonic Oscillator)
+!===================================================================================================================================
+! MODULES
+USE MOD_Particle_Mesh_Vars ,ONLY: GEO
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetRayPos(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: RandVal(2)
+!===================================================================================================================================
+CALL RANDOM_NUMBER(RandVal)
+SetRayPos = (/RandVal(1)*(GEO%xmaxglob-GEO%xminglob)+GEO%xminglob,&
+ RandVal(2)*(GEO%ymaxglob-GEO%yminglob)+GEO%yminglob,&
+ GEO%zmaxglob/)
+END FUNCTION SetRayPos
+
+FUNCTION SetPhotonStartDirection(iCNElem, iPhot, RandRot)
+!===================================================================================================================================
+! Set the starting direction in which the photon moves
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars ,ONLY: Pi
+USE MOD_RadiationTrans_Vars ,ONLY: RadiationDirectionModel, RadTransPhotPerCell, RadObservationPointMethod,RadObservationPoint
+USE MOD_Photon_TrackingVars ,ONLY: PhotonProps
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iCNElem, iPhot
+REAL, INTENT(IN) :: RandRot(3,3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: SetPhotonStartDirection(3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: iRan,RandomDirection(2), X_new, Y_new, start, incr, SpiralPos, SpiralStep
+INTEGER :: RadMod
+!===================================================================================================================================
+SELECT CASE(RadiationDirectionModel)
+CASE(1)
+ RadMod = RadiationDirectionModel
+CASE(2)
+ IF (RadTransPhotPerCell(iCNElem).EQ.1) THEN
+ RadMod = 1
+ ELSE
+ RadMod = RadiationDirectionModel
+ END IF
+CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation-DirectionModel not implemented!. (unknown case)')
+END SELECT !PartBound%MapToPartBC(BC(SideID)
+IF (RadObservationPointMethod.EQ.1) THEN
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(1) = RadObservationPoint%Diameter/2. * SQRT(iRan)
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(2) = iRan * 2. * Pi
+ SetPhotonStartDirection(1) = 0.0
+ SetPhotonStartDirection(2) = RandomDirection(1) * COS(RandomDirection(2))
+ SetPhotonStartDirection(3) = RandomDirection(1) * SIN(RandomDirection(2))
+ SetPhotonStartDirection(1:3) = MATMUL(RadObservationPoint%OrthoNormBasis, SetPhotonStartDirection(1:3))
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) + RadObservationPoint%MidPoint(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) - PhotonProps%PhotonPos(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) / VECNORM(SetPhotonStartDirection(1:3))
+ELSEIF (RadObservationPointMethod.EQ.2) THEN
+! SetPhotonStartDirection(1:3) = RadObservationPoint%MidPoint(1:3)
+! SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) - RadObservationPoint%ViewDirection(1:3)
+ SetPhotonStartDirection(1:3) = -RadObservationPoint%ViewDirection(1:3)
+ SetPhotonStartDirection(1:3) = SetPhotonStartDirection(1:3) / VECNORM(SetPhotonStartDirection(1:3))
+ELSE
+ SELECT CASE(RadMod)
+ CASE(1)
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(1) = 2.*iRan - 1.
+ CALL RANDOM_NUMBER(iRan)
+ RandomDirection(2) = 2.*Pi*iRan - Pi
+ SetPhotonStartDirection(1) = SIN(RandomDirection(2))*SQRT(1.-RandomDirection(1)**2.)
+ SetPhotonStartDirection(2) = COS(RandomDirection(2))*SQRT(1.-RandomDirection(1)**2.)
+ SetPhotonStartDirection(3) = RandomDirection(1)
+ CASE(2)
+ SpiralStep = 0.1+1.2*REAL(RadTransPhotPerCell(iCNElem))
+ start = (-1. + 1./(REAL(RadTransPhotPerCell(iCNElem))-1.))
+ incr = (2.-2./(REAL(RadTransPhotPerCell(iCNElem))-1.))/(REAL(RadTransPhotPerCell(iCNElem))-1.)
+ SpiralPos = start + (REAL(iPhot)-1.) *incr
+ X_new = SpiralPos * SpiralStep
+ Y_new = Pi/2.*SIGN(1.,SpiralPos)*(1.-SQRT(1.-ABS(SpiralPos)))
+ SetPhotonStartDirection(1) = COS(X_new)*COS(Y_new)
+ SetPhotonStartDirection(2) = SIN(X_new)*COS(Y_new)
+ SetPhotonStartDirection(3) = SIN(Y_new)
+ SetPhotonStartDirection(1:3) = MATMUL(RandRot, SetPhotonStartDirection(1:3))
+ CASE DEFAULT
+ CALL abort(&
+ __STAMP__&
+ ,' ERROR: Radiation-DirectionModel not implemented!. (unknown case)')
+ END SELECT !PartBound%MapToPartBC(BC(SideID)
+END IF
+
+END FUNCTION SetPhotonStartDirection
+
+FUNCTION RandomRotMatrix()
+!===================================================================================================================================
+! Calculation of the vibrational temperature (zero-point search) for the TSHO (Truncated Simple Harmonic Oscillator)
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals_Vars, ONLY : Pi
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+REAL :: RandomRotMatrix(3,3)
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+REAL :: alpha(3) , A(3,3)
+!===================================================================================================================================
+CALL RANDOM_NUMBER(alpha)
+alpha(1:3) = 2.*alpha(1:3)*Pi
+RandomRotMatrix = RESHAPE((/1.,0.,0.,0.,COS(alpha(1)),SIN(alpha(1)),0.,-SIN(alpha(1)), COS(alpha(1))/),(/3,3/))
+A = RESHAPE((/COS(alpha(2)),0.,-SIN(alpha(2)),0.,1.,0.,SIN(alpha(2)),0.0, COS(alpha(2))/),(/3,3/))
+RandomRotMatrix = MATMUL(A,RandomRotMatrix)
+A = RESHAPE((/COS(alpha(3)),SIN(alpha(3)),0.,-SIN(alpha(3)),COS(alpha(3)),0.,0.,0.0, 1./),(/3,3/))
+RandomRotMatrix = MATMUL(A, RandomRotMatrix)
+
+END FUNCTION RandomRotMatrix
+
+
+FUNCTION SetParticleWavelengthAR(iCNElem)
+!===================================================================================================================================
+! modified particle emmission for LD case
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_RadiationTrans_Vars, ONLY : Radiation_Emission_Spec_Max
+USE MOD_Radiation_Vars, ONLY: Radiation_Emission_spec, RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iCNElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+INTEGER :: SetParticleWavelengthAR
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iWaveLength
+REAL :: iRan, iRadPower
+!===================================================================================================================================
+
+CALL RANDOM_NUMBER(iRan)
+iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse*iRan) + 1
+IF ((RadiationParameter%WaveLenReductionFactor.GT.1).AND.(iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse)) THEN
+ IF (MOD(RadiationParameter%WaveLenDiscr,RadiationParameter%WaveLenDiscrCoarse).NE.0) THEN
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iCNElem) * RadiationParameter%WaveLenIncr &
+ * (1.+RadiationParameter%WaveLenReductionFactor)
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+END IF
+CALL RANDOM_NUMBER(iRan)
+DO WHILE (iRan.GT.(iRadPower/Radiation_Emission_Spec_Max(iCNElem)))
+ CALL RANDOM_NUMBER(iRan)
+ iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse*iRan) + 1
+ IF ((RadiationParameter%WaveLenReductionFactor.GT.1).AND.(iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse)) THEN
+ IF (MOD(RadiationParameter%WaveLenDiscr,RadiationParameter%WaveLenDiscrCoarse).NE.0) THEN
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(RadiationParameter%WaveLenDiscrCoarse, iCNElem) * RadiationParameter%WaveLenIncr &
+ * (1.+RadiationParameter%WaveLenReductionFactor)
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ ELSE
+ iRadPower = 4.*Pi*Radiation_Emission_Spec(iWaveLength,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END IF
+ CALL RANDOM_NUMBER(iRan)
+END DO
+SetParticleWavelengthAR = iWaveLength
+
+END FUNCTION SetParticleWavelengthAR
+
+
+FUNCTION SetParticleWavelengthBiSec(iCNElem)
+!===================================================================================================================================
+! modified particle emmission for LD case
+!===================================================================================================================================
+! MODULES
+USE MOD_Globals
+USE MOD_Globals_Vars, ONLY : Pi
+USE MOD_RadiationTrans_Vars, ONLY : Radiation_Emission_Spec_Total
+USE MOD_Radiation_Vars, ONLY: Radiation_Emission_spec, RadiationParameter
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+INTEGER, INTENT(IN) :: iCNElem
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INOUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! OUTPUT VARIABLES
+INTEGER :: SetParticleWavelengthBiSec
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iWaveLength, iWave, iWaveOld, iWaveMin, iWaveMax
+REAL :: iRan, iRadPower, iRadPower2
+!===================================================================================================================================
+
+CALL RANDOM_NUMBER(iRan)
+iWaveOld = 1
+iWaveLength = INT(RadiationParameter%WaveLenDiscrCoarse/2)
+iWaveMin = 1
+iWaveMax = RadiationParameter%WaveLenDiscrCoarse
+IF (iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse) THEN
+ iRadPower = Radiation_Emission_Spec_Total(iCNElem)
+ELSE
+ iRadPower = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower = iRadPower + 4.*Pi*Radiation_Emission_Spec(iWave,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+END IF
+
+DO
+ IF (iRan.GT.(iRadPower/Radiation_Emission_Spec_Total(iCNElem)))THEN
+ iWaveMin = iWaveLength
+ ELSE
+ iWaveMax = iWaveLength
+ END IF
+ iWaveOld = iWaveLength
+ iWaveLength = INT((iWaveMax+iWaveMin)/2)
+ IF (iWaveLength.EQ.RadiationParameter%WaveLenDiscrCoarse) THEN
+ iRadPower = Radiation_Emission_Spec_Total(iCNElem)
+ ELSE
+ iRadPower = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower = iRadPower + 4.*Pi*Radiation_Emission_Spec(iWave,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ END IF
+ IF (ABS(iWaveOld-iWaveLength).LE.1) EXIT
+
+END DO
+
+iWaveOld = iWaveLength
+IF (iRan.LT.(iRadPower/Radiation_Emission_Spec_Total(iCNElem))) THEN
+ IF (iWaveLength.EQ.1) THEN
+ iWaveLength = iWaveLength
+ ELSE
+ iWaveLength = iWaveLength - 1
+ iRadPower2 = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower2 = iRadPower2 + 4.*Pi*Radiation_Emission_Spec(iWave,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ IF (ABS(iRan-(iRadPower/Radiation_Emission_Spec_Total(iCNElem))).LT.ABS(iRan-(iRadPower2/Radiation_Emission_Spec_Total(iCNElem)))) THEN
+ iWaveLength = iWaveOld
+ END IF
+ END IF
+ELSE
+ iWaveLength = iWaveLength + 1
+ iRadPower2 = 0.0
+ DO iWave = 1, iWaveLength
+ iRadPower2 = iRadPower2 + 4.*Pi*Radiation_Emission_Spec(iWave,iCNElem)*RadiationParameter%WaveLenIncr*RadiationParameter%WaveLenReductionFactor
+ END DO
+ IF (ABS(iRan-(iRadPower/Radiation_Emission_Spec_Total(iCNElem))).LT.ABS(iRan-(iRadPower2/Radiation_Emission_Spec_Total(iCNElem)))) THEN
+ iWaveLength = iWaveOld
+ END IF
+END IF
+SetParticleWavelengthBiSec = iWaveLength
+
+END FUNCTION SetParticleWavelengthBiSec
+
+END MODULE MOD_RayTracing
diff --git a/src/radiation/ray_tracing/raytrace_ini.f90 b/src/radiation/ray_tracing/raytrace_ini.f90
new file mode 100644
index 000000000..d075a8c2d
--- /dev/null
+++ b/src/radiation/ray_tracing/raytrace_ini.f90
@@ -0,0 +1,651 @@
+!==================================================================================================================================
+! Copyright (c) 2023 - 2023 Marcel Pfeiffer, Stephen Copplestone
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RayTracing_Init
+!===================================================================================================================================
+! Initialization of Radiation Transport
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+
+PUBLIC :: InitRayTracing, DefineParametersRayTracing, FinalizeRayTracing
+!===================================================================================================================================
+
+CONTAINS
+
+!==================================================================================================================================
+!> Define parameters for FP-Flow
+!==================================================================================================================================
+SUBROUTINE DefineParametersRayTracing()
+! MODULES
+USE MOD_ReadInTools ,ONLY: prms,addStrListEntry
+IMPLICIT NONE
+!==================================================================================================================================
+CALL prms%SetSection("Ray Tracing")
+CALL prms%CreateIntOption( 'RayTracing-NumRays' , 'Number of emitted rays from particle boundary with index [RayTracing-PartBound]')
+CALL prms%CreateRealArrayOption( 'RayTracing-RayDirection' , 'Direction vector for ray emission. Will be normalized after read-in.' , no=3)
+CALL prms%CreateIntOption( 'RayTracing-PartBound' , 'Particle boundary ID where rays are emitted from' , '0')
+CALL prms%CreateRealOption( 'RayTracing-PulseDuration' , 'Pulse duration tau for a Gaussian-type pulse with I~exp(-(t/tau)^2) [s]' )
+CALL prms%CreateIntOption( 'RayTracing-NbrOfPulses' , 'Number of pulses [-]' , '1')
+CALL prms%CreateRealOption( 'RayTracing-WaistRadius' , 'Beam waist radius (in focal spot) w_b for Gaussian-type pulse with I~exp(-(r/w_b)^2) [m]' , '0.0')
+CALL prms%CreateRealOption( 'RayTracing-WaveLength' , 'Beam wavelength [m]' )
+CALL prms%CreateRealOption( 'RayTracing-RepetitionRate' , 'Pulse repetition rate (pulses per second) [Hz]' )
+CALL prms%CreateRealOption( 'RayTracing-PowerDensity' , 'Average pulse power density (power per area) [W/m2]')
+CALL prms%CreateLogicalOption( 'RayTracing-ForceAbsorption' , 'Surface photon sampling is performed independent of the actual absorption/reflection outcome (default=T)', '.TRUE.')
+CALL prms%CreateIntOption( 'RayTracing-NMax' , 'Maximum polynomial degree within refined volume elements for photon tracking (p-adaption)')
+CALL prms%CreateIntOption( 'RayTracing-VolRefineMode' , 'High-order ray tracing volume sampling refinement method:\n'//&
+ ' 0: do nothing (default)\n'//&
+ ' 1: refine below user-defined z-coordinate with NMax\n'//&
+ ' 2: scale N according to the mesh element volume between NMin>=1 and NMax>=2\n'//&
+ ' 3: refine below user-defined z-coordinate and scale N according to the mesh element volume between NMin>=1 and NMax>=2\n'//&
+ ' (consider only elements below the user-defined z-coordinate for the scaling)'&
+ , '0')
+CALL prms%CreateRealOption( 'RayTracing-VolRefineModeZ' , 'Z-coordinate for switching between NMin (pos>z) and NMax (pos CHARACTER conversion
+!===================================================================================================================================
+IF(.NOT.UseRayTracing) RETURN
+LBWRITE(UNIT_StdOut,'(132("-"))')
+LBWRITE(UNIT_stdOut,'(A)') ' INIT RAY TRACING MODEL ...'
+
+! Do not absorb rays within the volume!
+RadiationAbsorptionModel = 0
+RadObservationPointMethod = 0
+
+! Get index of particle boundary from which rays are emitted
+RayPartBound = GETINT('RayTracing-PartBound')
+IF(RayPartBound.LE.0) CALL CollectiveStop(__STAMP__,'RayTracing-PartBound must be > 0 to activate ray tracing on this boundary!')
+
+! Get ray parameters
+Ray%PulseDuration = GETREAL('RayTracing-PulseDuration')
+Ray%NbrOfPulses = GETINT('RayTracing-NbrOfPulses')
+Ray%tShift = SQRT(8.0) * Ray%PulseDuration
+Ray%WaistRadius = GETREAL('RayTracing-WaistRadius')
+Ray%WaveLength = GETREAL('RayTracing-WaveLength')
+Ray%RepetitionRate = GETREAL('RayTracing-RepetitionRate')
+Ray%Period = 1./Ray%RepetitionRate
+Ray%PowerDensity = GETREAL('RayTracing-PowerDensity')
+Ray%Direction = GETREALARRAY('RayTracing-RayDirection',3)
+Ray%Direction = UNITVECTOR(Ray%Direction)
+WRITE(UNIT=hilf,FMT='(I0)') nSurfSample
+Ray%nSurfSample = GETINT('RayTracing-nSurfSample',hilf)
+Ray%NodeType = TRIM(GETSTR('RayTracing-NodeType'))
+SELECT CASE(TRIM(Ray%NodeType))
+CASE('VISU','VISU_INNER','GAUSS')
+ ! Do nothing
+CASE DEFAULT
+ CALL CollectiveStop(__STAMP__,'Unknown node type for ray tracing: '//TRIM(Ray%NodeType)//'. Select VISU, VISU_INNER or GAUSS')
+END SELECT
+
+! Parameters only require for actual ray tracing computation
+IF(PerformRayTracing)THEN
+ NumRays = GETINT('RayTracing-NumRays')
+ RayForceAbsorption = GETLOGICAL('RayTracing-ForceAbsorption')
+ Ray%VolRefineMode = GETINT('RayTracing-VolRefineMode')
+#if ! (CORE_SPLIT==0)
+ ! Sanity check: ElemVolume_Shared is only built for nComputeNodeElems and not nComputeNodeTotalElems. Maybe more containers are
+ ! similarly not fully built when running multi-node
+ CALL CollectiveStop(__STAMP__,'Ray tracing implemented for node-level splitting; all global elements must be on the compute-node')
+#endif /*! (CORE_SPLIT==0)*/
+END IF ! PerformRayTracing
+
+! Output of high-order p-adaptive info
+Ray%NMin = 1 ! GETINT('RayTracing-NMin')
+WRITE(UNIT=hilf,FMT='(I3)') PP_N
+Ray%Nmax = GETINT('RayTracing-Nmax',hilf)
+IF(Ray%Nmax.LT.Ray%Nmax) CALL abort(__STAMP__,'RayTracing-Nmax cannot be smaller than Nmin=',IntInfoOpt=Ray%NMin)
+
+! Build surface and volume containers
+CALL InitPhotonSurfSample()
+CALL InitHighOrderRaySampling()
+
+ASSOCIATE( &
+ E0 => Ray%Energy ,&
+ wb => Ray%WaistRadius ,&
+ tau => Ray%PulseDuration ,&
+ I0 => Ray%IntensityAmplitude ,&
+ tShift => Ray%tShift ,&
+ Period => Ray%Period ,&
+ tActive => Ray%tActive ,&
+ A => Ray%Area )
+
+ ! ATTENTION: Rectangle only and uses GEO min/max in x- and y-direction!
+ ! TODO: Ray emission area from chosen boundary surface?
+ A = (GEO%xmaxglob-GEO%xminglob) * (GEO%ymaxglob-GEO%yminglob)
+ ! Normal vector of the ray emission area
+ SurfaceNormal = (/ 0., 0., 1. /)
+ ! Angle between emitted rays and emission area
+ alpha = (90.-ABS(90.-(180./PI)*ACOS(DOT_PRODUCT(Ray%Direction,SurfaceNormal))))
+
+ ! Derived quantities
+ Ray%Power = Ray%PowerDensity * A ! adjust power from [W/m2] to [W]
+ E0 = Ray%Power / Ray%RepetitionRate
+
+ ! Generate two base vectors perpendicular to the ray direction
+ CALL OrthoNormVec(Ray%Direction,Ray%BaseVector1IC,Ray%BaseVector2IC)
+
+ ! Calculate the peak intensity (uncorrected)
+ I0 = E0 / (SQRT(PI)*tau*A)
+
+ ! Correction factor due to temporal cut-off of the Gaussian pulse
+ ! no need for correction in space because the function is not cut-off in space
+ ! just consider the temporal cut-off for the rectangle
+ factor = ERF(tShift/tau)
+ factor = SQRT(PI)*tau*A
+ I0 = E0 / factor
+
+ ! Sanity check: overlapping of pulses is not implemented (use multiple emissions for this)
+ IF(2.0*tShift.GT.Period) CALL abort(__STAMP__,'Pulse length (2*tShift) is greater than the pulse period. This is not implemented!')
+
+ ! Active pulse time
+ tActive = REAL(Ray%NbrOfPulses - 1)*Period + 2.0*tShift
+END ASSOCIATE
+
+CALL PrintOption('Rectangular ray emission area: A [m2]' , 'CALCUL.' , RealOpt=Ray%Area)
+CALL PrintOption('Angle between emission area normal and ray direction: alpha [deg]' , 'CALCUL.' , RealOpt=alpha)
+! Increased energy in the volume due to the increased optical path (only 2D approximation)
+IF(ABS(alpha)+1e-4.LT.90.0)THEN
+ CALL PrintOption('Enhancement factor for energy deposited in the volume [-]' , 'CALCUL.' , RealOpt=1.0/COS(alpha*PI/180.0))
+ELSE
+ CALL PrintOption('Enhancement factor for energy deposited in the volume [-]' , 'CALCUL.' , RealOpt=1.0)
+END IF ! ABS(alpha).GT.0.0
+CALL PrintOption('Single pulse energy [J]' , 'CALCUL.' , RealOpt=Ray%Energy)
+CALL PrintOption('Intensity amplitude: I0 [W/m^2]' , 'CALCUL.' , RealOpt=Ray%IntensityAmplitude)
+CALL PrintOption('Corrected Intensity amplitude: I0_corr [W/m^2]' , 'CALCUL.' , RealOpt=Ray%IntensityAmplitude)
+CALL PrintOption('Pulse period (Time between maximum of two pulses) [s]' , 'CALCUL.' , RealOpt=Ray%Period)
+CALL PrintOption('Temporal pulse width (pulse time 2x tShift) [s]' , 'CALCUL.' , RealOpt=2.0*Ray%tShift)
+CALL PrintOption('Pulse will end at tActive (pulse final time) [s]' , 'CALCUL.' , RealOpt=Ray%tActive)
+
+LBWRITE(UNIT_stdOut,'(A)')' INIT RAY TRACING MODEL DONE!'
+LBWRITE(UNIT_StdOut,'(132("-"))')
+END SUBROUTINE InitRayTracing
+
+
+!===================================================================================================================================
+!> Build all high-order mappings required for ray trace sampling in the volume on a p-adaptive polynomial basis
+!===================================================================================================================================
+SUBROUTINE InitHighOrderRaySampling()
+! MODULES
+USE MOD_PreProc
+USE MOD_Globals ,ONLY: abort,IERROR,UNIT_StdOut
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems,nElems,offSetElem
+!USE MOD_RayTracing_Vars ,ONLY: N_VolMesh_Ray
+USE MOD_RayTracing_Vars ,ONLY: N_DG_Ray,Ray,U_N_Ray,U_N_Ray_loc,nVarRay,PerformRayTracing
+USE MOD_Mesh_Tools ,ONLY: GetCNElemID,GetGlobalElemID
+USE MOD_ReadInTools ,ONLY: GETREAL
+USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,ElemBaryNGeo
+#if USE_MPI
+USE MOD_Globals ,ONLY: MPI_COMM_PICLAS
+USE MPI
+!USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared
+USE MOD_RayTracing_Vars ,ONLY: N_DG_Ray_Shared,N_DG_Ray_Shared_Win
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED,myComputeNodeRank,nComputeNodeProcessors,nComputeNodeTotalElems
+#else
+!USE MOD_Mesh_Vars ,ONLY: NodeCoords
+USE MOD_Mesh_Vars ,ONLY: nElems
+#endif /*USE_MPI*/
+#if defined(CODE_ANALYZE)
+USE MOD_Globals ,ONLY: nProcessors
+#endif /*defined(CODE_ANALYZE)*/
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: Nloc,iCNElem,firstElem,lastElem,iGlobalElem,iElem
+REAL :: VolMin,VolMax,m,NReal
+#if defined(CODE_ANALYZE)
+INTEGER :: CNElemID
+LOGICAL,PARAMETER :: debugRay=.FALSE.
+#endif /*defined(CODE_ANALYZE)*/
+LOGICAL :: FoundElem
+CHARACTER(LEN=40) :: hilf
+!===================================================================================================================================
+! When ray tracing is performed, these arrays are created, otherwise (restart or no actual ray tracing) they are read from h5
+IF(PerformRayTracing)THEN
+
+#if USE_MPI
+ CALL Allocate_Shared((/nGlobalElems/),N_DG_Ray_Shared_Win,N_DG_Ray_Shared)
+ CALL MPI_WIN_LOCK_ALL(0,N_DG_Ray_Shared_Win,IERROR)
+ N_DG_Ray => N_DG_Ray_Shared
+ ! only CN root initializes
+ IF (myComputeNodeRank.EQ.0) N_DG_Ray = Ray%NMin ! default
+ ! This sync/barrier is required as it cannot be guaranteed that the zeros have been written to memory by the time the MPI_REDUCE
+ ! is executed (see MPI specification). Until the Sync is complete, the status is undefined, i.e., old or new value or utter nonsense.
+ CALL BARRIER_AND_SYNC(N_DG_Ray_Shared_Win,MPI_COMM_SHARED)
+#else
+ ALLOCATE(N_DG_Ray(nGlobalElems))
+ N_DG_Ray = Ray%NMin ! default
+#endif /*USE_MPI*/
+
+ ! Select volumetric resolution
+ IF(Ray%NMin.NE.Ray%NMax)THEN
+ ! Only set variable N if NMin and NMax are not the same
+ SELECT CASE(Ray%VolRefineMode)
+ CASE(-1)
+ ! -1: odd elements 1, even elements NMax
+ DO iElem = 1, PP_nElems
+ IF(MOD(iElem,2).EQ.0)THEN
+ ! even
+ N_DG_Ray(iElem) = Ray%Nmax
+ ELSE
+ ! odd
+ N_DG_Ray(iElem) = 1
+ END IF ! MOD(iElem,2).EQ.0
+ END DO ! iElem = 1, PP_nElems
+ CASE(0)
+ ! 0: do nothing (default)
+ CASE(1,2,3)
+ ! Set first and last elem loop indices
+#if USE_MPI
+ firstElem = INT(REAL( myComputeNodeRank )*REAL(nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))+1
+ lastElem = INT(REAL((myComputeNodeRank+1))*REAL(nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))
+#else
+ firstElem = 1
+ lastElem = nElems
+#endif
+ ! 1: refine below user-defined z-coordinate with NMax
+ IF(Ray%VolRefineMode.NE.2)THEN
+ WRITE(UNIT=hilf,FMT=WRITEFORMAT) 1.0E200!HUGE(1.0) -> HUGE produces IEEE overflow
+ Ray%VolRefineModeZ = GETREAL('RayTracing-VolRefineModeZ',TRIM(hilf))
+ DO iCNElem = firstElem, lastElem
+ iGlobalElem = GetGlobalElemID(iCNElem)
+ !IPWRITE(UNIT_StdOut,*) "iCNElem,iGlobalElem =", iCNElem,iGlobalElem
+ IF(ElemBaryNGeo(3,iCNElem).LT.Ray%VolRefineModeZ)THEN
+ N_DG_Ray(iGlobalElem) = Ray%Nmax
+ ELSE
+ N_DG_Ray(iGlobalElem) = Ray%Nmin
+ END IF ! ElemBaryNGeo(3,iCNElem).LT.Ray%VolRefineModeZ
+ END DO ! iCNElem = firstElem, lastElem
+ ELSE
+ Ray%VolRefineModeZ = 1.0E200 ! dummy
+ END IF ! Ray%VolRefineMode.NE.2
+
+ ! 2: scale N according to the mesh element volume between NMin>=1 and NMax>=2
+ ! 3: refine below user-defined z-coordinate and scale N according to the mesh element volume between NMin>=1 and NMax>=2
+ ! (consider only elements below the user-defined z-coordinate for the scaling)
+ IF((Ray%VolRefineMode.EQ.2).OR.(Ray%VolRefineMode.EQ.3))THEN
+ ! Get global min and max volume: Only consider elements below the z-coordinate
+ VolMin = HUGE(1.)
+ VolMax = -HUGE(1.)
+ FoundElem = .FALSE.
+ DO iCNElem = firstElem, lastElem
+ iGlobalElem = GetGlobalElemID(iCNElem)
+ IF((ElemBaryNGeo(3,iCNElem).LT.Ray%VolRefineModeZ).OR.(Ray%VolRefineMode.EQ.2))THEN
+ VolMin = MIN(VolMin, ElemVolume_Shared(iCNElem))
+ VolMax = MAX(VolMax, ElemVolume_Shared(iCNElem))
+ FoundElem = .TRUE.
+ END IF
+ END DO ! iCNElem = firstElem, lastElem
+#if USE_MPI
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE, VolMin, 1, MPI_DOUBLE_PRECISION, MPI_MIN, MPI_COMM_PICLAS, IERROR)
+ CALL MPI_ALLREDUCE(MPI_IN_PLACE, VolMax, 1, MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_PICLAS, IERROR)
+#endif /*USE_MPI*/
+
+ ! Loop over all elements again and scale the polynomial degree using NINT.
+ ! Check if the volumes of the elements are almost equal
+ IF((VolMax.GT.VolMin).AND.(.NOT.ALMOSTEQUALRELATIVE(VolMax,VolMin,1e-2)))THEN
+ ! Get the slope of the linear interpolation function between the maximum and minimum of the element volumes
+ m = REAL(Ray%Nmax-Ray%Nmin)/(VolMax-VolMin)
+ IF(FoundElem)THEN
+ ! Loop over process elements
+ DO iCNElem = firstElem, lastElem
+ iGlobalElem = GetGlobalElemID(iCNElem)
+ IF(ElemBaryNGeo(3,iCNElem).LT.Ray%VolRefineModeZ)THEN
+ NReal = m * (ElemVolume_Shared(iCNElem)-VolMin) + REAL(Ray%Nmin)
+ N_DG_Ray(iGlobalElem) = NINT(NReal)
+ END IF
+ END DO ! iCNElem = firstElem, lastElem
+ END IF ! FoundElem
+ END IF ! (VolMax.GT.VolMin).AND.(.NOT.ALMOST)
+
+ END IF ! Ray%VolRefineMode.EQ.3
+ CASE DEFAULT
+ ! Debugging:
+#if defined(CODE_ANALYZE)
+ IF(nProcessors.GT.1) CALL abort(__STAMP__,'This only works for single-core runs')
+ ! 3D box test case with diagonal rays
+ IF(debugRay)THEN
+ N_DG_Ray = Ray%Nmax
+ DO iElem = 1, PP_nElems
+ CNElemID = GetCNElemID(iElem)
+ ASSOCIATE( &
+ x => ElemBaryNGeo(1,CNElemID),&
+ y => ElemBaryNGeo(2,CNElemID),&
+ z => ElemBaryNGeo(3,CNElemID))
+ IF(y+z.GE.1.40)THEN
+ N_DG_Ray(iElem) = 1
+ CYCLE
+ END IF ! y+z.GT.1.5
+
+ IF(y+z.LE.0.6)THEN
+ N_DG_Ray(iElem) = 1
+ CYCLE
+ END IF ! y+z.LT.0.5
+
+ IF(y+z.LT.0.9)THEN
+ N_DG_Ray(iElem) = Ray%Nmax-1
+ CYCLE
+ END IF ! y+z.GT.1.00001
+
+ IF(y+z.GT.1.1)THEN
+ N_DG_Ray(iElem) = Ray%Nmax-1
+ CYCLE
+ END IF ! y+z.GT.1.00001
+ END ASSOCIATE
+ END DO ! iElem = 1, PP_nElems
+ END IF ! debugRay
+#else
+ CALL abort(__STAMP__,'RayTracing-VolRefineMode unknown: ',IntInfoOpt=Ray%VolRefineMode)
+#endif /*defined(CODE_ANALYZE)*/
+ END SELECT
+
+#if USE_MPI
+ CALL BARRIER_AND_SYNC(N_DG_Ray_Shared_Win,MPI_COMM_SHARED)
+#endif /*USE_MPI*/
+ END IF ! Ray%NMin.NE.Ray%NMax
+
+ ! Sanity check
+ IF(ANY(N_DG_Ray.LE.0)) CALL abort(__STAMP__,'N_DG_Ray cannot contain zeros!')
+
+ !ALLOCATE(N_VolMesh_Ray(1:nGlobalElems))
+#if USE_MPI
+ !CALL BuildElem_xGP_RayTrace(NodeCoords_Shared)
+#else
+ !CALL BuildElem_xGP_RayTrace(NodeCoords)
+#endif /*USE_MPI*/
+
+ ! The global DG solution in physical space
+ ALLOCATE(U_N_Ray(1:nGlobalElems))
+ DO iGlobalElem = 1, nGlobalElems
+ Nloc = N_DG_Ray(iGlobalElem)
+ ALLOCATE(U_N_Ray(iGlobalElem)%U(nVarRay,0:Nloc,0:Nloc,0:Nloc))
+ U_N_Ray(iGlobalElem)%U = 0.
+ END DO ! iGlobalElem = 1, nGlobalElems
+
+ ! The local DG solution in physical space
+ ALLOCATE(U_N_Ray_loc(1:nElems))
+ DO iElem = 1, nElems
+ Nloc = N_DG_Ray(iElem+offSetElem)
+ ALLOCATE(U_N_Ray_loc(iElem)%U(nVarRay,0:Nloc,0:Nloc,0:Nloc))
+ U_N_Ray_loc(iElem)%U = 0.
+ END DO ! iElem = 1, nElems
+
+ELSE
+
+END IF ! PerformRayTracing
+
+
+CALL BuildNInterAndVandermonde()
+
+
+END SUBROUTINE InitHighOrderRaySampling
+
+
+!!==================================================================================================================================
+!!> This routine takes the equidistant node coordinates of the mesh (on NGeo+1 points) and uses them to build the coordinates
+!!> of solution/interpolation points of type NodeType on polynomial degree Nloc (Nloc+1 points per direction).
+!!> Output: Elem_xGP(:,:,:,:) for each element with variably N
+!!==================================================================================================================================
+!SUBROUTINE BuildElem_xGP_RayTrace(NodeCoords)
+!! MODULES
+!USE MOD_Globals
+!USE MOD_PreProc
+!USE MOD_Mesh_Vars ,ONLY: NGeo,nGlobalElems
+!USE MOD_Interpolation_Vars ,ONLY: NodeTypeCL,NodeTypeVISU,NodeType
+!USE MOD_RayTracing_Vars ,ONLY: Ray,N_VolMesh_Ray,N_DG_Ray
+!USE MOD_Interpolation ,ONLY: GetVandermonde,GetNodesAndWeights
+!USE MOD_ChangeBasis ,ONLY: ChangeBasis3D_XYZ, ChangeBasis3D
+!USE MOD_Basis ,ONLY: LagrangeInterpolationPolys
+!!----------------------------------------------------------------------------------------------------------------------------------
+!IMPLICIT NONE
+!!----------------------------------------------------------------------------------------------------------------------------------
+!! INPUT/OUTPUT VARIABLES
+!REAL,INTENT(IN) :: NodeCoords(3,0:NGeo,0:NGeo,0:NGeo,nGlobalElems) !< Equidistant mesh coordinates
+!!----------------------------------------------------------------------------------------------------------------------------------
+!! LOCAL VARIABLES
+!INTEGER :: iGlobalElem,Nloc
+!
+!TYPE VdmType
+! REAL, ALLOCATABLE :: Vdm_EQNGeo_CLNloc(:,:)
+! REAL, ALLOCATABLE :: Vdm_CLNloc_Nloc (:,:)
+!END TYPE VdmType
+!
+!TYPE(VdmType), DIMENSION(:), ALLOCATABLE :: Vdm
+!
+!!==================================================================================================================================
+!
+!! Build Vdm for every degree
+!ALLOCATE(Vdm(Ray%Nmin:Ray%Nmax))
+!DO Nloc = Ray%Nmin, Ray%Nmax
+! ALLOCATE(Vdm(Nloc)%Vdm_EQNGeo_CLNloc(0:Nloc,0:NGeo))
+! ALLOCATE(Vdm(Nloc)%Vdm_CLNloc_Nloc(0:Nloc,0:Nloc))
+! CALL GetVandermonde(NGeo, NodeTypeVISU, NLoc, NodeTypeCL, Vdm(Nloc)%Vdm_EQNGeo_CLNloc, modal=.FALSE.)
+! CALL GetVandermonde(Nloc, NodeTypeCL , Nloc, NodeType , Vdm(Nloc)%Vdm_CLNloc_Nloc, modal=.FALSE.)
+!
+! ! NOTE: Transform intermediately to CL points, to be consistent with metrics being built with CL
+! ! Important for curved meshes if NGeo=NGeo
+!
+! !1.a) Transform from EQUI_NGeo to solution points on Nloc
+! Vdm(Nloc)%Vdm_EQNGeo_CLNloc=MATMUL(Vdm(Nloc)%Vdm_CLNloc_Nloc, Vdm(Nloc)%Vdm_EQNGeo_CLNloc)
+!END DO ! Nloc = Ray%Nmin, Ray%Nmax
+!
+!! Set Elem_xGP for each element
+!DO iGlobalElem=1,nGlobalElems
+! Nloc = N_DG_Ray(iGlobalElem)
+!
+! ! TODO: Currently each process has all global xGP (maybe put unrolled into a shared array)
+! ALLOCATE(N_VolMesh_Ray(iGlobalElem)%Elem_xGP(3,0:Nloc,0:Nloc,0:Nloc))
+! CALL ChangeBasis3D(3,NGeo,Nloc,Vdm(Nloc)%Vdm_EQNGeo_CLNloc,NodeCoords(:,:,:,:,iGlobalElem),&
+! N_VolMesh_Ray(iGlobalElem)%Elem_xGP(:,:,:,:))
+!
+!END DO
+!
+!END SUBROUTINE BuildElem_xGP_RayTrace
+
+
+!===================================================================================================================================
+!> Builds the interpolation basis N_Inter_Ray and the Vandermonde matrices PREF_VDM_Ray used for high-order volume sampling for the
+!> reay tracing model
+!===================================================================================================================================
+SUBROUTINE BuildNInterAndVandermonde()
+! MODULES
+USE MOD_RayTracing_Vars ,ONLY: Ray,N_Inter_Ray,PREF_VDM_Ray,PerformRayTracing
+USE MOD_Interpolation ,ONLY: InitInterpolationBasis,GetVandermonde
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: i,j,Nin,Nout,Nloc
+REAL, DIMENSION(:), ALLOCATABLE :: MappedGauss(:)
+!===================================================================================================================================
+! Allocate interpolation variables
+ALLOCATE(N_Inter_Ray(Ray%Nmin:Ray%Nmax))
+
+DO Nloc=Ray%Nmin,Ray%Nmax
+ ! Build basis for polynomial of degree Nloc
+ CALL InitInterpolationBasis(Nloc , N_Inter_Ray(Nloc)%xGP , N_Inter_Ray(Nloc)%wGP , N_Inter_Ray(Nloc)%wBary , &
+ N_Inter_Ray(Nloc)%L_Minus , N_Inter_Ray(Nloc)%L_Plus , N_Inter_Ray(Nloc)%L_PlusMinus , &
+ N_Inter_Ray(Nloc)%swGP , N_Inter_Ray(Nloc)%wGPSurf , &
+ N_Inter_Ray(Nloc)%Vdm_Leg , N_Inter_Ray(Nloc)%sVdm_Leg, NodeType_in = Ray%NodeType)
+
+ ! Build variables for nearest Gauss-point (NGP) method
+ ALLOCATE(N_Inter_Ray(Nloc)%GaussBorder(1:Nloc))
+ ALLOCATE(MappedGauss(1:Nloc+1))
+
+ DO i = 0, Nloc
+ MappedGauss(i+1) = N_Inter_Ray(Nloc)%xGP(i)
+ END DO ! i = 0, Nloc
+
+ DO i = 1, Nloc
+ N_Inter_Ray(Nloc)%GaussBorder(i) = (MappedGauss(i+1) + MappedGauss(i))/2
+ END DO ! i = 1, Nloc
+
+ DEALLOCATE(MappedGauss)
+
+END DO
+
+! Only allocate the following arrays when actual ray tracing is performed
+IF(PerformRayTracing)THEN
+ ! Allocate Vandermonde matrices for p-refinement
+ ALLOCATE(PREF_VDM_Ray(Ray%Nmin:Ray%Nmax,Ray%Nmin:Ray%Nmax))
+
+ ! Fill Vandermonde matrices for p-refinement
+ DO Nin=Ray%Nmin,Ray%Nmax
+ DO Nout=Ray%Nmin,Ray%Nmax
+ ALLOCATE(PREF_VDM_Ray(Nin,Nout)%Vdm(0:Nin,0:Nout))
+ IF(Nin.EQ.Nout) THEN
+ DO i=0,Nin; DO j=0,Nin
+ IF(i.EQ.j) THEN
+ PREF_VDM_Ray(Nin,Nout)%Vdm(i,j) = 1.
+ ELSE
+ PREF_VDM_Ray(Nin,Nout)%Vdm(i,j) = 0.
+ END IF
+ END DO
+ END DO
+ ELSE IF(Nin.GT.Nout) THEN ! p-coarsening: Project from higher degree to lower degree
+ CALL GetVandermonde(Nin, Ray%NodeType, Nout, Ray%NodeType, PREF_VDM_Ray(Nin,Nout)%Vdm, modal=.TRUE. )
+ ELSE ! p-refinement: Interpolate lower degree to higher degree
+ CALL GetVandermonde(Nin, Ray%NodeType, Nout, Ray%NodeType, PREF_VDM_Ray(Nin,Nout)%Vdm, modal=.FALSE.)
+ END IF
+ END DO;END DO
+END IF ! PerformRayTracing
+
+END SUBROUTINE BuildNInterAndVandermonde
+
+
+!===================================================================================================================================
+!> Deallocate arrays
+!===================================================================================================================================
+SUBROUTINE FinalizeRayTracing()
+! MODULES
+USE MOD_Globals
+USE MOD_RayTracing_Vars
+#if USE_MPI
+USE MOD_MPI_Shared
+USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED
+#endif /*USE_MPI*/
+USE MOD_Photon_TrackingVars
+USE MOD_Mesh_Vars ,ONLY: nGlobalElems
+USE MOD_Photon_Tracking ,ONLY: FinalizePhotonSurfSample
+IMPLICIT NONE
+!----------------------------------------------------------------------------------------------------------------------------------!
+! INPUT / OUTPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+INTEGER :: iGlobalElem
+!===================================================================================================================================
+
+! Check if ray tracing is used
+IF(.NOT.UseRayTracing) RETURN
+
+! Check if actual ray tracing through the domain is performed
+IF(PerformRayTracing)THEN
+
+ ! 1: after ray tracing is performed
+ SDEALLOCATE(RayElemPassedEnergy)
+ DO iGlobalElem = 1, nGlobalElems
+ DEALLOCATE(U_N_Ray(iGlobalElem)%U)
+ END DO ! iGlobalElem = 1, nGlobalElems
+ DEALLOCATE(U_N_Ray) ! ray tracing
+ SDEALLOCATE(PREF_VDM_Ray) ! ray tracing
+
+#if USE_MPI
+ SDEALLOCATE(PhotonSampWallProc) ! ray tracing
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
+ CALL UNLOCK_AND_FREE(RayElemPassedEnergy_Shared_Win)
+
+ IF(nProcessors.GT.1)THEN
+ SDEALLOCATE(RayElemOffset)
+ CALL UNLOCK_AND_FREE(RayElemPassedEnergyHO_Shared_Win)
+ END IF ! nProcessors.GT.1
+
+ CALL UNLOCK_AND_FREE(N_DG_Ray_Shared_Win)
+
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
+
+ ADEALLOCATE(RayElemPassedEnergy_Shared)
+ ADEALLOCATE(RayElemPassedEnergyHO_Shared)
+ ADEALLOCATE(N_DG_Ray_Shared)
+#endif /*USE_MPI*/
+ELSE
+ ! 2: at the end of the simulation or during load balance
+ SDEALLOCATE(U_N_Ray_loc) ! ray tracing + plasma simulation
+ SDEALLOCATE(N_DG_Ray_loc) ! ray tracing + plasma simulation
+ SDEALLOCATE(N_Inter_Ray) ! ray tracing + plasma simulation
+
+ ! TODO: see above: deallocate these arrays after simulation end because otherwise these fields will be corrupt in the state file
+ ! and that can cause confusion
+ SDEALLOCATE(RayElemPassedEnergyLoc1st)
+ SDEALLOCATE(RayElemPassedEnergyLoc2nd)
+ SDEALLOCATE(RaySecondaryVectorX)
+ SDEALLOCATE(RaySecondaryVectorY)
+ SDEALLOCATE(RaySecondaryVectorZ)
+ SDEALLOCATE(ElemVolume)
+
+ SDEALLOCATE(RayElemEmission)
+
+ SDEALLOCATE(PhotonSampWall_loc) ! ray tracing + plasma simulation
+
+#if USE_MPI
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
+ CALL UNLOCK_AND_FREE(PhotonSampWallHDF5_Shared_Win)
+ CALL MPI_BARRIER(MPI_COMM_SHARED,iError)
+ ADEALLOCATE(PhotonSampWallHDF5_Shared)
+ ADEALLOCATE(PhotonSampWallHDF5)
+#endif /*USE_MPI*/
+ ! Deallocate surface variables
+ CALL FinalizePhotonSurfSample()
+END IF ! PerformRayTracing
+
+END SUBROUTINE FinalizeRayTracing
+
+END MODULE MOD_RayTracing_Init
diff --git a/src/radiation/ray_tracing/raytrace_vars.f90 b/src/radiation/ray_tracing/raytrace_vars.f90
new file mode 100644
index 000000000..7a31b4f79
--- /dev/null
+++ b/src/radiation/ray_tracing/raytrace_vars.f90
@@ -0,0 +1,154 @@
+!==================================================================================================================================
+! Copyright (c) 2023 - 2023 Marcel Pfeiffer, Stephen Copplestone
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+MODULE MOD_RayTracing_Vars
+!===================================================================================================================================
+! Contains the tadiation transport variables
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PUBLIC
+SAVE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! GLOBAL RAY TRACING VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+LOGICAL :: UseRayTracing ! Activate ray tracing based emission (also required for plasma simulation)
+LOGICAL :: PerformRayTracing ! Activate actual ray tracing algorithms that track rays through the complete mesh (full mesh mode)
+
+TYPE tRayTrace
+ REAL :: PulseDuration !<
+ REAL :: tShift !<
+ REAL :: tActive !<
+ REAL :: Period !<
+ INTEGER :: NbrOfPulses !<
+ REAL :: WaistRadius !<
+ REAL :: WaveLength !<
+ REAL :: RepetitionRate !<
+ REAL :: PowerDensity !<
+ REAL :: Power !<
+ REAL :: Area !<
+ REAL :: Energy !<
+ REAL :: IntensityAmplitude !<
+ REAL :: Direction(3) !<
+ REAL :: BaseVector1IC(3) !<
+ REAL :: BaseVector2IC(3) !<
+
+ ! Output of high-order p-adaptive info
+ INTEGER :: NMin !< Minimum polynomial degree for the high-order volume sampling (p-adaption)
+ INTEGER :: NMax !< Maximum polynomial degree for the high-order volume sampling (p-adaption)
+
+ INTEGER :: VolRefineMode !< High-order ray tracing volume sampling refinement method:
+ !< 0: do nothing (default)
+ !< 1: refine below user-defined z-coordinate with NMax
+ !< 2: scale N according to the mesh element volume between NMin>=1 and NMax>=2
+ !< 3: refine below user-defined z-coordinate and scale N according to the mesh element volume between NMin>=1 and NMax>=2
+ !< (consider only elements below the user-defined z-coordinate for the scaling)
+
+ REAL :: VolRefineModeZ !< z-coordinate for switching between NMin and NMax
+
+ CHARACTER(LEN=255) :: NodeType !< equidistant or Gauss nodes [-1,1]
+
+ INTEGER :: nSurfSample !< polynomial degree of ray tracing or radiation BC sampling
+
+END TYPE
+
+TYPE (tRayTrace) :: Ray !<
+
+TYPE tRadTrans
+ INTEGER :: NumPhotonsPerCell !<
+ REAL :: GlobalRadiationPower !<
+ REAL :: ScaledGlobalRadiationPower !<
+ INTEGER :: GlobalPhotonNum !<
+END TYPE
+
+TYPE (tRadTrans) :: RadTrans !<
+
+LOGICAL :: RayForceAbsorption !< Surface photon sampling is performed independent of the actual absorption/reflection outcome (default=T)
+LOGICAL, ALLOCATABLE :: RayElemEmission(:,:) !< Flag elements that are relevant for volume or surface photoionization
+INTEGER :: NumRays !<
+INTEGER :: RayPartBound !< Particle boundary ID where rays are emitted from
+
+! Output of low-order info
+INTEGER,PARAMETER :: RayElemSize=6
+REAL, ALLOCATABLE :: RayElemPassedEnergy(:,:) !<
+#if USE_MPI
+INTEGER :: RayElemPassedEnergy_Shared_Win !<
+REAL,POINTER :: RayElemPassedEnergy_Shared(:,:) !<
+INTEGER :: RayElemPassedEnergyHO_Shared_Win !< high-order sampling
+REAL,POINTER :: RayElemPassedEnergyHO_Shared(:,:) !< high-order sampling
+INTEGER,ALLOCATABLE :: RayElemOffset(:) !< Entry offset for high-order sampling
+#endif
+REAL, ALLOCATABLE :: RayElemPassedEnergyLoc1st(:)
+REAL, ALLOCATABLE :: RayElemPassedEnergyLoc2nd(:)
+REAL, ALLOCATABLE :: RaySecondaryVectorX(:)
+REAL, ALLOCATABLE :: RaySecondaryVectorY(:)
+REAL, ALLOCATABLE :: RaySecondaryVectorZ(:)
+REAL,ALLOCATABLE :: ElemVolume(:)
+
+! Output of high-order p-adaptive info
+INTEGER,PARAMETER :: nVarRay=5 !< Number of variables for higher-order sampling for volume ray tracing
+
+INTEGER,ALLOCATABLE :: N_DG_Ray_loc(:) !< for output to ElemData and usage in emission routines
+INTEGER,ALLOCPOINT :: N_DG_Ray(:) !< polynomial degree inside DG element for higher-order sampling for volume ray tracing, size(nElems)
+#if USE_MPI
+INTEGER :: N_DG_Ray_Shared_Win
+INTEGER,ALLOCPOINT :: N_DG_Ray_Shared(:)
+#endif
+
+! DG solution volume
+TYPE N_U_Vol
+ REAL,ALLOCATABLE :: U(:,:,:,:) !< Polynomial solution of sampled data in each volume element (p-adaptive construct)
+END TYPE N_U_Vol
+
+! DG solution (JU or U) vectors
+TYPE(N_U_Vol),ALLOCATABLE :: U_N_Ray(:) !< Solution variable for each equation, node and element,
+TYPE(N_U_Vol),ALLOCATABLE :: U_N_Ray_loc(:) !< Solution variable for each equation, node and element,
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Volume mesh variables
+!-----------------------------------------------------------------------------------------------------------------------------------
+!TYPE, PUBLIC :: VolMesh
+ !REAL,ALLOCATABLE :: Elem_xGP(:,:,:,:) !< XYZ positions (first index 1:3) of the volume Gauss Point
+!END TYPE VolMesh
+
+!TYPE(VolMesh),ALLOCATABLE :: N_VolMesh_Ray(:) !< Array to store Mesh metrics object "VolMesh"
+
+!-----------------------------------------------------------------------------------------------------------------------------------
+! Interpolation variables
+!-----------------------------------------------------------------------------------------------------------------------------------
+TYPE, PUBLIC :: Interpolation
+ ! reserved for Gauss Points with polynomial degree N, all allocated (0:N)
+ REAL,ALLOCATABLE :: L_Plus(:) !< L for boundary flux computation at plus side (1)
+ REAL,ALLOCATABLE :: L_Minus(:) !< L for boundary flux computation at minus side (-1)
+ REAL,ALLOCATABLE :: L_PlusMinus(:,:) !< L for boundary flux computation at both sides (-1,1)
+ REAL,ALLOCATABLE :: xGP(:) !< Gauss point coordinates
+ REAL,ALLOCATABLE :: wGP(:) !< GP integration weights
+ REAL,ALLOCATABLE :: swGP(:) !< 1.0/ GP integration weights
+ REAL,ALLOCATABLE :: wBary(:) !< barycentric weights
+ REAL,ALLOCATABLE :: wGPSurf(:,:) !< wGPSurf(i,j)=wGP(i)*wGP(j)
+ REAL,ALLOCATABLE :: NChooseK(:,:) !< array n over n
+ REAL,ALLOCATABLE :: Vdm_Leg(:,:), sVdm_Leg(:,:) !< Legendre Vandermonde matrix
+ REAL,ALLOCATABLE :: GaussBorder(:) !< Variable required for Nearest Gauss Point (NGP) assignment
+END TYPE Interpolation
+
+TYPE(Interpolation),ALLOCATABLE :: N_Inter_Ray(:) !< Array of prebuild interpolation matrices
+
+TYPE, PUBLIC :: pVDM
+ REAL,ALLOCATABLE :: Vdm(:,:) !< Vandermonde matrix (PP_in,PP_out)
+END TYPE pVDM
+
+TYPE(pVDM),ALLOCATABLE :: PREF_VDM_Ray(:,:) !< Vandermonde matrices used for p-refinement and coarsening
+!===================================================================================================================================
+END MODULE MOD_RayTracing_Vars
diff --git a/src/readIMD/readIMD.f90 b/src/readIMD/readIMD.f90
index 8450ec681..5dc97a324 100644
--- a/src/readIMD/readIMD.f90
+++ b/src/readIMD/readIMD.f90
@@ -108,7 +108,7 @@ subroutine read_IMD_results()
write(UNIT_errOut,'(A34,I8,6A)')'Error during MPI_File_open! Rank: ', myRank, '\n',&
'Error-Message: ', trim(errorString), ' "',trim(filenameIMDresults), '"',&
'The program will be terminated!!!'
- call MPI_Abort(MPI_COMM_WORLD, mpiFileError, iError)
+ call MPI_Abort(MPI_COMM_PICLAS, mpiFileError, iError)
end if
call MPI_FILE_READ_AT(filehandle,3_8,disp_tmp,2,MPI_BYTE,ioStatus,iError)
@@ -127,12 +127,12 @@ subroutine read_IMD_results()
end if
- call MPI_BCAST(Box_X, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, iError)
- call MPI_BCAST(Box_Y, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, iError)
- call MPI_BCAST(Box_Z, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, iError)
- call MPI_BCAST(nGlobalAtoms, 8, MPI_BYTE, 0, MPI_COMM_WORLD, iError)
- call MPI_BCAST(observables, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, iError)
- call MPI_BCAST(disp, 8, MPI_BYTE, 0, MPI_COMM_WORLD, iError)
+ call MPI_BCAST(Box_X, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_PICLAS, iError)
+ call MPI_BCAST(Box_Y, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_PICLAS, iError)
+ call MPI_BCAST(Box_Z, 3, MPI_DOUBLE_PRECISION, 0, MPI_COMM_PICLAS, iError)
+ call MPI_BCAST(nGlobalAtoms, 8, MPI_BYTE, 0, MPI_COMM_PICLAS, iError)
+ call MPI_BCAST(observables, 1, MPI_INTEGER, 0, MPI_COMM_PICLAS, iError)
+ call MPI_BCAST(disp, 8, MPI_BYTE, 0, MPI_COMM_PICLAS, iError)
nAtoms = nGlobalAtoms/nProcessors
SWRITE(UNIT_stdOut,*)'Number of atoms per proc: ',nAtoms
@@ -170,7 +170,7 @@ subroutine read_IMD_results()
StartT=MPI_WTIME()
end if
- call MPI_FILE_OPEN(MPI_COMM_WORLD, trim(filenameIMDresults), MPI_MODE_RDONLY,&
+ call MPI_FILE_OPEN(MPI_COMM_PICLAS, trim(filenameIMDresults), MPI_MODE_RDONLY,&
mpiInfo, filehandle, mpiFileError)
if( mpiFileError /= 0)then
@@ -178,7 +178,7 @@ subroutine read_IMD_results()
write(UNIT_errOut,'(A34,I8,6A)')'Error during MPI_File_open! Rank: ', myRank, '\n',&
'Error-Message: ', trim(errorString), ' "',trim(filenameIMDresults), '"',&
'The program will be terminated!!!'
- call MPI_Abort(MPI_COMM_WORLD, mpiFileError, iError)
+ call MPI_Abort(MPI_COMM_PICLAS, mpiFileError, iError)
end if
call MPI_FILE_SET_VIEW(filehandle, myFileOffset, MPI_PACKED, MPI_PACKED, 'native', mpiInfo, iError)
@@ -217,12 +217,12 @@ subroutine read_IMD_results()
do iPart=1,PDM%ParticleVecLength
call MPI_UNPACK(AtomsBuffer, atomBufferSize, atomsBufferPos, PartState(1:6,iPart),&
- 6_4, MPI_DOUBLE_PRECISION, MPI_COMM_WORLD, iError)
+ 6_4, MPI_DOUBLE_PRECISION, MPI_COMM_PICLAS, iError)
if ( iError .NE. 0 ) &
IPWRITE(UNIT_stdOut,'(I0,A,I0)')'Error unpacking particle position to PartState(1:6,iPart) with iPart=',iPart
call MPI_UNPACK(AtomsBuffer, atomBufferSize, atomsBufferPos, PartStateIntEn(1:2,iPart),&
- int( observables-6_8, 4 ), MPI_DOUBLE_PRECISION, MPI_COMM_WORLD, iError)
+ int( observables-6_8, 4 ), MPI_DOUBLE_PRECISION, MPI_COMM_PICLAS, iError)
if ( iError .NE. 0 ) &
IPWRITE(UNIT_stdOut,'(I0,A,I0)')'Error unpacking particle charge and electron temperature to PartState(1:2,iPart) with iPart=',iPart
end do
@@ -238,7 +238,7 @@ subroutine read_IMD_results()
PartState = PartState * 1e-10_8
PartState(4:6,:) = PartState(4:6,:) * 10.18e15_8
- ! Free an info object
+ ! Free an info object
call MPI_Info_free(mpiInfo, iError)
! Get minimum and maximum extend of the complete particle distribution in the domain
@@ -250,14 +250,14 @@ subroutine read_IMD_results()
MaxY = MAXVAL(PartState(2,:))
MaxZ = MAXVAL(PartState(3,:))
- CALL MPI_REDUCE(MaxX , MaxX_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MinX , MinX_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MaxX , MaxX_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MinX , MinX_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
- CALL MPI_REDUCE(MaxY , MaxY_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MinY , MinY_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MaxY , MaxY_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MinY , MinY_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
- CALL MPI_REDUCE(MaxZ , MaxZ_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
- CALL MPI_REDUCE(MinZ , MinZ_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(MaxZ , MaxZ_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
+ CALL MPI_REDUCE(MinZ , MinZ_glob , 1 , MPI_DOUBLE_PRECISION , MPI_MIN , 0 , MPI_COMM_PICLAS , iError)
if( mpiroot )then
EndT=MPI_WTIME()
@@ -281,7 +281,7 @@ subroutine read_IMD_results()
NbrOfLostParticles=NbrOfLostParticles+1
end if
end do
- CALL MPI_REDUCE(NbrOfLostParticles , NbrOfLostParticlesGlobal , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_WORLD , iError)
+ CALL MPI_REDUCE(NbrOfLostParticles , NbrOfLostParticlesGlobal , 1 , MPI_DOUBLE_PRECISION , MPI_MAX , 0 , MPI_COMM_PICLAS , iError)
if( mpiroot )then
EndT=MPI_WTIME()
WRITE(UNIT_stdOut,'(A,F0.3,A)',ADVANCE='YES')'DONE [',EndT-StartT,'s]'
diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90
index 500e204c5..6b19805fd 100644
--- a/src/readintools/readintools.f90
+++ b/src/readintools/readintools.f90
@@ -817,7 +817,7 @@ SUBROUTINE read_options(this, filename, furtherini)
!broadcast number of lines, read and broadcast file content
#if USE_MPI
-CALL MPI_BCAST(nLines,1,MPI_INTEGER,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(nLines,1,MPI_INTEGER,0,MPI_COMM_PICLAS,iError)
#endif
ALLOCATE(FileContent(nLines))
@@ -828,7 +828,7 @@ SUBROUTINE read_options(this, filename, furtherini)
END IF
IF (MPIROOT) CLOSE(iniUnit)
#if USE_MPI
-CALL MPI_BCAST(FileContent,LEN(FileContent)*nLines,MPI_CHARACTER,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(FileContent,LEN(FileContent)*nLines,MPI_CHARACTER,0,MPI_COMM_PICLAS,iError)
#endif
! infinte loop. Exit at EOF
@@ -2140,7 +2140,7 @@ SUBROUTINE ExtractParameterFile(filename,prmfile,userblockFound)
CLOSE(iniUnit)
END IF
#if USE_MPI
-CALL MPI_BCAST(userblockFound,1,MPI_LOGICAL,0,MPI_COMM_WORLD,iError)
+CALL MPI_BCAST(userblockFound,1,MPI_LOGICAL,0,MPI_COMM_PICLAS,iError)
#endif /*USE_MPI*/
END SUBROUTINE ExtractParameterFile
diff --git a/src/recordpoints/recordpoints.f90 b/src/recordpoints/recordpoints.f90
index 32284f86c..990eaa898 100644
--- a/src/recordpoints/recordpoints.f90
+++ b/src/recordpoints/recordpoints.f90
@@ -151,7 +151,7 @@ SUBROUTINE InitRPCommunicator()
! create new RP communicator for RP output
color = MERGE(2,MPI_UNDEFINED,RP_onProc)
-CALL MPI_COMM_SPLIT(MPI_COMM_WORLD,color,myRPrank,RP_COMM,iError)
+CALL MPI_COMM_SPLIT(MPI_COMM_PICLAS,color,myRPrank,RP_COMM,iError)
IF (RP_onProc) THEN
CALL MPI_COMM_RANK (RP_COMM,myRPrank,iError)
CALL MPI_COMM_SIZE(RP_COMM, nRP_Procs,iError)
@@ -197,7 +197,7 @@ SUBROUTINE ReadRPList(FileString)
SWRITE(UNIT_stdOut,'(A)',ADVANCE='NO')' Read recordpoint definitions from data file "'//TRIM(FileString)//'" ...'
! Open data file
-CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_WORLD)
+CALL OpenDataFile(FileString,create=.FALSE.,single=.FALSE.,readOnly=.FALSE.,communicatorOpt=MPI_COMM_PICLAS)
! compare mesh file names
CALL ReadAttribute(File_ID,'MeshFile',1,StrScalar=MeshFile_RPList)
diff --git a/src/restart/restart.f90 b/src/restart/restart.f90
index ee544f64b..7649f5419 100644
--- a/src/restart/restart.f90
+++ b/src/restart/restart.f90
@@ -149,7 +149,7 @@ SUBROUTINE InitRestart()
IF (LEN_TRIM(RestartFile).GT.0) THEN
! Read in the state file we want to restart from
DoRestart = .TRUE.
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
#ifdef PP_POIS
#if (PP_nVar==8)
!The following arrays are read from the file
@@ -318,6 +318,7 @@ SUBROUTINE Restart()
#endif /*PP_POIS*/
#if defined(PARTICLES)
USE MOD_Particle_Restart ,ONLY: ParticleRestart
+USE MOD_RayTracing ,ONLY: RayTracing
#endif /*defined(PARTICLES)*/
#if USE_HDG
USE MOD_Restart_Tools ,ONLY: RecomputeLambda
@@ -346,6 +347,8 @@ SUBROUTINE Restart()
#ifdef PARTICLES
! Restart particle arrays
CALL ParticleRestart()
+ ! Get ray tracing volume and surface data
+ CALL RayTracing()
#endif /*PARTICLES*/
#if USE_HDG
diff --git a/src/restart/restart_field.f90 b/src/restart/restart_field.f90
index c46f53310..9ae52a0ac 100644
--- a/src/restart/restart_field.f90
+++ b/src/restart/restart_field.f90
@@ -184,9 +184,9 @@ SUBROUTINE FieldRestart()
!IPWRITE(UNIT_StdOut,*) "firstSide:lastSide,Nbr,nSides =", firstSide,lastSide,lastSide-firstSide+1,nSides
ALLOCATE(lambdaLBTmp(PP_nVar,nGP_face,firstSide:lastSide))
END ASSOCIATE
- !CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ !CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
!IPWRITE(UNIT_StdOut,*) "MPInSideSend,MPIoffsetSideSend,MPInSideRecv,MPIoffsetSideRecv =", MPInSideSend,MPIoffsetSideSend,MPInSideRecv,MPIoffsetSideRecv
- !CALL MPI_BARRIER(MPI_COMM_WORLD,iError)
+ !CALL MPI_BARRIER(MPI_COMM_PICLAS,iError)
ASSOCIATE (&
counts_send => (INT(MPInSideSend )) ,&
@@ -199,7 +199,8 @@ SUBROUTINE FieldRestart()
MPI_TYPE = MPI_DOUBLE_PRECISION
CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT,iError)
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
- CALL MPI_ALLTOALLV(lambdaLB,counts_send,disp_send,MPI_STRUCT,lambdaLBTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(lambdaLB,counts_send,disp_send,MPI_STRUCT,lambdaLBTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
DEALLOCATE(lambdaLB)
@@ -287,7 +288,8 @@ SUBROUTINE FieldRestart()
MPI_TYPE = MPI_DOUBLE_PRECISION
CALL MPI_TYPE_CREATE_STRUCT(1,MPI_LENGTH,MPI_DISPLACEMENT,MPI_TYPE,MPI_STRUCT,iError)
CALL MPI_TYPE_COMMIT(MPI_STRUCT,iError)
- CALL MPI_ALLTOALLV(U,counts_send,disp_send,MPI_STRUCT,UTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_WORLD,iError)
+ CALL MPI_ALLTOALLV(U,counts_send,disp_send,MPI_STRUCT,UTmp,counts_recv,disp_recv,MPI_STRUCT,MPI_COMM_PICLAS,iError)
+ CALL MPI_TYPE_FREE(MPI_STRUCT,iError)
END ASSOCIATE
CALL MOVE_ALLOC(UTmp,U)
END IF ! ALLOCATED(U)
@@ -310,10 +312,10 @@ SUBROUTINE FieldRestart()
! ===========================================================================
IF(RestartNullifySolution)THEN ! Open the restart file and neglect the DG solution (only read particles if present)
SWRITE(UNIT_stdOut,*)'Restarting from File: ',TRIM(RestartFile),' (but without reading the DG solution)'
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
ELSE ! Use the solution in the restart file
SWRITE(UNIT_stdOut,*)'Restarting from File: ',TRIM(RestartFile)
- CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_WORLD)
+ CALL OpenDataFile(RestartFile,create=.FALSE.,single=.FALSE.,readOnly=.TRUE.,communicatorOpt=MPI_COMM_PICLAS)
! Read in time from restart file
!CALL ReadAttribute(File_ID,'Time',1,RealScalar=RestartTime)
! Read in state
diff --git a/src/timedisc/timedisc.f90 b/src/timedisc/timedisc.f90
index 734a97a2e..27ebbe332 100644
--- a/src/timedisc/timedisc.f90
+++ b/src/timedisc/timedisc.f90
@@ -90,12 +90,13 @@ SUBROUTINE TimeDisc()
USE MOD_HDF5_Output_Particles ,ONLY: FillParticleData
#endif /*PARTICLES*/
#ifdef PARTICLES
+USE MOD_RayTracing ,ONLY: RayTracing
!USE MOD_PICDepo ,ONLY: Deposition
USE MOD_Particle_Vars ,ONLY: DoImportIMDFile
#if USE_MPI
USE MOD_PICDepo_Vars ,ONLY: DepositionType
#endif /*USE_MPI*/
-USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptive
+USE MOD_Particle_Sampling_Vars ,ONLY: UseAdaptiveBC
USE MOD_Particle_Tracking_vars ,ONLY: tTracking,tLocalization,nTracks,MeasureTrackTime
#if (USE_MPI) && (USE_LOADBALANCE) && defined(PARTICLES)
USE MOD_DSMC_Vars ,ONLY: DSMC
@@ -123,6 +124,7 @@ SUBROUTINE TimeDisc()
#endif /*defined(MEASURE_MPI_WAIT)*/
#if defined(PARTICLES)
USE MOD_Particle_Analyze_Vars ,ONLY: CalcPointsPerDebyeLength,CalcPICTimeStep
+USE MOD_Part_Tools ,ONLY: ReduceMaxParticleNumber
#endif
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
@@ -202,6 +204,11 @@ SUBROUTINE TimeDisc()
! fill recordpoints buffer (first iteration)
!IF(RP_onProc) CALL RecordPoints(iter,t,forceSampling=.TRUE.)
+! Ray tracing
+#if defined(PARTICLES)
+IF(.NOT.DoRestart) CALL RayTracing()
+#endif /*defined(PARTICLES)*/
+
CALL PrintStatusLine(time,dt,tStart,tEnd,1)
#if defined(PARTICLES) && defined(CODE_ANALYZE)
@@ -217,7 +224,10 @@ SUBROUTINE TimeDisc()
CALL PerformAnalyze(time,FirstOrLastIter=.TRUE.,OutPutHDF5=.FALSE.)
#ifdef PARTICLES
-IF(DoImportIMDFile) CALL WriteIMDStateToHDF5() ! Write IMD particles to state file (and TTM if it exists)
+IF(DoImportIMDFile)THEN
+ CALL WriteIMDStateToHDF5() ! Write IMD particles to state file (and TTM if it exists)
+ IF(.NOT.DoRestart) RETURN
+END IF ! DoImportIMDFile
#endif /*PARTICLES*/
IF((.NOT.DoRestart).OR.FlushInitialState.OR.(.NOT.FILEEXISTS(TRIM(TIMESTAMP(TRIM(ProjectName)//'_State',time))//'.h5'))) THEN
#if defined(PARTICLES)
@@ -233,7 +243,7 @@ SUBROUTINE TimeDisc()
tTracking=0
tLocalization=0
END IF
-IF(CalcEMFieldOutput) CALL WriteElectroMagneticPICFieldToHDF5() ! Write magnetic field to file
+IF(CalcEMFieldOutput) CALL WriteElectroMagneticPICFieldToHDF5() ! Write magnetic field to file
#endif /*PARTICLES*/
! No computation needed if tEnd=tStart!
@@ -283,8 +293,6 @@ SUBROUTINE TimeDisc()
CALL TimeStep_DSMC()
#elif (PP_TimeDiscMethod==6)
CALL TimeStepByLSERK()
-#elif (PP_TimeDiscMethod==42)
- CALL TimeStep_DSMC_Debug() ! Reservoir and Debug
#elif (PP_TimeDiscMethod==100)
CALL TimeStepByEulerImplicit() ! O1 Euler Implicit
#elif (PP_TimeDiscMethod==120)
@@ -323,6 +331,8 @@ SUBROUTINE TimeDisc()
#else
CALL abort(__STAMP__,'Timedisc 50x only available for EQNSYS Poisson! PP_N=',IntInfoOpt=PP_N)
#endif /*USE_HDG*/
+#elif (PP_TimeDiscMethod==600)
+ CALL TimeStep_Radiation()
#endif
! calling the analyze routines
iter = iter+1
@@ -343,7 +353,7 @@ SUBROUTINE TimeDisc()
CALL PerformAnalyze(time,FirstOrLastIter=finalIter,OutPutHDF5=.FALSE.) ! analyze routines are not called here in last iter
#ifdef PARTICLES
! sampling of near adaptive boundary element values
- IF(UseAdaptive.OR.(nPorousBC.GT.0)) CALL AdaptiveBCSampling()
+ IF(UseAdaptiveBC.OR.(nPorousBC.GT.0)) CALL AdaptiveBCSampling()
#endif /*PARICLES*/
! Analysis (possible PerformAnalyze+WriteStateToHDF5 and/or LoadBalance)
@@ -493,6 +503,7 @@ SUBROUTINE TimeDisc()
IF(time.GE.tEnd)EXIT ! done, worst case: one additional time step
#ifdef PARTICLES
+ CALL ReduceMaxParticleNumber()
! Switch flag to false after the number of particles has been written to std out and before the time next step is started
GlobalNbrOfParticlesUpdated = .FALSE.
#endif /*PARTICLES*/
@@ -539,7 +550,7 @@ SUBROUTINE WriteInfoStdOut()
#if USE_MPI
NbrOfLostParticlesTotal_old_tmp = NbrOfLostParticlesTotal ! keep old value
! Allreduce is required because of the particle output to .h5 in which all processors must take place
- CALL MPI_ALLREDUCE(NbrOfLostParticles , NbrOfLostParticlesTotal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_WORLD , IERROR)
+ CALL MPI_ALLREDUCE(NbrOfLostParticles , NbrOfLostParticlesTotal , 1 , MPI_INTEGER , MPI_SUM , MPI_COMM_PICLAS , IERROR)
NbrOfLostParticlesTotal = NbrOfLostParticlesTotal + NbrOfLostParticlesTotal_old_tmp ! add old value
#else
NbrOfLostParticlesTotal = NbrOfLostParticlesTotal + NbrOfLostParticles
diff --git a/src/timedisc/timedisc_TimeStepByImplicitRK.f90 b/src/timedisc/timedisc_TimeStepByImplicitRK.f90
index 66e7db5a2..c94101fa2 100644
--- a/src/timedisc/timedisc_TimeStepByImplicitRK.f90
+++ b/src/timedisc/timedisc_TimeStepByImplicitRK.f90
@@ -93,7 +93,6 @@ SUBROUTINE TimeStepByImplicitRK()
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
USE MOD_Particle_MPI_Vars ,ONLY: PartMPIExchange
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#endif /*USE_MPI*/
USE MOD_PIC_Analyze ,ONLY: CalcDepositedCharge
USE MOD_part_tools ,ONLY: UpdateNextFreePosition
@@ -307,10 +306,10 @@ SUBROUTINE TimeStepByImplicitRK()
#endif /*USE_LOADBALANCE*/
IF(DoPrintConvInfo)THEN
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,nParts,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,nParts,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(nParts ,iPart,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(nParts ,iPart,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(A,I10)') ' SurfaceFlux-Particles: ',nParts
diff --git a/src/timedisc/timedisc_TimeStepByLSERK.f90 b/src/timedisc/timedisc_TimeStepByLSERK.f90
index 8dce149be..f64da0190 100644
--- a/src/timedisc/timedisc_TimeStepByLSERK.f90
+++ b/src/timedisc/timedisc_TimeStepByLSERK.f90
@@ -154,6 +154,7 @@ SUBROUTINE TimeStepByLSERK()
IF (PDM%ParticleInside(iPart)) THEN
Pt_temp( 1:3,iPart) = PartState(4:6,iPart)
PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart)*b_dt(iStage)
+ PDM%IsNewPart(iPart) = .FALSE.
! Don't push the velocity component of neutral particles!
IF (isPushParticle(iPart)) THEN
IF (CalcCoupledPower) CALL CalcCoupledPowerPart(iPart,'before')
@@ -166,8 +167,14 @@ SUBROUTINE TimeStepByLSERK()
ELSE
DO iPart=1,PDM%ParticleVecLength
IF (PDM%ParticleInside(iPart)) THEN
- Pt_temp( 1:3,iPart) = PartState(4:6,iPart) - RK_a(iStage) * Pt_temp(1:3,iPart)
- PartState(1:3,iPart) = PartState(1:3,iPart) + Pt_temp(1:3,iPart)*b_dt(iStage)
+ IF(.NOT.PDM%IsNewPart(iPart)) THEN
+ Pt_temp( 1:3,iPart) = PartState(4:6,iPart) - RK_a(iStage) * Pt_temp(1:3,iPart)
+ PartState(1:3,iPart) = PartState(1:3,iPart) + Pt_temp(1:3,iPart)*b_dt(iStage)
+ ELSE
+ Pt_temp( 1:3,iPart) = PartState(4:6,iPart)
+ PartState(1:3,iPart) = PartState(1:3,iPart)
+ PDM%IsNewPart(iPart) = .FALSE.
+ END IF
! Don't push the velocity component of neutral particles!
IF (isPushParticle(iPart)) THEN
IF (CalcCoupledPower) CALL CalcCoupledPowerPart(iPart,'before')
@@ -290,18 +297,15 @@ SUBROUTINE TimeStepByLSERK()
IF ((time.GE.DelayTime).OR.(time.EQ.0)) CALL UpdateNextFreePosition()
-IF (useDSMC) THEN
- IF (time.GE.DelayTime) THEN
+IF (time.GE.DelayTime) THEN
+ ! Direct Simulation Monte Carlo
+ IF (useDSMC) THEN
CALL DSMC_main()
-#if USE_LOADBALANCE
- CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
- IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
- CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
END IF
+ ! Split & Merge: Variable particle weighting
+ IF(UseSplitAndMerge) CALL SplitAndMerge()
END IF
+
#ifdef EXTRAE
CALL extrae_eventandcounters(int(9000001), int8(0))
#endif /*EXTRAE*/
diff --git a/src/timedisc/timedisc_TimeStepByRosenbrock.f90 b/src/timedisc/timedisc_TimeStepByRosenbrock.f90
index 0507f14c3..365202bf1 100644
--- a/src/timedisc/timedisc_TimeStepByRosenbrock.f90
+++ b/src/timedisc/timedisc_TimeStepByRosenbrock.f90
@@ -80,7 +80,6 @@ SUBROUTINE TimeStepByRosenbrock()
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
USE MOD_Particle_MPI_Vars ,ONLY: PartMPIExchange
-USE MOD_Particle_MPI_Vars ,ONLY: PartMPI
#endif /*USE_MPI*/
USE MOD_PIC_Analyze ,ONLY: CalcDepositedCharge
USE MOD_part_tools ,ONLY: UpdateNextFreePosition
@@ -232,10 +231,10 @@ SUBROUTINE TimeStepByRosenbrock()
#endif /*USE_LOADBALANCE*/
IF(DoPrintConvInfo)THEN
#if USE_MPI
- IF(PartMPI%MPIRoot)THEN
- CALL MPI_REDUCE(MPI_IN_PLACE,nParts,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ IF(MPIRoot)THEN
+ CALL MPI_REDUCE(MPI_IN_PLACE,nParts,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
ELSE
- CALL MPI_REDUCE(nParts ,iPart,1,MPI_INTEGER,MPI_SUM,0,PartMPI%COMM, IERROR)
+ CALL MPI_REDUCE(nParts ,iPart,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_PICLAS, IERROR)
END IF
#endif /*USE_MPI*/
SWRITE(UNIT_StdOut,'(A,I10)') ' SurfaceFlux-Particles: ',nParts
diff --git a/src/timedisc/timedisc_TimeStepPoisson.f90 b/src/timedisc/timedisc_TimeStepPoisson.f90
index 0554e30c7..a3b72ae15 100644
--- a/src/timedisc/timedisc_TimeStepPoisson.f90
+++ b/src/timedisc/timedisc_TimeStepPoisson.f90
@@ -44,8 +44,9 @@ SUBROUTINE TimeStepPoisson()
#ifdef PARTICLES
USE MOD_PICDepo ,ONLY: Deposition
USE MOD_PICInterpolation ,ONLY: InterpolateFieldToParticle
-USE MOD_Particle_Vars ,ONLY: PartState, Pt, LastPartPos,PEM, PDM, DelayTime
+USE MOD_Particle_Vars ,ONLY: PartState, Pt, LastPartPos,PEM, PDM, DelayTime, Species, PartSpecies
USE MOD_Particle_Vars ,ONLY: DoSurfaceFlux, DoForceFreeSurfaceFlux
+USE MOD_Particle_Vars ,ONLY: UseVarTimeStep, PartTimeStep, VarTimeStep
USE MOD_Particle_Analyze_Tools ,ONLY: CalcCoupledPowerPart
USE MOD_Particle_Analyze_Vars ,ONLY: CalcCoupledPower,PCoupl
#if (PP_TimeDiscMethod==509)
@@ -76,7 +77,7 @@ SUBROUTINE TimeStepPoisson()
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
INTEGER :: iPart
-REAL :: RandVal, dtFrac
+REAL :: RandVal, dtFrac, dtVar
#if USE_LOADBALANCE
REAL :: tLBStart ! load balance
#endif /*USE_LOADBALANCE*/
@@ -123,19 +124,26 @@ SUBROUTINE TimeStepPoisson()
IF (CalcCoupledPower) PCoupl = 0. ! if output of coupled power is active: reset PCoupl
DO iPart=1,PDM%ParticleVecLength
IF (PDM%ParticleInside(iPart)) THEN
- ! If coupled power output is active and particle carries charge, determine its kinetic energy and store in EDiff
+ ! Set the particle time step
+ IF (UseVarTimeStep) THEN
+ dtVar = dt * PartTimeStep(iPart)
+ ELSE
+ dtVar = dt
+ END IF
+ ! Set the species-specific time step
+ IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(iPart))%TimeStepFactor
IF (DoSurfaceFlux .AND. PDM%dtFracPush(iPart)) THEN !DoSurfaceFlux for compiler-optimization if .FALSE.
CALL RANDOM_NUMBER(RandVal)
- dtFrac = dt * RandVal
+ dtFrac = dtVar * RandVal
PDM%IsNewPart(iPart)=.FALSE. !no IsNewPart-treatment for surffluxparts
ELSE
- dtFrac = dt
+ dtFrac = dtVar
#if (PP_TimeDiscMethod==509)
IF (PDM%IsNewPart(iPart)) THEN
! Don't push the velocity component of neutral particles!
IF(isPushParticle(iPart))THEN
!-- v(n) => v(n-0.5) by a(n):
- PartState(4:6,iPart) = PartState(4:6,iPart) - Pt(1:3,iPart) * dt*0.5
+ PartState(4:6,iPart) = PartState(4:6,iPart) - Pt(1:3,iPart) * dtVar*0.5
END IF
PDM%IsNewPart(iPart)=.FALSE. !IsNewPart-treatment is now done
ELSE
@@ -146,6 +154,7 @@ SUBROUTINE TimeStepPoisson()
END IF
#endif /*(PP_TimeDiscMethod==509)*/
END IF
+ ! If coupled power output is active and particle carries charge, determine its kinetic energy and store in EDiff
IF (CalcCoupledPower) CALL CalcCoupledPowerPart(iPart,'before')
#if (PP_TimeDiscMethod==509)
IF (DoSurfaceFlux .AND. PDM%dtFracPush(iPart) .AND. .NOT.DoForceFreeSurfaceFlux) THEN
@@ -154,7 +163,7 @@ SUBROUTINE TimeStepPoisson()
! Don't push the velocity component of neutral particles!
IF(isPushParticle(iPart))THEN
!-- v(BC) => v(n+0.5) by a(BC):
- PartState(4:6,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * (dtFrac - dt*0.5)
+ PartState(4:6,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * (dtFrac - dtVar*0.5)
END IF
PDM%dtFracPush(iPart) = .FALSE.
ELSE IF (DoSurfaceFlux .AND. PDM%dtFracPush(iPart)) THEN !DoForceFreeSurfaceFlux
@@ -165,10 +174,10 @@ SUBROUTINE TimeStepPoisson()
! Don't push the velocity component of neutral particles!
IF(isPushParticle(iPart))THEN
!-- v(n-0.5) => v(n+0.5) by a(n):
- PartState(4:6,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * dt
+ PartState(4:6,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * dtVar
END IF
!-- x(n) => x(n+1) by v(n+0.5):
- PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dt
+ PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtVar
END IF
#else /*(PP_TimeDiscMethod==509)*/
!-- x(n) => x(n+1) by v(n):
@@ -231,8 +240,16 @@ SUBROUTINE TimeStepPoisson()
IF(DoInterpolation) CALL CalcPartRHS()
DO iPart=1,PDM%ParticleVecLength
IF (PDM%ParticleInside(iPart)) THEN
+ ! Set the particle time step
+ IF (UseVarTimeStep) THEN
+ dtVar = dt * PartTimeStep(iPart)
+ ELSE
+ dtVar = dt
+ END IF
+ ! Set the species-specific time step
+ IF(VarTimeStep%UseSpeciesSpecific) dtVar = dtVar * Species(PartSpecies(iPart))%TimeStepFactor
!-- v(n+0.5) => v(n+1) by a(n+1):
- velocityAtTime(1:3,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * dt*0.5
+ velocityAtTime(1:3,iPart) = PartState(4:6,iPart) + Pt(1:3,iPart) * dtVar*0.5
END IF
END DO
#ifdef EXTRAE
@@ -251,17 +268,13 @@ SUBROUTINE TimeStepPoisson()
IF ((time.GE.DelayTime).OR.(iter.EQ.0)) CALL UpdateNextFreePosition()
-IF (useDSMC) THEN
- IF (time.GE.DelayTime) THEN
+IF (time.GE.DelayTime) THEN
+ ! Direct Simulation Monte Carlo
+ IF (useDSMC) THEN
CALL DSMC_main()
-#if USE_LOADBALANCE
- CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
- IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
- CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
END IF
+ ! Split & Merge: Variable particle weighting
+ IF(UseSplitAndMerge) CALL SplitAndMerge()
END IF
#endif /*PARTICLES*/
diff --git a/src/timedisc/timedisc_TimeStepPoissonByBorisLeapfrog.f90 b/src/timedisc/timedisc_TimeStepPoissonByBorisLeapfrog.f90
index 9ffd5b3b4..3202d8148 100644
--- a/src/timedisc/timedisc_TimeStepPoissonByBorisLeapfrog.f90
+++ b/src/timedisc/timedisc_TimeStepPoissonByBorisLeapfrog.f90
@@ -263,18 +263,15 @@ SUBROUTINE TimeStepPoissonByBorisLeapfrog()
IF ((time.GE.DelayTime).OR.(iter.EQ.0)) CALL UpdateNextFreePosition()
-IF (useDSMC) THEN
- IF (time.GE.DelayTime) THEN
+IF (time.GE.DelayTime) THEN
+ ! Direct Simulation Monte Carlo
+ IF (useDSMC) THEN
CALL DSMC_main()
-#if USE_LOADBALANCE
- CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
- IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
- CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
END IF
+ ! Split & Merge: Variable particle weighting
+ IF(UseSplitAndMerge) CALL SplitAndMerge()
END IF
+
#ifdef EXTRAE
CALL extrae_eventandcounters(int(9000001), int8(0))
#endif /*EXTRAE*/
diff --git a/src/timedisc/timedisc_TimeStepPoissonByHigueraCary.f90 b/src/timedisc/timedisc_TimeStepPoissonByHigueraCary.f90
index 9c599e4ff..24c742a6a 100644
--- a/src/timedisc/timedisc_TimeStepPoissonByHigueraCary.f90
+++ b/src/timedisc/timedisc_TimeStepPoissonByHigueraCary.f90
@@ -251,18 +251,15 @@ SUBROUTINE TimeStepPoissonByHigueraCary()
IF ((time.GE.DelayTime).OR.(iter.EQ.0)) CALL UpdateNextFreePosition()
-IF (useDSMC) THEN
- IF (time.GE.DelayTime) THEN
+IF (time.GE.DelayTime) THEN
+ ! Direct Simulation Monte Carlo
+ IF (useDSMC) THEN
CALL DSMC_main()
-#if USE_LOADBALANCE
- CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
- IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
- CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
END IF
+ ! Split & Merge: Variable particle weighting
+ IF(UseSplitAndMerge) CALL SplitAndMerge()
END IF
+
#ifdef EXTRAE
CALL extrae_eventandcounters(int(9000001), int8(0))
#endif /*EXTRAE*/
diff --git a/src/timedisc/timedisc_TimeStepPoissonByLSERK.f90 b/src/timedisc/timedisc_TimeStepPoissonByLSERK.f90
index 0376e53a0..eaf2c8af7 100644
--- a/src/timedisc/timedisc_TimeStepPoissonByLSERK.f90
+++ b/src/timedisc/timedisc_TimeStepPoissonByLSERK.f90
@@ -369,17 +369,13 @@ SUBROUTINE TimeStepPoissonByLSERK()
#ifdef PARTICLES
IF ((time.GE.DelayTime).OR.(iter.EQ.0)) CALL UpdateNextFreePosition()
-IF (useDSMC) THEN
- IF (time.GE.DelayTime) THEN
+IF (time.GE.DelayTime) THEN
+ ! Direct Simulation Monte Carlo
+ IF (useDSMC) THEN
CALL DSMC_main()
-#if USE_LOADBALANCE
- CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
- IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
- CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
END IF
+ ! Split & Merge: Variable particle weighting
+ IF(UseSplitAndMerge) CALL SplitAndMerge()
END IF
#endif /*PARTICLES*/
diff --git a/src/timedisc/timedisc_TimeStep_BGK.f90 b/src/timedisc/timedisc_TimeStep_BGK.f90
index a8287a4e6..8c7979f9f 100644
--- a/src/timedisc/timedisc_TimeStep_BGK.f90
+++ b/src/timedisc/timedisc_TimeStep_BGK.f90
@@ -52,6 +52,7 @@ SUBROUTINE TimeStep_BGK()
#if USE_MPI
USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
USE MOD_Particle_MPI_Vars ,ONLY: DoParticleLatencyHiding
+USE MOD_Globals ,ONLY: CollectiveStop
#endif /*USE_MPI*/
USE MOD_BGK ,ONLY: BGK_main, BGK_DSMC_main
USE MOD_BGK_Vars ,ONLY: CoupledBGKDSMC,DoBGKCellAdaptation
@@ -150,10 +151,6 @@ SUBROUTINE TimeStep_BGK()
(Time.ge.(1-DSMC%TimeFracSamp)*TEnd) .OR. &
WriteMacroVolumeValues ) THEN
CALL UpdateNextFreePosition(.TRUE.) !postpone UNFP for CollisMode=0 to next IterDisplayStep or when needed for DSMC-Sampling
-ELSE IF (PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).GT.PDM%maxParticleNumber .OR. &
- PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).EQ.0) THEN
- ! gaps in PartState are not filled until next UNFP and array might overflow more easily!
- CALL abort(__STAMP__,'maximum nbr of particles reached!')
END IF
#if USE_MPI
@@ -161,8 +158,8 @@ SUBROUTINE TimeStep_BGK()
CALL MPIParticleSend(.TRUE.)
#endif /*USE_MPI*/
-IF(DoBGKCellAdaptation)THEN
- IF(Symmetry%Order.EQ.2)THEN
+IF(DoBGKCellAdaptation.OR.(CoupledBGKDSMC.AND.DSMC%UseOctree)) THEN
+ IF(Symmetry%Order.EQ.2) THEN
DO iPart=1,PDM%ParticleVecLength
IF (PDM%ParticleInside(iPart)) THEN
! Store reference position in LastPartPos array to reduce memory demand
@@ -177,7 +174,7 @@ SUBROUTINE TimeStep_BGK()
END IF
END DO
END IF ! Symmetry%Order.EQ.2
-END IF ! DoBGKCellAdaptation
+END IF ! DoBGKCellAdaptation.OR.(CoupledBGKDSMC.AND.DSMC%UseOctree)
IF(UseRotRefFrame) THEN
DO iPart = 1,PDM%ParticleVecLength
@@ -198,17 +195,19 @@ SUBROUTINE TimeStep_BGK()
#if USE_MPI
IF(DoParticleLatencyHiding)THEN
- IF (CoupledBGKDSMC) THEN
- CALL BGK_DSMC_main(1)
- ELSE
+ ! IF (CoupledBGKDSMC) THEN
+ ! CALL BGK_DSMC_main(1)
+ ! ELSE
CALL BGK_main(1)
- END IF
+ ! END IF
END IF ! DoParticleLatencyHiding
! finish communication
CALL MPIParticleRecv(.TRUE.)
#endif /*USE_MPI*/
+! After MPI communication of particles, call UNFP including the MPI particles
+CALL UpdateNextFreePosition()
!#ifdef EXTRAE
!CALL extrae_eventandcounters(int(9000001), int8(51))
@@ -219,11 +218,11 @@ SUBROUTINE TimeStep_BGK()
!#endif /*EXTRAE*/
#if USE_MPI
IF(DoParticleLatencyHiding)THEN
- IF (CoupledBGKDSMC) THEN
- CALL BGK_DSMC_main(2)
- ELSE
+ ! IF (CoupledBGKDSMC) THEN
+ ! CALL BGK_DSMC_main(2)
+ ! ELSE
CALL BGK_main(2)
- END IF
+ ! END IF
ELSE
#endif /*USE_MPI*/
IF (CoupledBGKDSMC) THEN
diff --git a/src/timedisc/timedisc_TimeStep_DSMC.f90 b/src/timedisc/timedisc_TimeStep_DSMC.f90
index 13d5041af..0be6be9d0 100644
--- a/src/timedisc/timedisc_TimeStep_DSMC.f90
+++ b/src/timedisc/timedisc_TimeStep_DSMC.f90
@@ -52,6 +52,7 @@ SUBROUTINE TimeStep_DSMC()
USE MOD_SurfaceModel_Vars ,ONLY: nPorousBC
USE MOD_vMPF ,ONLY: SplitAndMerge
USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame
+USE MOD_part_pos_and_velo ,ONLY: SetParticleVelocity
USE MOD_Part_Tools ,ONLY: InRotRefFrameCheck
USE MOD_Part_Tools ,ONLY: CalcPartSymmetryPos
#if USE_MPI
@@ -77,6 +78,19 @@ SUBROUTINE TimeStep_DSMC()
REAL :: tLBStart
#endif /*USE_LOADBALANCE*/
!===================================================================================================================================
+! for reservoir simulation: no surface flux, particle push, tracking, ...
+IF (DSMC%ReservoirSimu) THEN ! fix grid should be defined for reservoir simu
+ CALL UpdateNextFreePosition()
+ CALL DSMC_main()
+ IF(DSMC%CompareLandauTeller) THEN
+ DO iPart=1,PDM%ParticleVecLength
+ PDM%nextFreePosition(iPart)=iPart
+ END DO
+ CALL SetParticleVelocity(1,1,PDM%ParticleVecLength)
+ END IF
+ RETURN
+END IF
+
#if USE_LOADBALANCE
CALL LBStartTime(tLBStart)
#endif /*USE_LOADBALANCE*/
@@ -193,10 +207,6 @@ SUBROUTINE TimeStep_DSMC()
(Time.ge.(1-DSMC%TimeFracSamp)*TEnd) .OR. &
WriteMacroVolumeValues.OR.WriteMacroSurfaceValues ) THEN
CALL UpdateNextFreePosition() !postpone UNFP for CollisMode=0 to next IterDisplayStep or when needed for DSMC-Sampling
-ELSE IF (PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).GT.PDM%maxParticleNumber .OR. &
- PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).EQ.0) THEN
- ! gaps in PartState are not filled until next UNFP and array might overflow more easily!
- CALL abort(__STAMP__,'maximum nbr of particles reached!')
END IF
IF(DSMC%UseOctree)THEN
@@ -237,16 +247,9 @@ SUBROUTINE TimeStep_DSMC()
CALL DSMC_main()
-#if USE_LOADBALANCE
-CALL LBStartTime(tLBStart)
-#endif /*USE_LOADBALANCE*/
-
+! Split & Merge: Variable particle weighting
IF(UseSplitAndMerge) CALL SplitAndMerge()
-#if USE_LOADBALANCE
-CALL LBPauseTime(LB_DSMC,tLBStart)
-#endif /*USE_LOADBALANCE*/
-
END SUBROUTINE TimeStep_DSMC
diff --git a/src/timedisc/timedisc_TimeStep_DSMC_Debug.f90 b/src/timedisc/timedisc_TimeStep_DSMC_Debug.f90
deleted file mode 100644
index 0ed714231..000000000
--- a/src/timedisc/timedisc_TimeStep_DSMC_Debug.f90
+++ /dev/null
@@ -1,135 +0,0 @@
-!==================================================================================================================================
-! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
-!
-! This file is part of PICLas (piclas.boltzplatz.eu/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
-! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
-! of the License, or (at your option) any later version.
-!
-! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
-!
-! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
-!==================================================================================================================================
-#include "piclas.h"
-
-
-#if (PP_TimeDiscMethod==42)
-MODULE MOD_TimeStep
-!===================================================================================================================================
-! Module for the Temporal discretization
-!===================================================================================================================================
-! MODULES
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-PRIVATE
-!-----------------------------------------------------------------------------------------------------------------------------------
-PUBLIC :: TimeStep_DSMC_Debug
-!===================================================================================================================================
-CONTAINS
-
-
-SUBROUTINE TimeStep_DSMC_Debug()
-!===================================================================================================================================
-! Hesthaven book, page 64
-! Low-Storage Runge-Kutta integration of degree 4 with 5 stages.
-! This procedure takes the current time t, the time step dt and the solution at
-! the current time U(t) and returns the solution at the next time level.
-!===================================================================================================================================
-! MODULES
-USE MOD_PreProc
-USE MOD_Globals ,ONLY: abort
-USE MOD_TimeDisc_Vars ,ONLY: dt
-#ifdef PARTICLES
-USE MOD_Particle_Vars ,ONLY: DoSurfaceFlux
-USE MOD_Particle_Vars ,ONLY: PartState, LastPartPos, PDM,PEM
-USE MOD_DSMC_Vars ,ONLY: DSMC
-USE MOD_DSMC ,ONLY: DSMC_main
-USE MOD_part_tools ,ONLY: UpdateNextFreePosition
-USE MOD_part_emission ,ONLY: ParticleInserting
-USE MOD_part_pos_and_velo ,ONLY: SetParticleVelocity
-USE MOD_Particle_SurfFlux ,ONLY: ParticleSurfaceflux
-USE MOD_Particle_Tracking ,ONLY: PerformTracking
-USE MOD_Particle_Tracking_vars ,ONLY: tTracking,MeasureTrackTime
-#if USE_MPI
-USE MOD_Particle_MPI ,ONLY: IRecvNbOfParticles, MPIParticleSend,MPIParticleRecv,SendNbOfparticles
-#endif /*USE_MPI*/
-#endif
-! IMPLICIT VARIABLE HANDLING
-IMPLICIT NONE
-!-----------------------------------------------------------------------------------------------------------------------------------
-! INPUT VARIABLES
-!-----------------------------------------------------------------------------------------------------------------------------------
-! LOCAL VARIABLES
-INTEGER :: iPart
-REAL :: timeStart, timeEnd, RandVal, dtFrac
-!===================================================================================================================================
-IF(DSMC%UseOctree) CALL abort(__STAMP__,'Particles-DSMC-UseOctree = T not allowed for RESERVOIR simulation')
-
-IF (DSMC%ReservoirSimu) THEN ! fix grid should be defined for reservoir simu
-
- CALL UpdateNextFreePosition()
-
- CALL DSMC_main()
-
- IF(DSMC%CompareLandauTeller) THEN
- DO iPart=1,PDM%ParticleVecLength
- PDM%nextFreePosition(iPart)=iPart
- END DO
- CALL SetParticleVelocity(1,1,PDM%ParticleVecLength)
- END IF
-ELSE
- IF (DoSurfaceFlux) THEN
- CALL ParticleSurfaceflux()
- DO iPart=1,PDM%ParticleVecLength
- IF (PDM%ParticleInside(iPart)) THEN
- IF (.NOT.PDM%dtFracPush(iPart)) THEN
- LastPartPos(1:3,iPart)=PartState(1:3,iPart)
- PEM%LastGlobalElemID(iPart)=PEM%GlobalElemID(iPart)
- PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dt
- ELSE !dtFracPush (SurfFlux): LastPartPos and LastElem already set!
- CALL RANDOM_NUMBER(RandVal)
- dtFrac = dt * RandVal
- PartState(1:3,iPart) = PartState(1:3,iPart) + PartState(4:6,iPart) * dtFrac
- PDM%dtFracPush(iPart) = .FALSE.
- END IF
- END IF
- END DO
- ELSE
- LastPartPos(1:3,1:PDM%ParticleVecLength)=PartState(1:3,1:PDM%ParticleVecLength)
- ! bugfix if more than 2.x mio (2000001) particle per process
- ! tested with 64bit Ubuntu 12.04 backports
- DO iPart = 1, PDM%ParticleVecLength
- PEM%LastGlobalElemID(iPart)=PEM%GlobalElemID(iPart)
- END DO
- !PEM%LastGlobalElemID(1:PDM%ParticleVecLength)=PEM%GlobalElemID(1:PDM%ParticleVecLength)
- PartState(1:3,1:PDM%ParticleVecLength) = PartState(1:3,1:PDM%ParticleVecLength) + PartState(4:6,1:PDM%ParticleVecLength) * dt
- END IF
-#if USE_MPI
- ! open receive buffer for number of particles
- CALL IRecvNbOfParticles()
-#endif /*USE_MPI*/
- IF(MeasureTrackTime) CALL CPU_TIME(TimeStart)
- ! actual tracking
- CALL PerformTracking()
- IF(MeasureTrackTime) THEN
- CALL CPU_TIME(TimeEnd)
- tTracking=tTracking+TimeEnd-TimeStart
- END IF
-#if USE_MPI
- ! send number of particles
- CALL SendNbOfParticles()
- ! finish communication of number of particles and send particles
- CALL MPIParticleSend()
- ! finish communication
- CALL MPIParticleRecv()
-#endif /*USE_MPI*/
- CALL ParticleInserting()
- CALL UpdateNextFreePosition()
- CALL DSMC_main()
-END IF
-
-END SUBROUTINE TimeStep_DSMC_Debug
-
-
-END MODULE MOD_TimeStep
-#endif
diff --git a/src/timedisc/timedisc_TimeStep_FPFlow.f90 b/src/timedisc/timedisc_TimeStep_FPFlow.f90
index 315969555..9bc410564 100644
--- a/src/timedisc/timedisc_TimeStep_FPFlow.f90
+++ b/src/timedisc/timedisc_TimeStep_FPFlow.f90
@@ -124,11 +124,6 @@ SUBROUTINE TimeStep_FPFlow()
(Time.ge.(1-DSMC%TimeFracSamp)*TEnd) .OR. &
WriteMacroVolumeValues ) THEN
CALL UpdateNextFreePosition() !postpone UNFP for CollisMode=0 to next IterDisplayStep or when needed for DSMC-Sampling
-ELSE IF (PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).GT.PDM%maxParticleNumber .OR. &
- PDM%nextFreePosition(PDM%CurrentNextFreePosition+1).EQ.0) THEN
- CALL abort(&
-__STAMP__,&
-'maximum nbr of particles reached!') !gaps in PartState are not filled until next UNFP and array might overflow more easily!
END IF
IF (CoupledFPDSMC) THEN
diff --git a/src/timedisc/timedisc_TimeStep_Radiation.f90 b/src/timedisc/timedisc_TimeStep_Radiation.f90
new file mode 100644
index 000000000..9ceff30a0
--- /dev/null
+++ b/src/timedisc/timedisc_TimeStep_Radiation.f90
@@ -0,0 +1,53 @@
+!==================================================================================================================================
+! Copyright (c) 2010 - 2018 Prof. Claus-Dieter Munz and Prof. Stefanos Fasoulas
+!
+! This file is part of PICLas (gitlab.com/piclas/piclas). PICLas is free software: you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3
+! of the License, or (at your option) any later version.
+!
+! PICLas is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3.0 for more details.
+!
+! You should have received a copy of the GNU General Public License along with PICLas. If not, see .
+!==================================================================================================================================
+#include "piclas.h"
+
+
+#if (PP_TimeDiscMethod==600)
+MODULE MOD_TimeStep
+!===================================================================================================================================
+! Module for the Temporal discretization
+!===================================================================================================================================
+! MODULES
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+PRIVATE
+!-----------------------------------------------------------------------------------------------------------------------------------
+PUBLIC :: TimeStep_Radiation
+!===================================================================================================================================
+CONTAINS
+
+SUBROUTINE TimeStep_Radiation()
+!===================================================================================================================================
+!> Radiation Solver and Radiative Transfer Solver
+!===================================================================================================================================
+! MODULES
+USE MOD_RadTransport, ONLY: RadTrans_main
+USE MOD_RadTrans_Output, ONLY: WriteRadiationToHDF5
+! IMPLICIT VARIABLE HANDLING
+IMPLICIT NONE
+!-----------------------------------------------------------------------------------------------------------------------------------
+! INPUT VARIABLES
+!-----------------------------------------------------------------------------------------------------------------------------------
+! LOCAL VARIABLES
+
+!===================================================================================================================================
+
+CALL RadTrans_main()
+CALL WriteRadiationToHDF5()
+
+END SUBROUTINE TimeStep_Radiation
+
+
+END MODULE MOD_TimeStep
+#endif
diff --git a/src/timedisc/timedisc_init.f90 b/src/timedisc/timedisc_init.f90
index 971ac1992..c9ec8e387 100644
--- a/src/timedisc/timedisc_init.f90
+++ b/src/timedisc/timedisc_init.f90
@@ -200,8 +200,6 @@ SUBROUTINE InitTimeDisc()
SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: Direct Simulation Monte Carlo (DSMC)'
#elif (PP_TimeDiscMethod==6)
SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: LSERK4-14 '
-#elif (PP_TimeDiscMethod==42)
- SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: DSMC Reservoir and Debug'
#elif (PP_TimeDiscMethod==120)
SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: Heun/Crank-Nicolson1-2-2'
#elif (PP_TimeDiscMethod==121)
@@ -239,7 +237,9 @@ SUBROUTINE InitTimeDisc()
SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: Boris-Leapfrog, Poisson'
#elif (PP_TimeDiscMethod==509)
SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: Leapfrog, Poisson'
-# endif
+#elif (PP_TimeDiscMethod==600)
+ SWRITE(UNIT_stdOut,'(A)') ' Method of time integration: Radiation'
+#endif
RKdtFrac = 1.
RKdtFracTotal = 1.
@@ -365,7 +365,9 @@ SUBROUTINE UpdateTimeStep()
#endif /*USE_LOADBALANCE*/
#if (PP_TimeDiscMethod==509)
USE MOD_TimeDisc_Vars ,ONLY: iter,dt_old
+#if USE_MPI
USE MOD_Globals ,ONLY: MPIRoot
+#endif /*USE_MPI*/
#endif /*(PP_TimeDiscMethod==509)*/
! IMPLICIT VARIABLE HANDLING
IMPLICIT NONE
diff --git a/src/timedisc/timedisc_vars.f90 b/src/timedisc/timedisc_vars.f90
index 199967af8..fed719aac 100644
--- a/src/timedisc/timedisc_vars.f90
+++ b/src/timedisc/timedisc_vars.f90
@@ -100,7 +100,7 @@ MODULE MOD_TimeDisc_Vars
#endif /*PP_NodeType*/
#endif
-#if ((PP_TimeDiscMethod==4) || (PP_TimeDiscMethod==42))
+#if ((PP_TimeDiscMethod==4))
INTEGER,PARAMETER :: nRKStages=1
#endif
diff --git a/tools/Setup_ModuleEnv/InstallGCC.sh b/tools/Setup_ModuleEnv/InstallGCC.sh
index ca83abe91..c186f1166 100755
--- a/tools/Setup_ModuleEnv/InstallGCC.sh
+++ b/tools/Setup_ModuleEnv/InstallGCC.sh
@@ -94,7 +94,8 @@ fi
#GCCVERSION='12.2.0'
# Check requirements and update the pre-requisites inquiry below if necessary
-GCCVERSION='13.1.0'
+#GCCVERSION='13.1.0'
+GCCVERSION='13.2.0'
# --------------------------------------------------------------------------------------------------
# Check pre-requisites
diff --git a/tools/Setup_ModuleEnv/InstallHDF5.sh b/tools/Setup_ModuleEnv/InstallHDF5.sh
index 3bd9bee58..780722d76 100755
--- a/tools/Setup_ModuleEnv/InstallHDF5.sh
+++ b/tools/Setup_ModuleEnv/InstallHDF5.sh
@@ -63,16 +63,37 @@ do
then
LOADMODULES=0
# Set desired versions
- USECOMPILERVERSION=13.1.0
- USEMPIVERSION=4.1.5
+
+ # GCC
+ #USECOMPILERVERSION=13.1.0
+ USECOMPILERVERSION=13.2.0
+
+ # OpenMPI
+ #MPINAMES='openmpi'
+ #USEMPIVERSION=4.1.5
+
+ # MPICH
+ MPINAMES='mpich'
+ USEMPIVERSION=4.1.2
+
+ # MPICH "debug", which uses MPICH installation with --with-device=ch3:sock.
+ # This will use the older ch3:sock channel that does not busy poll.
+ # This channel will be slower for intra-node communication, but it will perform much better in the oversubscription scenario.
+ #MPINAMES='mpich-debug'
+ #USEMPIVERSION=4.1.2
+
# Force --rerun via 'set'
echo ""
- echo "Running '-m' with GCC $USECOMPILERVERSION and OpenMPI $USEMPIVERSION"
+ echo "Running '-m' with GCC $USECOMPILERVERSION and $MPINAMES $USEMPIVERSION"
set -- -rerun
break
fi
done
+if [[ $LOADMODULES -eq 1 ]]; then
+ MPINAMES='openmpi mpich mpich-debug'
+fi
+
NBROFCORES=$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}')
INSTALLDIR=/opt
SOURCESDIR=/opt/sources
@@ -105,7 +126,6 @@ TARFILE=${SOURCESDIR}/hdf5-${HDF5VERSION}.tar.gz
# Change to sources directors
cd ${SOURCESDIR}
-pwd
echo -e "Download HF5 version ${GREEN}${HDF5VERSION}${NC}."
read -p "Press [Enter] to continue or [Crtl+c] to abort!"
@@ -239,7 +259,6 @@ for WHICHCOMPILER in ${COMPILERNAMES}; do
# ============================================================================================================================================================================
#--- build hdf5 with mpi
# ============================================================================================================================================================================
- MPINAMES='openmpi mpich'
for WHICHMPI in ${MPINAMES}; do
echo "${GREEN} $WHICHMPI ------------------------------------------------------------------------------${NC}"
if [ ! -d "${INSTALLDIR}/modules/modulefiles/libraries/hdf5/${HDF5VERSION}/${WHICHCOMPILER}/${COMPILERVERSION}/${WHICHMPI}" ]; then
diff --git a/tools/Setup_ModuleEnv/InstallHOPR.sh b/tools/Setup_ModuleEnv/InstallHOPR.sh
index 43c12a44d..a6e3eba14 100755
--- a/tools/Setup_ModuleEnv/InstallHOPR.sh
+++ b/tools/Setup_ModuleEnv/InstallHOPR.sh
@@ -79,6 +79,8 @@ load_module () {
# Check command line arguments
RERUNMODE=0
LOADMODULES=1
+# default to openmpi
+WHICHMPI='openmpi'
for ARG in "$@"
do
@@ -105,14 +107,35 @@ do
#GCCVERSION=10.1.0
#GCCVERSION=10.2.0
#GCCVERSION=11.2.0
- GCCVERSION=13.1.0
+ #GCCVERSION=13.1.0
+ GCCVERSION=13.2.0
#OPENMPIVERSION=3.1.4
#OPENMPIVERSION=4.0.1
#OPENMPIVERSION=4.0.2
#OPENMPIVERSION=3.1.6
#OPENMPIVERSION=4.1.1
- OPENMPIVERSION=4.1.5
+ #OPENMPIVERSION=4.1.5
+
+ MPICHVERSION=4.1.2
+
+ # chose which mpi you want to have installed (openmpi or mpich), default is openmpi
+ if [[ -n ${MPICHVERSION} ]]; then
+ # Set mpich or mpich-debug
+ # MPICH "debug", which uses MPICH installation with --with-device=ch3:sock.
+ # This will use the older ch3:sock channel that does not busy poll.
+ # This channel will be slower for intra-node communication, but it will perform much better in the oversubscription scenario.
+ WHICHMPI='mpich'
+ #WHICHMPI='mpich-debug'
+ MPIVERSION=${MPICHVERSION}
+ else
+ if [[ -z ${OPENMPIVERSION} ]]; then
+ echo "${RED}ERROR: Set either OPENMPIVERSION or MPICHVERSION in InstallPETSc.sh when running with '-m'${NC}. Exit."
+ exit
+ else
+ MPIVERSION=${OPENMPIVERSION}
+ fi
+ fi
#HDF5VERSION=1.10.5
#HDF5VERSION=1.10.6
@@ -159,14 +182,14 @@ if [[ -n $(module purge 2>&1) ]]; then
exit
fi
-# take the first gcc compiler installed with first compatible openmpi and hdf5
+# take the first gcc compiler installed with first compatible openmpi/mpich and hdf5
echo " "
if [[ $LOADMODULES -eq 1 ]]; then
CMAKEVERSION=$(ls ${MODULESDIR}/utilities/cmake/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
GCCVERSION=$(ls ${MODULESDIR}/compilers/gcc/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
- OPENMPIVERSION=$(ls ${MODULESDIR}/MPI/openmpi/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
+ MPIVERSION=$(ls ${MODULESDIR}/MPI/${WHICHMPI}/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
HDF5VERSION=$(ls ${MODULESDIR}/libraries/hdf5/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
- echo -e "Modules found automatically.\n\nCMAKEVERSION=${CMAKEVERSION}\nGCCVERSION=${GCCVERSION}\nOPENMPIVERSION=${OPENMPIVERSION}\nHDF5VERSION=${HDF5VERSION}\n\nWARNING: The combination might not be possible!"
+ echo -e "Modules found automatically.\n\nCMAKEVERSION=${CMAKEVERSION}\nGCCVERSION=${GCCVERSION}\n${WHICHMPI}-MPIVERSION=${MPIVERSION}\nHDF5VERSION=${HDF5VERSION}\n\nWARNING: The combination might not be possible!"
if [[ ${RERUNMODE} -eq 0 ]]; then
read -p "Press [Enter] to continue or [Crtl+c] to abort!"
fi
@@ -175,11 +198,11 @@ else
fi
check_module "cmake" "${CMAKEVERSION}"
-check_module "gcc " "${GCCVERSION}"
-check_module "mpi " "${OPENMPIVERSION}"
-check_module "hdf5 " "${HDF5VERSION}"
+check_module "gcc" "${GCCVERSION}"
+check_module "${WHICHMPI}" "${MPIVERSION}"
+check_module "hdf5" "${HDF5VERSION}"
-HOPRMODULEFILEDIR=${MODULESDIR}/utilities/hopr/${HOPRVERSION}/gcc/${GCCVERSION}/openmpi/${OPENMPIVERSION}/hdf5
+HOPRMODULEFILEDIR=${MODULESDIR}/utilities/hopr/${HOPRVERSION}/gcc/${GCCVERSION}/${WHICHMPI}/${MPIVERSION}/hdf5
MODULEFILE=${HOPRMODULEFILEDIR}/${HDF5VERSION}
# if no HOPR module for this compiler found, install HOPR and create module
@@ -190,8 +213,8 @@ if [ ! -e "${MODULEFILE}" ]; then
module purge
load_module "cmake/${CMAKEVERSION}"
load_module "gcc/${GCCVERSION}"
- load_module "openmpi/${OPENMPIVERSION}/gcc/${GCCVERSION}"
- load_module "hdf5/${HDF5VERSION}/gcc/${GCCVERSION}/openmpi/${OPENMPIVERSION}"
+ load_module "${WHICHMPI}/${MPIVERSION}/gcc/${GCCVERSION}"
+ load_module "hdf5/${HDF5VERSION}/gcc/${GCCVERSION}/${WHICHMPI}/${MPIVERSION}"
module list
echo " "
echo -e "$GREEN""Important: If the compilation step fails, run the script again and if it still fails \n1) try compiling single, .i.e., remove -j from make -j or \n2) try make -j 2 (not all available threads)$NC"
@@ -202,7 +225,7 @@ if [ ! -e "${MODULEFILE}" ]; then
fi
# Install destination
- HOPRINSTALLDIR=/opt/hopr/${HOPRVERSION}/gcc-${GCCVERSION}/openmpi-${OPENMPIVERSION}/hdf5-${HDF5VERSION}
+ HOPRINSTALLDIR=/opt/hopr/${HOPRVERSION}/gcc-${GCCVERSION}/${WHICHMPI}-${MPIVERSION}/hdf5-${HDF5VERSION}
# Create and change to install directory
mkdir -p ${HOPRINSTALLDIR}
@@ -308,9 +331,10 @@ if [ ! -e "${MODULEFILE}" ]; then
sed -i 's/hoprversion/'${HOPRVERSION}'/gI' ${MODULEFILE}
sed -i 's/CMAKEVERSIONFLAG/'${CMAKEVERSION}'/gI' ${MODULEFILE}
sed -i 's/GCCVERSIONFLAG/'${GCCVERSION}'/gI' ${MODULEFILE}
- sed -i 's/MPIVERSIONFLAG/'${OPENMPIVERSION}'/gI' ${MODULEFILE}
+ sed -i 's/MPIVERSIONFLAG/'${MPIVERSION}'/gI' ${MODULEFILE}
sed -i 's/HDF5VERSIONFLAG/'${HDF5VERSION}'/gI' ${MODULEFILE}
sed -i 's\HOPRTOPDIR\'${HOPRBUILDDIR}'\gI' ${MODULEFILE}
+ sed -i 's\HOPRWHICHMPI\'${WHICHMPI}'\gI' ${MODULEFILE}
else
echo -e "$RED""No module file created for HOPR-${HOPRVERSION} for GCC-${GCCVERSION}$NC"
echo -e "$RED""no installation found in ${HOPRBUILDDIR}/bin$NC"
diff --git a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh
index fa5e37843..66d20d13c 100755
--- a/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh
+++ b/tools/Setup_ModuleEnv/InstallMPIallCOMPILERS.sh
@@ -46,7 +46,9 @@ fi
# --------------------------------------------------------------------------------------------------
NBROFCORES=$(grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}')
# chose which mpi you want to have installed (openmpi or mpich)
-WHICHMPI=openmpi
+#WHICHMPI=openmpi
+WHICHMPI=mpich
+#WHICHMPI=mpich-debug
# choose for which compilers mpi is build (gcc or intel)
WHICHCOMPILER=gcc
@@ -59,6 +61,7 @@ if [[ ! -f ${TEMPLATEPATH} ]]; then
exit
fi
+CONFIGSUFFIX=''
if [ "${WHICHMPI}" == "openmpi" ]; then
# DOWNLOAD and INSTALL OPENMPI (example OpenMPI-2.1.6)
#MPIVERSION=2.1.6
@@ -72,13 +75,21 @@ if [ "${WHICHMPI}" == "openmpi" ]; then
MPIVERSION=4.1.5
elif [ "${WHICHMPI}" == "mpich" ]; then
# DOWNLOAD and INSTALL MPICH (example mpich-3.2.0)
- MPIVERSION=3.2
+ #MPIVERSION=3.2
+ MPIVERSION=4.1.2
+elif [ "${WHICHMPI}" == "mpich-debug" ]; then
+ # DOWNLOAD and INSTALL MPICH (example mpich-3.2.0)
+ #MPIVERSION=3.2
+ MPIVERSION=4.1.2
+ CONFIGSUFFIX='--with-device=ch3:sock'
else
echo -e "${RED}ERROR: Setting is neither 'openmpi' nor 'mpich'${NC}"
echo -e "${RED}ERROR: no mpi installed will be installed. Exit.${NC}"
exit
fi
+WHICHMPISHORT=$(echo $WHICHMPI | cut -d "-" -f1)
+WHICHMPIDEBUG=$(echo $WHICHMPI | cut -d "-" -f2)
MPIINSTALLDIR=${INSTALLDIR}/${WHICHMPI}/${MPIVERSION}
COMPILERPREFIX=compilers/ # required for modules 5.0.0
COMPILERPREFIX=
@@ -103,6 +114,7 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
MPIMODULEFILE=${MPIMODULEFILEDIR}/${COMPILERVERSION}
BUILDDIR=${SOURCESDIR}/${WHICHMPI}-${MPIVERSION}/build_${WHICHCOMPILER}-${COMPILERVERSION}
TARFILE=${SOURCESDIR}/${WHICHMPI}-${MPIVERSION}.tar.gz
+ TARFILESHORT=${SOURCESDIR}/${WHICHMPISHORT}-${MPIVERSION}.tar.gz
# Remove INSTALL module directory during re-run
if [[ -n ${1} ]]; then
@@ -144,21 +156,21 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
cd ${SOURCESDIR}
# Download tar.gz file
- if [[ ! -f ${TARFILE} ]]; then
- if [ "${WHICHMPI}" == "openmpi" ]; then
+ if [[ ! -f ${TARFILESHORT} ]]; then
+ if [ "${WHICHMPISHORT}" == "openmpi" ]; then
wget "https://www.open-mpi.org/software/ompi/v${MPIVERSION%.*}/downloads/openmpi-${MPIVERSION}.tar.gz"
- elif [ "${WHICHMPI}" == "mpich" ]; then
+ elif [ "${WHICHMPISHORT}" == "mpich" ]; then
wget "http://www.mpich.org/static/downloads/${MPIVERSION}/mpich-${MPIVERSION}.tar.gz"
fi
fi
# Check if tar.gz file was correctly downloaded
- if [[ ! -f ${TARFILE} ]]; then
- if [ "${WHICHMPI}" == "openmpi" ]; then
+ if [[ ! -f ${TARFILESHORT} ]]; then
+ if [ "${WHICHMPISHORT}" == "openmpi" ]; then
echo -e "${RED}no mpi install-file downloaded for OpenMPI-${MPIVERSION}${NC}"
echo -e "${RED}check if https://www.open-mpi.org/software/ompi/v${MPIVERSION%.*}/downloads/openmpi-${MPIVERSION}.tar.gz exists${NC}"
break
- elif [ "${WHICHMPI}" == "mpich" ]; then
+ elif [ "${WHICHMPISHORT}" == "mpich" ]; then
echo -e "${RED}no mpi install-file downloaded for MPICH-${MPIVERSION}${NC}"
echo -e "${RED}check if http://www.mpich.org/static/downloads/${MPIVERSION}/mpich-${MPIVERSION}.tar.gz exists${NC}"
break
@@ -166,7 +178,11 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
fi
# Extract tar.gz file
- tar -xzf ${WHICHMPI}-${MPIVERSION}.tar.gz
+ #tar -xzf ${WHICHMPISHORT}-${MPIVERSION}.tar.gz
+ if [ "${WHICHMPIDEBUG}" == "debug" ]; then
+ mv ${TARFILESHORT} ${TARFILE}
+ fi
+ tar -xzf ${TARFILE}
# Check if extraction failed
if [ ${PIPESTATUS[0]} -ne 0 ]; then
@@ -189,11 +205,11 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
# Change to build directory
cd ${BUILDDIR}
- # Configure setup
+ # Configure setup for openmpi or mpich using the same command
if [ "${WHICHCOMPILER}" == "gcc" ]; then
- ../configure --prefix=${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION} CC=$(which gcc) CXX=$(which g++) FC=$(which gfortran)
+ ../configure ${CONFIGSUFFIX} --prefix=${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION} CC=$(which gcc) CXX=$(which g++) FC=$(which gfortran)
elif [ "${WHICHCOMPILER}" == "intel" ]; then
- ../configure --prefix=${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION} CC=$(which icc) CXX=$(which icpc) FC=$(which ifort)
+ ../configure ${CONFIGSUFFIX} --prefix=${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION} CC=$(which icc) CXX=$(which icpc) FC=$(which ifort)
fi
# Compile source files with NBROFCORES threads
@@ -208,7 +224,7 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
make install 2>&1 | tee install.out
fi
- # Create modulefile if installation seems successful (check if mpicc, mpicxx, mpifort exists in installdir)
+ # Create module file if installation seems to have been successful (check if mpicc, mpicxx, mpifort exists in installdir)
if [ -e "${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION}/bin/mpicc" ] && [ -e "${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION}/bin/mpicxx" ] && [ -e "${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION}/bin/mpifort" ]; then
if [ ! -d "${MPIMODULEFILEDIR}" ]; then
mkdir -p ${MPIMODULEFILEDIR}
@@ -223,6 +239,9 @@ if [ "${WHICHCOMPILER}" == "gcc" ] || [ "${WHICHCOMPILER}" == "intel" ]; then
if [[ -f ${TARFILE} ]]; then
rm ${TARFILE}
fi
+ if [[ -f ${TARFILESHORT} ]]; then
+ rm ${TARFILESHORT}
+ fi
else
echo -e "${RED}No module file created for ${WHICHMPI}-${MPIVERSION} for ${WHICHCOMPILER}-${COMPILERVERSION}${NC}"
echo -e "${RED}No mpi found in ${MPIINSTALLDIR}/${WHICHCOMPILER}/${COMPILERVERSION}/bin${NC}"
diff --git a/tools/Setup_ModuleEnv/InstallPETSc.sh b/tools/Setup_ModuleEnv/InstallPETSc.sh
index 456c1c108..334a289fc 100755
--- a/tools/Setup_ModuleEnv/InstallPETSc.sh
+++ b/tools/Setup_ModuleEnv/InstallPETSc.sh
@@ -73,6 +73,8 @@ load_module () {
# Check command line arguments
RERUNMODE=0
LOADMODULES=1
+# default to openmpi
+WHICHMPI='openmpi'
for ARG in "$@"
do
@@ -96,6 +98,7 @@ do
#CMAKEVERSION=3.17.0-d
#CMAKEVERSION=3.20.3
#CMAKEVERSION=3.21.3
+ #CMAKEVERSION=3.24.2
CMAKEVERSION=3.26.4
#GCCVERSION=9.2.0
@@ -104,7 +107,8 @@ do
#GCCVERSION=10.2.0
#GCCVERSION=11.2.0
#GCCVERSION=12.2.0
- GCCVERSION=13.1.0
+ #GCCVERSION=13.1.0
+ GCCVERSION=13.2.0
#OPENMPIVERSION=3.1.4
#OPENMPIVERSION=4.0.1
@@ -112,7 +116,27 @@ do
#OPENMPIVERSION=3.1.6
#OPENMPIVERSION=4.1.1
#OPENMPIVERSION=4.1.4
- OPENMPIVERSION=4.1.5
+ #OPENMPIVERSION=4.1.5
+
+ MPICHVERSION=4.1.2
+
+ # chose which mpi you want to have installed (openmpi or mpich), default is openmpi
+ if [[ -n ${MPICHVERSION} ]]; then
+ # Set mpich or mpich-debug
+ # MPICH "debug", which uses MPICH installation with --with-device=ch3:sock.
+ # This will use the older ch3:sock channel that does not busy poll.
+ # This channel will be slower for intra-node communication, but it will perform much better in the oversubscription scenario.
+ WHICHMPI='mpich'
+ #WHICHMPI='mpich-debug'
+ MPIVERSION=${MPICHVERSION}
+ else
+ if [[ -z ${OPENMPIVERSION} ]]; then
+ echo "${RED}ERROR: Set either OPENMPIVERSION or MPICHVERSION in InstallPETSc.sh when running with '-m'${NC}. Exit."
+ exit
+ else
+ MPIVERSION=${OPENMPIVERSION}
+ fi
+ fi
fi
@@ -123,9 +147,6 @@ do
done
-# chose which mpi you want to have installed (openmpi or mpich), default is openmpi
-WHICHMPI=openmpi
-
# DOWNLOAD and INSTALL PETSc (example PETSc-3.17.0)
#PETSCVERSION=3.17.0
#PETSCVERSION=3.18.4
@@ -173,13 +194,13 @@ if [[ -n $(module purge 2>&1) ]]; then
exit
fi
-# take the first gcc compiler installed with first compatible openmpi
+# take the first gcc compiler installed with first compatible openmpi or mpich
echo " "
if [[ $LOADMODULES -eq 1 ]]; then
CMAKEVERSION=$(ls ${MODULESDIR}/utilities/cmake/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
GCCVERSION=$(ls ${MODULESDIR}/compilers/gcc/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
- OPENMPIVERSION=$(ls ${MODULESDIR}/MPI/openmpi/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
- echo -e "Modules found automatically.\n\nCMAKEVERSION=${CMAKEVERSION}\nGCCVERSION=${GCCVERSION}\nOPENMPIVERSION=${OPENMPIVERSION}\n\nWARNING: The combination might not be possible!"
+ MPIVERSION=$(ls ${MODULESDIR}/MPI/${WHICHMPI}/ | sed 's/ /\n/g' | grep -i "[0-9]\." | head -n 1 | tail -n 1)
+ echo -e "Modules found automatically.\n\nCMAKEVERSION=${CMAKEVERSION}\nGCCVERSION=${GCCVERSION}\n${WHICHMPI}-MPIVERSION=${MPIVERSION}\n\nWARNING: The combination might not be possible!"
if [[ ${RERUNMODE} -eq 0 ]]; then
read -p "Press [Enter] to continue or [Crtl+c] to abort!"
fi
@@ -188,11 +209,11 @@ else
fi
check_module "cmake" "${CMAKEVERSION}"
-check_module "gcc " "${GCCVERSION}"
-check_module "mpi " "${OPENMPIVERSION}"
+check_module "gcc" "${GCCVERSION}"
+check_module "${WHICHMPI}" "${MPIVERSION}"
-PETSCMODULEFILEDIR=${MODULESDIR}/utilities/petsc/${PETSCVERSION}${DEBUGDIR}/gcc/${GCCVERSION}/openmpi
-MODULEFILE=${PETSCMODULEFILEDIR}/${OPENMPIVERSION}
+PETSCMODULEFILEDIR=${MODULESDIR}/utilities/petsc/${PETSCVERSION}${DEBUGDIR}/gcc/${GCCVERSION}/${WHICHMPI}
+MODULEFILE=${PETSCMODULEFILEDIR}/${MPIVERSION}
# if no PETSc module for this compiler found, install PETSc and create module
if [ ! -e "${MODULEFILE}" ]; then
@@ -202,7 +223,7 @@ if [ ! -e "${MODULEFILE}" ]; then
module purge
load_module "cmake/${CMAKEVERSION}"
load_module "gcc/${GCCVERSION}"
- load_module "openmpi/${OPENMPIVERSION}/gcc/${GCCVERSION}"
+ load_module "${WHICHMPI}/${MPIVERSION}/gcc/${GCCVERSION}"
module list
echo " "
echo -e "$GREEN""Important: If the compilation step fails, run the script again and if it still fails \n1) try compiling single, .i.e., remove -j from make -j or \n2) try make -j 2 (not all available threads)$NC"
@@ -213,7 +234,7 @@ if [ ! -e "${MODULEFILE}" ]; then
fi
# Install destination
- PETSCINSTALLDIR=/opt/petsc/${PETSCVERSION}${DEBUGDIR}/gcc-${GCCVERSION}/openmpi-${OPENMPIVERSION}
+ PETSCINSTALLDIR=/opt/petsc/${PETSCVERSION}${DEBUGDIR}/gcc-${GCCVERSION}/${WHICHMPI}-${MPIVERSION}
# Change to sources directors
cd ${SOURCESDIR}
@@ -225,7 +246,7 @@ if [ ! -e "${MODULEFILE}" ]; then
while true; do
echo " "
echo "${YELLOW}${CLONEDIR} already exists.${NC}"
- echo "${YELLOW}Do you want to continue the installation (y/n)?${NC}"
+ echo "${YELLOW}Do you want to continue the installation with the existing files under ${CLONEDIR} (y/n)?${NC}"
# Inquiry
if [[ ${RERUNMODE} -eq 0 ]]; then
read -p "${YELLOW}Otherwise the directory will be removed and a fresh installation will be performed. [Y/n]${NC}" yn
@@ -276,7 +297,7 @@ if [ ! -e "${MODULEFILE}" ]; then
fi
# Configure
- MPIINSTALLDIR=${INSTALLDIR}/${WHICHMPI}/${OPENMPIVERSION}/gcc/${GCCVERSION}
+ MPIINSTALLDIR=${INSTALLDIR}/${WHICHMPI}/${MPIVERSION}/gcc/${GCCVERSION}
if [[ ! -d ${MPIINSTALLDIR} ]]; then
echo -e "$RED""Failed: Cannot find MPI directory ${MPIINSTALLDIR}$NC"
exit
@@ -331,8 +352,9 @@ if [ ! -e "${MODULEFILE}" ]; then
sed -i 's/petscversion/'${PETSCVERSION}'/gI' ${MODULEFILE}
sed -i 's/CMAKEVERSIONFLAG/'${CMAKEVERSION}'/gI' ${MODULEFILE}
sed -i 's/GCCVERSIONFLAG/'${GCCVERSION}'/gI' ${MODULEFILE}
- sed -i 's/MPIVERSIONFLAG/'${OPENMPIVERSION}'/gI' ${MODULEFILE}
+ sed -i 's/MPIVERSIONFLAG/'${MPIVERSION}'/gI' ${MODULEFILE}
sed -i 's\PETSCTOPDIR\'${PETSCINSTALLDIR}'\gI' ${MODULEFILE}
+ sed -i 's\PETSCWHICHMPI\'${WHICHMPI}'\gI' ${MODULEFILE}
else
echo -e "$RED""No module file created for PETSc-${PETSCVERSION} for GCC-${GCCVERSION}$NC"
echo -e "$RED""no installation found in ${PETSCINSTALLDIR}/include$NC"
diff --git a/tools/Setup_ModuleEnv/moduletemplates/utilities/hopr/hopr_temp b/tools/Setup_ModuleEnv/moduletemplates/utilities/hopr/hopr_temp
index 18d9f3115..0c12e8706 100644
--- a/tools/Setup_ModuleEnv/moduletemplates/utilities/hopr/hopr_temp
+++ b/tools/Setup_ModuleEnv/moduletemplates/utilities/hopr/hopr_temp
@@ -15,8 +15,8 @@ module-whatis "Sets the environment for using hopr-hoprversion"
conflict hopr
prereq gcc/GCCVERSIONFLAG
-prereq openmpi/MPIVERSIONFLAG/gcc/GCCVERSIONFLAG
-prereq hdf5/HDF5VERSIONFLAG/gcc/GCCVERSIONFLAG/openmpi/MPIVERSIONFLAG
+prereq HOPRWHICHMPI/MPIVERSIONFLAG/gcc/GCCVERSIONFLAG
+prereq hdf5/HDF5VERSIONFLAG/gcc/GCCVERSIONFLAG/HOPRWHICHMPI/MPIVERSIONFLAG
# for Tcl script use only
set topdir HOPRTOPDIR
diff --git a/tools/Setup_ModuleEnv/moduletemplates/utilities/petsc/petsc_temp b/tools/Setup_ModuleEnv/moduletemplates/utilities/petsc/petsc_temp
index 697bd42f6..ac5bedfc2 100644
--- a/tools/Setup_ModuleEnv/moduletemplates/utilities/petsc/petsc_temp
+++ b/tools/Setup_ModuleEnv/moduletemplates/utilities/petsc/petsc_temp
@@ -15,7 +15,7 @@ module-whatis "Sets the environment for using petsc-petscversion"
conflict petsc
prereq gcc/GCCVERSIONFLAG
-prereq openmpi/MPIVERSIONFLAG/gcc/GCCVERSIONFLAG
+prereq PETSCWHICHMPI/MPIVERSIONFLAG/gcc/GCCVERSIONFLAG
# for Tcl script use only
set topdir PETSCTOPDIR
diff --git a/tools/cleanUp_stdOut_files/cleanUp_stdOut_files.py b/tools/cleanUp_stdOut_files/cleanUp_stdOut_files.py
index bb97c2405..2a66d9d5c 100644
--- a/tools/cleanUp_stdOut_files/cleanUp_stdOut_files.py
+++ b/tools/cleanUp_stdOut_files/cleanUp_stdOut_files.py
@@ -155,6 +155,14 @@ def CleanSingleLines(stdfile,args):
# remove UCX warnings (e.g. on hawk)
#[[1669126882.059241] [r34c2t5n4:1727877:0] mpool.c:54 UCX WARN object 0x1dce980 {flags:0x20040 recv length 16 host memory} was not returned to mpool ucp_requests]
changedLines+=1
+ elif line_stripped.startswith('myrank') and hasNumbers(line_stripped) and ('MPI_WIN_UNLOCK_ALL' in line_stripped or 'MPI_WIN_FREE' in line_stripped or 'with WIN_SIZE =' in line_stripped):
+ # remove [myrank= 0 Unlocking SampWallState_Shared_Win with MPI_WIN_UNLOCK_ALL()]
+ # or [myrank= 0 Freeing window SampWallState_Shared_Win with MPI_WIN_FREE()]
+ # or [myrank= 0 Allocated CNTotalSide2GlobalSide_Shared_Win with WIN_SIZE = 8769432]
+ changedLines+=1
+ elif 'WARNING: Memory reaching maximum, RAM is at' in line_stripped:
+ # Remove [ WARNING: Memory reaching maximum, RAM is at *****%]
+ changedLines+=1
else:
# Write the line to the new (clean) file
output_new.write(line)
diff --git a/tutorials/dsmc-cone-2D/70degCone_2DSurf.geo b/tutorials/dsmc-cone-2D/70degCone_2DSurf.geo
index ff3659a3c..756555070 100644
--- a/tutorials/dsmc-cone-2D/70degCone_2DSurf.geo
+++ b/tutorials/dsmc-cone-2D/70degCone_2DSurf.geo
@@ -32,14 +32,13 @@ Mesh.Algorithm = 1;
//
Mesh.RecombinationAlgorithm = 2;
//
-Mesh 2;
-//
Mesh.RecombineAll = 1;
//
+Mesh 2;
+//
Mesh.SaveAll = 1;
//
Mesh.Binary = 0;
Mesh.MshFileVersion = 4.1;
//
Save "70degCone_2D.msh";
-
diff --git a/tutorials/dsmc-reservoir/chemistry-off/parameter.ini b/tutorials/dsmc-reservoir/chemistry-off/parameter.ini
index 0d9e679c7..250b18d65 100644
--- a/tutorials/dsmc-reservoir/chemistry-off/parameter.ini
+++ b/tutorials/dsmc-reservoir/chemistry-off/parameter.ini
@@ -85,7 +85,7 @@ Part-Species1-Init1-VeloVecIC = (/0.,0.,1./) ! Normalized veloc
! DSMC
! =============================================================================== !
UseDSMC = T ! Flag for using DSMC in Calculation
-Particles-DSMCReservoirSim = T ! Set [T] to disable particle movement (needs compiled TIMEDISCMETHOD=RESERVOIR)
+Particles-DSMCReservoirSim = T ! Set [T] to disable particle movement
Particles-DSMC-CollisMode = 2 ! Define mode of collision handling in DSMC (1:elast coll, 2: elast + rela, 3:chem)
Particles-DSMC-RotRelaxProb = 0.2 ! Define the rotational relaxation probability upon collision of molecules (0-1: constant, 2: variable, Boyd, 3: variable, Zhang)
Particles-DSMC-VibRelaxProb = 0.02 ! Define the vibrational relaxation probability upon collision of molecules (0-1: constant, 2: variable, Boyd)
diff --git a/tutorials/dsmc-reservoir/chemistry-on/parameter.ini b/tutorials/dsmc-reservoir/chemistry-on/parameter.ini
index e9ce47d32..4b723f90b 100644
--- a/tutorials/dsmc-reservoir/chemistry-on/parameter.ini
+++ b/tutorials/dsmc-reservoir/chemistry-on/parameter.ini
@@ -130,9 +130,9 @@ Part-Species3-Init1-VeloVecIC = (/0.,0.,1./)
! DSMC
! =============================================================================== !
UseDSMC = T ! Flag for using DSMC in Calculation
-Particles-DSMCReservoirSim = T ! Set [T] to disable particle movement (needs compiled TIMEDISCMETHOD=RESERVOIR)
-Particles-DSMCReservoirSimRate = F ! Set [T] to disable particle reactions (needs compiled TIMEDISCMETHOD=RESERVOIR)
-Particles-DSMCReservoirStatistic = F ! Set how probabilities (rates) are calculated (needs compiled TIMEDISCMETHOD=RESERVOIR)
+Particles-DSMCReservoirSim = T ! Set [T] to disable particle movement
+Particles-DSMCReservoirSimRate = F ! Set [T] to disable particle reactions
+Particles-DSMCReservoirStatistic = F ! Set how probabilities (rates) are calculated
Particles-DSMC-CollisMode = 3 ! Define mode of collision handling in DSMC (1:elast coll, 2: elast + rela, 3:chem)
Particles-DSMC-BackwardReacRate = T ! Set [T] to enable the automatic calculation of the backward reaction rate
Particles-DSMC-RotRelaxProb = 0.2 ! Define the rotational relaxation probability upon collision of molecules (0-1: constant, 2: variable, Boyd, 3: variable, Zhang)