From bc65ec0ca7cc24f3f060803d97930a1fff6971ea Mon Sep 17 00:00:00 2001 From: Franziska Hild Date: Tue, 30 Jan 2024 14:31:17 +0100 Subject: [PATCH 01/37] Bug fix read-in: try all possible options for general $ variables --- src/readintools/readintools.f90 | 202 +++++++++++++++++++++++++++++++- 1 file changed, 199 insertions(+), 3 deletions(-) diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90 index 6b19805fd..7131b3f29 100644 --- a/src/readintools/readintools.f90 +++ b/src/readintools/readintools.f90 @@ -1219,7 +1219,7 @@ SUBROUTINE GetGeneralOption(value, name, proposal) CLASS(Option),POINTER :: multi CLASS(OPTION),ALLOCATABLE :: newopt CHARACTER(LEN=:),ALLOCATABLE :: testname -INTEGER :: i,k +INTEGER :: i,k,trimDigits,j,foundIndex,numberOfIndexes CHARACTER(LEN=20) :: fmtName ! Temporary arrays to create new options CHARACTER(LEN=255) :: tmpValue @@ -1294,22 +1294,48 @@ SUBROUTINE GetGeneralOption(value, name, proposal) SDEALLOCATE(testname) ! safety check ALLOCATE(CHARACTER(LEN_TRIM(name)) :: testname) ! Testname must not be trimmed! Otherwise, the INDEX test will fail as testname < name + + ! Check how many indexes are present + numberOfIndexes = 0 testname = name DO i = 1, LEN(name) ! Start replacing the index from the left IF(INDEX('0123456789',testname(i:i)).GT.0) THEN - testname(i:i) = '$' + numberOfIndexes = numberOfIndexes + 1 DO k = i+1, LEN(testname) ! Check if it is a multi-digit number and remove all following numbers IF(SCAN(testname(i+1:i+1),'0123456789').EQ.0) EXIT + testname(i+1:LEN(testname)-1) = testname(i+2:LEN(testname)) + testname(LEN(testname):LEN(testname)) = ' ' + END DO + END IF + END DO + IF (numberOfIndexes.GT.3) CALL abort(__STAMP__,'Variable name has more than three indexes! Change variable name!') + ! General options can be checked for a maximum of three $ per variable! + ! Replacing one index X by $ (up to three options are tested in the following order: $-X-X, X-$-X, X-X-$ / $-X, X-$) + DO i = 1, LEN(name) + ! Loop can be skipped if variable consists of only one digit to be possibly replaced by $ --> done by third loop, replacing all digits by $ + IF (numberOfIndexes.EQ.1) EXIT + ! Reset testname to name + testname = name + trimDigits = 0 + ! Start replacing one index after each other from left to right + IF(INDEX('0123456789',testname(i:i)).GT.0) THEN + ! Skip if index before is digit - then it is a multi-digit number (already done) + IF(SCAN(testname(i-1:i-1),'0123456789').GT.0) CYCLE + testname(i:i) = '$' + DO k = i+1, LEN(testname) + ! Check if it is a multi-digit number and remove all following numbers + IF(SCAN(testname(i+1:i+1),'0123456789').EQ.0) EXIT testname(i+1:LEN(testname)-1) = testname(i+2:LEN(testname)) testname(LEN(testname):LEN(testname)) = ' ' + trimDigits = trimDigits + 1 END DO ! Check if we can find this name check => prms%firstLink DO WHILE (associated(check)) - IF (check%opt%NAMEEQUALS(TRIM(testname)) .AND. check%opt%isSet) THEN + IF (check%opt%NAMEEQUALS(testname(1:LEN(testname)-trimDigits)) .AND. check%opt%isSet) THEN multi => check%opt ! copy value from option to result variable SELECT TYPE (multi) @@ -1372,6 +1398,176 @@ SUBROUTINE GetGeneralOption(value, name, proposal) END DO END IF END DO + + ! Replacing two indexes X out of three by $ (three options are tested in the following order: $-$-X, $-X-$, X-$-$) + DO j = 1, 3 + ! Loop can be skipped if variable consists of only one or two digits to be possibly replaced by $ + IF (numberOfIndexes.EQ.1.OR.numberOfIndexes.EQ.2) EXIT + ! Reset testname to name + testname = name + trimDigits = 0 + foundIndex = 0 + DO i = 1, LEN(name) + ! Start replacing the index from the left + IF(INDEX('0123456789',testname(i:i)).GT.0) THEN + ! Skip to keep index X + foundIndex = foundIndex + 1 + IF (foundIndex.EQ.(4-j)) CYCLE + testname(i:i) = '$' + DO k = i+1, LEN(testname) + ! Check if it is a multi-digit number and remove all following numbers + IF(SCAN(testname(i+1:i+1),'0123456789').EQ.0) EXIT + testname(i+1:LEN(testname)-1) = testname(i+2:LEN(testname)) + testname(LEN(testname):LEN(testname)) = ' ' + trimDigits = trimDigits + 1 + END DO + END IF + END DO + ! Check if we can find this name + check => prms%firstLink + DO WHILE (associated(check)) + IF (check%opt%NAMEEQUALS(testname(1:LEN(testname)-trimDigits)) .AND. check%opt%isSet) THEN + multi => check%opt + ! copy value from option to result variable + SELECT TYPE (multi) + CLASS IS (IntOption) + SELECT TYPE(value) + TYPE IS (INTEGER) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(intopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(intopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (RealOption) + SELECT TYPE(value) + TYPE IS (REAL) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(realopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(realopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (LogicalOption) + SELECT TYPE(value) + TYPE IS (LOGICAL) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(logicalopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(logicalopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (StringOption) + SELECT TYPE(value) + TYPE IS (STR255) + value%chars = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(stringopt) + WRITE(tmpValue,'(A)') multi%value + CALL prms%CreateOption(stringopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + END SELECT + + ! print option and value to stdout. Custom print, so do it here + WRITE(fmtName,*) prms%maxNameLen + SWRITE(UNIT_stdOut,'(a3)', ADVANCE='NO') " | " + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,"(a"//fmtName//")", ADVANCE='NO') TRIM(name) + CALL clear_formatting() + SWRITE(UNIT_stdOut,'(a3)', ADVANCE='NO') " | " + CALL multi%printValue(prms%maxValueLen) + SWRITE(UNIT_stdOut,"(a3)", ADVANCE='NO') ' | ' + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,'(a7)', ADVANCE='NO') "*MULTI" + CALL clear_formatting() + SWRITE(UNIT_stdOut,"(a3)") ' | ' + ! Indicate that parameter was read at least once and therefore remove the warning that the parameter was not used + multi%isUsedMulti = .TRUE. + RETURN + END IF + check => check%next + END DO + END DO + + ! Replacing all (up to three) indexes X by $ ($-$-$ / $-$ / $) + testname = name + DO i = 1, LEN(name) + ! Start replacing the index from the left + IF(INDEX('0123456789',testname(i:i)).GT.0) THEN + testname(i:i) = '$' + DO k = i+1, LEN(testname) + ! Check if it is a multi-digit number and remove all following numbers + IF(SCAN(testname(i+1:i+1),'0123456789').EQ.0) EXIT + testname(i+1:LEN(testname)-1) = testname(i+2:LEN(testname)) + testname(LEN(testname):LEN(testname)) = ' ' + END DO + END IF + END DO + ! Check if we can find this name + check => prms%firstLink + DO WHILE (associated(check)) + IF (check%opt%NAMEEQUALS(TRIM(testname)) .AND. check%opt%isSet) THEN + multi => check%opt + ! copy value from option to result variable + SELECT TYPE (multi) + CLASS IS (IntOption) + SELECT TYPE(value) + TYPE IS (INTEGER) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(intopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(intopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (RealOption) + SELECT TYPE(value) + TYPE IS (REAL) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(realopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(realopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (LogicalOption) + SELECT TYPE(value) + TYPE IS (LOGICAL) + value = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(logicalopt) + WRITE(tmpValue, *) multi%value + CALL prms%CreateOption(logicalopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + CLASS IS (StringOption) + SELECT TYPE(value) + TYPE IS (STR255) + value%chars = multi%value + ! insert option with numbered name ($ replaced by number) + ALLOCATE(stringopt) + WRITE(tmpValue,'(A)') multi%value + CALL prms%CreateOption(stringopt, name, 'description', value=tmpValue, multiple=.FALSE., numberedmulti=.FALSE.,removed=.TRUE.) + END SELECT + END SELECT + + ! print option and value to stdout. Custom print, so do it here + WRITE(fmtName,*) prms%maxNameLen + SWRITE(UNIT_stdOut,'(a3)', ADVANCE='NO') " | " + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,"(a"//fmtName//")", ADVANCE='NO') TRIM(name) + CALL clear_formatting() + SWRITE(UNIT_stdOut,'(a3)', ADVANCE='NO') " | " + CALL multi%printValue(prms%maxValueLen) + SWRITE(UNIT_stdOut,"(a3)", ADVANCE='NO') ' | ' + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,'(a7)', ADVANCE='NO') "*MULTI" + CALL clear_formatting() + SWRITE(UNIT_stdOut,"(a3)") ' | ' + ! Indicate that parameter was read at least once and therefore remove the warning that the parameter was not used + multi%isUsedMulti = .TRUE. + RETURN + END IF + check => check%next + END DO + ! create new instance of multiple option ALLOCATE(newopt, source=current%opt) ! set name of new option like name in read line and set it being not multiple numbered From 15cebbfc3d6dd6acbe0b388356b25748738cec65 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 29 Jan 2024 16:51:33 +0100 Subject: [PATCH 02/37] Increase number of particles and tolerance to avoid failure due to statistical fluctuations --- .../analyze.ini | 2 +- .../parameter.ini | 2 +- .../parameter_macrorestart.ini | 5 ++--- .../analyze.ini | 2 +- .../parameter.ini | 2 +- .../parameter_macrorestart.ini | 3 +-- .../analyze.ini | 2 +- .../parameter.ini | 3 +-- .../parameter_macrorestart.ini | 5 ++--- 9 files changed, 11 insertions(+), 15 deletions(-) diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini index 131d751de..c86bdbbad 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/analyze.ini @@ -2,5 +2,5 @@ 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 = 15e-2 ! tolerance +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/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini index 973f4a414..e8648cfeb 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter.ini @@ -74,7 +74,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/) ! Species1 - O2 ! =============================================================================== ! Part-Species1-MassIC=5.31352E-26 -Part-Species1-MacroParticleFactor=1E3 +Part-Species1-MacroParticleFactor=5E2 Part-Species1-nInits=1 Part-Species1-Init1-SpaceIC=cell_local diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini index 853d565fc..c7355f1db 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_FixedAverage/parameter_macrorestart.ini @@ -38,7 +38,6 @@ UseH5IOLoadBalance = T ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Part-maxParticleNumber=200000 Part-nSpecies=1 Part-nBounds=6 Part-Boundary1-SourceName=BC_Xplus @@ -73,7 +72,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/) ! Species1 - O2 ! =============================================================================== ! Part-Species1-MassIC=5.31352E-26 -Part-Species1-MacroParticleFactor=5E2 +Part-Species1-MacroParticleFactor=2.5E2 Part-Species1-nInits=1 Part-Species1-Init1-SpaceIC=cell_local @@ -136,7 +135,7 @@ Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.000050000000 ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! -Part-Species1-InteractionID = 2 +Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini index 131d751de..c86bdbbad 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/analyze.ini @@ -2,5 +2,5 @@ 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 = 15e-2 ! tolerance +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/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini index a1b3f17d2..8fb227814 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter.ini @@ -74,7 +74,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/) ! Species1 - O2 ! =============================================================================== ! Part-Species1-MassIC=5.31352E-26 -Part-Species1-MacroParticleFactor=2E3 +Part-Species1-MacroParticleFactor=1E3 Part-Species1-nInits=1 Part-Species1-Init1-SpaceIC=cell_local diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini index fa62fdd2c..f003c312f 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_Relaxation/parameter_macrorestart.ini @@ -38,7 +38,6 @@ UseH5IOLoadBalance = T ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Part-maxParticleNumber=200000 Part-nSpecies=1 Part-nBounds=6 Part-Boundary1-SourceName=BC_Xplus @@ -135,7 +134,7 @@ Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.000050000000 ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! -Part-Species1-InteractionID = 2 +Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini index 131d751de..c86bdbbad 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/analyze.ini @@ -2,5 +2,5 @@ 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 = 15e-2 ! tolerance +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/parameter.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini index 3de5cda38..f1b2a36ce 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter.ini @@ -39,7 +39,6 @@ UseH5IOLoadBalance = T ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Part-maxParticleNumber=200000 Part-nSpecies=1 Part-nBounds=6 Part-Boundary1-SourceName=BC_Xplus @@ -74,7 +73,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/) ! Species1 - O2 ! =============================================================================== ! Part-Species1-MassIC=5.31352E-26 -Part-Species1-MacroParticleFactor=1E3 +Part-Species1-MacroParticleFactor=5E2 Part-Species1-nInits=1 Part-Species1-Init1-SpaceIC=cell_local diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini index eefeb3658..136b1257a 100644 --- a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini +++ b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstPressure_TruncAverage/parameter_macrorestart.ini @@ -38,7 +38,6 @@ UseH5IOLoadBalance = T ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Part-maxParticleNumber=200000 Part-nSpecies=1 Part-nBounds=6 Part-Boundary1-SourceName=BC_Xplus @@ -73,7 +72,7 @@ Part-FIBGMdeltas=(/2.5e-6,1e-5,1e-5/) ! Species1 - O2 ! =============================================================================== ! Part-Species1-MassIC=5.31352E-26 -Part-Species1-MacroParticleFactor=5E2 +Part-Species1-MacroParticleFactor=2.5E2 Part-Species1-nInits=1 Part-Species1-Init1-SpaceIC=cell_local @@ -136,7 +135,7 @@ Particles-MacroscopicRestart-Filename = ConstPressure_DSMCState_000.000050000000 ! =============================================================================== ! ! Species1, O2 ! =============================================================================== ! -Part-Species1-InteractionID = 2 +Part-Species1-InteractionID = 2 Part-Species1-Tref = 273 Part-Species1-dref = 4.07E-10 Part-Species1-omega=0.27 From 0ceb50ed5bc889006489a81c58748de94d44c2ba Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Thu, 1 Feb 2024 00:38:43 +0100 Subject: [PATCH 03/37] WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage: Increased tolerance due to statistics --- .../2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini | 2 +- .../2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini index e92b04f76..b9c801897 100644 --- a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini +++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini @@ -2,5 +2,5 @@ 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 = 15e-2 ! tolerance +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/parameter.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini index f196ee316..bfee0a2b4 100644 --- a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini +++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini @@ -42,7 +42,6 @@ UseH5IOLoadBalance = T ! =============================================================================== ! ! PARTICLES ! =============================================================================== ! -Part-maxParticleNumber=500000 Part-nSpecies=1 Part-nBounds=6 Part-Boundary1-SourceName=BC_Xplus From 9bc426e9e2902a0a59d3150d4f0eb1e1d8bad06c Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 1 Feb 2024 12:39:50 +0100 Subject: [PATCH 04/37] AppImage creation: The entry "Icon=piclas" in "piclas.desktop" now requires an icon file under "AppDir/usr/share/icons/hicolor/64x64/apps", which is created via mkdir -p AppDir/usr/share/icons/hicolor/64x64/apps/ ln -sf ../../../${PROG}.png AppDir/usr/share/icons/hicolor/64x64/apps in the ".github/workflows/cmake-ninja.yml" GitHub Actions config file. --- .github/workflows/cmake-ninja.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cmake-ninja.yml b/.github/workflows/cmake-ninja.yml index 6c62c052b..020ec1742 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 From 9fdb840e7754cb47ff625c471d1bf8b837d5a074 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 1 Feb 2024 16:13:49 +0100 Subject: [PATCH 05/37] Increased version number of Github artefacts --- .github/workflows/cmake-ninja.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake-ninja.yml b/.github/workflows/cmake-ninja.yml index 020ec1742..e728992ad 100644 --- a/.github/workflows/cmake-ninja.yml +++ b/.github/workflows/cmake-ninja.yml @@ -318,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 From 8fe7f5856fe5686f42dad68ce0d6c8c2c6e81f88 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Thu, 1 Feb 2024 16:41:59 +0100 Subject: [PATCH 06/37] Updated Release.md template --- .gitlab/merge_request_templates/Release.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab/merge_request_templates/Release.md b/.gitlab/merge_request_templates/Release.md index 2929e79a1..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 From 057743a1803b98c62a36518f2f8cc2a6854607d0 Mon Sep 17 00:00:00 2001 From: Julian Beyer Date: Wed, 7 Feb 2024 14:38:14 +0100 Subject: [PATCH 07/37] up --- .../WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini index e27641770..c4ccd779b 100644 --- a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini +++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini @@ -144,6 +144,6 @@ Particles-Symmetry2D = T Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T -Particles-RadialWeighting-PartScaleFactor = 10 !initially 60 +Particles-RadialWeighting-PartScaleFactor = 9 !initially 60 Particles-RadialWeighting-CloneMode = 2 Particles-RadialWeighting-CloneDelay = 5 From fed87cf9e5c6e8e9f3ca9b19605c4ea34d3b7e7f Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Sat, 10 Feb 2024 14:51:34 +0100 Subject: [PATCH 08/37] Perform arithmetic with 0-prefixed numbers: tell bash to use base-10 by specifying 10# --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 654dbc524..231254439 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -40,7 +40,8 @@ before_script: else day=$(cat reggie/.day); fi - - if [ "$(($day % 2))" == "0" ]; then + - echo "Perform arithmetic with 0-prefixed numbers by telling bash to use base-10 by specifying 10#" + - if [ "$((10#$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; From d940c5088dbc91d5c4664557429f16746c62ee3a Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Wed, 13 Mar 2024 18:20:32 +0100 Subject: [PATCH 09/37] Added single and double dollar variable to unit test --- unitTests/ReadInTools.f90 | 92 +++++++++++++++++++++++++++------------ unitTests/ReadInTools.ini | 11 ++++- 2 files changed, 75 insertions(+), 28 deletions(-) diff --git a/unitTests/ReadInTools.f90 b/unitTests/ReadInTools.f90 index 07442b0de..a8e3a84c0 100644 --- a/unitTests/ReadInTools.f90 +++ b/unitTests/ReadInTools.f90 @@ -68,6 +68,11 @@ PROGRAM ReadInToolsUnitTest !character(len=255) :: strArrayOpt_def(2) !character(len=255) :: strArrayOpt_mult(2) !character(len=255) :: strArrayOpt_mult_A(2) +INTEGER,ALLOCATABLE :: Dollar(:) +INTEGER :: nDollar,iDollar,nDollar2,iDollar2 +CHARACTER(32) :: hilf,hilf2 +INTEGER, ALLOCATABLE :: IntOption(:) +REAL, ALLOCATABLE :: RealOption(:,:) !================================================================================================================================== CALL InitMPI() ! Check for command line arguments to generate the reference solution @@ -75,38 +80,40 @@ PROGRAM ReadInToolsUnitTest IF (nArgs.GT.0) CALL abort(__STAMP__,'ERROR - Unknown command line argument.') CALL prms%SetSection("UnitTest") -CALL prms%CreateIntOption('intOpt' , "Description IntOpt") -CALL prms%CreateIntOption('intOpt_def' , "Description IntOpt with default value", '-1') -CALL prms%CreateIntOption('intOpt_mult' , "Description IntOpt multiple", multiple=.TRUE.) -CALL prms%CreateRealOption('realOpt' , "Description RealOpt") -CALL prms%CreateRealOption('realOptsci' , "Description RealOpt") -CALL prms%CreateRealOption('realOpt_def' , "Description RealOpt with default value", '-1.00') -CALL prms%CreateRealOption('realOpt_defsci' , "Description RealOpt with default value scientific", '0.3e-7') -CALL prms%CreateRealOption('realOpt_mult' , "Description RealOpt multiple", multiple=.TRUE.) -CALL prms%CreateRealOption('realOpt_multsci' , "Description RealOpt multiple", multiple=.TRUE.) -CALL prms%CreateLogicalOption('logOpt' , "Description LogOpt") -CALL prms%CreateLogicalOption('logOpt_def' , "Description LogOpt with default value", 'T') -CALL prms%CreateLogicalOption('logOpt_mult' , "Description LogOpt multiple", multiple=.TRUE.) -CALL prms%CreateStringOption('strOpt' , "Description StrOpt") -CALL prms%CreateStringOption('strOpt_def' , "Description StrOpt with default value", 'dummyValue') -CALL prms%CreateStringOption('strOpt_mult' , "Description StrOpt multiple", multiple=.TRUE.) +CALL prms%CreateIntOption('intOpt' , "Description IntOpt") +CALL prms%CreateIntOption('intOpt_def' , "Description IntOpt with default value" , '4') +CALL prms%CreateIntOption('intOpt_mult' , "Description IntOpt multiple" , multiple=.TRUE.) +CALL prms%CreateRealOption('realOpt' , "Description RealOpt") +CALL prms%CreateRealOption('realOptsci' , "Description RealOpt") +CALL prms%CreateRealOption('realOpt_def' , "Description RealOpt with default value" , '-1.00') +CALL prms%CreateRealOption('realOpt_defsci' , "Description RealOpt with default value scientific" , '0.3e-7') +CALL prms%CreateRealOption('realOpt_mult' , "Description RealOpt multiple" , multiple=.TRUE.) +CALL prms%CreateRealOption('realOpt_multsci' , "Description RealOpt multiple" , multiple=.TRUE.) +CALL prms%CreateLogicalOption('logOpt' , "Description LogOpt") +CALL prms%CreateLogicalOption('logOpt_def' , "Description LogOpt with default value" , 'T') +CALL prms%CreateLogicalOption('logOpt_mult' , "Description LogOpt multiple" , multiple=.TRUE.) +CALL prms%CreateStringOption('strOpt' , "Description StrOpt") +CALL prms%CreateStringOption('strOpt_def' , "Description StrOpt with default value" , 'dummyValue') +CALL prms%CreateStringOption('strOpt_mult' , "Description StrOpt multiple" , multiple=.TRUE.) -CALL prms%CreateIntArrayOption('intArrayOpt' , "Description IntOpt", no=0) -CALL prms%CreateIntArrayOption('intArrayOpt_def' , "Description IntOpt with default value", '-1,0,-3', no=2) -CALL prms%CreateIntArrayOption('intArrayOpt_mult' , "Description IntOpt multiple", multiple=.TRUE., no=0) -CALL prms%CreateRealArrayOption('realArrayOpt' , "Description RealOpt", no=0) -CALL prms%CreateRealArrayOption('realArrayOptsci' , "Description RealOpt", no=0) -CALL prms%CreateRealArrayOption('realArrayOpt_def' , "Description RealOpt with default value" , '-1.00,5.,22', no=3) -CALL prms%CreateRealArrayOption('realArrayOpt_defsci' , "Description RealOpt with default value scientific" , '0.3e-7,-5e2', no=2) -CALL prms%CreateRealArrayOption('realArrayOpt_mult' , "Description RealOpt multiple" , multiple=.TRUE., no=0) -CALL prms%CreateRealArrayOption('realArrayOpt_multsci' , "Description RealOpt multiple" , multiple=.TRUE., no=0) -CALL prms%CreateLogicalArrayOption('logArrayOpt' , "Description LogOpt", no=0) -CALL prms%CreateLogicalArrayOption('logArrayOpt_def' , "Description LogOpt with default value", '(/T,F/)', no=2) -CALL prms%CreateLogicalArrayOption('logArrayOpt_mult' , "Description LogOpt multiple", multiple=.TRUE., no=0) +CALL prms%CreateIntArrayOption('intArrayOpt' , "Description IntOpt" , no=0) +CALL prms%CreateIntArrayOption('intArrayOpt_def' , "Description IntOpt with default value" , '-1 , 0 , -3' , no=2) +CALL prms%CreateIntArrayOption('intArrayOpt_mult' , "Description IntOpt multiple" , multiple=.TRUE. , no=0) +CALL prms%CreateRealArrayOption('realArrayOpt' , "Description RealOpt" , no=0) +CALL prms%CreateRealArrayOption('realArrayOptsci' , "Description RealOpt" , no=0) +CALL prms%CreateRealArrayOption('realArrayOpt_def' , "Description RealOpt with default value" , '-1.00 , 5. , 22', no=3) +CALL prms%CreateRealArrayOption('realArrayOpt_defsci' , "Description RealOpt with default value scientific" , '0.3e-7 , -5e2' , no=2) +CALL prms%CreateRealArrayOption('realArrayOpt_mult' , "Description RealOpt multiple" , multiple=.TRUE. , no=0) +CALL prms%CreateRealArrayOption('realArrayOpt_multsci' , "Description RealOpt multiple" , multiple=.TRUE. , no=0) +CALL prms%CreateLogicalArrayOption('logArrayOpt' , "Description LogOpt" , no=0) +CALL prms%CreateLogicalArrayOption('logArrayOpt_def' , "Description LogOpt with default value" , '(/T , F/)' , no=2) +CALL prms%CreateLogicalArrayOption('logArrayOpt_mult' , "Description LogOpt multiple" , multiple=.TRUE. , no=0) !CALL prms%CreateStringArrayOption('strArrayOpt' , "Description StrOpt") !CALL prms%CreateStringArrayOption('strArrayOpt_def' , "Description StrOpt with default value", 'dum1,dum2') !CALL prms%CreateStringArrayOption('strArrayOpt_mult' , "Description StrOpt multiple", multiple=.TRUE.) +CALL prms%CreateIntOption('Dollar[$]-IntOption' , 'Single dollar variable.', '-1' , numberedmulti=.TRUE.) +CALL prms%CreateRealOption('Dollar[$]-Dollar[$]-RealOption' , 'Double dollar variable.', '-1.0' , numberedmulti=.TRUE.) !CALL PrintDefaultParameterFile(.FALSE.) CALL prms%read_options(FileName) @@ -192,6 +199,37 @@ PROGRAM ReadInToolsUnitTest !IF (strArrayOpt_mult(i).NE.strArrayOpt_mult_A(i)) CALL Abort(__STAMP__,"strArrayOpt_mult failed") !END DO +! Test single and double dollar variables +nDollar = ABS(intOpt) +nDollar2 = ABS(intOpt) +ALLOCATE(Dollar(1:nDollar)) +ALLOCATE(RealOption(nDollar,nDollar2)) +Dollar=0 +ALLOCATE(IntOption(nDollar)) +IntOption = 0 +! Loop twice. The default value <= zero is not allowed to appear +DO i = 1, 2 + write(UNIT_StdOut,'(A,I0,A)') "--------------",i,"--------------" + DO iDollar=1, nDollar + WRITE(UNIT=hilf,FMT='(I0)') iDollar + IntOption(iDollar) = GETINT('Dollar'//TRIM(hilf)//'-IntOption') + DO iDollar2 = 1, nDollar2 + WRITE(UNIT=hilf2,FMT='(I0)') iDollar2 + RealOption(iDollar,iDollar2) = GETREAL('Dollar'//TRIM(hilf)//'-Dollar'//TRIM(hilf2)//'-RealOption') + END DO ! iDollar2 = 1, nDollar2 + END DO ! iDollar=1, nDollar + IF(ANY(IntOption.LE.0)) CALL abort(__STAMP__,'IntOption cannot must be grater than zero') + IF(ANY(RealOption.LE.0)) CALL abort(__STAMP__,'RealOption cannot must be grater than zero') + + WRITE (*,*) "IntOption =", IntOption + DO iDollar=1, nDollar + WRITE (*,*) "RealOption(iDollar,:) =", RealOption(iDollar,:) + END DO + CALL prms%finalize(.TRUE.) ! is the same as CALL FinalizeParameters(), but considers load balancing +END DO ! i = 1, 2 + +CALL prms%finalize(.FALSE.) ! is the same as CALL FinalizeParameters(), but considers load balancing + #if USE_MPI ! we also have to finalize MPI itself here CALL MPI_FINALIZE(iError) diff --git a/unitTests/ReadInTools.ini b/unitTests/ReadInTools.ini index cb97dedca..8bfe3da1e 100644 --- a/unitTests/ReadInTools.ini +++ b/unitTests/ReadInTools.ini @@ -19,7 +19,7 @@ !================================================================================================== ! UnitTest !================================================================================================== -intOpt = -1 +intOpt = 4 intOpt_mult = -4 intOpt_mult = -4 realOpt = -1.00 @@ -53,3 +53,12 @@ strArrayOpt = (/ dum1, dum2 /) strArrayOpt_mult = (/ dum1, dum2 /) strArrayOpt_mult = (/ dum1, dum2 /) +! Single dollar +Dollar1-IntOption = 5 +Dollar3-IntOption = 3 +Dollar$-IntOption = 2 + +! Double dollar +Dollar$-Dollar$-RealOption = 0.1 +Dollar1-Dollar$-RealOption = 1.0 +Dollar2-Dollar$-RealOption = 2.0 From d56720e9a1506337909101b6614238e32a4ad155 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Fri, 15 Mar 2024 17:24:15 +0100 Subject: [PATCH 10/37] ReadInTools unit test: Set a default for GETINT/GETREAL --- unitTests/ReadInTools.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unitTests/ReadInTools.f90 b/unitTests/ReadInTools.f90 index a8e3a84c0..886002309 100644 --- a/unitTests/ReadInTools.f90 +++ b/unitTests/ReadInTools.f90 @@ -212,10 +212,10 @@ PROGRAM ReadInToolsUnitTest write(UNIT_StdOut,'(A,I0,A)') "--------------",i,"--------------" DO iDollar=1, nDollar WRITE(UNIT=hilf,FMT='(I0)') iDollar - IntOption(iDollar) = GETINT('Dollar'//TRIM(hilf)//'-IntOption') + IntOption(iDollar) = GETINT('Dollar'//TRIM(hilf)//'-IntOption','-1') DO iDollar2 = 1, nDollar2 WRITE(UNIT=hilf2,FMT='(I0)') iDollar2 - RealOption(iDollar,iDollar2) = GETREAL('Dollar'//TRIM(hilf)//'-Dollar'//TRIM(hilf2)//'-RealOption') + RealOption(iDollar,iDollar2) = GETREAL('Dollar'//TRIM(hilf)//'-Dollar'//TRIM(hilf2)//'-RealOption','-1.') END DO ! iDollar2 = 1, nDollar2 END DO ! iDollar=1, nDollar IF(ANY(IntOption.LE.0)) CALL abort(__STAMP__,'IntOption cannot must be grater than zero') From e4affa22ba7f859053e22103ae0356547b22fc92 Mon Sep 17 00:00:00 2001 From: Raphael Tietz Date: Wed, 10 Apr 2024 16:57:54 +0200 Subject: [PATCH 11/37] Trying to find the missing information during loadbalace getparams --- .../emission/particle_surface_flux_init.f90 | 1 + src/readintools/options.f90 | 6 +- src/readintools/readintools.f90 | 97 +++++++++++++++++-- 3 files changed, 91 insertions(+), 13 deletions(-) diff --git a/src/particles/emission/particle_surface_flux_init.f90 b/src/particles/emission/particle_surface_flux_init.f90 index 0ae442262..60c2dfda6 100644 --- a/src/particles/emission/particle_surface_flux_init.f90 +++ b/src/particles/emission/particle_surface_flux_init.f90 @@ -479,6 +479,7 @@ SUBROUTINE ReadInAndPrepareSurfaceFlux(MaxSurfacefluxBCs, nDataBC) SF%origin = GETREALARRAY('Part-Species'//TRIM(hilf2)//'-origin',2) WRITE(UNIT=hilf3,FMT='(E16.8)') HUGE(SF%rmax) SF%rmax = GETREAL('Part-Species'//TRIM(hilf2)//'-rmax',TRIM(hilf3)) + SWRITE(*,*) "!!!!!!!!!!!!!!!!!!!!!!!!! SF%rmax",SF%rmax SF%rmin = GETREAL('Part-Species'//TRIM(hilf2)//'-rmin') ! Total area of surface flux SF%totalAreaSF = Pi*(SF%rmax*SF%rmax - SF%rmin*SF%rmin) diff --git a/src/readintools/options.f90 b/src/readintools/options.f90 index e4425d009..fc12d7646 100644 --- a/src/readintools/options.f90 +++ b/src/readintools/options.f90 @@ -362,9 +362,9 @@ SUBROUTINE print(this, maxNameLen, maxValueLen, mode) INTEGER :: length INTEGER :: commentLen !================================================================================================================================== -#if USE_LOADBALANCE -IF(PerformLoadBalance) RETURN -#endif /*USE_LOADBALANCE*/ +! #if USE_LOADBALANCE +! IF(PerformLoadBalance) RETURN +! #endif /*USE_LOADBALANCE*/ IF(mode.EQ.1) commentLen=80 !--help IF(mode.EQ.2) commentLen=50 !--markdown WRITE(fmtName,*) maxNameLen diff --git a/src/readintools/readintools.f90 b/src/readintools/readintools.f90 index 0318ed618..38ce59a5d 100644 --- a/src/readintools/readintools.f90 +++ b/src/readintools/readintools.f90 @@ -359,6 +359,10 @@ SUBROUTINE CreateOption(this, opt, name, description, value, multiple, numberedm LOGICAL,INTENT(IN),OPTIONAL :: multiple !< marker if multiple option LOGICAL,INTENT(IN),OPTIONAL :: numberedmulti !< marker if numbered multiple option LOGICAL,INTENT(IN),OPTIONAL :: removed !< marker if removed option + + +CHARACTER(LEN=255) :: name_loc !< option name +CLASS(link),POINTER :: current ! LOCAL VARIABLES CLASS(link), POINTER :: newLink TYPE(Varying_String) :: aStr @@ -368,6 +372,19 @@ SUBROUTINE CreateOption(this, opt, name, description, value, multiple, numberedm ! 'Option "'//TRIM(name)//'" is already defined, can not be defined with the same name twice!') !END IF +! current => prms%firstLink +! DO WHILE (associated(current)) +! SWRITE(*,*) TRIM(current%opt%name)!," ", valuestr +! current => current%next +! END DO +! ! END IF +! SWRITE(*,*) "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q" + +SWRITE(*,*) "CreateOption Name: ", name +! IF(SCAN(name,"[]").NE.0) THEN +! DO WHILE(SCAN(name,"[]").NE.0) +! END DO +! END IF opt%hasDefault = PRESENT(value) IF (opt%hasDefault) THEN CALL opt%parse(value) @@ -389,15 +406,18 @@ SUBROUTINE CreateOption(this, opt, name, description, value, multiple, numberedm aStr = Replace(aStr,"[]" ,"$",Every = .true.) aStr = Replace(aStr,"[$]" ,"$",Every = .true.) aStr = Replace(aStr,"[$$]","$",Every = .true.) + name_loc=aStr CALL LowCase(TRIM(CHAR(aStr)),opt%namelowercase) opt%ind = INDEX(TRIM(opt%namelowercase),"$") IF(opt%ind.LE.0)THEN CALL abort(__STAMP__& ,'[numberedmulti] parameter does not contain "$" symbol, which is required for these kinds of variables for ['//TRIM(name)//']') END IF ! opt%ind.LE.0 +ELSE + name_loc=name END IF ! opt%numberedmulti -opt%name = name +opt%name = TRIM(name_loc) opt%isSet = .FALSE. opt%description = description opt%section = this%actualSection @@ -1205,6 +1225,9 @@ END FUNCTION CountOption !================================================================================================================================== SUBROUTINE GetGeneralOption(value, name, proposal) USE MOD_Options +#if USE_LOADBALANCE +USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance +#endif /*USE_LOADBALANCE*/ !---------------------------------------------------------------------------------------------------------------------------------- ! INPUT / OUTPUT VARIABLES CHARACTER(LEN=*),INTENT(IN) :: name !< parameter name @@ -1230,7 +1253,61 @@ SUBROUTINE GetGeneralOption(value, name, proposal) CLASS(StringOption) ,ALLOCATABLE,TARGET :: stringopt !================================================================================================================================== !================================================================================================================================== - +IF (PerformLoadBalance) THEN + current => prms%firstLink + DO WHILE (associated(current)) + opt => current%opt + SELECT TYPE (opt) + CLASS IS (IntOption) + SELECT TYPE(value) + TYPE IS (INTEGER) + value = opt%value + WRITE(tmpValue, *) opt%value + END SELECT + CLASS IS (RealOption) + SELECT TYPE(value) + TYPE IS (REAL) + value = opt%value + WRITE(tmpValue, *) opt%value + END SELECT + CLASS IS (LogicalOption) + SELECT TYPE(value) + TYPE IS (LOGICAL) + value = opt%value + WRITE(tmpValue, *) opt%value + END SELECT + CLASS IS (StringOption) + SELECT TYPE(value) + TYPE IS (STR255) + ! If the string contains a comma, strip it and provide the first part of this string. This might occur when directly running a regressioncheck file + ind = INDEX(opt%value,",") + IF (ind.GT.0) THEN + opt%value = opt%value(1:ind-1) + ! Print option and value to stdout. Custom print, so do it here + WRITE(fmtName,*) prms%maxNameLen + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL set_formatting("blue") + SWRITE(UNIT_stdOut,"(A"//fmtName//")", ADVANCE='NO') TRIM(name) + CALL clear_formatting() + SWRITE(UNIT_stdOut,'(A3)', ADVANCE='NO') " | " + CALL opt%printValue(prms%maxValueLen) + SWRITE(UNIT_stdOut,"(A3)", ADVANCE='NO') ' | ' + CALL set_formatting("cyan") + SWRITE(UNIT_stdOut,'(A7)', ADVANCE='NO') "*SPLIT" + CALL clear_formatting() + SWRITE(UNIT_stdOut,"(A3)") ' | ' + ! Set mode to indicate print already occured + mode = 1 + END IF + value%chars = opt%value + END SELECT + END SELECT + SWRITE(*,*) TRIM(current%opt%name), " " ,tmpValue + current => current%next + END DO + SWRITE(*,*) "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q" + ! READ(*,*) +END IF ! iterate over all options current => prms%firstLink DO WHILE (associated(current)) @@ -2444,14 +2521,14 @@ SUBROUTINE PrintOption(NameOpt,InfoOpt,IntOpt,IntArrayOpt,RealOpt,LogOpt,LogArra IF(.NOT.MPIRoot)RETURN ! Return if running loadbalance and printing static information -#if USE_LOADBALANCE -IF (PerformLoadBalance) THEN - SELECT CASE(TRIM(InfoOpt)) - CASE("INFO","PARAM","CALCUL.","OUTPUT","HDF5") - RETURN - END SELECT -END IF -#endif /*USE_LOADBALANCE*/ +! #if USE_LOADBALANCE +! IF (PerformLoadBalance) THEN +! SELECT CASE(TRIM(InfoOpt)) +! CASE("INFO","PARAM","CALCUL.","OUTPUT","HDF5") +! RETURN +! END SELECT +! END IF +! #endif /*USE_LOADBALANCE*/ ! set length of name WRITE(fmtName,*) prms%maxNameLen From 819f0b3864a799b959b6ccb9116f03c4ecf6d117 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Mon, 22 Apr 2024 17:06:18 +0200 Subject: [PATCH 12/37] real 2D tracking for uncurved meshes --- src/globals/globals.f90 | 19 ++ .../boundary/particle_boundary_condition.f90 | 4 +- src/particles/dsmc/dsmc_symmetry.f90 | 2 +- .../emission/particle_emission_tools.f90 | 4 +- src/particles/particle_mesh/particle_mesh.f90 | 3 +- .../particle_mesh/particle_mesh_tools.f90 | 81 +++++++- src/particles/restart/particle_restart.f90 | 4 +- .../tracking/particle_intersection.f90 | 86 +++++++- .../tracking/particle_localization.f90 | 6 +- src/particles/tracking/particle_tracking.f90 | 4 +- .../tracking/particle_triatracking.f90 | 186 +++++++++++++++++- .../radiative_transfer/radtrans_init.f90 | 11 +- .../radiative_transfer/radtrans_main.f90 | 6 +- 13 files changed, 387 insertions(+), 29 deletions(-) diff --git a/src/globals/globals.f90 b/src/globals/globals.f90 index 9b0c83cb3..3008240eb 100644 --- a/src/globals/globals.f90 +++ b/src/globals/globals.f90 @@ -985,6 +985,25 @@ PPURE FUNCTION VECNORM(v1) VECNORM=SQRT(v1(1)*v1(1)+v1(2)*v1(2)+v1(3)*v1(3)) END FUNCTION VECNORM +PPURE FUNCTION VECNORM2D(v1) +!=================================================================================================================================== +! Computes the Euclidean norm (length) of a vector +!=================================================================================================================================== +! MODULES +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +REAL,INTENT(IN) :: v1(2) ! Vector +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +REAL :: VECNORM2D ! Euclidean norm (length) of the vector v1 +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +!=================================================================================================================================== +VECNORM2D=SQRT(v1(1)*v1(1)+v1(2)*v1(2)) +END FUNCTION VECNORM2D + PPURE SUBROUTINE OrthoNormVec(v1,v2,v3) !=================================================================================================================================== diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index a18f209d3..5cb01bb9e 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -277,7 +277,7 @@ SUBROUTINE RotPeriodicBoundary(PartID,SideID,ElemID) USE MOD_Globals USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Particle_Intersection ,ONLY: IntersectionWithWall, ParticleThroughSideCheck3DFast -USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared, SideInfo_Shared, ElemSideNodeID_Shared, NodeCoords_Shared USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos,Species,PartSpecies,PartVeloRotRef,PDM USE MOD_Particle_Boundary_Vars ,ONLY: PartBound @@ -424,7 +424,7 @@ SUBROUTINE RotPeriodicBoundary(PartID,SideID,ElemID) ! Fallback tracking: Check whether the rotated particle position with a tolerance can be found with the domain DO iNeigh=1,NumRotPeriodicNeigh(RotSideID) newElemID = RotPeriodicSideMapping(RotSideID,iNeigh) - CALL ParticleInsideQuad3D(PartState_rot_tol(1:3),newElemID,ParticleFound) + CALL ParticleInsideQuad(PartState_rot_tol(1:3),newElemID,ParticleFound) IF(ParticleFound) THEN PartState(1:3,PartID) = PartState_rot_tol(1:3) ElemID = newElemID diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index 4b6049060..dff1e55a9 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -665,7 +665,7 @@ SUBROUTINE DSMC_2D_SetInClones() PEM%GlobalElemID(PositionNbr) = ClonedParticles(iPart,DelayCounter)%Element PEM%LastGlobalElemID(PositionNbr) = PEM%GlobalElemID(PositionNbr) locElemID = PEM%LocalElemID(PositionNbr) - LastPartPos(1:3,PositionNbr) = ClonedParticles(iPart,DelayCounter)%LastPartPos(1:3) + LastPartPos(1:3,PositionNbr) = PartState(1:3,PositionNbr) PartMPF(PositionNbr) = ClonedParticles(iPart,DelayCounter)%WeightingFactor IF (UseVarTimeStep) THEN PartTimeStep(PositionNbr) = GetParticleTimeStep(PartState(1,PositionNbr),PartState(2,PositionNbr),locElemID) diff --git a/src/particles/emission/particle_emission_tools.f90 b/src/particles/emission/particle_emission_tools.f90 index 4ed3441ab..667f758d1 100644 --- a/src/particles/emission/particle_emission_tools.f90 +++ b/src/particles/emission/particle_emission_tools.f90 @@ -2220,7 +2220,7 @@ SUBROUTINE SetParticlePositionLiu2010SzaboNeutralization(chunkSize,particle_posi USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Mesh_Vars ,ONLY: BoundsOfElem_Shared USE MOD_Particle_Vars ,ONLY: isNeutralizationElem,NeutralizationBalanceElem -USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad !---------------------------------------------------------------------------------------------------------------------------------- ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -2259,7 +2259,7 @@ SUBROUTINE SetParticlePositionLiu2010SzaboNeutralization(chunkSize,particle_posi CALL RANDOM_NUMBER(RandomPos) RandomPos = Bounds(1,:) + RandomPos*(Bounds(2,:)-Bounds(1,:)) ! Use TRIATRACKING inside-element check as the elements must be cuboids for this test case - CALL ParticleInsideQuad3D(RandomPos,GlobalElemID,InsideFlag) + CALL ParticleInsideQuad(RandomPos,GlobalElemID,InsideFlag) END DO END ASSOCIATE ! Accept position diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 5dbdc1fd5..49a65812a 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -188,7 +188,7 @@ SUBROUTINE InitParticleMesh() USE MOD_Particle_MPI_Vars ,ONLY: DoParticleLatencyHiding #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: BuildNodeNeighbourhood,BuildElementOriginShared,BuildElementBasisAndRadius,BuildMesh2DInfo USE MOD_Particle_Mesh_Build ,ONLY: BuildSideOriginAndRadius,BuildLinearSideBaseVectors,BuildSideSlabAndBoundingBox #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance @@ -417,6 +417,7 @@ SUBROUTINE InitParticleMesh() CALL BuildLinearSideBaseVectors() ! Required for BaseVectors0_Shared, BaseVectors1_Shared, BaseVectors2_Shared, BaseVectors3_Shared, BaseVectorsScale_Shared END IF ! UsePhotonTriaTracking + IF(Symmetry%Order.EQ.2) CALL BuildMesh2DInfo() CASE(TRACING,REFMAPPING) ! Build stuff required for tracing algorithms CALL BuildSideSlabAndBoundingBox() ! Required for SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index c33519d3d..a57cf7028 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -32,10 +32,35 @@ MODULE MOD_Particle_Mesh_Tools PUBLIC :: ParticleInsideQuad3D, InitPEM_LocalElemID, InitPEM_CNElemID, GetGlobalNonUniqueSideID, GetSideBoundingBoxTria PUBLIC :: GetMeshMinMax, IdentifyElemAndSideType, WeirdElementCheck, CalcParticleMeshMetrics, CalcXCL_NGeo -PUBLIC :: CalcBezierControlPoints, InitParticleGeometry, ComputePeriodicVec +PUBLIC :: CalcBezierControlPoints, InitParticleGeometry, ComputePeriodicVec, ParticleInsideQuad2D, ParticleInsideQuad !=================================================================================================================================== CONTAINS +SUBROUTINE ParticleInsideQuad(PartStateLoc,ElemID,InElementCheck,Det_Out) +!=================================================================================================================================== +!> Choose correct ParticleInsideQuad depending on Symmetry dimension +!=================================================================================================================================== +! MODULES +USE MOD_Particle_Vars ,ONLY: Symmetry +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT/OUTPUT VARIABLES +INTEGER,INTENT(IN) :: ElemID +REAL ,INTENT(IN) :: PartStateLoc(3) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +LOGICAL,INTENT(OUT) :: InElementCheck +REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) +!----------------------------------------------------------------------------------------------------------------------------------- +!=================================================================================================================================== +IF (Symmetry%Order.EQ.2) THEN + CALL ParticleInsideQuad2D(PartStateLoc(1:2),ElemID,InElementCheck) +ELSE + CALL ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) +END IF +END SUBROUTINE ParticleInsideQuad !PPURE SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det) SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) @@ -184,6 +209,58 @@ SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) END SUBROUTINE ParticleInsideQuad3D +SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) +!=================================================================================================================================== +!> Checks if particle is inside of a linear 2D element with4 faces, compatible with mortars +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared,SideInfo_Shared,NodeCoords_Shared, SideIsSymSide +USE MOD_Particle_Mesh_Vars ,ONLY :ElemSideNodeID2D_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT/OUTPUT VARIABLES +INTEGER,INTENT(IN) :: ElemID +REAL ,INTENT(IN) :: PartStateLoc(2) +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +LOGICAL,INTENT(OUT) :: InElementCheck +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: ilocSide, TempSideID, ind, NbElemID, nNbMortars, nlocSides, localSideID +INTEGER :: CNElemID +LOGICAL :: PosCheck, NegCheck, InElementCheckMortar, InElementCheckMortarNb +REAL :: x_int, xNode1, xNode2, yNode1, yNode2 +!=================================================================================================================================== +CNElemID = GetCNElemID(ElemID) +InElementCheck = .FALSE. +nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + +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 (SideIsSymSide(TempSideID)) CYCLE + xNode1 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,localSideID, CNElemID)) + yNode1 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,localSideID, CNElemID)) + xNode2 = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,localSideID, CNElemID)) + yNode2 = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,localSideID, CNElemID)) + IF ( (yNode1 >= PartStateLoc(2) .AND. yNode2 < PartStateLoc(2)) .OR. & + (yNode1 < PartStateLoc(2) .AND. yNode2 >= PartStateLoc(2)) ) THEN + ! Compute x-coordinate of the intersection point + x_int = (PartStateLoc(2)- yNode1) * (xNode2 - xNode1) / (yNode2 - yNode1) + xNode1 + ! Check if the ray crosses the edge to the right + IF (x_int > PartStateLoc(1)) THEN + InElementCheck = .NOT.InElementCheck + END IF + END IF +END DO +END SUBROUTINE ParticleInsideQuad2D + PPURE SUBROUTINE ParticleInsideNbMortar(PartStateLoc,ElemID,InElementCheck) !=================================================================================================================================== @@ -1922,4 +1999,4 @@ SUBROUTINE ComputePeriodicVec() END SUBROUTINE ComputePeriodicVec -END MODULE MOD_Particle_Mesh_Tools \ No newline at end of file +END MODULE MOD_Particle_Mesh_Tools diff --git a/src/particles/restart/particle_restart.f90 b/src/particles/restart/particle_restart.f90 index 9c207e0a6..aa57137c4 100644 --- a/src/particles/restart/particle_restart.f90 +++ b/src/particles/restart/particle_restart.f90 @@ -49,7 +49,7 @@ SUBROUTINE ParticleRestart() USE MOD_DSMC_Vars ,ONLY: ElectronicDistriPart, AmbipolElecVelo ! Localization USE MOD_Particle_Localization ,ONLY: LocateParticleInElement,SinglePointToElement -USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad USE MOD_Particle_Mesh_Vars ,ONLY: ElemEpsOneCell USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod,NbrOfLostParticles,CountNbrOfLostParts USE MOD_Particle_Tracking_Vars ,ONLY: NbrOfLostParticlesTotal,TotalNbrOfMissingParticlesSum,NbrOfLostParticlesTotal_old @@ -306,7 +306,7 @@ SUBROUTINE ParticleRestart() CASE(TRIATRACKING) DO iPart = 1,PDM%ParticleVecLength ! Check if particle is inside the correct element - CALL ParticleInsideQuad3D(PartState(1:3,iPart),PEM%GlobalElemID(iPart),InElementCheck,det) + CALL ParticleInsideQuad(PartState(1:3,iPart),PEM%GlobalElemID(iPart),InElementCheck,det) ! Particle not in correct element, try to find them within MyProc IF (.NOT.InElementCheck) THEN diff --git a/src/particles/tracking/particle_intersection.f90 b/src/particles/tracking/particle_intersection.f90 index ef06ae9bd..c65880c5b 100644 --- a/src/particles/tracking/particle_intersection.f90 +++ b/src/particles/tracking/particle_intersection.f90 @@ -49,7 +49,7 @@ MODULE MOD_Particle_InterSection PUBLIC :: ComputePlanarCurvedIntersection PUBLIC :: ComputeBilinearIntersection PUBLIC :: ComputeCurvedIntersection -PUBLIC :: ParticleThroughSideCheck3DFast +PUBLIC :: ParticleThroughSideCheck3DFast, ParticleThroughSideCheck2D PUBLIC :: ParticleThroughSideLastPosCheck #ifdef CODE_ANALYZE PUBLIC :: OutputTrajectory @@ -254,6 +254,90 @@ PPURE SUBROUTINE ParticleThroughSideCheck3DFast(PartID,iLocSide,Element,ThroughS END SUBROUTINE ParticleThroughSideCheck3DFast +SUBROUTINE ParticleThroughSideCheck2D(PartID,iLocSide,Element,ThroughSide) +!=================================================================================================================================== +!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalized 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 zero, 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 ,ONLY: VECNORM2D +USE MOD_Globals_Vars ,ONLY: EpsMach +USE MOD_Particle_Vars ,ONLY: lastPartPos,PartState +USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemSideNodeID2D_Shared +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: PartID +INTEGER,INTENT(IN) :: iLocSide +INTEGER,INTENT(IN) :: Element +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +LOGICAL,INTENT(OUT) :: ThroughSide +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: CNElemID +REAL :: xNode(2), yNode(2), POI(2) , locAlpha, VecPart(2), VecEdge(2) +REAL :: t(2),tmpPoint, PartP1(2), PartP2(2),denominator +!=================================================================================================================================== + +CNElemID = GetCNElemID(Element) + +ThroughSide = .FALSE. + +! Get the coordinates of the first node and the vector from the particle position to the node +xNode(1) = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID)) +xNode(2) = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID)) +IF (xNode(1).GT.xNode(2)) THEN + tmpPoint = xNode(1) + xNode(1) = xNode(2) + xNode(2) = tmpPoint + yNode(2) = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID)) + yNode(1) = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID)) +ELSE + yNode(1) = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID)) + yNode(2) = NodeCoords_Shared(2,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID)) +END IF + +IF (LastPartPos(1,PartID).LT.PartState(1,PartID)) THEN + PartP1(1:2)=LastPartPos(1:2,PartID) + PartP2(1:2)=PartState(1:2,PartID) +ELSE + PartP2(1:2)=LastPartPos(1:2,PartID) + PartP1(1:2)=PartState(1:2,PartID) +END IF +VecPart = PartP2-PartP1 +VecEdge(1) = xNode(2)-xNode(1) +VecEdge(2) = yNode(2)-yNode(1) +denominator = VecPart(1)*VecEdge(2) - VecPart(2)*VecEdge(1) + +! Check if the lines are parallel +IF (ABS(denominator).LT.EpsMach) RETURN + +t(1) = ((xNode(1)-PartP1(1))*VecEdge(2)-(yNode(1)-PartP1(2))*VecEdge(1))/denominator +t(2) = ((xNode(1)-PartP1(1))*VecPart(2)-(yNode(1)-PartP1(2))*VecPart(1))/denominator + +! Check if intersection point is within line segments +IF (t(1) >= 0.0 .AND. t(1) <= 1.0 .AND. t(2) >= 0.0 .AND. t(2) <= 1.0) THEN + ! Calculate intersection point + POI(1:2) = PartP1 + t(1)*VecPart + POI = POI - LastPartPos(1:2,PartID) + + locAlpha = VECNORM2D(POI) + IF (locAlpha.LE.TrackInfo%lengthPartTrajectory) THEN + ThroughSide = .TRUE. + TrackInfo%alpha = locAlpha + END IF +END IF + +END SUBROUTINE ParticleThroughSideCheck2D + + SUBROUTINE ParticleThroughSideLastPosCheck(i,iLocSide,Element,InElementCheck,TriNum,det,isMortarSide,detPartPos) !=================================================================================================================================== !> Routine used in the case of a particle crossing multipe sides. Calculates the determinant of the three vectors from the last diff --git a/src/particles/tracking/particle_localization.f90 b/src/particles/tracking/particle_localization.f90 index ccc310683..dc556af26 100644 --- a/src/particles/tracking/particle_localization.f90 +++ b/src/particles/tracking/particle_localization.f90 @@ -92,7 +92,7 @@ INTEGER FUNCTION SinglePointToElement(Pos3D,doHALO,doEmission_opt) USE MOD_Particle_Mesh_Vars ,ONLY: GEO,ElemEpsOneCell USE MOD_Particle_Mesh_Vars ,ONLY: FIBGM_nElems, FIBGM_offsetElem, FIBGM_Element USE MOD_Mesh_Tools ,ONLY: GetCNElemID,GetGlobalElemID -USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad USE MOD_Particle_Tracking_Vars ,ONLY: Distance,ListDistance,TrackingMethod USE MOD_Utils ,ONLY: InsertionSort #if USE_MPI @@ -169,7 +169,7 @@ INTEGER FUNCTION SinglePointToElement(Pos3D,doHALO,doEmission_opt) SELECT CASE(TrackingMethod) CASE(TRIATRACKING) - CALL ParticleInsideQuad3D(Pos3D(1:3),ElemID,InElementCheck,Det) + CALL ParticleInsideQuad(Pos3D(1:3),ElemID,InElementCheck,Det) CASE(TRACING) CALL GetPositionInRefElem(Pos3D(1:3),RefPos,ElemID) @@ -467,4 +467,4 @@ PPURE FUNCTION PARTHASMOVED(lengthPartTrajectory,ElemRadiusNGeo) END FUNCTION PARTHASMOVED -END MODULE MOD_Particle_Localization \ No newline at end of file +END MODULE MOD_Particle_Localization diff --git a/src/particles/tracking/particle_tracking.f90 b/src/particles/tracking/particle_tracking.f90 index 9c0a7d7e5..2ad8b6391 100644 --- a/src/particles/tracking/particle_tracking.f90 +++ b/src/particles/tracking/particle_tracking.f90 @@ -78,7 +78,7 @@ LOGICAL FUNCTION ParticleInsideCheck(Position,iPart,GlobalElemID) USE MOD_Globals USE MOD_Particle_Tracking_Vars ,ONLY: TrackingMethod USE MOD_Particle_Localization ,ONLY: PartInElemCheck -USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad USE MOD_Eval_xyz ,ONLY: GetPositionInRefElem USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Particle_Vars ,ONLY: PartPosRef @@ -104,7 +104,7 @@ LOGICAL FUNCTION ParticleInsideCheck(Position,iPart,GlobalElemID) CASE(TRACING) CALL PartInElemCheck(Position,iPart,GlobalElemID,ParticleInsideCheck) CASE(TRIATRACKING) - CALL ParticleInsideQuad3D(Position,GlobalElemID,ParticleInsideCheck) + CALL ParticleInsideQuad(Position,GlobalElemID,ParticleInsideCheck) CASE DEFAULT CALL abort(__STAMP__,'TrackingMethod not implemented! TrackingMethod =',IntInfoOpt=TrackingMethod) END SELECT diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index bf6040499..40325bd5e 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -40,7 +40,7 @@ SUBROUTINE ParticleTriaTracking() ! MODULES USE MOD_Preproc USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx +USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx,Symmetry USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_RadialWeighting, DSMC_2D_SetInClones USE MOD_part_tools ,ONLY: ParticleOnProc @@ -81,7 +81,11 @@ SUBROUTINE ParticleTriaTracking() #else IF (PDM%ParticleInside(i)) THEN #endif /*IMPA*/ - CALL SingleParticleTriaTracking(i=i) + IF(Symmetry%Order.EQ.2) THEN + CALL SingleParticleTriaTracking2D(i) + ELSE + CALL SingleParticleTriaTracking(i=i) + END IF END IF ! Particle treatment for an axisymmetric simulation (cloning/deleting particles) IF(RadialWeighting%PerformCloning) THEN @@ -135,7 +139,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) USE MOD_Particle_Tracking_vars ,ONLY: DisplayLostParticles USE MOD_Part_Tools ,ONLY: StoreLostParticleProperties USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck3DFast, ParticleThroughSideLastPosCheck, IntersectionWithWall +USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck3DFast, ParticleThroughSideLastPosCheck, IntersectionWithWall, ParticleThroughSideCheck2D USE MOD_Particle_Boundary_Condition ,ONLY: GetBoundaryInteraction USE MOD_part_tools ,ONLY: ParticleOnProc, InRotRefFrameCheck USE MOD_part_operations ,ONLY: RemoveParticle @@ -459,4 +463,180 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) END SUBROUTINE SingleParticleTriaTracking +SUBROUTINE SingleParticleTriaTracking2D(i) +!=================================================================================================================================== +! Routine for tracking of moving particles and boundary interaction using triangulated sides. +! 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_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Vars ,ONLY: PEM,PDM,PartSpecies +USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos +USE MOD_Particle_Vars ,ONLY: Symmetry +USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef +USE MOD_Particle_Mesh_Vars +USE MOD_Particle_Tracking_vars ,ONLY: ntracks,MeasureTrackTime,CountNbrOfLostParts, NbrOfLostParticles, TrackInfo +USE MOD_Particle_Tracking_vars ,ONLY: DisplayLostParticles +USE MOD_Part_Tools ,ONLY: StoreLostParticleProperties +USE MOD_Particle_Boundary_Vars ,ONLY: PartBound +USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck2D, 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 +#endif /*USE_LOADBALANCE*/ +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------! +! INPUT VARIABLES +INTEGER,INTENT(IN) :: i +!----------------------------------------------------------------------------------------------------------------------------------! +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: NblocSideID, NbElemID, CNElemID, ind, nbSideID, nMortarElems,BCType +INTEGER :: ElemID,flip,OldElemID,nlocSides +INTEGER :: LocalSide +INTEGER :: NrOfThroughSides, ind2 +INTEGER :: SideID,TempSideID,iLocSide, localSideID +INTEGER :: LastSide +INTEGER :: SecondNrOfThroughSides, indSide +LOGICAL :: ThroughSide, InElementCheck,PartisDone +LOGICAL :: crossedBC, oldElemIsMortar,doCheckSide +REAL :: det(6,2),detM,ratio,minRatio, detPartPos +REAL, PARAMETER :: eps = 0 +!----------------------------------------------------------------------------------------------------------------------------------- +#if USE_LOADBALANCE +REAL :: tLBStart +#endif /*USE_LOADBALANCE*/ +!=================================================================================================================================== +#if USE_LOADBALANCE +CALL LBStartTime(tLBStart) +#endif /*USE_LOADBALANCE*/ +IF (MeasureTrackTime) nTracks=nTracks+1 +PartisDone = .FALSE. +ElemID = PEM%LastGlobalElemID(i) +TrackInfo%CurrElem=ElemID +SideID = 0 +LastSide = 0 +! 2) Loop tracking until particle is considered "done" (either localized or deleted) +DO WHILE (.NOT.PartisDone) + ! 2a) Perform a check based on the determinant of (3x3) matrix of the vectors from the particle position to the nodes of each + oldElemIsMortar = .FALSE. + ! 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) + NrOfThroughSides = 0 + TrackInfo%PartTrajectory(1:3)=PartState(1:3,i) - LastPartPos(1:3,i) + TrackInfo%lengthPartTrajectory=VECNORM(TrackInfo%PartTrajectory(1:3)) + IF(ABS(TrackInfo%lengthPartTrajectory).GT.0.) TrackInfo%PartTrajectory = TrackInfo%PartTrajectory & + / TrackInfo%lengthPartTrajectory + nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + SideLoop: DO iLocSide=1,nlocSides + TempSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide + ! Skip symmetry side + IF(SideIsSymSide(TempSideID)) CYCLE + 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 + IF (nbSideID.EQ.LastSide) CYCLE + 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) + ThroughSide = .FALSE. + CALL ParticleThroughSideCheck2D(i,NblocSideID,NbElemID,ThroughSide) + IF (ThroughSide) THEN + ! Store the information for this side for future checks, if this side was already treated + oldElemIsMortar = .TRUE. + NrOfThroughSides = NrOfThroughSides + 1 + SideID = nbSideID + LastSide = nbSideID + LocalSide = NblocSideID + EXIT SideLoop + END IF + END DO + ELSE ! Regular side + IF (TempSideID.EQ.LastSide) CYCLE + ThroughSide = .FALSE. + CALL ParticleThroughSideCheck2D(i,localSideID,ElemID,ThroughSide) + IF (ThroughSide) THEN + NrOfThroughSides = NrOfThroughSides + 1 + SideID = TempSideID + LocalSide = localSideID + LastSide = SideInfo_Shared(SIDE_NBSIDEID,TempSideID) + EXIT SideLoop + END IF + END IF ! Mortar or regular side + END DO SideLoop + + ! ---------------------------------------------------------------------------- + ! Addition treatment if particle did not cross any sides or it crossed multiple sides + IF (NrOfThroughSides.EQ.0) THEN + PEM%GlobalElemID(i) = ElemID + PartisDone = .TRUE. + ELSE + ! ---------------------------------------------------------------------------- + ! 3) In case of a boundary, perform the appropriate boundary interaction + crossedBC=.FALSE. + flip = MERGE(0, MOD(SideInfo_Shared(SIDE_FLIP,SideID),10),SideInfo_Shared(SIDE_ID,SideID).GT.0) + IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN + LastSide=SideID + OldElemID=ElemID + BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))) + ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) + CALL GetBoundaryInteraction(i,SideID,flip,ElemID,crossedBC,TriNum=1) + IF(.NOT.PDM%ParticleInside(i)) PartisDone = .TRUE. +#if USE_LOADBALANCE + IF (OldElemID.GE.offsetElem+1.AND.OldElemID.LE.offsetElem+PP_nElems) CALL LBElemSplitTime(OldElemID-offsetElem,tLBStart) +#endif /*USE_LOADBALANCE*/ + ELSE ! SideInfo_Shared(SIDE_BCID,SideID).LE.0 + IF (oldElemIsMortar) THEN + ElemID = SideInfo_Shared(SIDE_ELEMID,SideID) + ELSE + ElemID = SideInfo_Shared(SIDE_NBELEMID,SideID) + END IF + END IF ! SideInfo_Shared(SIDE_BCID,SideID).GT./.LE. 0 + CNElemID = GetCNElemID(ElemID) + + IF (CNElemID.LT.1) THEN + IPWRITE(UNIT_StdOut,*) "VECNORM(PartState(1:3,i)-LastPartPos(1:3,i)): ", VECNORM(PartState(1:3,i)-LastPartPos(1:3,i)) + IPWRITE(UNIT_StdOut,*) " PartState(1:3,i) : ", PartState(1:3,i) + IPWRITE(UNIT_StdOut,*) " LastPartPos(1:3,i): ", LastPartPos(1:3,i) + IPWRITE(UNIT_StdOut,*) " PartState(4:6,i) : ", PartState(4:6,i) + IPWRITE(UNIT_StdOut,*) " ElemID: ", ElemID + IPWRITE(UNIT_StdOut,*) " CNElemID: ", CNElemID + IPWRITE(UNIT_stdout,*) 'Particle Velocity: ',SQRT(DOTPRODUCT(PartState(4:6,i))) + CALL abort(& + __STAMP__ & + ,'ERROR: Element not defined! Please increase the size of the halo region (HaloEpsVelo)!') + END IF + TrackInfo%CurrElem = ElemID + END IF +END DO ! .NOT.PartisDone +#if USE_LOADBALANCE +IF(ParticleOnProc(i)) CALL LBElemPauseTime(PEM%LocalElemID(i),tLBStart) +#endif /*USE_LOADBALANCE*/ + +END SUBROUTINE SingleParticleTriaTracking2D + END MODULE MOD_Particle_TriaTracking diff --git a/src/radiation/radiative_transfer/radtrans_init.f90 b/src/radiation/radiative_transfer/radtrans_init.f90 index aa907ccbf..741bfde31 100644 --- a/src/radiation/radiative_transfer/radtrans_init.f90 +++ b/src/radiation/radiative_transfer/radtrans_init.f90 @@ -83,7 +83,6 @@ SUBROUTINE InitRadiationTransport() 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 @@ -166,7 +165,6 @@ SUBROUTINE InitRadiationTransport() 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)) @@ -536,7 +534,7 @@ SUBROUTINE ElemInObsCone(ElemID, ElemInCone) 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_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad USE MOD_Photon_TrackingTools ,ONLY: PhotonIntersectionWithSide2DDir, PhotonThroughSideCheck3DDir ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -579,7 +577,7 @@ SUBROUTINE ElemInObsCone(ElemID, ElemInCone) 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) + CALL ParticleInsideQuad(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 @@ -608,7 +606,7 @@ SUBROUTINE ElemInObsCone(ElemID, ElemInCone) 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) + CALL ParticleInsideQuad(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 @@ -632,7 +630,7 @@ SUBROUTINE ElemInObsCone(ElemID, ElemInCone) 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) + CALL ParticleInsideQuad(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 @@ -660,7 +658,6 @@ SUBROUTINE ElemOnLineOfSight(ElemID, ElemInCone) 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 diff --git a/src/radiation/radiative_transfer/radtrans_main.f90 b/src/radiation/radiative_transfer/radtrans_main.f90 index ab6f8db9b..3ad3672a1 100644 --- a/src/radiation/radiative_transfer/radtrans_main.f90 +++ b/src/radiation/radiative_transfer/radtrans_main.f90 @@ -260,7 +260,7 @@ FUNCTION SetPhotonPos(iElem, globPhotNum) ! MODULES USE MOD_Globals USE MOD_RadiationTrans_Vars, ONLY : RadiationPhotonPosModel, RadObservationPointMethod, RadObservationPOI -USE MOD_Particle_Mesh_Tools, ONLY : ParticleInsideQuad3D +USE MOD_Particle_Mesh_Tools, ONLY : ParticleInsideQuad USE MOD_RadiationTrans_Init, ONLY : HALTON !USE MOD_PARTICLE_Vars, ONLY : Symmetry2DAxisymmetric USE MOD_Particle_Mesh_Vars, ONLY : BoundsOfElem_Shared @@ -285,7 +285,7 @@ FUNCTION SetPhotonPos(iElem, globPhotNum) 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) + CALL ParticleInsideQuad(SetPhotonPos,globElemID,InsideFlag) IF (.NOT.InsideFlag) THEN IPWRITE(*,*) 'Photonpos not in Element! Pos:',SetPhotonPos CALL abort(& @@ -307,7 +307,7 @@ FUNCTION SetPhotonPos(iElem, globPhotNum) 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) + CALL ParticleInsideQuad(SetPhotonPos,globElemID,InsideFlag) IF (RadObservationPointMethod.EQ.1) THEN IF (InsideFlag) THEN InsideFlag = PointInObsCone(SetPhotonPos) From e90c1892037660432066096ba9530f8dc77485d8 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Mon, 22 Apr 2024 21:23:53 +0200 Subject: [PATCH 13/37] special treatment of surfaceflux parts in 2d tracking --- src/particles/emission/particle_surface_flux.f90 | 6 +++++- src/particles/tracking/particle_triatracking.f90 | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index 39b090fba..368f73de3 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -235,7 +235,11 @@ SUBROUTINE ParticleSurfaceflux() 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" + IF (Symmetry%Order.EQ.2) THEN + PEM%LastGlobalElemID(ParticleIndexNbr) = -SideID + ELSE + PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" + END IF iPartTotal = iPartTotal + 1 IF (UseVarTimeStep) THEN PartTimeStep(ParticleIndexNbr) = GetParticleTimeStep(PartState(1,ParticleIndexNbr),PartState(2,ParticleIndexNbr), & diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 40325bd5e..f249d8e9a 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -527,10 +527,16 @@ SUBROUTINE SingleParticleTriaTracking2D(i) #endif /*USE_LOADBALANCE*/ IF (MeasureTrackTime) nTracks=nTracks+1 PartisDone = .FALSE. -ElemID = PEM%LastGlobalElemID(i) +IF (PEM%LastGlobalElemID(i).LE.0) THEN + LastSide = -PEM%LastGlobalElemID(i) + ElemID = PEM%GlobalElemID(i) +ELSE + ElemID = PEM%LastGlobalElemID(i) + LastSide = 0 +END IF TrackInfo%CurrElem=ElemID SideID = 0 -LastSide = 0 + ! 2) Loop tracking until particle is considered "done" (either localized or deleted) DO WHILE (.NOT.PartisDone) ! 2a) Perform a check based on the determinant of (3x3) matrix of the vectors from the particle position to the nodes of each From fd0cc481c95b58ae6042f4cd0839504bc25f6a7f Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Tue, 23 Apr 2024 22:47:51 +0200 Subject: [PATCH 14/37] new boundary symmetric_dim --- .../2D_VTS_Insert_CellLocal/parameter.ini | 6 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 6 +- .../CHE_DSMC/1D_Two_Hot_Plates/parameter.ini | 2 +- .../2D_VTS_Insert_CellLocal/parameter.ini | 6 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 6 +- .../parameter.ini | 6 +- .../CHE_DSMC/BC_PorousBC_2DAxi/parameter.ini | 6 +- .../parameter.ini | 4 +- .../parameter.ini | 4 +- .../2D_VTS_Insert_CellLocal/parameter.ini | 6 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 6 +- .../2D_VTS_Distribution/parameter.ini | 6 +- .../Macroscopic_Restart/parameter.ini | 4 +- .../RadTrans_Cylinder_2D/parameter.ini | 4 +- .../WEK_DSMC/1D_Sod_Shocktube/parameter.ini | 2 +- .../parameter.ini | 4 +- .../parameter.ini | 4 +- .../WEK_DSMC/Flow_N2_70degCone/parameter.ini | 4 +- .../Flow_N2-N_70degConeHot/parameter.ini | 4 +- .../Flow_N2_70degCone/parameter.ini | 4 +- .../Flow_N2-N_70degConeHot/parameter.ini | 4 +- src/particles/bgk/bgk_init.f90 | 3 +- .../boundary/particle_boundary_condition.f90 | 2 +- .../boundary/particle_boundary_init.f90 | 3 + .../boundary/particle_boundary_vars.f90 | 3 +- src/particles/dsmc/dsmc_symmetry.f90 | 111 ++++++++++++------ .../emission/particle_surface_flux.f90 | 2 +- src/particles/fp_flow/fpflow_init.f90 | 3 +- src/particles/particle_init.f90 | 2 - src/particles/particle_mesh/particle_mesh.f90 | 8 +- .../particle_mesh/particle_mesh_build.f90 | 82 ++++++++++++- .../particle_mesh/particle_mesh_vars.f90 | 2 + 32 files changed, 225 insertions(+), 94 deletions(-) diff --git a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini index 43e227998..cad1c867c 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini @@ -46,9 +46,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -84,7 +84,7 @@ Particles-OctreePartNumNode=80 Particles-OctreePartNumNodeMin=50 Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T,T,T +Particles-Symmetry-Order=2,2,2 Particles-Symmetry2DAxisymmetric=T,T,F ! Radial Weighting Particles-RadialWeighting=T,F,F diff --git a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini index 6b2340994..3eb8a00a6 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini @@ -44,9 +44,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -83,7 +83,7 @@ Particles-OctreePartNumNode=80 Particles-OctreePartNumNodeMin=50 Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T,T,T +Particles-Symmetry-Order=2,2,2 Particles-Symmetry2DAxisymmetric=T,T,F ! Radial Weighting Particles-RadialWeighting=T,F,F diff --git a/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini b/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini index 5ea20ee68..81c9c4a39 100644 --- a/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini +++ b/regressioncheck/CHE_DSMC/1D_Two_Hot_Plates/parameter.ini @@ -32,7 +32,7 @@ Part-nSpecies=1 Part-nBounds=3 Part-Boundary1-SourceName=BC_Sym -Part-Boundary1-Condition=symmetric +Part-Boundary1-Condition=symmetric_dim Part-Boundary2-SourceName=BC_Inflow Part-Boundary2-Condition=reflective diff --git a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini index 8a6bfcfbb..0236fc7e4 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini @@ -43,9 +43,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -80,7 +80,7 @@ Particles-OctreePartNumNode=80 Particles-OctreePartNumNodeMin=50 Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T,T,T +Particles-Symmetry-Order=2,2,2 Particles-Symmetry2DAxisymmetric=T,T,F ! Radial Weighting Particles-RadialWeighting=T,F,F diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini index ccd9bc1f2..22999ec09 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini @@ -44,9 +44,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -98,4 +98,4 @@ Part-VariableTimeStep-StagnationPoint = 0.0 Part-VariableTimeStep-ScaleFactor2DFront = 2.0 Part-VariableTimeStep-ScaleFactor2DBack = 2.0 -nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor \ No newline at end of file +nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/parameter.ini index acbd71491..44ac2d540 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria_CircInflow/parameter.ini @@ -44,9 +44,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -116,4 +116,4 @@ Part-VariableTimeStep-StagnationPoint = 0.0 Part-VariableTimeStep-ScaleFactor2DFront = 2.0 Part-VariableTimeStep-ScaleFactor2DBack = 2.0 -nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor \ No newline at end of file +nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/parameter.ini b/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/parameter.ini index 297050daf..eb3e8e290 100644 --- a/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/parameter.ini +++ b/regressioncheck/CHE_DSMC/BC_PorousBC_2DAxi/parameter.ini @@ -43,9 +43,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,2e-6/) ! =============================================================================== ! ! PorousBC at Xminus (BC=2) @@ -109,7 +109,7 @@ Particles-DSMC-UseOctree=true Particles-DSMC-UseNearestNeighbour = T Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T +Particles-Symmetry-Order=2 Particles-Symmetry2DAxisymmetric=T ! Radial Weighting Particles-RadialWeighting=F,T diff --git a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/parameter.ini b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/parameter.ini index 01ae9738f..049ddcb9a 100644 --- a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/parameter.ini +++ b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission/parameter.ini @@ -43,9 +43,9 @@ Part-Boundary3-Condition=symmetric Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/ 0.1, 0.1, 1 /) ! =============================================================================== ! ! Species1 - O2 diff --git a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/parameter.ini b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/parameter.ini index 94eff3cd6..71fe14e9d 100644 --- a/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/parameter.ini +++ b/regressioncheck/CHE_DSMC/Symmetry_Initial_Particle_Emission2/parameter.ini @@ -43,9 +43,9 @@ Part-Boundary3-Condition=symmetric Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/ 0.1, 0.1, 1 /) ! =============================================================================== ! ! Species1 - O2 diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini index ed74a5227..058f32df7 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini @@ -43,9 +43,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -79,7 +79,7 @@ Particles-DSMC-UseOctree=true Particles-DSMC-UseNearestNeighbour = T Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T,T,T +Particles-Symmetry-Order=2,2,2 Particles-Symmetry2DAxisymmetric=T,T,F ! Radial Weighting Particles-RadialWeighting=T,F,F diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini index 1069030ec..5d2680b06 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini @@ -44,9 +44,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -82,7 +82,7 @@ Particles-DSMC-UseOctree=true Particles-DSMC-UseNearestNeighbour = T Particles-DSMC-CalcQualityFactors=F ! Symmetry -Particles-Symmetry2D=T,T,T +Particles-Symmetry-Order=2,2,2 Particles-Symmetry2DAxisymmetric=T,T,F ! Radial Weighting Particles-RadialWeighting=T,F,F diff --git a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini index 11b536092..581e57c5a 100644 --- a/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini +++ b/regressioncheck/NIG_DSMC/2D_VTS_Distribution/parameter.ini @@ -51,9 +51,9 @@ Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2e-6,2e-6,1e-6/) ! =============================================================================== ! ! Species1 - O2 @@ -86,7 +86,7 @@ Particles-DSMC-UseOctree=true Particles-DSMC-UseNearestNeighbour = T Particles-DSMC-CalcQualityFactors=T ! Symmetry -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T diff --git a/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini b/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini index 5241016d9..a4aa6bcf5 100644 --- a/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini +++ b/regressioncheck/NIG_DSMC/Macroscopic_Restart/parameter.ini @@ -58,7 +58,7 @@ Part-Boundary3-RotACC = 1. Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! Species1 - N2 @@ -105,7 +105,7 @@ Particles-OctreePartNumNode = 40 Particles-OctreePartNumNodeMin = 28 Particles-MPIWeight = 1000 ! Symmetry -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T diff --git a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini index f09b19eb6..1e3994b1a 100644 --- a/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini +++ b/regressioncheck/NIG_Radiation/RadTrans_Cylinder_2D/parameter.ini @@ -43,7 +43,7 @@ Part-Boundary1-Condition=symmetric_axis Part-Boundary2-SourceName=BC_WALL Part-Boundary2-Condition=reflective Part-Boundary3-SourceName=BC_MIR -Part-Boundary3-Condition=symmetric +Part-Boundary3-Condition=symmetric_dim Part-Boundary4-SourceName=BC_OUT Part-Boundary4-Condition=reflective @@ -101,7 +101,7 @@ Radiation-PhotonWaveLengthModel = 1 ! Absorption models: 1:Acceptance Rejec ! =============================================================================== ! ! 2D/Axisymmetric Simulation ! =============================================================================== ! -Particles-Symmetry2D=T +Particles-Symmetry-Order=2 Particles-Symmetry2DAxisymmetric=T Particles-RadialWeighting=T Particles-RadialWeighting-PartScaleFactor=10000 diff --git a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini index 35c1431c8..6b27284f1 100644 --- a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini +++ b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/parameter.ini @@ -39,7 +39,7 @@ Part-nSpecies=1 Part-nBounds=3 Part-Boundary1-SourceName=BC_Sym -Part-Boundary1-Condition=symmetric +Part-Boundary1-Condition=symmetric_dim Part-Boundary2-SourceName=BC_Inflow Part-Boundary2-Condition=symmetric diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini index bfee0a2b4..65d717768 100644 --- a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini +++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/parameter.ini @@ -58,9 +58,9 @@ Part-Boundary3-RotACC=1. Part-Boundary4-SourceName=BC_Yminus Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2.5e-4,1e-3,1e-4/) ! =============================================================================== ! ! Species1 - O2 diff --git a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini index 347f5951b..2af5a2afc 100644 --- a/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini +++ b/regressioncheck/WEK_DSMC/Flow_Argon_Cylinder_LinearMesh/parameter.ini @@ -48,7 +48,7 @@ Part-Boundary3-RotACC=1. Part-Boundary4-SourceName=SYMAXIS Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=SYM -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-FIBGMdeltas=(/0.002,0.002,0.01/) ! =============================================================================== ! ! Species1 - Ar @@ -89,4 +89,4 @@ Particles-DSMC-UseOctree=true Particles-DSMC-UseNearestNeighbour = T Particles-MPIWeight=1000 ! Symmetry -Particles-Symmetry2D=T +Particles-Symmetry-Order = 2 diff --git a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini index d415cecb7..b175098a8 100644 --- a/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini +++ b/regressioncheck/WEK_DSMC/Flow_N2_70degCone/parameter.ini @@ -58,7 +58,7 @@ Part-Boundary3-RadiativeEmissivity = 1.0 Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! PARTICLES @@ -110,7 +110,7 @@ Particles-OctreePartNumNode = 40 Particles-OctreePartNumNodeMin = 28 Particles-MPIWeight = 1000 ! Symmetry -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T diff --git a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini index c4ccd779b..1308c58d0 100644 --- a/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini +++ b/regressioncheck/WEK_DSMC_Radiation/Flow_N2-N_70degConeHot/parameter.ini @@ -58,7 +58,7 @@ Part-Boundary3-RadiativeEmissivity = 1.0 Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! PARTICLES @@ -140,7 +140,7 @@ Particles-OctreePartNumNode = 40 Particles-OctreePartNumNodeMin = 28 Particles-MPIWeight = 1000 ! Symmetry -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T diff --git a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini index 8c6c7b6a4..8d90ee381 100644 --- a/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini +++ b/regressioncheck/WEK_FPFlow/Flow_N2_70degCone/parameter.ini @@ -55,7 +55,7 @@ Part-Boundary3-RotACC = 1. Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! Species1 - N2 @@ -102,7 +102,7 @@ Particles-OctreePartNumNode = 40 Particles-OctreePartNumNodeMin = 28 Particles-MPIWeight = 1000 ! Symmetry -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T ! Radial Weighting Particles-RadialWeighting = T diff --git a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini index 03416414d..2ad359422 100644 --- a/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini +++ b/regressioncheck/WEK_Radiation/Flow_N2-N_70degConeHot/parameter.ini @@ -55,7 +55,7 @@ Part-Boundary3-RotACC = 1. Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! PARTICLES @@ -139,7 +139,7 @@ Radiation-PhotonWaveLengthModel = 1 ! Absorption models: 1:Acceptance Rejec ! =============================================================================== ! ! 2D/Axisymmetric Simulation ! =============================================================================== ! -Particles-Symmetry2D = T +Particles-Symmetry-Order = 2 Particles-Symmetry2DAxisymmetric = T Particles-RadialWeighting = T Particles-RadialWeighting-PartScaleFactor = 10000 diff --git a/src/particles/bgk/bgk_init.f90 b/src/particles/bgk/bgk_init.f90 index 9084d1d47..9b6ff5b1c 100644 --- a/src/particles/bgk/bgk_init.f90 +++ b/src/particles/bgk/bgk_init.f90 @@ -92,7 +92,7 @@ SUBROUTINE InitBGK() USE MOD_BGK_Vars USE MOD_Preproc USE MOD_Mesh_Vars ,ONLY: nElems, NGeo -USE MOD_Particle_Vars ,ONLY: nSpecies, Species, DoVirtualCellMerge +USE MOD_Particle_Vars ,ONLY: nSpecies, Species, DoVirtualCellMerge, Symmetry USE MOD_DSMC_Vars ,ONLY: DSMC, RadialWeighting, CollInf USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree USE MOD_Globals_Vars ,ONLY: Pi, BoltzmannConst @@ -156,6 +156,7 @@ SUBROUTINE InitBGK() ! Octree-based cell refinement, up to a certain number of particles DoBGKCellAdaptation = GETLOGICAL('Particles-BGK-DoCellAdaptation') IF(DoBGKCellAdaptation) THEN + IF (Symmetry%Order.EQ.1) CALL abort(__STAMP__,'ERROR: 1D BGK with Cell adaptation is not implemented yet') BGKMinPartPerCell = GETINT('Particles-BGK-MinPartsPerCell') IF(.NOT.DSMC%UseOctree) THEN DSMC%UseOctree = .TRUE. diff --git a/src/particles/boundary/particle_boundary_condition.f90 b/src/particles/boundary/particle_boundary_condition.f90 index 5cb01bb9e..a00430f40 100644 --- a/src/particles/boundary/particle_boundary_condition.f90 +++ b/src/particles/boundary/particle_boundary_condition.f90 @@ -175,7 +175,7 @@ SUBROUTINE GetBoundaryInteraction(iPart,SideID,flip,ElemID,crossedBC,TriNum,IsIn CALL RotPeriodicInterPlaneBoundary(iPart,SideID,ElemID) END IF !----------------------------------------------------------------------------------------------------------------------------------- - CASE(10,11) ! PartBound%SymmetryBC + CASE(10,11,12) ! PartBound%SymmetryBC !----------------------------------------------------------------------------------------------------------------------------------- CALL PerfectReflection(iPart,SideID,n_loc,opt_Symmetry=.TRUE.) !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index a8e206e0a..6596e1273 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -492,6 +492,9 @@ SUBROUTINE InitializeVariablesPartBoundary() CASE('symmetric_axis') PartBound%TargetBoundCond(iPartBound) = PartBound%SymmetryAxis PartBound%WallVelo(1:3,iPartBound) = (/0.,0.,0./) + CASE('symmetric_dim') + PartBound%TargetBoundCond(iPartBound) = PartBound%SymmetryDim + PartBound%WallVelo(1:3,iPartBound) = (/0.,0.,0./) CASE('rot_periodic') PartBound%UseRotPeriodicBC = .TRUE. nRotPeriodicBCs = nRotPeriodicBCs + 1 diff --git a/src/particles/boundary/particle_boundary_vars.f90 b/src/particles/boundary/particle_boundary_vars.f90 index be50982e1..7e19e03c9 100644 --- a/src/particles/boundary/particle_boundary_vars.f90 +++ b/src/particles/boundary/particle_boundary_vars.f90 @@ -210,7 +210,8 @@ MODULE MOD_Particle_Boundary_Vars 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 - INTEGER :: SymmetryAxis = 11 ! = 10 (s.u.) Boundary Condition Integer Definition + INTEGER :: SymmetryAxis = 11 ! = 11 (s.u.) Boundary Condition Integer Definition + INTEGER :: SymmetryDim = 12 ! = 11 (s.u.) Boundary Condition Integer Definition CHARACTER(LEN=200) , ALLOCATABLE :: SourceBoundName(:) ! Link part 1 for mapping PICLas BCs to Particle BC INTEGER , ALLOCATABLE :: TargetBoundCond(:) ! Link part 2 for mapping PICLas BCs to Particle BC INTEGER , ALLOCATABLE :: MapToPartBC(:) ! Map from PICLas BCindex to Particle BC (NOT TO TYPE!) diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index dff1e55a9..713dbf75a 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -44,8 +44,6 @@ SUBROUTINE DefineParametersParticleSymmetry() CALL prms%SetSection("Particle Symmetry") CALL prms%CreateIntOption( 'Particles-Symmetry-Order', & 'Order of the Simulation 1, 2 or 3 D', '3') -CALL prms%CreateLogicalOption('Particles-Symmetry2D', 'Activating a 2D simulation on a mesh with one cell in z-direction in the '//& - 'xy-plane (y ranging from 0 to the domain boundaries)', '.FALSE.') CALL prms%CreateLogicalOption('Particles-Symmetry2DAxisymmetric', 'Activating an axisymmetric simulation with the same mesh '//& 'requirements as for the 2D case (y is then the radial direction)', '.FALSE.') CALL prms%CreateLogicalOption('Particles-RadialWeighting', 'Activates a radial weighting in y for the axisymmetric '//& @@ -147,7 +145,7 @@ SUBROUTINE DSMC_2D_InitVolumes() ! ignore sides outside of halo region 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) & + IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%SymmetryDim) & SideIsSymSide(iSide) = .TRUE. END DO @@ -169,7 +167,7 @@ SUBROUTINE DSMC_2D_InitVolumes() locElemID = SideToElem(S2E_ELEM_ID,BCSideID) iLocSide = SideToElem(S2E_LOC_SIDE_ID,BCSideID) SideID=GetGlobalNonUniqueSideID(offsetElem+locElemID,iLocSide) - IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%SymmetryBC) THEN + IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%SymmetryDim) THEN CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID)) iLocSide = SideInfo_Shared(SIDE_LOCALID,SideID) ! Exclude the symmetry axis (y=0) @@ -257,16 +255,17 @@ SUBROUTINE DSMC_1D_InitVolumes() USE MOD_Globals USE MOD_Mesh_Vars ,ONLY: nElems, offsetElem USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Mesh_Vars ,ONLY: GEO,LocalVolume,MeshVolume +USE MOD_Particle_Mesh_Vars ,ONLY: GEO,LocalVolume,MeshVolume,SideIsSymSide_Shared, SideIsSymSide USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared,ElemCharLength_Shared USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared,ElemSideNodeID_Shared, SideInfo_Shared USE MOD_Mesh_Tools ,ONLY: GetCNElemID USE MOD_Particle_Mesh_Tools ,ONLY: GetGlobalNonUniqueSideID #if USE_MPI -USE MOD_MPI_Shared ,ONLY: BARRIER_AND_SYNC +USE MOD_MPI_Shared USE MOD_MPI_Shared_Vars ,ONLY: MPI_COMM_SHARED -USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeElem -USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared_Win,ElemCharLength_Shared_Win +USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeElem,SideIsSymSide_Shared_Win, nNonUniqueGlobalSides +USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared_Win,ElemCharLength_Shared_Win, ElemInfo_Shared +USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors,MPI_COMM_LEADERS_SHARED #endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -276,10 +275,14 @@ SUBROUTINE DSMC_1D_InitVolumes() ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: iLocSide, iElem, SideID, iDim, CNElemID +INTEGER :: iLocSide, iElem, SideID, iOrder, CNElemID, iSide REAL :: X(2), MaxCoord, MinCoord LOGICAL :: SideInPlane, X1Occupied -INTEGER :: firstElem,lastElem +INTEGER :: firstElem,lastElem, firstSide, lastSide +#if USE_MPI +REAL :: CNVolume +INTEGER :: offsetElemCNProc +#endif /*USE_MPI*/ !=================================================================================================================================== #if USE_MPI @@ -297,7 +300,7 @@ SUBROUTINE DSMC_1D_InitVolumes() SWRITE(*,*) 'Minimum dimension in y:', GEO%yminglob SWRITE(*,*) 'Deviation', (ABS(GEO%ymaxglob)-ABS(GEO%yminglob))/ABS(GEO%yminglob), ' > 1e-5' CALL abort(__STAMP__& - ,'ERROR: Please orient your mesh with one cell in y-direction around 0, |z_min| = z_max !') + ,'ERROR: Please orient your mesh with one cell in y-direction around 0, |y_min| = y_max !') END IF IF(.NOT.ALMOSTEQUALRELATIVE(GEO%zmaxglob,ABS(GEO%zminglob),1e-5)) THEN @@ -317,34 +320,34 @@ SUBROUTINE DSMC_1D_InitVolumes() SideInPlane=.FALSE. SideID = GetGlobalNonUniqueSideID(offsetElem+iElem,iLocSide) CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID)) - DO iDim=1,3 - MaxCoord = MAXVAL(NodeCoords_Shared(iDim,ElemSideNodeID_Shared(:,iLocSide,CNElemID)+1)) - MinCoord = MINVAL(NodeCoords_Shared(iDim,ElemSideNodeID_Shared(:,iLocSide,CNElemID)+1)) + DO iOrder=1,3 + MaxCoord = MAXVAL(NodeCoords_Shared(iOrder,ElemSideNodeID_Shared(:,iLocSide,CNElemID)+1)) + MinCoord = MINVAL(NodeCoords_Shared(iOrder,ElemSideNodeID_Shared(:,iLocSide,CNElemID)+1)) IF(ALMOSTALMOSTEQUAL(MaxCoord,MinCoord).OR.(ALMOSTZERO(MaxCoord).AND.ALMOSTZERO(MinCoord))) THEN IF(SideInPlane) CALL abort(__STAMP__& ,'ERROR: Please orient your mesh with all element sides parallel to xy-,xz-,or yz-plane') SideInPlane=.TRUE. - IF(iDim.GE.2)THEN - IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).NE.PartBound%SymmetryBC) & + IF(iOrder.GE.2)THEN + IF(PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).NE.PartBound%SymmetryDim) & CALL abort(__STAMP__,& 'ERROR: Sides parallel to xy-,and xz-plane has to be the symmetric boundary condition') END IF - IF(iDim.EQ.1) THEN + IF(iOrder.EQ.1) THEN IF(X1Occupied) THEN X(2) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1) ELSE X(1) = NodeCoords_Shared(1,ElemSideNodeID_Shared(1,iLocSide,CNElemID)+1) X1Occupied = .TRUE. END IF - END IF !iDim.EQ.1 + END IF !iOrder.EQ.1 END IF - END DO !iDim=1,3 + END DO !iOrder=1,3 IF(.NOT.SideInPlane) THEN IPWRITE(*,*) 'ElemID:',iElem,'SideID:',iLocSide - DO iDim=1,4 - IPWRITE(*,*) 'Node',iDim,'x:',NodeCoords_Shared(1,ElemSideNodeID_Shared(iDim,iLocSide,CNElemID)+1), & - 'y:',NodeCoords_Shared(2,ElemSideNodeID_Shared(iDim,iLocSide,CNElemID)+1), & - 'z:',NodeCoords_Shared(3,ElemSideNodeID_Shared(iDim,iLocSide,CNElemID)+1) + DO iOrder=1,4 + IPWRITE(*,*) 'Node',iOrder,'x:',NodeCoords_Shared(1,ElemSideNodeID_Shared(iOrder,iLocSide,CNElemID)+1), & + 'y:',NodeCoords_Shared(2,ElemSideNodeID_Shared(iOrder,iLocSide,CNElemID)+1), & + 'z:',NodeCoords_Shared(3,ElemSideNodeID_Shared(iOrder,iLocSide,CNElemID)+1) END DO CALL abort(__STAMP__& ,'ERROR: Please orient your mesh with all element sides parallel to xy-,xz-,or yz-plane') @@ -360,8 +363,58 @@ SUBROUTINE DSMC_1D_InitVolumes() #if USE_MPI CALL BARRIER_AND_SYNC(ElemVolume_Shared_Win ,MPI_COMM_SHARED) CALL BARRIER_AND_SYNC(ElemCharLength_Shared_Win,MPI_COMM_SHARED) -#endif /*USE_MPI*/ +! Compute-node mesh volume +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) +IF (myComputeNodeRank.EQ.0) THEN + ! All-reduce between node leaders + CALL MPI_ALLREDUCE(CNVolume,MeshVolume,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_LEADERS_SHARED,IERROR) +END IF +! Broadcast from node leaders to other processors on the same node +CALL MPI_BCAST(MeshVolume,1, MPI_DOUBLE_PRECISION,0,MPI_COMM_SHARED,iERROR) +#else MeshVolume = SUM(ElemVolume_Shared) +#endif /*USE_MPI*/ + +#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(nComputeNodeSides)) +SideIsSymSide = .FALSE. +#endif /*USE_MPI*/ + +! Flag of symmetry sides to be skipped during tracking +#if USE_MPI + firstSide = INT(REAL( myComputeNodeRank *nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors))+1 + lastSide = INT(REAL((myComputeNodeRank+1)*nNonUniqueGlobalSides)/REAL(nComputeNodeProcessors)) +#else + firstSide = 1 + lastSide = nComputeNodeSides +#endif + +DO iSide = firstSide, lastSide + SideIsSymSide(iSide) = .FALSE. + ! 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*/ + IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,iSide))).EQ.PartBound%SymmetryDim) & + SideIsSymSide(iSide) = .TRUE. +END DO + +#if USE_MPI +CALL BARRIER_AND_SYNC(SideIsSymSide_Shared_Win ,MPI_COMM_SHARED) +#endif END SUBROUTINE DSMC_1D_InitVolumes @@ -850,18 +903,8 @@ SUBROUTINE Init_Symmetry() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- -LOGICAL :: Symmetry2D !=================================================================================================================================== Symmetry%Order = GETINT('Particles-Symmetry-Order') -Symmetry2D = GETLOGICAL('Particles-Symmetry2D') -IF(Symmetry2D.AND.(Symmetry%Order.EQ.3)) THEN - Symmetry%Order = 2 - LBWRITE(*,*) 'WARNING: Particles-Symmetry-Order is set to 2 because of Particles-Symmetry2D=.TRUE. .' - LBWRITE(*,*) 'Set Particles-Symmetry-Order=2 and remove Particles-Symmetry2D to avoid this warning' -ELSE IF(Symmetry2D) THEN - CALL ABORT(__STAMP__& - ,'ERROR: 2D Simulations either with Particles-Symmetry-Order=2 or (but not recommended) with Symmetry2D=.TRUE.') -END IF IF((Symmetry%Order.LE.0).OR.(Symmetry%Order.GE.4)) CALL ABORT(__STAMP__& ,'Particles-Symmetry-Order (space dimension) has to be in the range of 1 to 3') diff --git a/src/particles/emission/particle_surface_flux.f90 b/src/particles/emission/particle_surface_flux.f90 index 368f73de3..360fc28bf 100644 --- a/src/particles/emission/particle_surface_flux.f90 +++ b/src/particles/emission/particle_surface_flux.f90 @@ -235,7 +235,7 @@ SUBROUTINE ParticleSurfaceflux() PDM%dtFracPush(ParticleIndexNbr) = .TRUE. PDM%IsNewPart(ParticleIndexNbr) = .TRUE. PEM%GlobalElemID(ParticleIndexNbr) = globElemId - IF (Symmetry%Order.EQ.2) THEN + IF (Symmetry%Order.LE.2) THEN PEM%LastGlobalElemID(ParticleIndexNbr) = -SideID ELSE PEM%LastGlobalElemID(ParticleIndexNbr) = globElemId !needed when ParticlePush is not executed, e.g. "delay" diff --git a/src/particles/fp_flow/fpflow_init.f90 b/src/particles/fp_flow/fpflow_init.f90 index c858cf99e..086244f10 100644 --- a/src/particles/fp_flow/fpflow_init.f90 +++ b/src/particles/fp_flow/fpflow_init.f90 @@ -72,7 +72,7 @@ SUBROUTINE InitFPFlow() USE MOD_ReadInTools USE MOD_DSMC_Vars ,ONLY: DSMC, CollInf USE MOD_DSMC_ParticlePairing ,ONLY: DSMC_init_octree -USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, DoVirtualCellMerge +USE MOD_PARTICLE_Vars ,ONLY: nSpecies, Species, DoVirtualCellMerge,Symmetry USE MOD_FPFlow_Vars USE MOD_BGK_Vars ,ONLY: DoBGKCellAdaptation, BGKMinPartPerCell #if USE_LOADBALANCE @@ -105,6 +105,7 @@ SUBROUTINE InitFPFlow() ESFPModel = GETINT('Particles-ESFP-Model') DoBGKCellAdaptation = GETLOGICAL('Particles-FP-DoCellAdaptation') IF(DoBGKCellAdaptation) THEN + IF (Symmetry%Order.EQ.1) CALL abort(__STAMP__,'ERROR: 1D Fokker-Planck flow with CellAdaptation is not implemented yet') BGKMinPartPerCell = GETINT('Particles-FP-MinPartsPerCell') IF(.NOT.DSMC%UseOctree) THEN DSMC%UseOctree = .TRUE. diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 7f62520fb..499bab286 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -434,11 +434,9 @@ SUBROUTINE InitParticles() CALL InitMCC() CALL InitSurfaceModel() #if (PP_TimeDiscMethod==300) - IF (Symmetry%Order.EQ.1) CALL abort(__STAMP__,'ERROR: 1D Fokker-Planck flow is not implemented yet') CALL InitFPFlow() #endif #if (PP_TimeDiscMethod==400) - IF (Symmetry%Order.EQ.1) CALL abort(__STAMP__,'ERROR: 1D BGK is not implemented yet') CALL InitBGK() #endif ELSE IF (WriteMacroVolumeValues.OR.WriteMacroSurfaceValues) THEN diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 49a65812a..7598827cd 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -189,7 +189,7 @@ SUBROUTINE InitParticleMesh() #endif /* USE_MPI */ USE MOD_Particle_Mesh_Build ,ONLY: BuildElementRadiusTria,BuildElemTypeAndBasisTria,BuildEpsOneCell,BuildBCElemDistance USE MOD_Particle_Mesh_Build ,ONLY: BuildNodeNeighbourhood,BuildElementOriginShared,BuildElementBasisAndRadius,BuildMesh2DInfo -USE MOD_Particle_Mesh_Build ,ONLY: BuildSideOriginAndRadius,BuildLinearSideBaseVectors,BuildSideSlabAndBoundingBox +USE MOD_Particle_Mesh_Build ,ONLY: BuildSideOriginAndRadius,BuildLinearSideBaseVectors,BuildSideSlabAndBoundingBox,BuildMesh1DInfo #if USE_LOADBALANCE USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance #endif /*USE_LOADBALANCE*/ @@ -417,7 +417,11 @@ SUBROUTINE InitParticleMesh() CALL BuildLinearSideBaseVectors() ! Required for BaseVectors0_Shared, BaseVectors1_Shared, BaseVectors2_Shared, BaseVectors3_Shared, BaseVectorsScale_Shared END IF ! UsePhotonTriaTracking - IF(Symmetry%Order.EQ.2) CALL BuildMesh2DInfo() + IF(Symmetry%Order.EQ.2) THEN + CALL BuildMesh2DInfo() + ELSEIF (Symmetry%Order.EQ.1) THEN + CALL BuildMesh1DInfo() + END IF CASE(TRACING,REFMAPPING) ! Build stuff required for tracing algorithms CALL BuildSideSlabAndBoundingBox() ! Required for SideSlabNormals_Shared, SideSlabIntervals_Shared, BoundingBoxIsEmpty_Shared diff --git a/src/particles/particle_mesh/particle_mesh_build.f90 b/src/particles/particle_mesh/particle_mesh_build.f90 index e49103c4c..52429a520 100644 --- a/src/particles/particle_mesh/particle_mesh_build.f90 +++ b/src/particles/particle_mesh/particle_mesh_build.f90 @@ -27,7 +27,7 @@ MODULE MOD_Particle_Mesh_Build PUBLIC:: BuildElementRadiusTria,BuildElemTypeAndBasisTria,BuildEpsOneCell,BuildBCElemDistance PUBLIC:: BuildNodeNeighbourhood,BuildElementOriginShared,BuildElementBasisAndRadius -PUBLIC:: BuildSideOriginAndRadius,BuildLinearSideBaseVectors, BuildMesh2DInfo +PUBLIC:: BuildSideOriginAndRadius,BuildLinearSideBaseVectors, BuildMesh2DInfo,BuildMesh1DInfo PUBLIC:: BuildSideSlabAndBoundingBox !=================================================================================================================================== @@ -91,7 +91,7 @@ SUBROUTINE BuildMesh2DInfo() 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 + IF (PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))).EQ.PartBound%SymmetryDim) THEN ElemSideNodeID2D_Shared(:,iLocSide, iElem) = -1 SideNormalEdge2D_Shared(:,iLocSide, iElem) = 0. DefineSide = .FALSE. @@ -137,6 +137,84 @@ SUBROUTINE BuildMesh2DInfo() END SUBROUTINE BuildMesh2DInfo +SUBROUTINE BuildMesh1DInfo() +!=================================================================================================================================== +!> 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: ElemSideNodeID1D_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: ElemSideNodeID1D_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((/6,nComputeNodeTotalElems/),ElemSideNodeID1D_Shared_Win,ElemSideNodeID1D_Shared) +CALL MPI_WIN_LOCK_ALL(0,ElemSideNodeID1D_Shared_Win,IERROR) + +firstElem = INT(REAL( myComputeNodeRank *nComputeNodeTotalElems)/REAL(nComputeNodeProcessors))+1 +lastElem = INT(REAL((myComputeNodeRank+1)*nComputeNodeTotalElems)/REAL(nComputeNodeProcessors)) +#else +ALLOCATE(ElemSideNodeID1D_Shared(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%SymmetryDim) THEN + ElemSideNodeID1D_Shared(iLocSide, iElem) = -1 + DefineSide = .FALSE. + END IF + END IF + + IF (DefineSide) THEN + DO iNode = 1, 4 + IF((NodeCoords_Shared(3,ElemSideNodeID_Shared(iNode,iLocSide,iElem)+1).GT.(GEO%zmaxglob+GEO%zminglob)/2.).AND.& + (NodeCoords_Shared(2,ElemSideNodeID_Shared(iNode,iLocSide,iElem)+1).GT.(GEO%ymaxglob+GEO%yminglob)/2.)) THEN + ElemSideNodeID1D_Shared(iLocSide, iElem) = ElemSideNodeID_Shared(iNode,iLocSide,iElem)+1 + END IF + END DO + END IF + END DO +END DO + +#if USE_MPI +CALL BARRIER_AND_SYNC(ElemSideNodeID1D_Shared_Win,MPI_COMM_SHARED) +#endif + +END SUBROUTINE BuildMesh1DInfo + SUBROUTINE BuildElementRadiusTria() !================================================================================================================================ USE MOD_Globals diff --git a/src/particles/particle_mesh/particle_mesh_vars.f90 b/src/particles/particle_mesh/particle_mesh_vars.f90 index 89638d622..e63723f45 100644 --- a/src/particles/particle_mesh/particle_mesh_vars.f90 +++ b/src/particles/particle_mesh/particle_mesh_vars.f90 @@ -190,12 +190,14 @@ MODULE MOD_Particle_Mesh_Vars INTEGER,ALLOCPOINT :: ElemSideNodeID2D_Shared(:,:,:) !> Contains the 4 corner nodes of the local sides in an element +INTEGER,ALLOCPOINT :: ElemSideNodeID1D_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 :: ElemSideNodeID1D_Shared_Win INTEGER :: SideIsSymSide_Shared_Win ! integers to hold shared memory windows INTEGER :: NodeToElemMapping_Shared_Win From fe5b43624029a1b827575b863de1b08067f2f908 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Wed, 24 Apr 2024 12:08:21 +0200 Subject: [PATCH 15/37] 1D tracking --- .../2D_VTS_Insert_CellLocal/parameter.ini | 2 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 2 +- .../2D_VTS_Insert_CellLocal/parameter.ini | 2 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 2 +- .../2D_VTS_Insert_CellLocal/parameter.ini | 2 +- .../2D_VTS_SurfFlux_Tria/parameter.ini | 2 +- .../particle_mesh/particle_mesh_tools.f90 | 51 +++++++++++++++++-- .../tracking/particle_intersection.f90 | 49 +++++++++++++++++- .../tracking/particle_triatracking.f90 | 21 +++++--- 9 files changed, 116 insertions(+), 17 deletions(-) diff --git a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini index cad1c867c..fcab96b29 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_Insert_CellLocal/parameter.ini @@ -106,4 +106,4 @@ Particles-BGK-DoVibRelaxation=T Particles-BGK-DoCellAdaptation=F Particles-BGK-MinPartsPerCell=20 -nocrosscombination:Particles-Symmetry2D,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini index 3eb8a00a6..f92aad13d 100644 --- a/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_BGK/2D_VTS_SurfFlux_Tria/parameter.ini @@ -105,4 +105,4 @@ Particles-BGK-DoVibRelaxation=T Particles-BGK-DoCellAdaptation=F Particles-BGK-MinPartsPerCell=20 -nocrosscombination:Particles-Symmetry2D,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini index 0236fc7e4..cf85a16ad 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_Insert_CellLocal/parameter.ini @@ -95,4 +95,4 @@ Part-VariableTimeStep-Use2DFunction = T Part-VariableTimeStep-StagnationPoint = 0.5E-5 Part-VariableTimeStep-ScaleFactor2DFront = 2.0 Part-VariableTimeStep-ScaleFactor2DBack = 2.0 -nocrosscombination:Particles-Symmetry2D,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini index 22999ec09..3e90227bb 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini @@ -98,4 +98,4 @@ Part-VariableTimeStep-StagnationPoint = 0.0 Part-VariableTimeStep-ScaleFactor2DFront = 2.0 Part-VariableTimeStep-ScaleFactor2DBack = 2.0 -nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini index 058f32df7..1d774fcba 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_Insert_CellLocal/parameter.ini @@ -102,4 +102,4 @@ Particles-FP-DoVibRelaxation=T Particles-FP-DoCellAdaptation=F Particles-FP-MinPartsPerCell=20 -nocrosscombination:Particles-Symmetry2D,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini index 5d2680b06..6af6006bf 100644 --- a/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_FPFlow/2D_VTS_SurfFlux_Tria/parameter.ini @@ -105,4 +105,4 @@ Particles-FP-DoVibRelaxation=T Particles-FP-DoCellAdaptation=F Particles-FP-MinPartsPerCell=20 -nocrosscombination:Particles-Symmetry2D,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry-Order,Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index a57cf7028..45d24e9f0 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -55,10 +55,12 @@ SUBROUTINE ParticleInsideQuad(PartStateLoc,ElemID,InElementCheck,Det_Out) REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) !----------------------------------------------------------------------------------------------------------------------------------- !=================================================================================================================================== -IF (Symmetry%Order.EQ.2) THEN +IF (Symmetry%Order.EQ.3) THEN + CALL ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) +ELSE IF (Symmetry%Order.EQ.2) THEN CALL ParticleInsideQuad2D(PartStateLoc(1:2),ElemID,InElementCheck) ELSE - CALL ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) + CALL ParticleInsideQuad1D(PartStateLoc(1),ElemID,InElementCheck) END IF END SUBROUTINE ParticleInsideQuad @@ -230,9 +232,8 @@ SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) LOGICAL,INTENT(OUT) :: InElementCheck !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES -INTEGER :: ilocSide, TempSideID, ind, NbElemID, nNbMortars, nlocSides, localSideID +INTEGER :: ilocSide, TempSideID, nlocSides, localSideID INTEGER :: CNElemID -LOGICAL :: PosCheck, NegCheck, InElementCheckMortar, InElementCheckMortarNb REAL :: x_int, xNode1, xNode2, yNode1, yNode2 !=================================================================================================================================== CNElemID = GetCNElemID(ElemID) @@ -261,6 +262,48 @@ SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) END DO END SUBROUTINE ParticleInsideQuad2D +SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck) +!=================================================================================================================================== +!> Checks if particle is inside of a linear 2D element with4 faces, compatible with mortars +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Mesh_Vars ,ONLY: ElemInfo_Shared,SideInfo_Shared,NodeCoords_Shared, SideIsSymSide +USE MOD_Particle_Mesh_Vars ,ONLY :ElemSideNodeID1D_Shared +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT/OUTPUT VARIABLES +INTEGER,INTENT(IN) :: ElemID +REAL ,INTENT(IN) :: PartStateLoc +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +LOGICAL,INTENT(OUT) :: InElementCheck +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: ilocSide, TempSideID, nlocSides, localSideID, DiffSign(2), iSide +INTEGER :: CNElemID +REAL :: xNode +!=================================================================================================================================== +CNElemID = GetCNElemID(ElemID) +InElementCheck = .FALSE. +nlocSides = ElemInfo_Shared(ELEM_LASTSIDEIND,ElemID) - ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) +iSide = 0 +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 (SideIsSymSide(TempSideID)) CYCLE + xNode = NodeCoords_Shared(1,ElemSideNodeID1D_Shared(localSideID, CNElemID)) + iSide = iSide + 1 + DiffSign(iSide) = NINT(SIGN(1.,PartStateLoc - xNode)) + IF (iSide.EQ.2) EXIT +END DO +IF (DiffSign(1).NE.DiffSign(2)) InElementCheck = .TRUE. +END SUBROUTINE ParticleInsideQuad1D PPURE SUBROUTINE ParticleInsideNbMortar(PartStateLoc,ElemID,InElementCheck) !=================================================================================================================================== diff --git a/src/particles/tracking/particle_intersection.f90 b/src/particles/tracking/particle_intersection.f90 index c65880c5b..928a474e4 100644 --- a/src/particles/tracking/particle_intersection.f90 +++ b/src/particles/tracking/particle_intersection.f90 @@ -49,7 +49,7 @@ MODULE MOD_Particle_InterSection PUBLIC :: ComputePlanarCurvedIntersection PUBLIC :: ComputeBilinearIntersection PUBLIC :: ComputeCurvedIntersection -PUBLIC :: ParticleThroughSideCheck3DFast, ParticleThroughSideCheck2D +PUBLIC :: ParticleThroughSideCheck3DFast, ParticleThroughSideCheck2D, ParticleThroughSideCheck1D PUBLIC :: ParticleThroughSideLastPosCheck #ifdef CODE_ANALYZE PUBLIC :: OutputTrajectory @@ -337,6 +337,53 @@ SUBROUTINE ParticleThroughSideCheck2D(PartID,iLocSide,Element,ThroughSide) END SUBROUTINE ParticleThroughSideCheck2D +SUBROUTINE ParticleThroughSideCheck1D(PartID,iLocSide,Element,ThroughSide) +!=================================================================================================================================== +!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalized 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 zero, 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_Particle_Vars ,ONLY: lastPartPos,PartState +USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemSideNodeID1D_Shared +USE MOD_Mesh_Tools ,ONLY: GetCNElemID +USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +INTEGER,INTENT(IN) :: PartID +INTEGER,INTENT(IN) :: iLocSide +INTEGER,INTENT(IN) :: Element +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +LOGICAL,INTENT(OUT) :: ThroughSide +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +INTEGER :: CNElemID, DiffSign(2) +REAL :: xNode +!=================================================================================================================================== + +CNElemID = GetCNElemID(Element) + +ThroughSide = .FALSE. +! Get the coordinates of the first node and the vector from the particle position to the node +xNode = NodeCoords_Shared(1,ElemSideNodeID1D_Shared(iLocSide, CNElemID)) + +DiffSign(1) = NINT(SIGN(1.,LastPartPos(1,PartID) - xNode)) +DiffSign(2) = NINT(SIGN(1.,PartState(1,PartID) - xNode)) + +! Check if intersection point is within line segments +IF (DiffSign(1).NE.DiffSign(2)) THEN + ! Calculate intersection point + TrackInfo%alpha = ABS(xNode - LastPartPos(1,PartID)) + ThroughSide = .TRUE. +END IF + +END SUBROUTINE ParticleThroughSideCheck1D + SUBROUTINE ParticleThroughSideLastPosCheck(i,iLocSide,Element,InElementCheck,TriNum,det,isMortarSide,detPartPos) !=================================================================================================================================== diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index f249d8e9a..8851aa691 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -81,8 +81,8 @@ SUBROUTINE ParticleTriaTracking() #else IF (PDM%ParticleInside(i)) THEN #endif /*IMPA*/ - IF(Symmetry%Order.EQ.2) THEN - CALL SingleParticleTriaTracking2D(i) + IF(Symmetry%Order.LE.2) THEN + CALL SingleParticleTriaTracking1D2D(i) ELSE CALL SingleParticleTriaTracking(i=i) END IF @@ -463,7 +463,7 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) END SUBROUTINE SingleParticleTriaTracking -SUBROUTINE SingleParticleTriaTracking2D(i) +SUBROUTINE SingleParticleTriaTracking1D2D(i) !=================================================================================================================================== ! Routine for tracking of moving particles and boundary interaction using triangulated sides. ! 2) Perform tracking until the particle is considered "done" (either localized or deleted) @@ -490,6 +490,7 @@ SUBROUTINE SingleParticleTriaTracking2D(i) USE MOD_Part_Tools ,ONLY: StoreLostParticleProperties USE MOD_Particle_Boundary_Vars ,ONLY: PartBound USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck2D, ParticleThroughSideLastPosCheck, IntersectionWithWall +USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck1D USE MOD_Particle_Boundary_Condition ,ONLY: GetBoundaryInteraction USE MOD_part_tools ,ONLY: ParticleOnProc, InRotRefFrameCheck USE MOD_part_operations ,ONLY: RemoveParticle @@ -570,7 +571,11 @@ SUBROUTINE SingleParticleTriaTracking2D(i) nbSideID = SideInfo_Shared(SIDE_NBSIDEID,nbSideID) NblocSideID = SideInfo_Shared(SIDE_LOCALID,nbSideID) ThroughSide = .FALSE. - CALL ParticleThroughSideCheck2D(i,NblocSideID,NbElemID,ThroughSide) + IF(Symmetry%Order.EQ.2) THEN + CALL ParticleThroughSideCheck2D(i,NblocSideID,NbElemID,ThroughSide) + ELSE + CALL ParticleThroughSideCheck1D(i,NblocSideID,NbElemID,ThroughSide) + END IF IF (ThroughSide) THEN ! Store the information for this side for future checks, if this side was already treated oldElemIsMortar = .TRUE. @@ -584,7 +589,11 @@ SUBROUTINE SingleParticleTriaTracking2D(i) ELSE ! Regular side IF (TempSideID.EQ.LastSide) CYCLE ThroughSide = .FALSE. - CALL ParticleThroughSideCheck2D(i,localSideID,ElemID,ThroughSide) + IF(Symmetry%Order.EQ.2) THEN + CALL ParticleThroughSideCheck2D(i,localSideID,ElemID,ThroughSide) + ELSE + CALL ParticleThroughSideCheck1D(i,localSideID,ElemID,ThroughSide) + END IF IF (ThroughSide) THEN NrOfThroughSides = NrOfThroughSides + 1 SideID = TempSideID @@ -643,6 +652,6 @@ SUBROUTINE SingleParticleTriaTracking2D(i) IF(ParticleOnProc(i)) CALL LBElemPauseTime(PEM%LocalElemID(i),tLBStart) #endif /*USE_LOADBALANCE*/ -END SUBROUTINE SingleParticleTriaTracking2D +END SUBROUTINE SingleParticleTriaTracking1D2D END MODULE MOD_Particle_TriaTracking From df521a65218714d602cbc6949402ebd74ae98ec8 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Wed, 24 Apr 2024 13:11:39 +0200 Subject: [PATCH 16/37] deallocate and descriptions --- src/mesh/mesh_readin.f90 | 2 +- src/particles/dsmc/dsmc_symmetry.f90 | 3 --- src/particles/particle_mesh/particle_mesh.f90 | 15 +++++++++++ .../particle_mesh/particle_mesh_build.f90 | 10 +++---- .../particle_mesh/particle_mesh_tools.f90 | 4 +-- .../tracking/particle_intersection.f90 | 18 +++++-------- .../tracking/particle_triatracking.f90 | 26 ++++++------------- .../radiative_transfer/radtrans_init.f90 | 4 --- 8 files changed, 36 insertions(+), 46 deletions(-) diff --git a/src/mesh/mesh_readin.f90 b/src/mesh/mesh_readin.f90 index 6fe6d1b86..2f6af6638 100644 --- a/src/mesh/mesh_readin.f90 +++ b/src/mesh/mesh_readin.f90 @@ -1368,7 +1368,7 @@ SUBROUTINE FinalizeMeshReadin(meshMode) ! 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) + IF(Symmetry%Order.LE.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 diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index 713dbf75a..c613852e8 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -891,9 +891,6 @@ SUBROUTINE Init_Symmetry() USE MOD_Particle_Vars ,ONLY: Symmetry USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETINT -#if USE_LOADBALANCE -USE MOD_LoadBalance_Vars ,ONLY: PerformLoadBalance -#endif /*USE_LOADBALANCE*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/particles/particle_mesh/particle_mesh.f90 b/src/particles/particle_mesh/particle_mesh.f90 index 9c62dc568..6e1b40425 100644 --- a/src/particles/particle_mesh/particle_mesh.f90 +++ b/src/particles/particle_mesh/particle_mesh.f90 @@ -489,6 +489,7 @@ SUBROUTINE FinalizeParticleMesh() ! MODULES USE MOD_Globals USE MOD_Particle_Mesh_Vars +USE MOD_Particle_Vars ,ONLY: Symmetry #if USE_MPI USE MOD_RayTracing_Vars ,ONLY: UseRayTracing USE MOD_Particle_Surfaces_Vars ,ONLY: BezierElevation @@ -714,6 +715,13 @@ SUBROUTINE FinalizeParticleMesh() CALL UNLOCK_AND_FREE(ElemRadiusNGeo_Shared_Win) END IF + IF(Symmetry%Order.EQ.2)THEN + CALL UNLOCK_AND_FREE(ElemSideNodeID2D_Shared_Win) + CALL UNLOCK_AND_FREE(SideNormalEdge2D_Shared_Win) + ELSE IF(Symmetry%Order.EQ.1)THEN + CALL UNLOCK_AND_FREE(ElemSideNodeID1D_Shared_Win) + END IF + !IF (DoInterpolation.OR.DSMC%UseOctree) THEN ! use this in future if possible IF (DoInterpolation.OR.DoDeposition.OR.UseRayTracing.OR.nSurfSampleAndTriaTracking) THEN #if USE_LOADBALANCE @@ -811,6 +819,13 @@ SUBROUTINE FinalizeParticleMesh() ADEALLOCATE(ElemCurved) ADEALLOCATE(ElemCurved_Shared) + IF(Symmetry%Order.EQ.2)THEN + ADEALLOCATE(ElemSideNodeID2D_Shared) + ADEALLOCATE(SideNormalEdge2D_Shared) + ELSE IF (Symmetry%Order.EQ.1) THEN + ADEALLOCATE(ElemSideNodeID1D_Shared) + END IF + ! BuildEpsOneCell SNULLIFY(ElemsJ) ADEALLOCATE(ElemsJ_Shared) diff --git a/src/particles/particle_mesh/particle_mesh_build.f90 b/src/particles/particle_mesh/particle_mesh_build.f90 index 52429a520..d6ed221ed 100644 --- a/src/particles/particle_mesh/particle_mesh_build.f90 +++ b/src/particles/particle_mesh/particle_mesh_build.f90 @@ -139,16 +139,15 @@ END SUBROUTINE BuildMesh2DInfo SUBROUTINE BuildMesh1DInfo() !=================================================================================================================================== -!> 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. +!> Routine determines a symmetry side and calculates the 1D (area faces in symmetry plane) +!> The symmetry sides will be used later on to determine in which direction the quadtree +!> shall refine the mesh, skipping the z- and y-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 @@ -170,8 +169,7 @@ SUBROUTINE BuildMesh1DInfo() !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: SideID, iLocSide, iNode, iELem -REAL :: VecCell(2), FaceMidPoint(2), NormVec(2), EdgeVec(2), nVal -INTEGER :: firstElem,lastElem, GlobalElemID, tmpNode +INTEGER :: firstElem,lastElem, GlobalElemID LOGICAL :: DefineSide !=================================================================================================================================== #if USE_MPI diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index bc4fd1c80..f698550f5 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -213,7 +213,7 @@ END SUBROUTINE ParticleInsideQuad3D SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) !=================================================================================================================================== -!> Checks if particle is inside of a linear 2D element with4 faces, compatible with mortars +!> Checks if particle is inside of a linear 2D element with 4 faces, compatible with mortars. The "Ray Casting Algorithm" is used. !=================================================================================================================================== ! MODULES USE MOD_Globals @@ -264,7 +264,7 @@ END SUBROUTINE ParticleInsideQuad2D SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck) !=================================================================================================================================== -!> Checks if particle is inside of a linear 2D element with4 faces, compatible with mortars +!> Checks if particle is inside of a 1D element. !=================================================================================================================================== ! MODULES USE MOD_Globals diff --git a/src/particles/tracking/particle_intersection.f90 b/src/particles/tracking/particle_intersection.f90 index 928a474e4..6ca35f788 100644 --- a/src/particles/tracking/particle_intersection.f90 +++ b/src/particles/tracking/particle_intersection.f90 @@ -256,11 +256,8 @@ END SUBROUTINE ParticleThroughSideCheck3DFast SUBROUTINE ParticleThroughSideCheck2D(PartID,iLocSide,Element,ThroughSide) !=================================================================================================================================== -!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalized 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 zero, 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. +!> Routine to check whether a particle crossed the given 2D side. The intersection of the edge and the particle trajectory is +!> calculated and checked to see if it is within the side. !=================================================================================================================================== ! MODULES USE MOD_Globals ,ONLY: VECNORM2D @@ -290,7 +287,7 @@ SUBROUTINE ParticleThroughSideCheck2D(PartID,iLocSide,Element,ThroughSide) ThroughSide = .FALSE. -! Get the coordinates of the first node and the vector from the particle position to the node +! Get the coordinates of the edge and trajectory xNode(1) = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(1,iLocSide, CNElemID)) xNode(2) = NodeCoords_Shared(1,ElemSideNodeID2D_Shared(2,iLocSide, CNElemID)) IF (xNode(1).GT.xNode(2)) THEN @@ -339,11 +336,8 @@ END SUBROUTINE ParticleThroughSideCheck2D SUBROUTINE ParticleThroughSideCheck1D(PartID,iLocSide,Element,ThroughSide) !=================================================================================================================================== -!> Routine to check whether a particle crossed the given triangle of a side. The determinant between the normalized 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 zero, 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. +!> Routine to check whether a particle crossed the given 1D side. It simply checks whether lastpartpos - xnode and partpos-xnode +!> have different signs. Then the side was crossed. !=================================================================================================================================== ! MODULES USE MOD_Particle_Vars ,ONLY: lastPartPos,PartState @@ -369,7 +363,7 @@ SUBROUTINE ParticleThroughSideCheck1D(PartID,iLocSide,Element,ThroughSide) CNElemID = GetCNElemID(Element) ThroughSide = .FALSE. -! Get the coordinates of the first node and the vector from the particle position to the node +! Get the coordinates of the first node xNode = NodeCoords_Shared(1,ElemSideNodeID1D_Shared(iLocSide, CNElemID)) DiffSign(1) = NINT(SIGN(1.,LastPartPos(1,PartID) - xNode)) diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 802474491..588f70929 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -590,23 +590,18 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) USE MOD_Preproc USE MOD_Globals USE MOD_Mesh_Tools ,ONLY: GetCNElemID -USE MOD_Particle_Vars ,ONLY: PEM,PDM,PartSpecies +USE MOD_Particle_Vars ,ONLY: PEM,PDM USE MOD_Particle_Vars ,ONLY: PartState,LastPartPos USE MOD_Particle_Vars ,ONLY: Symmetry -USE MOD_Particle_Vars ,ONLY: UseRotRefFrame, RotRefFrameOmega, PartVeloRotRef USE MOD_Particle_Mesh_Vars -USE MOD_Particle_Tracking_vars ,ONLY: ntracks,MeasureTrackTime,CountNbrOfLostParts, NbrOfLostParticles, TrackInfo -USE MOD_Particle_Tracking_vars ,ONLY: DisplayLostParticles -USE MOD_Part_Tools ,ONLY: StoreLostParticleProperties +USE MOD_Particle_Tracking_vars ,ONLY: ntracks,MeasureTrackTime, TrackInfo USE MOD_Particle_Boundary_Vars ,ONLY: PartBound -USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck2D, ParticleThroughSideLastPosCheck, IntersectionWithWall -USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck1D +USE MOD_Particle_Intersection ,ONLY: ParticleThroughSideCheck2D, ParticleThroughSideCheck1D 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 +USE MOD_part_tools ,ONLY: ParticleOnProc #endif /*USE_LOADBALANCE*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE @@ -619,15 +614,10 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) ! LOCAL VARIABLES INTEGER :: NblocSideID, NbElemID, CNElemID, ind, nbSideID, nMortarElems,BCType INTEGER :: ElemID,flip,OldElemID,nlocSides -INTEGER :: LocalSide -INTEGER :: NrOfThroughSides, ind2 -INTEGER :: SideID,TempSideID,iLocSide, localSideID -INTEGER :: LastSide -INTEGER :: SecondNrOfThroughSides, indSide -LOGICAL :: ThroughSide, InElementCheck,PartisDone -LOGICAL :: crossedBC, oldElemIsMortar,doCheckSide -REAL :: det(6,2),detM,ratio,minRatio, detPartPos -REAL, PARAMETER :: eps = 0 +INTEGER :: LocalSide, NrOfThroughSides +INTEGER :: SideID,TempSideID,iLocSide, localSideID, LastSide +LOGICAL :: ThroughSide, PartisDone +LOGICAL :: crossedBC, oldElemIsMortar !----------------------------------------------------------------------------------------------------------------------------------- #if USE_LOADBALANCE REAL :: tLBStart diff --git a/src/radiation/radiative_transfer/radtrans_init.f90 b/src/radiation/radiative_transfer/radtrans_init.f90 index 741bfde31..5f39ab04e 100644 --- a/src/radiation/radiative_transfer/radtrans_init.f90 +++ b/src/radiation/radiative_transfer/radtrans_init.f90 @@ -819,10 +819,6 @@ SUBROUTINE FinalizeRadiationTransport() 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) From 3bbffdda7f3b01f7cea8067aca1b0cc0ce634248 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Wed, 24 Apr 2024 16:16:48 +0200 Subject: [PATCH 17/37] correctec crosscomb --- regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/analyze.ini | 4 ++-- regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/analyze.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/analyze.ini index 77945d47d..9b9cbc0a2 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/analyze.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/analyze.ini @@ -1,4 +1,4 @@ compare_data_file_name = PartAnalyze.csv compare_data_file_reference = PartAnalyze_ref.csv -compare_data_file_tolerance = 0.05 -compare_data_file_tolerance_type = relative \ No newline at end of file +compare_data_file_tolerance = 0.09 +compare_data_file_tolerance_type = relative diff --git a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini index 3e90227bb..22999ec09 100644 --- a/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini +++ b/regressioncheck/CHE_DSMC/2D_VTS_SurfFlux_Tria/parameter.ini @@ -98,4 +98,4 @@ Part-VariableTimeStep-StagnationPoint = 0.0 Part-VariableTimeStep-ScaleFactor2DFront = 2.0 Part-VariableTimeStep-ScaleFactor2DBack = 2.0 -nocrosscombination:Particles-Symmetry-Order,Particles-RadialWeighting,Part-Species1-MacroParticleFactor +nocrosscombination:Particles-Symmetry2DAxisymmetric,Particles-RadialWeighting,Part-Species1-MacroParticleFactor From ba0c8ebe8daa377662e4d261946c630cf94ed584 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Wed, 24 Apr 2024 16:37:37 +0200 Subject: [PATCH 18/37] unlock and free of sideissymside disabled for piclas2vtk --- src/mesh/mesh_readin.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesh/mesh_readin.f90 b/src/mesh/mesh_readin.f90 index 2f6af6638..6e28dfad2 100644 --- a/src/mesh/mesh_readin.f90 +++ b/src/mesh/mesh_readin.f90 @@ -1368,7 +1368,7 @@ SUBROUTINE FinalizeMeshReadin(meshMode) ! symmetry sides and elem volumes/characteristic lengths IF(ABS(meshMode).GT.1)THEN - IF(Symmetry%Order.LE.2) CALL UNLOCK_AND_FREE(SideIsSymSide_Shared_Win) + IF((Symmetry%Order.LE.2).AND.(meshMode.NE.-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 From b0882ff47da6c0482fd6459184f9d539216e1a46 Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Thu, 25 Apr 2024 11:32:19 +0200 Subject: [PATCH 19/37] unlock and free of sideissymside disabled for superb --- src/mesh/mesh_readin.f90 | 2 +- src/particles/dsmc/dsmc_symmetry.f90 | 2 ++ src/posti/piclas2vtk/piclas2vtk.f90 | 5 ++++- src/posti/superB/superB.f90 | 6 ++++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mesh/mesh_readin.f90 b/src/mesh/mesh_readin.f90 index 6e28dfad2..0df4b5fa0 100644 --- a/src/mesh/mesh_readin.f90 +++ b/src/mesh/mesh_readin.f90 @@ -1368,7 +1368,7 @@ SUBROUTINE FinalizeMeshReadin(meshMode) ! symmetry sides and elem volumes/characteristic lengths IF(ABS(meshMode).GT.1)THEN - IF((Symmetry%Order.LE.2).AND.(meshMode.NE.-2)) CALL UNLOCK_AND_FREE(SideIsSymSide_Shared_Win) + IF (Symmetry%Order.LE.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 diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index c613852e8..58f7fe905 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -266,6 +266,8 @@ SUBROUTINE DSMC_1D_InitVolumes() USE MOD_Particle_Mesh_Vars ,ONLY: offsetComputeNodeElem,SideIsSymSide_Shared_Win, nNonUniqueGlobalSides USE MOD_Particle_Mesh_Vars ,ONLY: ElemVolume_Shared_Win,ElemCharLength_Shared_Win, ElemInfo_Shared USE MOD_MPI_Shared_Vars ,ONLY: myComputeNodeRank,nComputeNodeProcessors,MPI_COMM_LEADERS_SHARED +#else +USE MOD_Particle_Mesh_Vars ,ONLY: nComputeNodeSides #endif /*USE_MPI*/ ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE diff --git a/src/posti/piclas2vtk/piclas2vtk.f90 b/src/posti/piclas2vtk/piclas2vtk.f90 index 31dfbb09c..6eb77c17e 100644 --- a/src/posti/piclas2vtk/piclas2vtk.f90 +++ b/src/posti/piclas2vtk/piclas2vtk.f90 @@ -45,6 +45,7 @@ PROGRAM piclas2vtk #ifdef PARTICLES USE MOD_Particle_Mesh_Tools ,ONLY: InitParticleGeometry USE MOD_Particle_Mesh_Vars ,ONLY: ConcaveElemSide_Shared,ElemSideNodeID_Shared,ElemMidPoint_Shared +USE MOD_Particle_Vars ,ONLY: Symmetry #endif /*PARTICLES*/ USE MOD_Particle_Mesh_Vars ,ONLY: NodeCoords_Shared, ElemNodeID_Shared, NodeInfo_Shared USE MOD_Mesh_Tools ,ONLY: InitGetCNElemID, InitGetGlobalElemID @@ -209,7 +210,9 @@ PROGRAM piclas2vtk ,'TimeStampLength cannot be smaller than 4 and not larger than 30') WRITE(UNIT=TimeStampLenStr ,FMT='(I0)') TimeStampLength WRITE(UNIT=TimeStampLenStr2,FMT='(I0)') TimeStampLength-4 - +#ifdef PARTICLES +Symmetry%Order=3 +#endif ! DMD Stuff dmdSingleModeOutput = GETINT('dmdSingleModeOutput') dmdMaximumModeOutput = GETINT('dmdMaximumModeOutput') diff --git a/src/posti/superB/superB.f90 b/src/posti/superB/superB.f90 index 975955eb3..971b86f1e 100644 --- a/src/posti/superB/superB.f90 +++ b/src/posti/superB/superB.f90 @@ -38,6 +38,9 @@ PROGRAM SuperB_standalone USE MOD_Equation ,ONLY: DefineParametersEquation USE MOD_Interpolation_Vars ,ONLY: BGField,BGFieldAnalytic USE MOD_Mesh ,ONLY: InitMesh +#ifdef PARTICLES +USE MOD_Particle_Vars ,ONLY: Symmetry +#endif /*PARTICLES*/ #if USE_MPI USE MOD_MPI_Shared #endif /*USE_MPI*/ @@ -122,6 +125,9 @@ PROGRAM SuperB_standalone CALL InitIOHDF5() CALL InitGlobals() +#ifdef PARTICLES +Symmetry%Order = 3 +#endif #if USE_MPI CALL InitMPIShared() #endif /*USE_MPI*/ From c8f9401874e8200d9087741542ee73cbb83694bf Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Fri, 26 Apr 2024 14:59:39 +0200 Subject: [PATCH 20/37] missing axis def --- regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini | 2 +- regressioncheck/WEK_DSMC/1D_Sod_Shocktube/hopr.ini | 2 +- .../CHEM_EQUI_diss_CH4_2DAxi_RadWeight/parameter.ini | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini index 124d03216..52e75a57e 100644 --- a/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini +++ b/regressioncheck/WEK_BGKFlow/Flow_N2_70degCone/parameter.ini @@ -55,7 +55,7 @@ Part-Boundary3-RotACC = 1. Part-Boundary4-SourceName = SYMAXIS Part-Boundary4-Condition = symmetric_axis Part-Boundary5-SourceName = ROTSYM -Part-Boundary5-Condition = symmetric +Part-Boundary5-Condition = symmetric_dim Part-FIBGMdeltas = (/0.001,0.001,0.01/) ! =============================================================================== ! ! Species1 - N2 diff --git a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/hopr.ini b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/hopr.ini index 2de84bba5..dbd196b47 100644 --- a/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/hopr.ini +++ b/regressioncheck/WEK_DSMC/1D_Sod_Shocktube/hopr.ini @@ -10,7 +10,7 @@ Mode =1 ! Mode for Cartesian boxes nZones =1 ! number of boxes jacobianTolerance=1e-30 - + sfc_type =hilbertZ Corner =(/-0.0035,-0.0005,-0.0005 ,,0.005,-0.0005,-0.0005 ,,0.005,0.0005,-0.0005 ,,-0.0035,0.0005,-0.0005 ,,-0.0035,-0.0005,0.0005 ,,0.005,-0.0005,0.0005 ,,0.005,0.0005,0.0005 ,,-0.0035,0.0005,0.0005 /) diff --git a/regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/parameter.ini b/regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/parameter.ini index a601f49f0..d47edccbf 100644 --- a/regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/parameter.ini +++ b/regressioncheck/WEK_Reservoir/CHEM_EQUI_diss_CH4_2DAxi_RadWeight/parameter.ini @@ -43,11 +43,11 @@ Part-Boundary2-Condition=reflective Part-Boundary3-SourceName=BC_Yplus Part-Boundary3-Condition=reflective Part-Boundary4-SourceName=BC_Yminus -Part-Boundary4-Condition=symmetric +Part-Boundary4-Condition=symmetric_axis Part-Boundary5-SourceName=BC_Zplus -Part-Boundary5-Condition=symmetric +Part-Boundary5-Condition=symmetric_dim Part-Boundary6-SourceName=BC_Zminus -Part-Boundary6-Condition=symmetric +Part-Boundary6-Condition=symmetric_dim Part-FIBGMdeltas=(/2.32E-6,2.32E-6,1.0E-7/) ! =============================================================================== ! ! Species1 - CH4 From 125788b9af965ef96c3190704f6cc35deeed8360 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 29 Apr 2024 15:49:37 +0200 Subject: [PATCH 21/37] Initialize arrays during ChangeArraySize routine --- .../boundary/particle_boundary_init.f90 | 1 + src/particles/particle_init.f90 | 1 + src/particles/particle_tools.f90 | 70 +++++++------------ .../pic/interpolation/pic_interpolation.f90 | 1 + 4 files changed, 30 insertions(+), 43 deletions(-) diff --git a/src/particles/boundary/particle_boundary_init.f90 b/src/particles/boundary/particle_boundary_init.f90 index 1dc142db7..8e9a7c640 100644 --- a/src/particles/boundary/particle_boundary_init.f90 +++ b/src/particles/boundary/particle_boundary_init.f90 @@ -1952,6 +1952,7 @@ SUBROUTINE InitRotPeriodicInterPlaneMapping() ALLOCATE(InterPlanePartIndx(1:PDM%maxParticleNumber), STAT=ALLOCSTAT) IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_boundary_init.f90: Cannot allocate InterPlanePartIndx array!') +InterPlanePartIndx = 0 HasInterPlaneOnProc = .FALSE. diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index e977783e3..e9f90e33a 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -1027,6 +1027,7 @@ SUBROUTINE InitializeVariablesvMPF() ALLOCATE(PartMPF(1:PDM%maxParticleNumber), STAT=ALLOCSTAT) IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__,'ERROR in particle_init.f90: Cannot allocate Particle arrays!') + PartMPF = 1. END IF END SUBROUTINE InitializeVariablesvMPF diff --git a/src/particles/particle_tools.f90 b/src/particles/particle_tools.f90 index 63c1f524b..ff265f16a 100644 --- a/src/particles/particle_tools.f90 +++ b/src/particles/particle_tools.f90 @@ -1840,13 +1840,11 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) IF(Amount.EQ.0) RETURN NewSize=PDM%MaxParticleNumber+Amount ! IPWRITE(*,*) "Increase by amount",PDM%MaxParticleNumber,NewSize - IF(NewSize.GT.PDM%maxAllowedParticleNumber)CALL ABORT(& - __STAMP__& + 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__& + 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 @@ -1862,26 +1860,26 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) 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(LastPartPos)) CALL ChangeSizeArray(LastPartPos,PDM%maxParticleNumber,NewSize,0.) 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(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize,1.) +IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize,1.) IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) IF(ALLOCATED(LastPartVeloRotRef)) CALL ChangeSizeArray(LastPartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) -IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize) +IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize,0.) 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(FieldAtParticle)) CALL ChangeSizeArray(FieldAtParticle,PDM%maxParticleNumber,NewSize,0.) -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(InterPlanePartIndx)) CALL ChangeSizeArray(InterPlanePartIndx,PDM%maxParticleNumber,NewSize,0) +IF(ALLOCATED(BGGas%PairingPartner)) CALL ChangeSizeArray(BGGas%PairingPartner,PDM%maxParticleNumber,NewSize,0) +IF(ALLOCATED(CollInf%OldCollPartner)) CALL ChangeSizeArray(CollInf%OldCollPartner,PDM%maxParticleNumber,NewSize,0) 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) +IF(ALLOCATED(velocityAtTime)) CALL ChangeSizeArray(velocityAtTime,PDM%maxParticleNumber,NewSize,0.) #endif #if USE_MPI @@ -1921,9 +1919,7 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) IF(ALLOCATED(AmbipolElecVelo)) THEN ALLOCATE(AmbipolElecVelo_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in IncreaseMaxParticleNumber') + 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 @@ -1933,9 +1929,7 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) IF(ALLOCATED(ElectronicDistriPart)) THEN ALLOCATE(ElectronicDistriPart_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in IncreaseMaxParticleNumber') + 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 @@ -1945,9 +1939,7 @@ SUBROUTINE IncreaseMaxParticleNumber(Amount) IF(ALLOCATED(VibQuantsPar)) THEN ALLOCATE(VibQuantsPar_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in IncreaseMaxParticleNumber') + 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 @@ -2046,9 +2038,7 @@ SUBROUTINE ReduceMaxParticleNumber() 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') + IF(ii.EQ.0.OR.ii.GT.NewSize) CALL ABORT(__STAMP__,'Error in ReduceMaxParticleNumber: New particle index outside of possible range') END IF IF(PDM%ParticleVecLength.LT.ii) PDM%ParticleVecLength = ii CALL ChangePartID(i,ii) @@ -2068,26 +2058,26 @@ SUBROUTINE ReduceMaxParticleNumber() 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(LastPartPos)) CALL ChangeSizeArray(LastPartPos,PDM%maxParticleNumber,NewSize,0.) 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(PartTimeStep)) CALL ChangeSizeArray(PartTimeStep,PDM%maxParticleNumber,NewSize,1.) +IF(ALLOCATED(PartMPF)) CALL ChangeSizeArray(PartMPF,PDM%maxParticleNumber,NewSize,1.) IF(ALLOCATED(PartVeloRotRef)) CALL ChangeSizeArray(PartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) IF(ALLOCATED(LastPartVeloRotRef)) CALL ChangeSizeArray(LastPartVeloRotRef,PDM%maxParticleNumber,NewSize,0.) -IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize) +IF(ALLOCATED(PartStateIntEn)) CALL ChangeSizeArray(PartStateIntEn,PDM%maxParticleNumber,NewSize,0.) 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(FieldAtParticle)) CALL ChangeSizeArray(FieldAtParticle,PDM%maxParticleNumber,NewSize,0.) -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(InterPlanePartIndx)) CALL ChangeSizeArray(InterPlanePartIndx,PDM%maxParticleNumber,NewSize,0) +IF(ALLOCATED(BGGas%PairingPartner)) CALL ChangeSizeArray(BGGas%PairingPartner,PDM%maxParticleNumber,NewSize,0) +IF(ALLOCATED(CollInf%OldCollPartner)) CALL ChangeSizeArray(CollInf%OldCollPartner,PDM%maxParticleNumber,NewSize,0) 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) +IF(ALLOCATED(velocityAtTime)) CALL ChangeSizeArray(velocityAtTime,PDM%maxParticleNumber,NewSize,0.) #endif #if USE_MPI @@ -2127,9 +2117,7 @@ SUBROUTINE ReduceMaxParticleNumber() IF(ALLOCATED(AmbipolElecVelo)) THEN ALLOCATE(AmbipolElecVelo_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in ReduceMaxParticleNumber') + 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 @@ -2142,9 +2130,7 @@ SUBROUTINE ReduceMaxParticleNumber() IF(ALLOCATED(ElectronicDistriPart)) THEN ALLOCATE(ElectronicDistriPart_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in ReduceMaxParticleNumber') + 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 @@ -2157,9 +2143,7 @@ SUBROUTINE ReduceMaxParticleNumber() IF(ALLOCATED(VibQuantsPar)) THEN ALLOCATE(VibQuantsPar_New(NewSize),STAT=ALLOCSTAT) - IF (ALLOCSTAT.NE.0) CALL ABORT(& -__STAMP__& -,'Cannot allocate increased Array in ReduceMaxParticleNumber') + 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 diff --git a/src/particles/pic/interpolation/pic_interpolation.f90 b/src/particles/pic/interpolation/pic_interpolation.f90 index 82aadc407..b7f38f869 100644 --- a/src/particles/pic/interpolation/pic_interpolation.f90 +++ b/src/particles/pic/interpolation/pic_interpolation.f90 @@ -181,6 +181,7 @@ SUBROUTINE InitializeParticleInterpolation !--- Allocate arrays for interpolation of fields to particles ALLOCATE(FieldAtParticle(1:6,1:PDM%maxParticleNumber), STAT=ALLOCSTAT) IF (ALLOCSTAT.NE.0) CALL abort(__STAMP__ ,'ERROR in pic_interpolation.f90: Cannot allocate FieldAtParticle array!',ALLOCSTAT) +FieldAtParticle = 0. SELECT CASE(TRIM(InterpolationType)) CASE('particle_position') From c52dec0cefeaf0bf3abbdb4a8f067fd35bd73b6f Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 29 Apr 2024 21:36:50 +0200 Subject: [PATCH 22/37] Only utilize the relativistic energy for the cross-section determination for now, check with classical to avoid negative energy in chemistry --- src/particles/dsmc/dsmc_chemical_init.f90 | 6 ++--- src/particles/mcc/mcc.f90 | 27 ++++++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/particles/dsmc/dsmc_chemical_init.f90 b/src/particles/dsmc/dsmc_chemical_init.f90 index 0cd815cbd..0cb0d517e 100644 --- a/src/particles/dsmc/dsmc_chemical_init.f90 +++ b/src/particles/dsmc/dsmc_chemical_init.f90 @@ -1205,10 +1205,10 @@ SUBROUTINE ReadReacFromDatabase(ReadInNumOfReact) DO iSpec = 1, 3 IF(ChemReac%Reactants(iReac,iSpec).NE.0) SumReactMass = SumReactMass + Species(ChemReac%Reactants(iReac,iSpec))%MassIC END DO - ! Santiy mass check for reactions of selected chemistry model, real compare with RelMassTol + ! Sanity mass check for reactions of selected chemistry model, real compare with RelMassTol IF(.NOT.ALMOSTEQUALRELATIVE(SumProdMass,SumReactMass,RelMassTol)) THEN - CALL PrintOption('DSMC_Chemistry might not mass conserving for chemical reaction:','WARNING',StrOpt=TRIM(ChemReac%ReactionName(iReac))) - CALL abort(__STAMP__,'DSMC_Chemistry might not mass conserving for current chemical reaction') + CALL PrintOption('DSMC_Chemistry might not be mass conserving for chemical reaction:','WARNING',StrOpt=TRIM(ChemReac%ReactionName(iReac))) + CALL abort(__STAMP__,'DSMC_Chemistry might not be mass conserving for current chemical reaction!') END IF ! Read-in of the reaction parameters, depending on the model SELECT CASE (TRIM(ChemReac%ReactModel(iReac))) diff --git a/src/particles/mcc/mcc.f90 b/src/particles/mcc/mcc.f90 index cd2a48dd7..a9a7d9c1a 100644 --- a/src/particles/mcc/mcc.f90 +++ b/src/particles/mcc/mcc.f90 @@ -612,12 +612,16 @@ END SUBROUTINE MonteCarloCollision !=================================================================================================================================== -!> Calculate the reaction probability if collision cross-section data is used (only with a background gas from the MCC routine) +!> Calculate the reaction probability if cross-section data is used to be added to the DSMC-style collision probability +!> (only with a background gas from the MCC routine) +!> NOTE: Relativistic collision energy is only utilized to determine the cross-section, everything else is done using the classical +!> approach !=================================================================================================================================== SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggPartIndex,iElem) ! MODULES +USE MOD_Globals_Vars ,ONLY: RelativisticLimit USE MOD_Particle_Vars ,ONLY: Species, PartSpecies, VarTimeStep -USE MOD_DSMC_Vars ,ONLY: SpecDSMC, BGGas, ChemReac, DSMC, PartStateIntEn +USE MOD_DSMC_Vars ,ONLY: SpecDSMC, BGGas, ChemReac, DSMC, PartStateIntEn, CollInf USE MOD_MCC_Vars ,ONLY: SpecXSec USE MOD_Particle_Vars ,ONLY: Species USE MOD_TimeDisc_Vars ,ONLY: dt @@ -632,7 +636,7 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP ! LOCAL VARIABLES INTEGER :: jSpec, iPath, ReacTest, EductReac(1:3), ProductReac(1:4), iProd INTEGER :: NumWeightProd -REAL :: EZeroPoint_Educt, EZeroPoint_Prod, CollEnergy +REAL :: EZeroPoint_Educt, EZeroPoint_Prod, CollEnergy, CollEnergyNonRela REAL :: CrossSection, dtVar REAL :: Temp_Rot, Temp_Vib, Temp_Elec, BGGasNumDens, BGGasFraction !=================================================================================================================================== @@ -673,8 +677,8 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP EZeroPoint_Prod = EZeroPoint_Prod + SpecDSMC(ProductReac(iProd))%EZeroPoint END IF END DO - ! Adding the internal energy of particle species - CollEnergy = CollEnergy_in + PartStateIntEn(1,PartIndex) + PartStateIntEn(2,PartIndex) + ! Adding the internal energy of particle species (relative translational energy is added at the end) + CollEnergy = PartStateIntEn(1,PartIndex) + PartStateIntEn(2,PartIndex) ! Internal energy of background species IF((Species(jSpec)%InterID.EQ.2).OR.(Species(jSpec)%InterID.EQ.20)) THEN IF(BGGas%UseDistribution) THEN @@ -697,8 +701,19 @@ SUBROUTINE MCC_CalcReactionProb(iCase,bgSpec,CRela2,CollEnergy_in,PartIndex,bggP PartStateIntEn(3,bggPartIndex) = CalcEElec_particle(jSpec,Temp_Elec,bggPartIndex) CollEnergy = CollEnergy + PartStateIntEn(3,PartIndex) + PartStateIntEn(3,bggPartIndex) END IF + ! Work-around for relativistic energies: since the energy distribution after the reaction is not done relativistically yet, + ! we have to check whether sufficient collision energy is available in the classical manner + IF(CRela2 .LT. RelativisticLimit) THEN + ! Classical + CollEnergyNonRela = CollEnergy_in + CollEnergy + CollEnergy = CollEnergyNonRela + ELSE + ! Relativistic + CollEnergyNonRela = 0.5 * CollInf%MassRed(iCase) * CRela2 + CollEnergy + CollEnergy = CollEnergy_in + CollEnergy + END IF ! Check first if sufficient energy is available for the products after the reaction - IF(((CollEnergy-EZeroPoint_Prod).GE.-ChemReac%EForm(ReacTest))) THEN + IF(((CollEnergyNonRela-EZeroPoint_Prod).GE.-ChemReac%EForm(ReacTest))) THEN CollEnergy = CollEnergy - EZeroPoint_Educt CrossSection = InterpolateCrossSection(SpecXSec(iCase)%ReactionPath(iPath)%XSecData,CollEnergy) ASSOCIATE( ReactionProb => ChemReac%CollCaseInfo(iCase)%ReactionProb(iPath) ) From 8bee8d7d43b7be9358b3143b9c3c566ffdfb86ea Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Mon, 29 Apr 2024 21:40:05 +0200 Subject: [PATCH 23/37] Updated list of contributors --- CONTRIBUTORS.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index fc223a4cd..2a6a0d311 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,6 +1,6 @@ # List of Contributors -This is a (possibly incomplete) list of the people who contributed to piclas. +This is a (possibly incomplete) list of the people who contributed to PICLas. * Christoph Altmann * Muhammed Atak @@ -15,10 +15,12 @@ This is a (possibly incomplete) list of the people who contributed to piclas. * David Flad * Fabian Föll * Hannes Frank +* Félix Garmirian * Gregor Gassner * Florian Hindenlang * Andrea Hinkel * Konstantin Hinsberger +* Franziska Hild * Timon Hitz * Malte Hoffmann * Serena Keller @@ -26,7 +28,9 @@ This is a (possibly incomplete) list of the people who contributed to piclas. * Marius Koch * Patrick Kopper * Nico Krais +* Simone Lauterbach * Robert Mansk +* Claudia Marianowski * Claus-Dieter Munz * Asim Mirza * Jonathan Neudorfer @@ -34,10 +38,13 @@ This is a (possibly incomplete) list of the people who contributed to piclas. * Jonatan Núñez-de la Rosa * Philipp Offenhaeuser * Philip Ortwein +* Tobias Ott * Marcel Pfeiffer * Wladimir Reschke * Matthias Sonntag * Marcel "Mitch" Scherrmann +* Valentin Schunck +* Miklas Schütte * Anna Schwarz * Marc Staudenmaier * Torsten Stindl From 05ed2966de4092092434402bdf405b4b98335e02 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 30 Apr 2024 13:46:05 +0200 Subject: [PATCH 24/37] Increased piclas version number to 3.2.1 --- .github/workflows/cmake-ninja.yml | 2 +- src/globals/globals_vars.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake-ninja.yml b/.github/workflows/cmake-ninja.yml index 0dd049ed4..e44aff91e 100644 --- a/.github/workflows/cmake-ninja.yml +++ b/.github/workflows/cmake-ninja.yml @@ -318,7 +318,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: piclas-binaries-v3.2.0 + name: piclas-binaries-v3.2.1 path: artifacts - name: Upload release asset diff --git a/src/globals/globals_vars.f90 b/src/globals/globals_vars.f90 index de526fc26..e7ef2e04c 100644 --- a/src/globals/globals_vars.f90 +++ b/src/globals/globals_vars.f90 @@ -24,7 +24,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 = 2 !> FileVersion number saved in each hdf5 file with hdf5 header -INTEGER,PARAMETER :: PatchVersion = 0 !> FileVersion number saved in each hdf5 file with hdf5 header +INTEGER,PARAMETER :: PatchVersion = 1 !> 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 INTEGER,PARAMETER :: FileVersionInt = PatchVersion+MinorVersion*100+MajorVersion*10000 From 9dcfe60da7cdeb1fb1e6746c611cf43b7593c23b Mon Sep 17 00:00:00 2001 From: Marcel Pfeiffer Date: Wed, 1 May 2024 22:32:37 +0200 Subject: [PATCH 25/37] bugfix for rotsym with reflective boundary on outer y face --- .../surfacemodel/surfacemodel_tools.f90 | 17 +++++++++-------- .../tracking/particle_tracking_vars.f90 | 1 + .../tracking/particle_triatracking.f90 | 16 ++++++++-------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/particles/surfacemodel/surfacemodel_tools.f90 b/src/particles/surfacemodel/surfacemodel_tools.f90 index 8240e5a71..dc794c385 100644 --- a/src/particles/surfacemodel/surfacemodel_tools.f90 +++ b/src/particles/surfacemodel/surfacemodel_tools.f90 @@ -296,6 +296,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) USE MOD_Particle_Vars ,ONLY: PDM, RotRefFrameOmega,RotRefSubTimeStep,nSubCyclingSteps USE MOD_Particle_Tracking_Vars ,ONLY: TrackInfo USE MOD_part_RHS ,ONLY: CalcPartRHSRotRefFrame +USE MOD_Globals_Vars ,ONLY: TwoepsMach ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------! @@ -312,7 +313,7 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) REAL :: POI_fak, TildTrajectory(3), dtVar ! Symmetry REAL :: rotVelY, rotVelZ, rotPosY -REAL :: nx, ny, nVal, VelX, VelY, VecX, VecY, Vector1(1:3), Vector2(1:3), OldVelo(1:3) +REAL :: nx, ny, nVal, VelX, VelY, VecX, VecY, Vector1(1:2), OldVelo(1:3) REAL :: NewVeloPush(1:3) !=================================================================================================================================== ! 1.) Get the wall velocity, temperature and accommodation coefficients @@ -360,14 +361,9 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) CNElemID = GetCNElemID(SideInfo_Shared(SIDE_ELEMID,SideID)) LocSideID = SideInfo_Shared(SIDE_LOCALID,SideID) - ! Getting the vectors, which span the cell (1-2 and 1-4) - Vector1(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(2,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) - Vector2(1:3)=NodeCoords_Shared(1:3,ElemSideNodeID_Shared(4,LocSideID,CNElemID)+1)-NodeCoords_Shared(1:3,ElemSideNodeID_Shared(1,LocSideID,CNElemID)+1) + ! Getting the vectors, which span the cell + Vector1(1:2) = NodeCoords_Shared(1:2,ElemSideNodeID2D_Shared(1,LocSideID, CNElemID))-NodeCoords_Shared(1:2,ElemSideNodeID2D_Shared(2,LocSideID, CNElemID)) - ! Get the vector, which does NOT have the z-component - IF (ABS(Vector1(3)).GT.ABS(Vector2(3))) THEN - Vector1 = Vector2 - END IF ! Cross product of the two vectors is simplified as Vector1(3) is zero nx = Vector1(2) ny = -Vector1(1) @@ -468,6 +464,11 @@ SUBROUTINE DiffuseReflection(PartID,SideID,n_loc) PartState(3,PartID) = 0.0 NewVelo(2) = rotVelY NewVelo(3) = rotVelZ + + IF (NINT(SIGN(1.,rotPosY-POI_vec(2))).NE.NINT(SIGN(1.,ny))) THEN + LastPartPos(2, PartID) = LastPartPos(2, PartID) + SIGN(1.,ny)*TwoepsMach + TrackInfo%LastSide = 0 + END IF END IF ! Symmetry%Axisymmetric IF(Symmetry%Order.LT.3) THEN diff --git a/src/particles/tracking/particle_tracking_vars.f90 b/src/particles/tracking/particle_tracking_vars.f90 index 737391fa2..91f7c12b8 100644 --- a/src/particles/tracking/particle_tracking_vars.f90 +++ b/src/particles/tracking/particle_tracking_vars.f90 @@ -55,6 +55,7 @@ MODULE MOD_Particle_Tracking_Vars TYPE tTrackingInfo INTEGER :: CurrElem INTEGER :: LocSide + INTEGER :: LastSide INTEGER :: GlobSide INTEGER :: flip INTEGER :: TriNum diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 588f70929..02eb10faf 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -615,7 +615,7 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) INTEGER :: NblocSideID, NbElemID, CNElemID, ind, nbSideID, nMortarElems,BCType INTEGER :: ElemID,flip,OldElemID,nlocSides INTEGER :: LocalSide, NrOfThroughSides -INTEGER :: SideID,TempSideID,iLocSide, localSideID, LastSide +INTEGER :: SideID,TempSideID,iLocSide, localSideID LOGICAL :: ThroughSide, PartisDone LOGICAL :: crossedBC, oldElemIsMortar !----------------------------------------------------------------------------------------------------------------------------------- @@ -629,11 +629,11 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) IF (MeasureTrackTime) nTracks=nTracks+1 PartisDone = .FALSE. IF (PEM%LastGlobalElemID(i).LE.0) THEN - LastSide = -PEM%LastGlobalElemID(i) + TrackInfo%LastSide = -PEM%LastGlobalElemID(i) ElemID = PEM%GlobalElemID(i) ELSE ElemID = PEM%LastGlobalElemID(i) - LastSide = 0 + TrackInfo%LastSide = 0 END IF TrackInfo%CurrElem=ElemID SideID = 0 @@ -662,7 +662,7 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) nMortarElems = MERGE(4,2,SideInfo_Shared(SIDE_NBELEMID,TempSideID).EQ.-1) DO ind = 1, nMortarElems nbSideID = ElemInfo_Shared(ELEM_FIRSTSIDEIND,ElemID) + iLocSide + ind - IF (nbSideID.EQ.LastSide) CYCLE + IF (nbSideID.EQ.TrackInfo%LastSide) CYCLE 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 @@ -681,13 +681,13 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) oldElemIsMortar = .TRUE. NrOfThroughSides = NrOfThroughSides + 1 SideID = nbSideID - LastSide = nbSideID + TrackInfo%LastSide = nbSideID LocalSide = NblocSideID EXIT SideLoop END IF END DO ELSE ! Regular side - IF (TempSideID.EQ.LastSide) CYCLE + IF (TempSideID.EQ.TrackInfo%LastSide) CYCLE ThroughSide = .FALSE. IF(Symmetry%Order.EQ.2) THEN CALL ParticleThroughSideCheck2D(i,localSideID,ElemID,ThroughSide) @@ -698,7 +698,7 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) NrOfThroughSides = NrOfThroughSides + 1 SideID = TempSideID LocalSide = localSideID - LastSide = SideInfo_Shared(SIDE_NBSIDEID,TempSideID) + TrackInfo%LastSide = SideInfo_Shared(SIDE_NBSIDEID,TempSideID) EXIT SideLoop END IF END IF ! Mortar or regular side @@ -715,7 +715,7 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) crossedBC=.FALSE. flip = MERGE(0, MOD(SideInfo_Shared(SIDE_FLIP,SideID),10),SideInfo_Shared(SIDE_ID,SideID).GT.0) IF (SideInfo_Shared(SIDE_BCID,SideID).GT.0) THEN - LastSide=SideID + TrackInfo%LastSide=SideID OldElemID=ElemID BCType = PartBound%TargetBoundCond(PartBound%MapToPartBC(SideInfo_Shared(SIDE_BCID,SideID))) ! Calculate the intersection with the wall and determine alpha (= fraction of trajectory to the intersection) From 6bc8f1ffaf4be01e98bbca396839dd5651eef988 Mon Sep 17 00:00:00 2001 From: Stephen Copplestone Date: Fri, 3 May 2024 16:04:04 +0200 Subject: [PATCH 26/37] Fixed determination of Dielectric_Master array. Copy slave information to master side when the slave side is in the dielectric region in case of a dielectric <-> vacuum interface. Also added DielectricFluxNonConserving = F,T to NIG_maxwell_dipole_dielectric reggie (fisheye lens). --- .../maxwell/command_line.ini | 2 +- .../maxwell/parameter.ini | 1 + src/dielectric/dielectric.f90 | 19 ++++++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/command_line.ini b/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/command_line.ini index 03a573aca..92197be56 100644 --- a/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/command_line.ini +++ b/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/command_line.ini @@ -1 +1 @@ -MPI=1,4 +MPI=1,2,4,6,8 diff --git a/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/parameter.ini b/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/parameter.ini index 3de04aa76..e8628ec01 100644 --- a/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/parameter.ini +++ b/regressioncheck/NIG_maxwell_dipole_dielectric/maxwell/parameter.ini @@ -43,6 +43,7 @@ tend = 5E-9 ! End time Analyze_dt = 1E-9 ! Timestep of analyze outputs ! encounter BC at 6.67e-9 CFLscale = 0.9 ! Scaling of theoretical CFL number +DielectricFluxNonConserving = F,T c_corr = 1 ! =============================================================================== ! diff --git a/src/dielectric/dielectric.f90 b/src/dielectric/dielectric.f90 index 2ed42a78d..f12a27600 100644 --- a/src/dielectric/dielectric.f90 +++ b/src/dielectric/dielectric.f90 @@ -377,9 +377,10 @@ SUBROUTINE SetDielectricFaceProfile() #if USE_MPI REAL,DIMENSION(1,0:PP_N,0:PP_N,1:nSides) :: Dielectric_dummy_Master2 REAL,DIMENSION(1,0:PP_N,0:PP_N,1:nSides) :: Dielectric_dummy_Slave2 -INTEGER :: I,J,iSide +INTEGER :: I,J #endif /*USE_MPI*/ -INTEGER :: iElem +INTEGER :: iElem,iSide +REAL :: MinSlave,MinMaster !=================================================================================================================================== ! General workflow: ! 1. Initialize dummy arrays for Elem/Face @@ -407,7 +408,7 @@ SUBROUTINE SetDielectricFaceProfile() ! set only the first dimension to 1./SQRT(EpsR*MuR) (the rest are dummies) Dielectric_dummy_elem(1,0:PP_N,0:PP_N,0:PP_N,(iElem))=SQRT(DielectricConstant_inv(0:PP_N,0:PP_N,0:PP_N,ElemToDielectric(iElem))) ELSE - Dielectric_dummy_elem(1,0:PP_N,0:PP_N,0:PP_N,(iElem))=1.0 + Dielectric_dummy_elem(1,0:PP_N,0:PP_N,0:PP_N,(iElem))=-2.0 END IF END DO @@ -461,6 +462,18 @@ SUBROUTINE SetDielectricFaceProfile() Dielectric_Slave =Dielectric_dummy_Slave( 1,0:PP_N,0:PP_N,1:nSides) #endif /*USE_MPI*/ + ! Copy slave side to master side if the dielectric region is on the slave side as the master will calculate the flux for the + ! master and the slave side and it requires the factor 1./SQRT(EpsR*MuR) for the wave travelling into the dielectric region + DO iSide = 1, nSides + MinSlave = MINVAL(Dielectric_Slave(:,:,iSide)) + MinMaster = MINVAL(Dielectric_Master(:,:,iSide)) + IF((MinMaster.LT.0.0).AND.(MinSlave.LT.0.0))THEN + Dielectric_Master(:,:,iSide) = 1.0 + ELSEIF(MinMaster.LT.0.0)THEN + Dielectric_Master(:,:,iSide) = Dielectric_Slave(:,:,iSide) + END IF ! (MinMaster.LT.0.0).AND.(MinSlave.LT.0.0) + END DO ! iSide = 1, nSides + ! 8. Check if the default value remains unchanged (negative material constants are not allowed until now) IF(MINVAL(Dielectric_Master).LT.0.0)THEN CALL abort(& From 5686c01c30940d44f06fd4757db83d2c1da3443f Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 14 May 2024 03:35:32 +0200 Subject: [PATCH 27/37] Function pointer for ParticleInsideQuad and SingleParticleTriaTracking --- .../features-particle-solver.md | 2 +- src/init/piclas_init.f90 | 6 +- src/particles/dsmc/dsmc_symmetry.f90 | 41 +------ src/particles/particle_init.f90 | 51 +++++++++ .../particle_mesh/particle_mesh_tools.f90 | 56 +++++---- .../tracking/particle_triatracking.f90 | 63 +++++++---- .../radiation_solver/radiation_init.f90 | 2 +- .../radiative_transfer/radtrans_init.f90 | 106 +++++++++--------- 8 files changed, 183 insertions(+), 144 deletions(-) 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 9363ee1e0..d54c6a324 100644 --- a/docs/documentation/userguide/features-and-models/features-particle-solver.md +++ b/docs/documentation/userguide/features-and-models/features-particle-solver.md @@ -223,7 +223,7 @@ only at the stagnation point, the time step defined during the initialization is Part-VariableTimeStep-ScaleFactor2DBack = 2.0 (sec:variable-particle-weighting)= -#### Variable Particle Weighting +## Variable Particle Weighting 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: diff --git a/src/init/piclas_init.f90 b/src/init/piclas_init.f90 index ca9b6ba0d..cbf95e347 100644 --- a/src/init/piclas_init.f90 +++ b/src/init/piclas_init.f90 @@ -87,13 +87,12 @@ SUBROUTINE InitPiclas(IsLoadBalance) #endif /*USE_MPI*/ #ifdef PARTICLES USE MOD_DSMC_Vars ,ONLY: UseDSMC -USE MOD_ParticleInit ,ONLY: InitParticleGlobals,InitParticles +USE MOD_ParticleInit ,ONLY: InitParticleGlobals,InitParticles,InitSymmetry USE MOD_TTMInit ,ONLY: InitTTM,InitIMD_TTM_Coupling USE MOD_TTM_Vars ,ONLY: DoImportTTMFile USE MOD_Particle_Analyze ,ONLY: InitParticleAnalyze USE MOD_SurfaceModel_Analyze ,ONLY: InitSurfModelAnalyze USE MOD_Particle_MPI ,ONLY: InitParticleMPI -USE MOD_DSMC_Symmetry ,ONLY: Init_Symmetry #if USE_MPI USE mod_readIMD ,ONLY: initReadIMDdata,read_IMD_results #endif /* USE_MPI */ @@ -137,7 +136,7 @@ SUBROUTINE InitPiclas(IsLoadBalance) ! DSMC handling: useDSMC=GETLOGICAL('UseDSMC') -CALL Init_Symmetry() +CALL InitSymmetry() #endif /*PARTICLES*/ @@ -469,5 +468,4 @@ SUBROUTINE FinalizeLoadBalance(IsLoadBalance) END SUBROUTINE FinalizeLoadBalance - END MODULE MOD_Piclas_Init diff --git a/src/particles/dsmc/dsmc_symmetry.f90 b/src/particles/dsmc/dsmc_symmetry.f90 index 58f7fe905..c5b91962d 100644 --- a/src/particles/dsmc/dsmc_symmetry.f90 +++ b/src/particles/dsmc/dsmc_symmetry.f90 @@ -28,7 +28,7 @@ MODULE MOD_DSMC_Symmetry ! Public Part ---------------------------------------------------------------------------------------------------------------------- PUBLIC :: DSMC_1D_InitVolumes, DSMC_2D_InitVolumes, DSMC_2D_InitRadialWeighting, DSMC_2D_RadialWeighting, DSMC_2D_SetInClones PUBLIC :: DSMC_2D_CalcSymmetryArea, DSMC_1D_CalcSymmetryArea, DSMC_2D_CalcSymmetryAreaSubSides -PUBLIC :: DefineParametersParticleSymmetry, Init_Symmetry, DSMC_2D_TreatIdenticalParticles +PUBLIC :: DefineParametersParticleSymmetry, DSMC_2D_TreatIdenticalParticles !=================================================================================================================================== CONTAINS @@ -884,45 +884,6 @@ FUNCTION DSMC_2D_CalcSymmetryAreaSubSides(iLocSide,iElem) END FUNCTION DSMC_2D_CalcSymmetryAreaSubSides -SUBROUTINE Init_Symmetry() -!=================================================================================================================================== -!> Initialize if a 2D/1D Simulation is performed and which type -!=================================================================================================================================== -! MODULES -USE MOD_Globals -USE MOD_Particle_Vars ,ONLY: Symmetry -USE MOD_DSMC_Vars ,ONLY: RadialWeighting -USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETINT -! IMPLICIT VARIABLE HANDLING -IMPLICIT NONE -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! LOCAL VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -!=================================================================================================================================== -Symmetry%Order = GETINT('Particles-Symmetry-Order') - -IF((Symmetry%Order.LE.0).OR.(Symmetry%Order.GE.4)) CALL ABORT(__STAMP__& -,'Particles-Symmetry-Order (space dimension) has to be in the range of 1 to 3') - -Symmetry%Axisymmetric = GETLOGICAL('Particles-Symmetry2DAxisymmetric') -IF(Symmetry%Axisymmetric.AND.(Symmetry%Order.EQ.3)) CALL ABORT(__STAMP__& - ,'ERROR: Axisymmetric simulations only for 1D or 2D') -IF(Symmetry%Axisymmetric.AND.(Symmetry%Order.EQ.1))CALL ABORT(__STAMP__& - ,'ERROR: Axisymmetric simulations are only implemented for Particles-Symmetry-Order=2 !') -IF(Symmetry%Axisymmetric) THEN - RadialWeighting%DoRadialWeighting = GETLOGICAL('Particles-RadialWeighting') -ELSE - RadialWeighting%DoRadialWeighting = .FALSE. - RadialWeighting%PerformCloning = .FALSE. -END IF - -END SUBROUTINE Init_Symmetry - - SUBROUTINE DSMC_2D_TreatIdenticalParticles(iPair, nPair, nPart, iElem, iPartIndx_Node) !=================================================================================================================================== !> Check if particle pairs have a zero relative velocity (and thus a collision probability of zero), if they do, break up the pair diff --git a/src/particles/particle_init.f90 b/src/particles/particle_init.f90 index 526bc3159..a4f72b88c 100644 --- a/src/particles/particle_init.f90 +++ b/src/particles/particle_init.f90 @@ -60,6 +60,7 @@ END FUNCTION GetPID_C PUBLIC::FinalizeParticles PUBLIC::DefineParametersParticles PUBLIC::InitialIonization +PUBLIC::InitSymmetry !=================================================================================================================================== CONTAINS @@ -1424,6 +1425,8 @@ SUBROUTINE FinalizeParticles() #if USE_HDG USE MOD_HDG_Vars ,ONLY: BRRegionBounds,RegionElectronRef,RegionElectronRefBackup,BRAverageElemToElem #endif /*USE_HDG*/ +USE MOD_Particle_Mesh_Tools ,ONLY: ParticleInsideQuad +USE MOD_Particle_TriaTracking ,ONLY: SingleParticleTriaTracking !----------------------------------------------------------------------------------------------------------------------------------! IMPLICIT NONE ! INPUT VARIABLES @@ -1532,6 +1535,10 @@ SUBROUTINE FinalizeParticles() SDEALLOCATE(NeutralizationBalanceElem) SDEALLOCATE(ExcitationLevelMapping) SDEALLOCATE(ExcitationSampleData) + +SNULLIFY(SingleParticleTriaTracking) +SNULLIFY(ParticleInsideQuad) + END SUBROUTINE FinalizeParticles @@ -1853,5 +1860,49 @@ SUBROUTINE InitPartDataSize() END SUBROUTINE InitPartDataSize +SUBROUTINE InitSymmetry() +!=================================================================================================================================== +!> Initialize if a 2D/1D Simulation is performed and which type +!=================================================================================================================================== +! MODULES +USE MOD_Globals +USE MOD_Particle_Vars ,ONLY: Symmetry +USE MOD_DSMC_Vars ,ONLY: RadialWeighting +USE MOD_ReadInTools ,ONLY: GETLOGICAL,GETINT +USE MOD_Particle_Mesh_Tools ,ONLY: InitParticleInsideQuad +USE MOD_Particle_TriaTracking ,ONLY: InitSingleParticleTriaTracking +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!----------------------------------------------------------------------------------------------------------------------------------- +! INPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! OUTPUT VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +! LOCAL VARIABLES +!----------------------------------------------------------------------------------------------------------------------------------- +!=================================================================================================================================== +Symmetry%Order = GETINT('Particles-Symmetry-Order') + +IF((Symmetry%Order.LE.0).OR.(Symmetry%Order.GE.4)) CALL ABORT(__STAMP__& + ,'Particles-Symmetry-Order (space dimension) has to be in the range of 1 to 3') + +! Initialize the function pointer for triatracking +CALL InitParticleInsideQuad() +CALL InitSingleParticleTriaTracking() + +Symmetry%Axisymmetric = GETLOGICAL('Particles-Symmetry2DAxisymmetric') +IF(Symmetry%Axisymmetric.AND.(Symmetry%Order.EQ.3)) CALL ABORT(__STAMP__& + ,'ERROR: Axisymmetric simulations only for 1D or 2D') +IF(Symmetry%Axisymmetric.AND.(Symmetry%Order.EQ.1))CALL ABORT(__STAMP__& + ,'ERROR: Axisymmetric simulations are only implemented for Particles-Symmetry-Order=2 !') +IF(Symmetry%Axisymmetric) THEN + RadialWeighting%DoRadialWeighting = GETLOGICAL('Particles-RadialWeighting') +ELSE + RadialWeighting%DoRadialWeighting = .FALSE. + RadialWeighting%PerformCloning = .FALSE. +END IF + +END SUBROUTINE InitSymmetry + END MODULE MOD_ParticleInit diff --git a/src/particles/particle_mesh/particle_mesh_tools.f90 b/src/particles/particle_mesh/particle_mesh_tools.f90 index f698550f5..3cd45c62b 100644 --- a/src/particles/particle_mesh/particle_mesh_tools.f90 +++ b/src/particles/particle_mesh/particle_mesh_tools.f90 @@ -30,39 +30,45 @@ MODULE MOD_Particle_Mesh_Tools MODULE PROCEDURE GetSideBoundingBoxTria END INTERFACE +! Define an interface for the function pointer +ABSTRACT INTERFACE + SUBROUTINE ParticleInsideQuadInterface(PartStateLoc,ElemID,InElementCheck,Det_Out) + INTEGER,INTENT(IN) :: ElemID + REAL ,INTENT(IN) :: PartStateLoc(3) + LOGICAL,INTENT(OUT) :: InElementCheck + REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) + END SUBROUTINE +END INTERFACE + +!> Pointer defining the localization routine based on the symmetry order +PROCEDURE(ParticleInsideQuadInterface),POINTER :: ParticleInsideQuad => NULL() + PUBLIC :: ParticleInsideQuad3D, InitPEM_LocalElemID, InitPEM_CNElemID, GetGlobalNonUniqueSideID, GetSideBoundingBoxTria PUBLIC :: GetMeshMinMax, IdentifyElemAndSideType, WeirdElementCheck, CalcParticleMeshMetrics, CalcXCL_NGeo PUBLIC :: CalcBezierControlPoints, InitParticleGeometry, ComputePeriodicVec, ParticleInsideQuad2D, ParticleInsideQuad +PUBLIC :: InitParticleInsideQuad !=================================================================================================================================== CONTAINS -SUBROUTINE ParticleInsideQuad(PartStateLoc,ElemID,InElementCheck,Det_Out) -!=================================================================================================================================== -!> Choose correct ParticleInsideQuad depending on Symmetry dimension -!=================================================================================================================================== +!==================================================================================================================================! +!> Initialize ParticleInsideQuad depending on symmetry dimension using a function pointer +!==================================================================================================================================! +SUBROUTINE InitParticleInsideQuad() ! MODULES USE MOD_Particle_Vars ,ONLY: Symmetry ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE -! INPUT VARIABLES -!----------------------------------------------------------------------------------------------------------------------------------- -! INPUT/OUTPUT VARIABLES -INTEGER,INTENT(IN) :: ElemID -REAL ,INTENT(IN) :: PartStateLoc(3) -!----------------------------------------------------------------------------------------------------------------------------------- -! OUTPUT VARIABLES -LOGICAL,INTENT(OUT) :: InElementCheck -REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) -!----------------------------------------------------------------------------------------------------------------------------------- -!=================================================================================================================================== +!================================================================================================================================== + IF (Symmetry%Order.EQ.3) THEN - CALL ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) + ParticleInsideQuad => ParticleInsideQuad3D ELSE IF (Symmetry%Order.EQ.2) THEN - CALL ParticleInsideQuad2D(PartStateLoc(1:2),ElemID,InElementCheck) + ParticleInsideQuad => ParticleInsideQuad2D ELSE - CALL ParticleInsideQuad1D(PartStateLoc(1),ElemID,InElementCheck) + ParticleInsideQuad => ParticleInsideQuad1D END IF -END SUBROUTINE ParticleInsideQuad + +END SUBROUTINE InitParticleInsideQuad !PPURE SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det) SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) @@ -211,7 +217,7 @@ SUBROUTINE ParticleInsideQuad3D(PartStateLoc,ElemID,InElementCheck,Det_Out) END SUBROUTINE ParticleInsideQuad3D -SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) +SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck,Det_Out) !=================================================================================================================================== !> Checks if particle is inside of a linear 2D element with 4 faces, compatible with mortars. The "Ray Casting Algorithm" is used. !=================================================================================================================================== @@ -226,10 +232,11 @@ SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES INTEGER,INTENT(IN) :: ElemID -REAL ,INTENT(IN) :: PartStateLoc(2) +REAL ,INTENT(IN) :: PartStateLoc(3) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES LOGICAL,INTENT(OUT) :: InElementCheck +REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: ilocSide, TempSideID, nlocSides, localSideID @@ -262,7 +269,7 @@ SUBROUTINE ParticleInsideQuad2D(PartStateLoc,ElemID,InElementCheck) END DO END SUBROUTINE ParticleInsideQuad2D -SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck) +SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck,Det_Out) !=================================================================================================================================== !> Checks if particle is inside of a 1D element. !=================================================================================================================================== @@ -277,10 +284,11 @@ SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck) !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES INTEGER,INTENT(IN) :: ElemID -REAL ,INTENT(IN) :: PartStateLoc +REAL ,INTENT(IN) :: PartStateLoc(3) !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES LOGICAL,INTENT(OUT) :: InElementCheck +REAL ,INTENT(OUT),OPTIONAL :: Det_Out(6,2) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: ilocSide, TempSideID, nlocSides, localSideID, DiffSign(2), iSide @@ -299,7 +307,7 @@ SUBROUTINE ParticleInsideQuad1D(PartStateLoc,ElemID,InElementCheck) IF (SideIsSymSide(TempSideID)) CYCLE xNode = NodeCoords_Shared(1,ElemSideNodeID1D_Shared(localSideID, CNElemID)) iSide = iSide + 1 - DiffSign(iSide) = NINT(SIGN(1.,PartStateLoc - xNode)) + DiffSign(iSide) = NINT(SIGN(1.,PartStateLoc(1) - xNode)) IF (iSide.EQ.2) EXIT END DO IF (DiffSign(1).NE.DiffSign(2)) InElementCheck = .TRUE. diff --git a/src/particles/tracking/particle_triatracking.f90 b/src/particles/tracking/particle_triatracking.f90 index 02eb10faf..5752ac9bf 100644 --- a/src/particles/tracking/particle_triatracking.f90 +++ b/src/particles/tracking/particle_triatracking.f90 @@ -20,13 +20,42 @@ MODULE MOD_Particle_TriaTracking ! IMPLICIT VARIABLE HANDLING IMPLICIT NONE PRIVATE + +! Define an interface for the function pointer +ABSTRACT INTERFACE + SUBROUTINE SingleParticleTriaTrackingInterface(i,IsInterPlanePart) + INTEGER,INTENT(IN) :: i + LOGICAL,INTENT(IN),OPTIONAL :: IsInterPlanePart + END SUBROUTINE +END INTERFACE + +!> Pointer defining the particle tracking routine based on the symmetry order +PROCEDURE(SingleParticleTriaTrackingInterface),POINTER :: SingleParticleTriaTracking => NULL() !---------------------------------------------------------------------------------------------------------------------------------- -PUBLIC::ParticleTriaTracking +PUBLIC::InitSingleParticleTriaTracking,ParticleTriaTracking,SingleParticleTriaTracking !----------------------------------------------------------------------------------------------------------------------------------- !=================================================================================================================================== CONTAINS +!==================================================================================================================================! +!> Initialize SingleParticleTriaTracking depending on symmetry dimension using a function pointer +!==================================================================================================================================! +SUBROUTINE InitSingleParticleTriaTracking() +! MODULES +USE MOD_Particle_Vars ,ONLY: Symmetry +! IMPLICIT VARIABLE HANDLING +IMPLICIT NONE +!================================================================================================================================== + +IF (Symmetry%Order.EQ.3) THEN + SingleParticleTriaTracking => SingleParticleTriaTracking3D +ELSE + SingleParticleTriaTracking => SingleParticleTriaTracking1D2D +END IF + +END SUBROUTINE InitSingleParticleTriaTracking + #ifdef IMPA SUBROUTINE ParticleTriaTracking(doParticle_In) #else @@ -41,7 +70,7 @@ SUBROUTINE ParticleTriaTracking() USE MOD_Preproc USE MOD_Globals USE MOD_Particle_Vars ,ONLY: PEM,PDM,InterPlanePartNumber, InterPlanePartIndx, UseRotSubCycling,nSubCyclingSteps -USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling,Symmetry +USE MOD_Particle_Vars ,ONLY: RotRefSubTimeStep, NewPosSubCycling, GlobalElemIDSubCycling, LastPartPosSubCycling USE MOD_Particle_Vars ,ONLY: InRotRefFrameSubCycling, PartVeloRotRefSubCycling, LastVeloRotRefSubCycling USE MOD_DSMC_Vars ,ONLY: RadialWeighting USE MOD_DSMC_Symmetry ,ONLY: DSMC_2D_RadialWeighting, DSMC_2D_SetInClones @@ -91,9 +120,9 @@ SUBROUTINE ParticleTriaTracking() IF (PDM%ParticleInside(i)) THEN #endif /*IMPA*/ IF(UseRotSubCycling) THEN -!--- Store Particle informations befor tracking for sub-cycling. +!--- Store Particle information before tracking for sub-cycling. !--- it must be stored before first call of "SingleParticleTriaTracking" -!--- because particle informations like LastPartPos & PartState can be changed within "SingleParticleTriaTracking" +!--- because particle information like LastPartPos & PartState can be changed within "SingleParticleTriaTracking" !--- e.g. in RotPeriodicInterPlaneBoundary RotRefSubTimeStep=.TRUE. LastPartPosSubCycling(1:3) = LastPartPos(1:3,i) @@ -129,15 +158,11 @@ SUBROUTINE ParticleTriaTracking() LastPartVeloRotRef(1:3,i)=PartVeloRotRef(1:3,i) END IF CALL CalcPartPosInRotRef(i, dtVar) - IF(Symmetry%Order.LE.2) THEN - CALL SingleParticleTriaTracking1D2D(i) - ELSE - CALL SingleParticleTriaTracking(i=i) - END IF + CALL SingleParticleTriaTracking(i=i) END IF END DO END IF -!--- Reset stored particle informations +!--- Reset stored particle information RotRefSubTimeStep = .FALSE. LastPartPosSubCycling = 0.0 NewPosSubCycling = 0.0 @@ -146,11 +171,7 @@ SUBROUTINE ParticleTriaTracking() GlobalElemIDSubCycling = 0 InRotRefFrameSubCycling = .FALSE. ELSE - IF(Symmetry%Order.LE.2) THEN - CALL SingleParticleTriaTracking1D2D(i) - ELSE - CALL SingleParticleTriaTracking(i=i) - END IF + CALL SingleParticleTriaTracking(i=i) END IF END IF ! Particle treatment for an axisymmetric simulation (cloning/deleting particles) @@ -201,7 +222,7 @@ SUBROUTINE ParticleTriaTracking() CALL SingleParticleTriaTracking(i=InterPartID,IsInterPlanePart=.TRUE.) END IF END DO -!--- Reset stored particle informations +!--- Reset stored particle information RotRefSubTimeStep = .FALSE. LastPartPosSubCycling = 0.0 NewPosSubCycling = 0.0 @@ -224,7 +245,7 @@ SUBROUTINE ParticleTriaTracking() END SUBROUTINE ParticleTriaTracking -SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) +SUBROUTINE SingleParticleTriaTracking3D(i,IsInterPlanePart) !=================================================================================================================================== ! Routine for tracking of moving particles and boundary interaction using triangulated sides. ! 2) Perform tracking until the particle is considered "done" (either localized or deleted) @@ -264,9 +285,9 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) !----------------------------------------------------------------------------------------------------------------------------------! ! INPUT VARIABLES INTEGER,INTENT(IN) :: i +LOGICAL,INTENT(IN),OPTIONAL :: IsInterPlanePart !----------------------------------------------------------------------------------------------------------------------------------! ! OUTPUT VARIABLES -LOGICAL,INTENT(IN),OPTIONAL :: IsInterPlanePart !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: NblocSideID, NbElemID, CNElemID, ind, nbSideID, nMortarElems,BCType @@ -571,9 +592,10 @@ SUBROUTINE SingleParticleTriaTracking(i,IsInterPlanePart) IF(ParticleOnProc(i)) CALL LBElemPauseTime(PEM%LocalElemID(i),tLBStart) #endif /*USE_LOADBALANCE*/ -END SUBROUTINE SingleParticleTriaTracking +END SUBROUTINE SingleParticleTriaTracking3D -SUBROUTINE SingleParticleTriaTracking1D2D(i) + +SUBROUTINE SingleParticleTriaTracking1D2D(i,IsInterPlanePart) !=================================================================================================================================== ! Routine for tracking of moving particles and boundary interaction using triangulated sides. ! 2) Perform tracking until the particle is considered "done" (either localized or deleted) @@ -608,6 +630,7 @@ SUBROUTINE SingleParticleTriaTracking1D2D(i) !----------------------------------------------------------------------------------------------------------------------------------! ! INPUT VARIABLES INTEGER,INTENT(IN) :: i +LOGICAL,INTENT(IN),OPTIONAL :: IsInterPlanePart !----------------------------------------------------------------------------------------------------------------------------------! ! OUTPUT VARIABLES !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/radiation/radiation_solver/radiation_init.f90 b/src/radiation/radiation_solver/radiation_init.f90 index 510721dbd..02ce809a7 100644 --- a/src/radiation/radiation_solver/radiation_init.f90 +++ b/src/radiation/radiation_solver/radiation_init.f90 @@ -91,7 +91,7 @@ END SUBROUTINE DefineParametersRadiation SUBROUTINE InitRadiation() !=================================================================================================================================== -! Init of DSMC Vars +!> TODO !=================================================================================================================================== ! MODULES USE MOD_Globals diff --git a/src/radiation/radiative_transfer/radtrans_init.f90 b/src/radiation/radiative_transfer/radtrans_init.f90 index 5f39ab04e..bd008f564 100644 --- a/src/radiation/radiative_transfer/radtrans_init.f90 +++ b/src/radiation/radiative_transfer/radtrans_init.f90 @@ -71,7 +71,7 @@ SUBROUTINE InitRadiationTransport() 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_Mesh_Tools ,ONLY: InitParticleInsideQuad 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 @@ -80,7 +80,7 @@ SUBROUTINE InitRadiationTransport() 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_Particle_Vars ,ONLY: nSpecies USE MOD_MPI_Shared_Vars USE MOD_MPI_Shared USE MOD_SuperB_Tools ,ONLY: FindLinIndependentVectors, GramSchmidtAlgo @@ -308,7 +308,7 @@ SUBROUTINE InitRadiationTransport() DisplRank = 0 #endif SELECT CASE(RadiationSwitches%RadType) -CASE(1) !calls radition solver module +CASE(1) !calls radiation solver module SWRITE(UNIT_stdOut,'(A)') ' Calculate Radiation Data per Cell ...' ElemDisp = INT((lastElem-firstElem+1)/100) ElemDisp = MAX(1,ElemDisp) @@ -406,63 +406,61 @@ SUBROUTINE InitRadiationTransport() #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 +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 - 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_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 - 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* +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) #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) +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 - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RadTrans%ScaledGlobalRadiationPower,1,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_PICLAS,iError) + 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 +RadTrans%GlobalPhotonNum = RadTrans%NumPhotonsPerCell * nGlobalElems From 0f95c81a842e28811c83a62a959545b90bf37bc1 Mon Sep 17 00:00:00 2001 From: Paul Nizenkov Date: Tue, 14 May 2024 22:06:18 +0200 Subject: [PATCH 28/37] WEK_DSMC: Changed sfc_type to hilbertZ/mortonZ for channel flows to speed-up simulation time --- .../analyze.ini | 2 +- .../hopr.ini | 1 + .../cube_mesh.h5 | Bin 39858 -> 0 bytes .../externals.ini | 8 ++++++++ .../hopr.ini | 1 + .../analyze.ini | 2 +- .../hopr.ini | 1 + .../hopr.ini | 1 + .../hopr.ini | 1 + 9 files changed, 15 insertions(+), 2 deletions(-) delete mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/cube_mesh.h5 create mode 100644 regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/externals.ini diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini index b9c801897..059c2573a 100644 --- a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini +++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/analyze.ini @@ -2,5 +2,5 @@ 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_value = 25e-2 ! tolerance compare_column_tolerance_type = relative ! absolute or relative comparison diff --git a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini index ae6663d54..4eef5d3b6 100644 --- a/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini +++ b/regressioncheck/WEK_DSMC/2DAxi_ChannelFlow_ConstPressure_TruncAverage/hopr.ini @@ -37,3 +37,4 @@ BoundaryType=(/4,0,0,0/) postscalemesh=true meshscale=1e-3 jacobiantolerance=1e-27 +sfc_type = hilbertZ diff --git a/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/cube_mesh.h5 b/regressioncheck/WEK_DSMC/ChannelFlow_AdaptiveBoundary_ConstMassflow/cube_mesh.h5 deleted file mode 100644 index 133251bb1f077e735d2f53711899b22fd68cd35f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39858 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 Date: Wed, 15 May 2024 23:03:31 +0200 Subject: [PATCH 29/37] WEK_BGKFlow: reduced Couette flow setups to 1D --- ...teFlow_DSMCState_001.000000_CollInt_ref.h5 | Bin 54216 -> 54216 bytes ...etteFlow_DSMCState_001.000000_Wilke_ref.h5 | Bin 54216 -> 54216 bytes .../CouetteFlow_State_000.000000.h5 | Bin 2424072 -> 2428960 bytes .../externals.ini | 14 +++-- .../hopr.ini | 54 +++++++++-------- .../parameter.ini | 55 +++++++---------- .../readme.md | 4 +- .../tunnel_mesh.h5 | Bin 47858 -> 0 bytes .../CouetteFlow_DSMCState_001.000000_ref.h5 | Bin 54224 -> 54216 bytes .../externals.ini | 4 +- .../hopr.ini | 41 +++++++++++++ .../parameter.ini | 56 +++++++----------- .../pre-hopr/hopr.ini | 39 ------------ .../readme.md | 2 +- src/particles/particle_tools.f90 | 2 +- .../surfacemodel/surfacemodel_tools.f90 | 13 +++- 16 files changed, 140 insertions(+), 144 deletions(-) delete mode 100755 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_Ar-He/tunnel_mesh.h5 create mode 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/hopr.ini delete mode 100644 regressioncheck/WEK_BGKFlow/MultiSpec_Supersonic_Couette_CO2-N2/pre-hopr/hopr.ini 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 a4322bc385869966766a634fa087d8869dabcc0b..9f86603949c590a4f29ba9cc134838edd4164142 100644 GIT binary patch literal 54216 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 literal 54216 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 H3GV*~=i!X^ 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 3cc6b5f34951ff996ed71a838b45aebc34f8d86a..6141b783bb0448ac51d19c880c2c5ccb9d71c55c 100644 GIT binary patch literal 54216 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 v{6;^>dsW36 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

sJ-0is_wb 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