From 6b78ae373894f0c72d746f03f4637d6c2ef7d006 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Wed, 3 Jul 2024 22:04:28 +0200 Subject: [PATCH 01/22] Added an adhoc factor to correct injection I think that the volume of the nodes is not being well calculated, maybe we need a better volume calculation for this, using multiple points (as it is done for K) --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 7bae6b3..90773e5 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -226,11 +226,11 @@ MODULE moduleMesh2DCyl REAL(8):: p1(1:2), p2(1:2) rnd = random() - IF (self%r(1) == 0.D0 .OR. & - self%r(2) == 0.D0) THEN - rnd = rnd**(1.D0/3.D0) - - END IF + ! IF (self%r(1) == 0.D0 .OR. & + ! self%r(2) == 0.D0) THEN + ! rnd = rnd**(1.D0/3.D0) + ! + ! END IF p1 = (/self%z(1), self%r(1) /) p2 = (/self%z(2), self%r(2) /) @@ -578,6 +578,9 @@ MODULE moduleMesh2DCyl REAL(8):: detJ REAL(8):: fPsi(1:4) REAL(8):: dPsi(1:3, 1:4), pDer(1:3, 1:3) + REAL(8):: nodeR(1:3) + REAL(8), PARAMETER:: correction = 0.81D0 !TODO: No idea why this is needed, this needs more attention. Probably a better + ! calculation of the volume is needed. self%volume = 0.D0 @@ -592,9 +595,25 @@ MODULE moduleMesh2DCyl self%volume = r*detJ*PI8 !4*2*pi !Computes volume per node self%n1%v = self%n1%v + fPsi(1)*self%volume + nodeR = self%n1%getCoordinates() + if (nodeR(2) == 0.D0) then + self%n1%v = self%n1%v * correction + end if self%n2%v = self%n2%v + fPsi(2)*self%volume + nodeR = self%n2%getCoordinates() + if (nodeR(2) == 0.D0) then + self%n2%v = self%n2%v * correction + end if self%n3%v = self%n3%v + fPsi(3)*self%volume + nodeR = self%n3%getCoordinates() + if (nodeR(2) == 0.D0) then + self%n3%v = self%n3%v * correction + end if self%n4%v = self%n4%v + fPsi(4)*self%volume + nodeR = self%n4%getCoordinates() + if (nodeR(2) == 0.D0) then + self%n4%v = self%n4%v * correction + end if END SUBROUTINE volumeQuad -- 2.49.1 From b972120ed51689b9ef171f3fd2af8966d68ec81b Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Thu, 4 Jul 2024 10:56:13 +0200 Subject: [PATCH 02/22] Switching to variable particle weight I have to change the injection of particles. Each edge will receive a similar number of particles and their weight will change to have a constant density based on the geometry. Still testing. --- src/modules/common/moduleRandom.f90 | 4 +-- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 36 ++++++++-------------- src/modules/moduleInject.f90 | 5 +-- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/src/modules/common/moduleRandom.f90 b/src/modules/common/moduleRandom.f90 index 0237de1..dacbf9c 100644 --- a/src/modules/common/moduleRandom.f90 +++ b/src/modules/common/moduleRandom.f90 @@ -40,10 +40,10 @@ MODULE moduleRandom INTEGER:: rnd REAL(8):: rnd01 - rnd = 0.D0 + rnd = 0 CALL RANDOM_NUMBER(rnd01) - rnd = INT(REAL(b - a) * rnd01) + 1 + rnd = NINT(REAL(b - a) * rnd01) + a END FUNCTION randomIntAB diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 90773e5..2d2d6c6 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -235,6 +235,7 @@ MODULE moduleMesh2DCyl p1 = (/self%z(1), self%r(1) /) p2 = (/self%z(2), self%r(2) /) r(1:2) = (1.D0 - rnd)*p1 + rnd*p2 + r(2) = (self%r(2) + self%r(1)) * 0.5D0 r(3) = 0.D0 END FUNCTION randPosEdge @@ -578,9 +579,6 @@ MODULE moduleMesh2DCyl REAL(8):: detJ REAL(8):: fPsi(1:4) REAL(8):: dPsi(1:3, 1:4), pDer(1:3, 1:3) - REAL(8):: nodeR(1:3) - REAL(8), PARAMETER:: correction = 0.81D0 !TODO: No idea why this is needed, this needs more attention. Probably a better - ! calculation of the volume is needed. self%volume = 0.D0 @@ -594,26 +592,18 @@ MODULE moduleMesh2DCyl !Computes total volume of the cell self%volume = r*detJ*PI8 !4*2*pi !Computes volume per node - self%n1%v = self%n1%v + fPsi(1)*self%volume - nodeR = self%n1%getCoordinates() - if (nodeR(2) == 0.D0) then - self%n1%v = self%n1%v * correction - end if - self%n2%v = self%n2%v + fPsi(2)*self%volume - nodeR = self%n2%getCoordinates() - if (nodeR(2) == 0.D0) then - self%n2%v = self%n2%v * correction - end if - self%n3%v = self%n3%v + fPsi(3)*self%volume - nodeR = self%n3%getCoordinates() - if (nodeR(2) == 0.D0) then - self%n3%v = self%n3%v * correction - end if - self%n4%v = self%n4%v + fPsi(4)*self%volume - nodeR = self%n4%getCoordinates() - if (nodeR(2) == 0.D0) then - self%n4%v = self%n4%v * correction - end if + Xi = (/-5.D-1, -5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n1%v = self%n1%v + fPsi(1)*r*detJ*PI8 + Xi = (/ 5.D-1, -5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n2%v = self%n2%v + fPsi(2)*r*detJ*PI8 + Xi = (/ 5.D-1, 5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n3%v = self%n3%v + fPsi(3)*r*detJ*PI8 + Xi = (/-5.D-1, 5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n4%v = self%n4%v + fPsi(4)*r*detJ*PI8 END SUBROUTINE volumeQuad diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index fb01f75..57e3131 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -283,6 +283,7 @@ MODULE moduleInject USE moduleMesh USE moduleRandom USE moduleErrors + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(injectGeneric), INTENT(in):: self @@ -312,12 +313,12 @@ MODULE moduleInject !$OMP DO DO n = nMin, nMax - randomX = randomWeighted(self%cumWeight, self%sumWeight) + randomX = random(1, self%nEdges) randomEdge => mesh%edges(self%edges(randomX))%obj !Random position in edge partInj(n)%r = randomEdge%randPos() !Assign weight to particle. - partInj(n)%weight = self%species%weight + partInj(n)%weight = self%species%weight * sqrt(partInj(n)%r(2) / (0.1D0*L_ref)) !Volume associated to the edge: IF (ASSOCIATED(randomEdge%e1)) THEN partInj(n)%cell = randomEdge%e1%n -- 2.49.1 From 6b5ac16e4b0f0c6797c9ea47b1ec00f4c82c5eb4 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Sat, 6 Jul 2024 10:12:03 +0200 Subject: [PATCH 03/22] Still working on it No uniform density yet... --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 1 - src/modules/moduleInject.f90 | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 2d2d6c6..544c8e1 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -235,7 +235,6 @@ MODULE moduleMesh2DCyl p1 = (/self%z(1), self%r(1) /) p2 = (/self%z(2), self%r(2) /) r(1:2) = (1.D0 - rnd)*p1 + rnd*p2 - r(2) = (self%r(2) + self%r(1)) * 0.5D0 r(3) = 0.D0 END FUNCTION randPosEdge diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 57e3131..2dba3de 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -318,7 +318,7 @@ MODULE moduleInject !Random position in edge partInj(n)%r = randomEdge%randPos() !Assign weight to particle. - partInj(n)%weight = self%species%weight * sqrt(partInj(n)%r(2) / (0.1D0*L_ref)) + partInj(n)%weight = self%species%weight * sqrt(partInj(n)%r(2) / (0.1D0/L_ref)) !Volume associated to the edge: IF (ASSOCIATED(randomEdge%e1)) THEN partInj(n)%cell = randomEdge%e1%n -- 2.49.1 From 626e970d8257f56641278e1b05999a145ff85d53 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Sat, 6 Jul 2024 19:14:44 +0200 Subject: [PATCH 04/22] Some progress Fixed an issue with random integer numbers. Cylindrical coordinates are not perfect yet: - Box (cylinder) with initial constant density loses particles at r = 0 - Injection density still low in r = 0 --- src/modules/common/moduleRandom.f90 | 2 +- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 5 ----- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 14 ++++++++++++++ src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 | 14 ++++++++++++++ src/modules/moduleInject.f90 | 4 ++-- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/modules/common/moduleRandom.f90 b/src/modules/common/moduleRandom.f90 index dacbf9c..ae5c548 100644 --- a/src/modules/common/moduleRandom.f90 +++ b/src/modules/common/moduleRandom.f90 @@ -43,7 +43,7 @@ MODULE moduleRandom rnd = 0 CALL RANDOM_NUMBER(rnd01) - rnd = NINT(REAL(b - a) * rnd01) + a + rnd = a + FLOOR((b+1-a)*rnd01) END FUNCTION randomIntAB diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 544c8e1..426846d 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -226,11 +226,6 @@ MODULE moduleMesh2DCyl REAL(8):: p1(1:2), p2(1:2) rnd = random() - ! IF (self%r(1) == 0.D0 .OR. & - ! self%r(2) == 0.D0) THEN - ! rnd = rnd**(1.D0/3.D0) - ! - ! END IF p1 = (/self%z(1), self%r(1) /) p2 = (/self%z(2), self%r(2) /) diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 0df1289..84b8535 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -296,6 +296,20 @@ MODULE moduleMeshInputGmsh2 CLOSE(10) + ! Adjust node volume at axis + SELECT CASE(self%geometry) + CASE("Cyl") + DO n = 1, numNodes + r = self%nodes(n)%obj%getCoordinates() + IF (r(2) == 0.D0) THEN + self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 + + END IF + + END DO + + END SELECT + !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index 763517f..eb6af79 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -495,6 +495,20 @@ MODULE moduleMeshInputVTU END SELECT END DO + + ! Adjust node volume at axis + SELECT CASE(self%geometry) + CASE("Cyl") + DO n = 1, numNodes + r = self%nodes(n)%obj%getCoordinates() + IF (r(2) == 0.D0) THEN + self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 + + END IF + + END DO + + END SELECT !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 2dba3de..69a3dd6 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -313,12 +313,12 @@ MODULE moduleInject !$OMP DO DO n = nMin, nMax - randomX = random(1, self%nEdges) + randomX = randomWeighted(self%cumWeight, self%sumWeight) randomEdge => mesh%edges(self%edges(randomX))%obj !Random position in edge partInj(n)%r = randomEdge%randPos() !Assign weight to particle. - partInj(n)%weight = self%species%weight * sqrt(partInj(n)%r(2) / (0.1D0/L_ref)) + partInj(n)%weight = self%species%weight !Volume associated to the edge: IF (ASSOCIATED(randomEdge%e1)) THEN partInj(n)%cell = randomEdge%e1%n -- 2.49.1 From 5bc064d0183097c83f57b2299c99a3449baebc6d Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Sun, 7 Jul 2024 11:53:56 +0200 Subject: [PATCH 05/22] Some parallel issues Forgot to check Gmsh2 format with new changes. Cartesian coordinates were not calculating things properly. --- src/modules/mesh/2DCart/moduleMesh2DCart.f90 | 3 ++- src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 index 7bc94ce..4bf1f32 100644 --- a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 +++ b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 @@ -556,6 +556,7 @@ MODULE moduleMesh2DCart !Compute element volume PURE SUBROUTINE volumeQuad(self) + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshCell2DCartQuad), INTENT(inout):: self @@ -573,7 +574,7 @@ MODULE moduleMesh2DCart fPsi = self%fPsi(Xi, 4) !Compute total volume of the cell - self%volume = detJ*4.D0 + self%volume = detJ*4.D0/L_ref !Compute volume per node self%n1%v = self%n1%v + fPsi(1)*self%volume self%n2%v = self%n2%v + fPsi(2)*self%volume diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 84b8535..2c02358 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -299,7 +299,7 @@ MODULE moduleMeshInputGmsh2 ! Adjust node volume at axis SELECT CASE(self%geometry) CASE("Cyl") - DO n = 1, numNodes + DO n = 1, self%numNodes r = self%nodes(n)%obj%getCoordinates() IF (r(2) == 0.D0) THEN self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 -- 2.49.1 From 1f2ec8d82f3ee4fa70304b707fd7382e75ba4139 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Sun, 7 Jul 2024 14:37:34 +0200 Subject: [PATCH 06/22] New option for initial distribution of species The number of particles per cell can be defined when giving an initial distribution fora species. If not, the typical method of using the species weight is used. This is particularly useful for cylindrical coordinates in which very little particles might end up in the axis if a constant weight is used. --- doc/user-manual/bibliography.bib.sav | 77 +++++++++++++++++++++++++++ doc/user-manual/fpakc_UserManual.pdf | Bin 185817 -> 186028 bytes doc/user-manual/fpakc_UserManual.tex | 14 +++-- src/modules/init/moduleInput.f90 | 14 +++-- 4 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 doc/user-manual/bibliography.bib.sav diff --git a/doc/user-manual/bibliography.bib.sav b/doc/user-manual/bibliography.bib.sav new file mode 100644 index 0000000..b8b6483 --- /dev/null +++ b/doc/user-manual/bibliography.bib.sav @@ -0,0 +1,77 @@ +% Encoding: UTF-8 + +@InProceedings{boris1970relativistic, + author = {Boris, Jay P}, + booktitle = {Proc. Fourth Conf. Num. Sim. Plasmas}, + title = {Relativistic plasma simulation-optimization of a hybrid code}, + year = {1970}, + pages = {3--67}, +} + +@article{higginson2020corrected, + title={A corrected method for Coulomb scattering in arbitrarily weighted particle-in-cell plasma simulations}, + author={Higginson, Drew Pitney and Holod, Ihor and Link, Anthony}, + journal={Journal of Computational Physics}, + volume={413}, + pages={109450}, + year={2020}, + publisher={Elsevier} +} + +@Misc{gfortranURL, + author = {GNU Project}, + title = {gfortran - the GNU Fortran compiler}, + howpublished = {\url{https://gcc.gnu.org/wiki/GFortran}}, +} + +@Misc{ifortURL, + author = {Intel\textsuperscript{\textregistered}}, + title = {Intel\textsuperscript{\textregistered} Fortran Compiler}, + howpublished = {\url{https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html}}, +} + +@Misc{openblasURL, + title = {OpenBLAS, an optimized BLAS library}, + howpublished = {\url{https://www.openblas.net/}}, +} + +@Misc{jsonfortranURL, + title = {JSON-Fortran}, + howpublished = {\url{https://github.com/jacobwilliams/json-fortran}}, +} + +@Misc{jsonURL, + title = {JSON, JavaScript Object Notation}, + howpublished = {\url{https://www.json.org/json-en.html}}, +} + +@Misc{gmshURL, + author = {Christophe Geuzaine and Jean-François Remacle}, + title = {Gmsh}, + howpublished = {\url{https://gmsh.info/}}, +} + +@Article{welford1962note, + author = {Welford, BP}, + journal = {Technometrics}, + title = {Note on a method for calculating corrected sums of squares and products}, + year = {1962}, + number = {3}, + pages = {419--420}, + volume = {4}, + publisher = {Taylor \& Francis}, +} + +@Article{sherlock2008monte, + author = {Sherlock, Mark}, + journal = {Journal of Computational Physics}, + title = {A Monte-Carlo method for Coulomb collisions in hybrid plasma models}, + year = {2008}, + number = {4}, + pages = {2286--2292}, + volume = {227}, + groups = {Particle-in-cell}, + publisher = {Elsevier}, +} + +@Comment{jabref-meta: databaseType:bibtex;} diff --git a/doc/user-manual/fpakc_UserManual.pdf b/doc/user-manual/fpakc_UserManual.pdf index 2453bb7a03988944220d03dbe093216dd6203ec1..37d80141e4c7e64c2cb808e7e072b95019a502ae 100644 GIT binary patch delta 52973 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%0AQ5Q6sL| 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 delta 52900 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
u( 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 Wyj(2qlLL?n%u305c;wXN$^Q>tDPl7K diff --git a/doc/user-manual/fpakc_UserManual.tex b/doc/user-manual/fpakc_UserManual.tex index daf42c3..fd48ed2 100644 --- a/doc/user-manual/fpakc_UserManual.tex +++ b/doc/user-manual/fpakc_UserManual.tex @@ -708,11 +708,15 @@ make \begin{itemize} \item \textbf{species}: Character. Name of species as defined in the object \textbf{species}. - \item \textbf{file}: Character. - Output file from previous run used as an initial state for the species. - The file format must be the same as in \textbf{geometry.meshType} - Initial particles are assumed to have a Maxwellian distribution. - File must be located at \textbf{output.path}. + \item \textbf{file}: Character. + Output file from previous run used as an initial state for the species. + The file format must be the same as in \textbf{geometry.meshType} + Initial particles are assumed to have a Maxwellian distribution. + File must be located at \textbf{output.path}. + \item \textbf{particlesPerCell}: Integer. + Optional. + Initial number of particles per cell. + If not, the number of particles per cell will be assigned based on the species weight and the cell volume. \end{itemize} \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/modules/init/moduleInput.f90 b/src/modules/init/moduleInput.f90 index 7a1b206..e30bf97 100644 --- a/src/modules/init/moduleInput.f90 +++ b/src/modules/init/moduleInput.f90 @@ -324,7 +324,8 @@ MODULE moduleInput REAL(8):: densityCen !Mean velocity and temperature at particle position REAL(8):: velocityXi(1:3), temperatureXi - INTEGER:: nNewPart = 0.D0 + INTEGER:: nNewPart = 0 + REAL(8):: weight = 0.D0 CLASS(meshCell), POINTER:: cell TYPE(particle), POINTER:: partNew REAL(8):: vTh @@ -343,6 +344,9 @@ MODULE moduleInput !Reads node values at the nodes filename = path // spFile CALL mesh%readInitial(filename, density, velocity, temperature) + !Check if initial number of particles is given + CALL config%get(object // '.particlesPerCell', nNewPart, found) + !For each volume in the node, create corresponding particles DO e = 1, mesh%numCells !Scale variables @@ -355,7 +359,11 @@ MODULE moduleInput densityCen = mesh%cells(e)%obj%gatherF((/ 0.D0, 0.D0, 0.D0 /), nNodes, sourceScalar) !Calculate number of particles - nNewPart = INT(densityCen * (mesh%cells(e)%obj%volume*Vol_ref) / species(sp)%obj%weight) + IF (.NOT. found) THEN + nNewPart = FLOOR(densityCen * (mesh%cells(e)%obj%volume*Vol_ref) / species(sp)%obj%weight) + + END IF + weight = densityCen * (mesh%cells(e)%obj%volume*Vol_ref) / REAL(nNewPart) !Allocate new particles DO p = 1, nNewPart @@ -392,7 +400,7 @@ MODULE moduleInput partNew%n_in = .TRUE. - partNew%weight = species(sp)%obj%weight + partNew%weight = weight !Assign particle to temporal list of particles CALL partInitial%add(partNew) -- 2.49.1 From fa23f9481abfe946fb7cd9f6d4866550176733f5 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Sun, 7 Jul 2024 14:40:26 +0200 Subject: [PATCH 07/22] Issue with bibliography Backup files are properly ignored now. --- doc/user-manual/.gitignore | 1 + doc/user-manual/bibliography.bib.sav | 77 ---------------------------- 2 files changed, 1 insertion(+), 77 deletions(-) delete mode 100644 doc/user-manual/bibliography.bib.sav diff --git a/doc/user-manual/.gitignore b/doc/user-manual/.gitignore index b2ba4d5..a8475d7 100644 --- a/doc/user-manual/.gitignore +++ b/doc/user-manual/.gitignore @@ -6,6 +6,7 @@ *.aux *.ps bibliography.bib.bak +bibliography.bib.sav *.bbl *.blg *.out diff --git a/doc/user-manual/bibliography.bib.sav b/doc/user-manual/bibliography.bib.sav deleted file mode 100644 index b8b6483..0000000 --- a/doc/user-manual/bibliography.bib.sav +++ /dev/null @@ -1,77 +0,0 @@ -% Encoding: UTF-8 - -@InProceedings{boris1970relativistic, - author = {Boris, Jay P}, - booktitle = {Proc. Fourth Conf. Num. Sim. Plasmas}, - title = {Relativistic plasma simulation-optimization of a hybrid code}, - year = {1970}, - pages = {3--67}, -} - -@article{higginson2020corrected, - title={A corrected method for Coulomb scattering in arbitrarily weighted particle-in-cell plasma simulations}, - author={Higginson, Drew Pitney and Holod, Ihor and Link, Anthony}, - journal={Journal of Computational Physics}, - volume={413}, - pages={109450}, - year={2020}, - publisher={Elsevier} -} - -@Misc{gfortranURL, - author = {GNU Project}, - title = {gfortran - the GNU Fortran compiler}, - howpublished = {\url{https://gcc.gnu.org/wiki/GFortran}}, -} - -@Misc{ifortURL, - author = {Intel\textsuperscript{\textregistered}}, - title = {Intel\textsuperscript{\textregistered} Fortran Compiler}, - howpublished = {\url{https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html}}, -} - -@Misc{openblasURL, - title = {OpenBLAS, an optimized BLAS library}, - howpublished = {\url{https://www.openblas.net/}}, -} - -@Misc{jsonfortranURL, - title = {JSON-Fortran}, - howpublished = {\url{https://github.com/jacobwilliams/json-fortran}}, -} - -@Misc{jsonURL, - title = {JSON, JavaScript Object Notation}, - howpublished = {\url{https://www.json.org/json-en.html}}, -} - -@Misc{gmshURL, - author = {Christophe Geuzaine and Jean-François Remacle}, - title = {Gmsh}, - howpublished = {\url{https://gmsh.info/}}, -} - -@Article{welford1962note, - author = {Welford, BP}, - journal = {Technometrics}, - title = {Note on a method for calculating corrected sums of squares and products}, - year = {1962}, - number = {3}, - pages = {419--420}, - volume = {4}, - publisher = {Taylor \& Francis}, -} - -@Article{sherlock2008monte, - author = {Sherlock, Mark}, - journal = {Journal of Computational Physics}, - title = {A Monte-Carlo method for Coulomb collisions in hybrid plasma models}, - year = {2008}, - number = {4}, - pages = {2286--2292}, - volume = {227}, - groups = {Particle-in-cell}, - publisher = {Elsevier}, -} - -@Comment{jabref-meta: databaseType:bibtex;} -- 2.49.1 From b36f9c26152339aef154402ebabce74f4075d866 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Tue, 9 Jul 2024 17:49:42 +0200 Subject: [PATCH 08/22] Shifting towards constant number of particles per edge So now each edge has the same number of particles and the weight of each particle is calculated based on the surface of each edge compared to the total one. Only in 2DCyl, still to extend to other geometries. Not perfect constant density, but the issue might be the node volume. --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 27 ++++++++++--------- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 14 ---------- .../mesh/inout/vtu/moduleMeshInputVTU.f90 | 26 +++++++++--------- src/modules/mesh/moduleMesh.f90 | 2 ++ src/modules/moduleInject.f90 | 16 +++++------ 5 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 426846d..3f88902 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -144,6 +144,7 @@ MODULE moduleMesh2DCyl USE moduleSpecies USE moduleBoundary USE moduleErrors + USE moduleConstParam, ONLY: PI IMPLICIT NONE CLASS(meshEdge2DCyl), INTENT(out):: self @@ -163,7 +164,15 @@ MODULE moduleMesh2DCyl r2 = self%n2%getCoordinates() self%z = (/r1(1), r2(1)/) self%r = (/r1(2), r2(2)/) - self%weight = DABS(self%r(2)**2 - self%r(1)**2) + !Edge surface + IF (self%z(2) /= self%z(1)) THEN + self%surface = ABS(self%r(2) + self%r(1))*ABS(self%z(2) - self%z(1)) + + ELSE + self%surface = ABS(self%r(2)**2 - self%r(1)**2) + + END IF + self%surface = self%surface * PI !Normal vector self%normal = (/ -(self%r(2)-self%r(1)), & self%z(2)-self%z(1) , & @@ -586,18 +595,10 @@ MODULE moduleMesh2DCyl !Computes total volume of the cell self%volume = r*detJ*PI8 !4*2*pi !Computes volume per node - Xi = (/-5.D-1, -5.D-1, 0.D0/) - r = self%gatherF(Xi, 4, self%r) - self%n1%v = self%n1%v + fPsi(1)*r*detJ*PI8 - Xi = (/ 5.D-1, -5.D-1, 0.D0/) - r = self%gatherF(Xi, 4, self%r) - self%n2%v = self%n2%v + fPsi(2)*r*detJ*PI8 - Xi = (/ 5.D-1, 5.D-1, 0.D0/) - r = self%gatherF(Xi, 4, self%r) - self%n3%v = self%n3%v + fPsi(3)*r*detJ*PI8 - Xi = (/-5.D-1, 5.D-1, 0.D0/) - r = self%gatherF(Xi, 4, self%r) - self%n4%v = self%n4%v + fPsi(4)*r*detJ*PI8 + self%n1%v = self%n1%v + fPsi(1)*self%volume + self%n2%v = self%n2%v + fPsi(2)*self%volume + self%n3%v = self%n3%v + fPsi(3)*self%volume + self%n4%v = self%n4%v + fPsi(4)*self%volume END SUBROUTINE volumeQuad diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 2c02358..0df1289 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -296,20 +296,6 @@ MODULE moduleMeshInputGmsh2 CLOSE(10) - ! Adjust node volume at axis - SELECT CASE(self%geometry) - CASE("Cyl") - DO n = 1, self%numNodes - r = self%nodes(n)%obj%getCoordinates() - IF (r(2) == 0.D0) THEN - self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 - - END IF - - END DO - - END SELECT - !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index eb6af79..309ca5c 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -496,19 +496,19 @@ MODULE moduleMeshInputVTU END DO - ! Adjust node volume at axis - SELECT CASE(self%geometry) - CASE("Cyl") - DO n = 1, numNodes - r = self%nodes(n)%obj%getCoordinates() - IF (r(2) == 0.D0) THEN - self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 - - END IF - - END DO - - END SELECT + ! ! Adjust node volume at axis + ! SELECT CASE(self%geometry) + ! CASE("Cyl") + ! DO n = 1, numNodes + ! r = self%nodes(n)%obj%getCoordinates() + ! IF (r(2) == 0.D0) THEN + ! self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 + ! + ! END IF + ! + ! END DO + ! + ! END SELECT !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index e96ff2a..af1cd36 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -78,6 +78,8 @@ MODULE moduleMesh REAL(8):: normal(1:3) !Weight for random injection of particles REAL(8):: weight = 1.D0 + ! Surface of edge + REAL(8):: surface = 0.D0 !Pointer to boundary type TYPE(boundaryCont), POINTER:: boundary !Array of functions for boundary conditions diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 69a3dd6..1d4e2e7 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -63,6 +63,7 @@ MODULE moduleInject INTEGER, ALLOCATABLE:: edges(:) !Array with edges REAL(8), ALLOCATABLE:: cumWeight(:) !Array of cummulative probability REAL(8):: sumWeight + REAL(8):: surface ! Total surface of injection TYPE(velDistCont):: v(1:3) !Velocity distribution function in each direction CONTAINS PROCEDURE, PASS:: init => initInject @@ -164,15 +165,12 @@ MODULE moduleInject END DO - !Calculates cumulative probability - ALLOCATE(self%cumWeight(1:self%nEdges)) - et = 1 - self%cumWeight(1) = mesh%edges(self%edges(et))%obj%weight - DO et = 2, self%nEdges - self%cumWeight(et) = mesh%edges(self%edges(et))%obj%weight + self%cumWeight(et-1) + !Calculates total area + self%surface = 0.D0 + DO et = 1, self%nEdges + self%surface = self%surface + mesh%edges(self%edges(et))%obj%surface END DO - self%sumWeight = self%cumWeight(self%nEdges) END SUBROUTINE initInject @@ -313,12 +311,12 @@ MODULE moduleInject !$OMP DO DO n = nMin, nMax - randomX = randomWeighted(self%cumWeight, self%sumWeight) + randomX = random(1, self%nEdges) randomEdge => mesh%edges(self%edges(randomX))%obj !Random position in edge partInj(n)%r = randomEdge%randPos() !Assign weight to particle. - partInj(n)%weight = self%species%weight + partInj(n)%weight = self%species%weight * randomEdge%surface / self%surface !Volume associated to the edge: IF (ASSOCIATED(randomEdge%e1)) THEN partInj(n)%cell = randomEdge%e1%n -- 2.49.1 From 11831a973d86aacc0d8e44b01fd6ecc203300b1a Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Tue, 9 Jul 2024 21:25:30 +0200 Subject: [PATCH 09/22] Still not working Trying to have a very simple volume per node assuming a rectangle and the density at the axis it higher than it should (kinda like when using the more accurate volume calculation). This is still weird. I also suspect that the size of the first cell in the axis will also affect this... --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 3f88902..bac265c 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -582,6 +582,8 @@ MODULE moduleMesh2DCyl REAL(8):: detJ REAL(8):: fPsi(1:4) REAL(8):: dPsi(1:3, 1:4), pDer(1:3, 1:3) + REAL(8):: corrUp, corrDown + REAL(8):: dZ, r2, r1 self%volume = 0.D0 @@ -593,12 +595,20 @@ MODULE moduleMesh2DCyl fPsi = self%fPsi(Xi, 4) r = DOT_PRODUCT(fPsi,self%r) !Computes total volume of the cell - self%volume = r*detJ*PI8 !4*2*pi + self%volume = r*detJ*PI8 !2*pi * 4 (weight of 1 point 2D-Gaussian integral) !Computes volume per node - self%n1%v = self%n1%v + fPsi(1)*self%volume - self%n2%v = self%n2%v + fPsi(2)*self%volume - self%n3%v = self%n3%v + fPsi(3)*self%volume - self%n4%v = self%n4%v + fPsi(4)*self%volume + ! self%n1%v = self%n1%v + fPsi(1)*self%volume + ! self%n2%v = self%n2%v + fPsi(2)*self%volume + ! self%n3%v = self%n3%v + fPsi(3)*self%volume + ! self%n4%v = self%n4%v + fPsi(4)*self%volume + dZ = MAXVAL(self%z) - MIN(self%z) + r2 = MAXVAL(self%r) + r1 = MINVAL(self%r) + + self%n1%v = self%n1%v + dZ/2.D0 * PI * ( r2**2 - 3.0D0*r1**2 + 2.0D0*r2*r1)*0.25D0 + self%n2%v = self%n2%v + dZ/2.D0 * PI * ( r2**2 - 3.0D0*r1**2 + 2.0D0*r2*r1)*0.25D0 + self%n3%v = self%n3%v + dZ/2.D0 * PI * (3.0D0*r2**2 - r1**2 - 2.0D0*r2*r1)*0.25D0 + self%n4%v = self%n4%v + dZ/2.D0 * PI * (3.0D0*r2**2 - r1**2 - 2.0D0*r2*r1)*0.25D0 END SUBROUTINE volumeQuad -- 2.49.1 From 667a2ecd93c8e0263252cca4aa3457ce95bfbe3e Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Tue, 9 Jul 2024 21:57:32 +0200 Subject: [PATCH 10/22] So, no idea... Basically things do not work. I've added a correction to the node volume in the axis which gives okays results but still this is not perfect. I need to find a better way to do things. Also, I've noticed that the density changes with the size of the cells, which should not happen! I'vw to check this issue. --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 24 ++++++++--------- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 14 ++++++++++ .../mesh/inout/vtu/moduleMeshInputVTU.f90 | 26 +++++++++---------- 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index bac265c..166ae84 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -597,18 +597,18 @@ MODULE moduleMesh2DCyl !Computes total volume of the cell self%volume = r*detJ*PI8 !2*pi * 4 (weight of 1 point 2D-Gaussian integral) !Computes volume per node - ! self%n1%v = self%n1%v + fPsi(1)*self%volume - ! self%n2%v = self%n2%v + fPsi(2)*self%volume - ! self%n3%v = self%n3%v + fPsi(3)*self%volume - ! self%n4%v = self%n4%v + fPsi(4)*self%volume - dZ = MAXVAL(self%z) - MIN(self%z) - r2 = MAXVAL(self%r) - r1 = MINVAL(self%r) - - self%n1%v = self%n1%v + dZ/2.D0 * PI * ( r2**2 - 3.0D0*r1**2 + 2.0D0*r2*r1)*0.25D0 - self%n2%v = self%n2%v + dZ/2.D0 * PI * ( r2**2 - 3.0D0*r1**2 + 2.0D0*r2*r1)*0.25D0 - self%n3%v = self%n3%v + dZ/2.D0 * PI * (3.0D0*r2**2 - r1**2 - 2.0D0*r2*r1)*0.25D0 - self%n4%v = self%n4%v + dZ/2.D0 * PI * (3.0D0*r2**2 - r1**2 - 2.0D0*r2*r1)*0.25D0 + Xi = (/-5.D-1, -5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n1%v = self%n1%v + fPsi(1)*r*detJ*PI8 + Xi = (/ 5.D-1, -5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n2%v = self%n2%v + fPsi(2)*r*detJ*PI8 + Xi = (/ 5.D-1, 5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n3%v = self%n3%v + fPsi(3)*r*detJ*PI8 + Xi = (/-5.D-1, 5.D-1, 0.D0/) + r = self%gatherF(Xi, 4, self%r) + self%n4%v = self%n4%v + fPsi(4)*r*detJ*PI8 END SUBROUTINE volumeQuad diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 0df1289..11c3b13 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -296,6 +296,20 @@ MODULE moduleMeshInputGmsh2 CLOSE(10) + ! Adjust node volume at axis + SELECT CASE(self%geometry) + CASE("Cyl") + DO n = 1, self%numNodes + r = self%nodes(n)%obj%getCoordinates() + IF (r(2) == 0.D0) THEN + self%nodes(n)%obj%v = self%nodes(n)%obj%v * 3.0D0/2.0D0 + + END IF + + END DO + + END SELECT + !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index 309ca5c..ff0490a 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -496,19 +496,19 @@ MODULE moduleMeshInputVTU END DO - ! ! Adjust node volume at axis - ! SELECT CASE(self%geometry) - ! CASE("Cyl") - ! DO n = 1, numNodes - ! r = self%nodes(n)%obj%getCoordinates() - ! IF (r(2) == 0.D0) THEN - ! self%nodes(n)%obj%v = self%nodes(n)%obj%v * 2.0D0!2.0D0/3.0D0 - ! - ! END IF - ! - ! END DO - ! - ! END SELECT + ! Adjust node volume at axis + SELECT CASE(self%geometry) + CASE("Cyl") + DO n = 1, numNodes + r = self%nodes(n)%obj%getCoordinates() + IF (r(2) == 0.D0) THEN + self%nodes(n)%obj%v = self%nodes(n)%obj%v * 3.0D0/2.0D0 + + END IF + + END DO + + END SELECT !Call mesh connectivity CALL self%connectMesh -- 2.49.1 From d608639e77a17511111ac326949f5de28044c864 Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Tue, 9 Jul 2024 22:05:16 +0200 Subject: [PATCH 11/22] Forgot to save Sorry. --- src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index ff0490a..61802fb 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -499,7 +499,7 @@ MODULE moduleMeshInputVTU ! Adjust node volume at axis SELECT CASE(self%geometry) CASE("Cyl") - DO n = 1, numNodes + DO n = 1, self%numNodes r = self%nodes(n)%obj%getCoordinates() IF (r(2) == 0.D0) THEN self%nodes(n)%obj%v = self%nodes(n)%obj%v * 3.0D0/2.0D0 -- 2.49.1 From cb92462f3683408f218bac22d7f6b50cb72bf63d Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Wed, 10 Jul 2024 21:55:45 +0200 Subject: [PATCH 12/22] New injection based on surface to all geometries. WARNING: 3DCart still not working (too tired to calculate things and I'm not ussing it...) --- src/modules/mesh/1DCart/moduleMesh1DCart.f90 | 3 +++ src/modules/mesh/1DRad/moduleMesh1DRad.f90 | 3 +++ src/modules/mesh/2DCart/moduleMesh2DCart.f90 | 3 ++- src/modules/mesh/3DCart/moduleMesh3DCart.f90 | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/modules/mesh/1DCart/moduleMesh1DCart.f90 b/src/modules/mesh/1DCart/moduleMesh1DCart.f90 index 269f157..f400ab0 100644 --- a/src/modules/mesh/1DCart/moduleMesh1DCart.f90 +++ b/src/modules/mesh/1DCart/moduleMesh1DCart.f90 @@ -104,6 +104,7 @@ MODULE moduleMesh1DCart USE moduleSpecies USE moduleBoundary USE moduleErrors + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshEdge1DCart), INTENT(out):: self @@ -122,6 +123,8 @@ MODULE moduleMesh1DCart self%x = r1(1) + self%surface = 1.D0 / L_ref**2 + self%normal = (/ 1.D0, 0.D0, 0.D0 /) !Boundary index diff --git a/src/modules/mesh/1DRad/moduleMesh1DRad.f90 b/src/modules/mesh/1DRad/moduleMesh1DRad.f90 index d998267..fd617bd 100644 --- a/src/modules/mesh/1DRad/moduleMesh1DRad.f90 +++ b/src/modules/mesh/1DRad/moduleMesh1DRad.f90 @@ -104,6 +104,7 @@ MODULE moduleMesh1DRad USE moduleSpecies USE moduleBoundary USE moduleErrors + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshEdge1DRad), INTENT(out):: self @@ -122,6 +123,8 @@ MODULE moduleMesh1DRad self%r = r1(1) + self%surface = 1.D0 / L_ref**2 + self%normal = (/ 1.D0, 0.D0, 0.D0 /) !Boundary index diff --git a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 index 4bf1f32..dbc8b25 100644 --- a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 +++ b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 @@ -144,6 +144,7 @@ MODULE moduleMesh2DCart USE moduleSpecies USE moduleBoundary USE moduleErrors + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshEdge2DCart), INTENT(out):: self @@ -163,7 +164,7 @@ MODULE moduleMesh2DCart r2 = self%n2%getCoordinates() self%x = (/r1(1), r2(1)/) self%y = (/r1(2), r2(2)/) - self%weight = 1.D0 + self%surface = SQRT((self%x(2) - self%x(1))**2 + (self%y(2) - self%y(1))**2) / L_ref !Normal vector self%normal = (/ -(self%y(2)-self%y(1)), & self%x(2)-self%x(1) , & diff --git a/src/modules/mesh/3DCart/moduleMesh3DCart.f90 b/src/modules/mesh/3DCart/moduleMesh3DCart.f90 index c451689..8170df7 100644 --- a/src/modules/mesh/3DCart/moduleMesh3DCart.f90 +++ b/src/modules/mesh/3DCart/moduleMesh3DCart.f90 @@ -109,6 +109,7 @@ MODULE moduleMesh3DCart USE moduleBoundary USE moduleErrors USE moduleMath + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshEdge3DCartTria), INTENT(out):: self @@ -142,6 +143,8 @@ MODULE moduleMesh3DCart self%normal = crossProduct(vec1, vec2) self%normal = normalize(self%normal) + self%surface = 1.D0/L_ref**2 !TODO: FIX THIS WHEN MOVING TO 3D + !Boundary index self%boundary => boundary(bt) ALLOCATE(self%fBoundary(1:nSpecies)) -- 2.49.1 From 9d961bb85fafba67008a1241eb467b7d800703ad Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Wed, 10 Jul 2024 21:57:22 +0200 Subject: [PATCH 13/22] Removing weight from edges This parameter is no longer needed. Also removing the cumulative sum of weights from the injection. --- src/modules/mesh/moduleMesh.f90 | 2 -- src/modules/moduleInject.f90 | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index af1cd36..a2eaa5f 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -76,8 +76,6 @@ MODULE moduleMesh CLASS(meshCell), POINTER:: eColl => NULL() !Normal vector REAL(8):: normal(1:3) - !Weight for random injection of particles - REAL(8):: weight = 1.D0 ! Surface of edge REAL(8):: surface = 0.D0 !Pointer to boundary type diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 1d4e2e7..529b687 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -61,8 +61,6 @@ MODULE moduleInject CLASS(speciesGeneric), POINTER:: species !Species of injection INTEGER:: nEdges INTEGER, ALLOCATABLE:: edges(:) !Array with edges - REAL(8), ALLOCATABLE:: cumWeight(:) !Array of cummulative probability - REAL(8):: sumWeight REAL(8):: surface ! Total surface of injection TYPE(velDistCont):: v(1:3) !Velocity distribution function in each direction CONTAINS -- 2.49.1 From e23fc2fc2cf7d992cbc7af276bde82977462f400 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 11:21:38 +0200 Subject: [PATCH 14/22] Small progress I made some small changes to how things are calculated. I have also discovered that the issue with different density when changing injection is not related with the node volume but with the way injection is carried out. When loading particles from a file, all provide the same density regardless the cell (node) volume. I am doing testing in 2DCart as it is easier to set up. --- src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 | 2 +- src/modules/mesh/moduleMesh.f90 | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 index 6286cfc..8637b7e 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 @@ -209,7 +209,7 @@ MODULE moduleMeshOutputVTU WRITE(fileID,"(8X,A)") '' !Electric field WRITE(fileID,"(10X,A, A, A)") '' - WRITE(fileID, "(6(ES20.6E3))") (self%cells(n)%obj%gatherElectricField(Xi)*EF_ref, n = 1, self%numCells) + WRITE(fileID,"(6(ES20.6E3))") (self%cells(n)%obj%gatherElectricField(Xi)*EF_ref, n = 1, self%numCells) WRITE(fileID,"(10X,A)") '' WRITE(fileID,"(8X,A)") '' diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index a2eaa5f..7390bca 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -613,6 +613,7 @@ MODULE moduleMesh INTEGER:: sp INTEGER:: i CLASS(meshNode), POINTER:: node + REAL(8):: pFraction !Particle fraction cellNodes = self%getNodes(nNodes) fPsi = self%fPsi(part%Xi, nNodes) @@ -623,10 +624,11 @@ MODULE moduleMesh DO i = 1, nNodes node => mesh%nodes(cellNodes(i))%obj + pFraction = fPsi(i)*part%weight CALL OMP_SET_LOCK(node%lock) - node%output(sp)%den = node%output(sp)%den + part%weight*fPsi(i) - node%output(sp)%mom(:) = node%output(sp)%mom(:) + part%weight*fPsi(i)*part%v(:) - node%output(sp)%tensorS(:,:) = node%output(sp)%tensorS(:,:) + part%weight*fPsi(i)*tensorS + node%output(sp)%den = node%output(sp)%den + pFraction + node%output(sp)%mom(:) = node%output(sp)%mom(:) + pFraction*part%v(:) + node%output(sp)%tensorS(:,:) = node%output(sp)%tensorS(:,:) + pFraction*tensorS CALL OMP_UNSET_LOCK(node%lock) END DO -- 2.49.1 From 96c563c1462c048e4ddf96ba73b142ab00dd70ff Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 14:39:56 +0200 Subject: [PATCH 15/22] Finally, some progress I rewrote how particles are injected. Now the particles per edge and its weight are calculated in the initialization. There is the possibility for the user to select the particles per edge. TODO: Write documentation for new feature. TODO: Test in 2DCyl --- src/modules/init/moduleInput.f90 | 5 +- src/modules/moduleInject.f90 | 183 +++++++++++++++++++------------ 2 files changed, 114 insertions(+), 74 deletions(-) diff --git a/src/modules/init/moduleInput.f90 b/src/modules/init/moduleInput.f90 index e30bf97..bd59e32 100644 --- a/src/modules/init/moduleInput.f90 +++ b/src/modules/init/moduleInput.f90 @@ -1236,6 +1236,7 @@ MODULE moduleInput REAL(8):: flow CHARACTER(:), ALLOCATABLE:: units INTEGER:: physicalSurface + INTEGER:: particlesPerEdge INTEGER:: sp CALL config%info('inject', found, n_children = nInject) @@ -1260,8 +1261,10 @@ MODULE moduleInput CALL config%get(object // '.flow', flow, found) CALL config%get(object // '.units', units, found) CALL config%get(object // '.physicalSurface', physicalSurface, found) + particlesPerEdge = 0 + CALL config%get(object // '.particlesPerEdge', particlesPerEdge, found) - CALL inject(i)%init(i, v, normal, T, flow, units, sp, physicalSurface) + CALL inject(i)%init(i, v, normal, T, flow, units, sp, physicalSurface, particlesPerEdge) CALL readVelDistr(config, inject(i), object) diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 529b687..59748eb 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -61,6 +61,8 @@ MODULE moduleInject CLASS(speciesGeneric), POINTER:: species !Species of injection INTEGER:: nEdges INTEGER, ALLOCATABLE:: edges(:) !Array with edges + INTEGER, ALLOCATABLE:: particlesPerEdge(:) ! Particles per edge + REAL(8), ALLOCATABLE:: weightPerEdge(:) ! Weight per edge REAL(8):: surface ! Total surface of injection TYPE(velDistCont):: v(1:3) !Velocity distribution function in each direction CONTAINS @@ -74,7 +76,7 @@ MODULE moduleInject CONTAINS !Initialize an injection of particles - SUBROUTINE initInject(self, i, v, n, T, flow, units, sp, physicalSurface) + SUBROUTINE initInject(self, i, v, n, T, flow, units, sp, physicalSurface, particlesPerEdge) USE moduleMesh USE moduleRefParam USE moduleConstParam @@ -86,52 +88,28 @@ MODULE moduleInject CLASS(injectGeneric), INTENT(inout):: self INTEGER, INTENT(in):: i REAL(8), INTENT(in):: v, n(1:3), T(1:3) - INTEGER, INTENT(in):: sp, physicalSurface + INTEGER, INTENT(in):: sp, physicalSurface, particlesPerEdge REAL(8):: tauInject REAL(8), INTENT(in):: flow CHARACTER(:), ALLOCATABLE, INTENT(in):: units INTEGER:: e, et INTEGER:: phSurface(1:mesh%numEdges) INTEGER:: nVolColl + REAL(8):: fluxPerStep = 0.D0 - self%id = i - self%vMod = v / v_ref - self%n = n / NORM2(n) - self%T = T / T_ref - self%species => species(sp)%obj - tauInject = tau(self%species%n) - SELECT CASE(units) - CASE ("sccm") - !Standard cubic centimeter per minute - self%nParticles = INT(flow*sccm2atomPerS*tauInject*ti_ref/species(sp)%obj%weight) - - CASE ("A") - !Input current in Ampers - self%nParticles = INT(flow*tauInject*ti_ref/(qe*species(sp)%obj%weight)) - - CASE ("Am2") - !Input current in Ampers per square meter - self%nParticles = INT(flow*tauInject*ti_ref*L_ref**2/(qe*species(sp)%obj%weight)) - - CASE ("part/s") - !Input current in Ampers - self%nParticles = INT(flow*tauInject*ti_ref/species(sp)%obj%weight) - - CASE DEFAULT - CALL criticalError("No support for units: " // units, 'initInject') - - END SELECT - !Scale particles for different species steps - IF (self%nParticles == 0) CALL criticalError("The number of particles for inject is 0.", 'initInject') - + self%id = i + self%vMod = v / v_ref + self%n = n / NORM2(n) + self%T = T / T_ref !Gets the edge elements from which particles are injected DO e = 1, mesh%numEdges phSurface(e) = mesh%edges(e)%obj%physicalSurface END DO - self%nEdges = COUNT(phSurface == physicalSurface) - ALLOCATE(inject(i)%edges(1:self%nEdges)) + ALLOCATE(self%edges(1:self%nEdges)) + ALLOCATE(self%particlesPerEdge(1:self%nEdges)) + ALLOCATE(self%weightPerEdge(1:self%nEdges)) et = 0 DO e=1, mesh%numEdges IF (mesh%edges(e)%obj%physicalSurface == physicalSurface) THEN @@ -170,6 +148,60 @@ MODULE moduleInject END DO + ! Information about species and flux + self%species => species(sp)%obj + tauInject = tau(self%species%n) + SELECT CASE(units) + CASE ("sccm") + !Standard cubic centimeter per minute + fluxPerStep = flow*sccm2atomPerS*tauInject*ti_ref + + CASE ("A") + !Current in Ampers + fluxPerStep = flow*tauInject*ti_ref/qe + + CASE ("Am2") + !Input current in Ampers per square meter + fluxPerStep = flow*tauInject*ti_ref*self%surface*L_ref**2/qe + + CASE ("part/s") + !Input current in Ampers + fluxPerStep = flow*tauInject*ti_ref + + CASE DEFAULT + CALL criticalError("No support for units: " // units, 'initInject') + + END SELECT + fluxPerStep = fluxPerStep / self%surface + + !Assign particles per edge + IF (particlesPerEdge > 0) THEN + ! Particles per edge defined by the user + self%particlesPerEdge = particlesPerEdge + DO et = 1, self%nEdges + self%weightPerEdge(et) = fluxPerStep*mesh%edges(self%edges(et))%obj%surface / REAL(particlesPerEdge) + + END DO + + ELSE + ! No particles assigned per edge, use the species weight + self%weightPerEdge = self%species%weight + DO et = 1, self%nEdges + self%particlesPerEdge(et) = FLOOR(fluxPerStep*mesh%edges(self%edges(et))%obj%surface /self%species%weight) + + END DO + + END IF + + print *, self%particlesPerEdge + print *, self%weightPerEdge + + self%nParticles = SUM(self%particlesPerEdge) + print *, self%nParticles + + !Scale particles for different species steps + IF (self%nParticles == 0) CALL criticalError("The number of particles for inject is 0.", 'initInject') + END SUBROUTINE initInject !Injection of particles @@ -285,9 +317,10 @@ MODULE moduleInject CLASS(injectGeneric), INTENT(in):: self INTEGER:: randomX INTEGER, SAVE:: nMin, nMax !Min and Max index in partInj array - INTEGER:: i + INTEGER:: i, e INTEGER:: n, sp CLASS(meshEdge), POINTER:: randomEdge + INTEGER:: particlesPerEdge REAL(8):: direction(1:3) !Insert particles @@ -300,58 +333,62 @@ MODULE moduleInject END IF END DO - nMin = nMin + 1 - nMax = nMin + self%nParticles - 1 - !Particle is considered to be outside the domain - partInj(nMin:nMax)%n_in = .FALSE. !$OMP END SINGLE !$OMP DO - DO n = nMin, nMax - randomX = random(1, self%nEdges) - randomEdge => mesh%edges(self%edges(randomX))%obj - !Random position in edge - partInj(n)%r = randomEdge%randPos() - !Assign weight to particle. - partInj(n)%weight = self%species%weight * randomEdge%surface / self%surface - !Volume associated to the edge: - IF (ASSOCIATED(randomEdge%e1)) THEN - partInj(n)%cell = randomEdge%e1%n + DO e = 1, self%nEdges + ! Select edge for injection + randomEdge => mesh%edges(self%edges(e))%obj + ! Inject particles in edge + DO i = 1, self%particlesPerEdge(e) + ! Index in the global partInj array + n = nMin - 1 + SUM(self%particlesPerEdge(1:e-1)) + i + !Particle is considered to be outside the domain + partInj(n)%n_in = .FALSE. + !Random position in edge + partInj(n)%r = randomEdge%randPos() + !Assign weight to particle. + partInj(n)%weight = self%weightPerEdge(e) + !Volume associated to the edge: + IF (ASSOCIATED(randomEdge%e1)) THEN + partInj(n)%cell = randomEdge%e1%n - ELSEIF (ASSOCIATED(randomEdge%e2)) THEN - partInj(n)%cell = randomEdge%e2%n + ELSEIF (ASSOCIATED(randomEdge%e2)) THEN + partInj(n)%cell = randomEdge%e2%n - ELSE - CALL criticalError("No Volume associated to edge", 'addParticles') + ELSE + CALL criticalError("No Volume associated to edge", 'addParticles') - END IF - partInj(n)%cellColl = randomEdge%eColl%n - sp = self%species%n + END IF + partInj(n)%cellColl = randomEdge%eColl%n + sp = self%species%n - !Assign particle type - partInj(n)%species => self%species + !Assign particle type + partInj(n)%species => self%species - direction = self%n + direction = self%n - partInj(n)%v = 0.D0 + partInj(n)%v = 0.D0 - partInj(n)%v = self%vMod*direction + (/ self%v(1)%obj%randomVel(), & - self%v(2)%obj%randomVel(), & - self%v(3)%obj%randomVel() /) + partInj(n)%v = self%vMod*direction + (/ self%v(1)%obj%randomVel(), & + self%v(2)%obj%randomVel(), & + self%v(3)%obj%randomVel() /) - !If velocity is not in the right direction, invert it - IF (DOT_PRODUCT(direction, partInj(n)%v) < 0.D0) THEN - partInj(n)%v = - partInj(n)%v + !If velocity is not in the right direction, invert it + IF (DOT_PRODUCT(direction, partInj(n)%v) < 0.D0) THEN + partInj(n)%v = - partInj(n)%v - END IF + END IF - !Obtain natural coordinates of particle in cell - partInj(n)%Xi = mesh%cells(partInj(n)%cell)%obj%phy2log(partInj(n)%r) - !Push new particle with the minimum time step - CALL solver%pusher(sp)%pushParticle(partInj(n), tau(sp)) - !Assign cell to new particle - CALL solver%updateParticleCell(partInj(n)) + !Obtain natural coordinates of particle in cell + partInj(n)%Xi = mesh%cells(partInj(n)%cell)%obj%phy2log(partInj(n)%r) + !Push new particle with the minimum time step + CALL solver%pusher(sp)%pushParticle(partInj(n), tau(sp)) + !Assign cell to new particle + CALL solver%updateParticleCell(partInj(n)) + + END DO END DO !$OMP END DO -- 2.49.1 From 6d62807fb43466048a1f63996ecfd3e77bb51478 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 14:50:14 +0200 Subject: [PATCH 16/22] Remove testing 'print' statements 2DCyl still seems to have some problems but waiting for simulation. --- src/modules/moduleInject.f90 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 59748eb..93302d9 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -193,11 +193,7 @@ MODULE moduleInject END IF - print *, self%particlesPerEdge - print *, self%weightPerEdge - self%nParticles = SUM(self%particlesPerEdge) - print *, self%nParticles !Scale particles for different species steps IF (self%nParticles == 0) CALL criticalError("The number of particles for inject is 0.", 'initInject') -- 2.49.1 From 03f3b81811359af69f312b1ea47b1ec56beff861 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 15:31:01 +0200 Subject: [PATCH 17/22] Manual updated The manual has been modified to account for the new particlePerEdge option and to indicate that now when the flux is giving by a flux like in the Am2 units, the real surface of the inject is used to scale it. --- doc/user-manual/fpakc_UserManual.pdf | Bin 186028 -> 186195 bytes doc/user-manual/fpakc_UserManual.tex | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/user-manual/fpakc_UserManual.pdf b/doc/user-manual/fpakc_UserManual.pdf index 37d80141e4c7e64c2cb808e7e072b95019a502ae..ef1494ac62b3a07c882225d34ac2998d565ae727 100644 GIT binary patch delta 27417 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 z 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ˤ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 diff --git a/doc/user-manual/fpakc_UserManual.tex b/doc/user-manual/fpakc_UserManual.tex index fd48ed2..13be4cd 100644 --- a/doc/user-manual/fpakc_UserManual.tex +++ b/doc/user-manual/fpakc_UserManual.tex @@ -611,7 +611,7 @@ make \begin{itemize} \item \textbf{A}: Ampere. \item \textbf{Am2}: Ampere per square meter. - This value will be multiplied by the square of the reference length to convert to A, it will not consider the surface area of injection. + This value will be multiplied by the surface of injection. \item \textbf{sccm}: Standard cubic centimetre. \item \textbf{part/s}: Particles (real) per second. \end{itemize} @@ -638,6 +638,11 @@ make Temperature in each direction. \item \textbf{physicalSurface}: Integer. Identification of the edge in the mesh file. + \item \textbf{particlesPerEdge}: Integer. + Optional. + Number of particles to be injected by each edge in the numerical domain. + The weight of the particles for each edge will modified by the surface of the edge to ensure the right flux is injected. + If no value is provided, the number of particles to inject per edge will be calculated with the species weight and the surface of the edge respect to the total one. \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{reference} -- 2.49.1 From d710cc5e6631353bbbb34df41b48bdb3e4dc0cb0 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 15:52:13 +0200 Subject: [PATCH 18/22] Probes fixed! This should've been commited in another branch, but I am taking advantage of this to clean up the code a bit. --- src/modules/moduleProbe.f90 | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/modules/moduleProbe.f90 b/src/modules/moduleProbe.f90 index c7d3cf5..c29eeda 100644 --- a/src/modules/moduleProbe.f90 +++ b/src/modules/moduleProbe.f90 @@ -101,7 +101,7 @@ MODULE moduleProbe !Maximum radius !TODO: Make this an input parameter - self%maxR = 1.D0 + self%maxR = 1.D-2/L_ref !Init the probe lock CALL OMP_INIT_LOCK(self%lock) @@ -148,7 +148,7 @@ MODULE moduleProbe deltaR = NORM2(self%r - part%r) !Only include particle if it is inside the maximum radius - IF (deltaR < self%maxR) THEN + ! IF (deltaR < self%maxR) THEN !find lower index for all dimensions CALL self%findLowerIndex(part%v, i, j, k, inside) @@ -162,28 +162,28 @@ MODULE moduleProbe fk = self%vk(k+1) - part%v(3) fk1 = part%v(3) - self%vk(k) - ! weight = part%weight * DEXP(deltaR/self%maxR) - weight = part%weight + weight = part%weight * DEXP(-deltaR/self%maxR) + ! weight = part%weight !Lock the probe CALL OMP_SET_LOCK(self%lock) !Assign particle weight to distribution function - self%f(i , j , k ) = fi * fj * fk * weight - self%f(i+1, j , k ) = fi1 * fj * fk * weight - self%f(i , j+1, k ) = fi * fj1 * fk * weight - self%f(i+1, j+1, k ) = fi1 * fj1 * fk * weight - self%f(i , j , k+1) = fi * fj * fk1 * weight - self%f(i+1, j , k+1) = fi1 * fj * fk1 * weight - self%f(i , j+1, k+1) = fi * fj1 * fk1 * weight - self%f(i+1, j+1, k+1) = fi1 * fj1 * fk1 * weight + self%f(i , j , k ) = self%f(i , j , k ) + fi * fj * fk * weight + self%f(i+1, j , k ) = self%f(i+1, j , k ) + fi1 * fj * fk * weight + self%f(i , j+1, k ) = self%f(i , j+1, k ) + fi * fj1 * fk * weight + self%f(i+1, j+1, k ) = self%f(i+1, j+1, k ) + fi1 * fj1 * fk * weight + self%f(i , j , k+1) = self%f(i , j , k+1) + fi * fj * fk1 * weight + self%f(i+1, j , k+1) = self%f(i+1, j , k+1) + fi1 * fj * fk1 * weight + self%f(i , j+1, k+1) = self%f(i , j+1, k+1) + fi * fj1 * fk1 * weight + self%f(i+1, j+1, k+1) = self%f(i+1, j+1, k+1) + fi1 * fj1 * fk1 * weight !Unlock the probe CALL OMP_UNSET_LOCK(self%lock) END IF - END IF + ! END IF END IF -- 2.49.1 From bc8f20528749446ed9b1b7c083e69cf062aa8b26 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 15:55:02 +0200 Subject: [PATCH 19/22] Clean-up! Trying to reduce warnings and unused variables in the code. This should not be in this branch. --- src/modules/init/moduleInput.f90 | 3 +-- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 2 -- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 5 +++-- .../mesh/inout/vtu/moduleMeshInputVTU.f90 | 1 + .../mesh/inout/vtu/moduleMeshOutputVTU.f90 | 9 +++------ src/modules/mesh/moduleMesh.f90 | 6 ++++++ src/modules/moduleInject.f90 | 16 +++++++--------- src/modules/solver/electromagnetic/moduleEM.f90 | 3 ++- 8 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/modules/init/moduleInput.f90 b/src/modules/init/moduleInput.f90 index bd59e32..6f1d5bb 100644 --- a/src/modules/init/moduleInput.f90 +++ b/src/modules/init/moduleInput.f90 @@ -308,7 +308,7 @@ MODULE moduleInput LOGICAL:: found CHARACTER(:), ALLOCATABLE:: object INTEGER:: nInitial - INTEGER:: i, j, p, e + INTEGER:: i, p, e CHARACTER(LEN=2):: iString CHARACTER(:), ALLOCATABLE:: spName INTEGER:: sp @@ -923,7 +923,6 @@ MODULE moduleInput LOGICAL:: found CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile REAL(8):: volume - CHARACTER(:), ALLOCATABLE:: meshFileVTU !Temporary to test VTU OUTPUT object = 'geometry' diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 166ae84..2d300b9 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -582,8 +582,6 @@ MODULE moduleMesh2DCyl REAL(8):: detJ REAL(8):: fPsi(1:4) REAL(8):: dPsi(1:3, 1:4), pDer(1:3, 1:3) - REAL(8):: corrUp, corrDown - REAL(8):: dZ, r2, r1 self%volume = 0.D0 diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 11c3b13..1c8de50 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -108,6 +108,7 @@ MODULE moduleMeshInputGmsh2 READ(10, *) totalNumElem !Count edges and volume elements + numEdges = 0 SELECT TYPE(self) TYPE IS(meshParticles) self%numEdges = 0 @@ -342,7 +343,7 @@ MODULE moduleMeshInputGmsh2 DO i = 1, numNodes !Reads the density - READ(10, *), e, density(i) + READ(10, *) e, density(i) END DO @@ -353,7 +354,7 @@ MODULE moduleMeshInputGmsh2 DO i = 1, numNodes !Reads the velocity - READ(10, *), e, velocity(i, 1:3) + READ(10, *) e, velocity(i, 1:3) END DO diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index 61802fb..d408387 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -275,6 +275,7 @@ MODULE moduleMeshInputVTU END DO !Count the number of edges + numEdges = 0 SELECT CASE(self%dimen) CASE(3) !Edges are triangles, type 5 in VTK diff --git a/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 index 8637b7e..da90b6b 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshOutputVTU.f90 @@ -315,9 +315,8 @@ MODULE moduleMeshOutputVTU CLASS(meshParticles), INTENT(in):: self INTEGER, INTENT(in):: t - INTEGER:: n, i, fileID + INTEGER:: i, fileID CHARACTER(:), ALLOCATABLE:: fileName, fileNameCollection - TYPE(outputFormat):: output(1:self%numNodes) fileID = 60 @@ -352,10 +351,9 @@ MODULE moduleMeshOutputVTU CLASS(meshGeneric), INTENT(in):: self INTEGER, INTENT(in):: t - INTEGER:: n, i, fileID + INTEGER:: fileID CHARACTER(:), ALLOCATABLE:: fileName, fileNameCollection CHARACTER (LEN=iterationDigits):: tstring - TYPE(outputFormat):: output(1:self%numNodes) fileID = 62 @@ -424,9 +422,8 @@ MODULE moduleMeshOutputVTU IMPLICIT NONE CLASS(meshParticles), INTENT(in):: self - INTEGER:: n, i, fileIDMean, fileIDDeviation + INTEGER:: i, fileIDMean, fileIDDeviation CHARACTER(:), ALLOCATABLE:: fileNameMean, fileNameDeviation - TYPE(outputFormat):: output(1:self%numNodes) fileIDMean = 66 fileIDDeviation = 67 diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index 7390bca..ae53aa0 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -1025,6 +1025,9 @@ MODULE moduleMesh ALLOCATE(deltaV_ij(1:cell%listPart_in(i)%amount, 1:3)) ALLOCATE(p_ij(1:cell%listPart_in(i)%amount, 1:3)) ALLOCATE(mass_ij(1:cell%listPart_in(i)%amount)) + deltaV_ij = 0.D0 + p_ij = 0.D0 + mass_ij = 0.D0 !Loop over particles of species_i partTemp => cell%listPart_in(i)%head p = 1 @@ -1109,6 +1112,9 @@ MODULE moduleMesh ALLOCATE(deltaV_ji(1:cell%listPart_in(j)%amount, 1:3)) ALLOCATE(p_ji(1:cell%listPart_in(j)%amount, 1:3)) ALLOCATE(mass_ji(1:cell%listPart_in(j)%amount)) + deltaV_ji = 0.D0 + p_ji = 0.D0 + mass_ji = 0.D0 !Loop over particles of species_j partTemp => cell%listPart_in(j)%head p = 1 diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 93302d9..18c7fbb 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -151,28 +151,29 @@ MODULE moduleInject ! Information about species and flux self%species => species(sp)%obj tauInject = tau(self%species%n) + ! Convert units SELECT CASE(units) CASE ("sccm") !Standard cubic centimeter per minute - fluxPerStep = flow*sccm2atomPerS*tauInject*ti_ref + fluxPerStep = flow*sccm2atomPerS CASE ("A") !Current in Ampers - fluxPerStep = flow*tauInject*ti_ref/qe + fluxPerStep = flow/qe CASE ("Am2") !Input current in Ampers per square meter - fluxPerStep = flow*tauInject*ti_ref*self%surface*L_ref**2/qe + fluxPerStep = flow*self%surface*L_ref**2/qe CASE ("part/s") !Input current in Ampers - fluxPerStep = flow*tauInject*ti_ref + fluxPerStep = flow CASE DEFAULT CALL criticalError("No support for units: " // units, 'initInject') END SELECT - fluxPerStep = fluxPerStep / self%surface + fluxPerStep = fluxPerStep * tauInject * ti_ref / self%surface !Assign particles per edge IF (particlesPerEdge > 0) THEN @@ -307,16 +308,13 @@ MODULE moduleInject USE moduleMesh USE moduleRandom USE moduleErrors - USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(injectGeneric), INTENT(in):: self - INTEGER:: randomX - INTEGER, SAVE:: nMin, nMax !Min and Max index in partInj array + INTEGER, SAVE:: nMin INTEGER:: i, e INTEGER:: n, sp CLASS(meshEdge), POINTER:: randomEdge - INTEGER:: particlesPerEdge REAL(8):: direction(1:3) !Insert particles diff --git a/src/modules/solver/electromagnetic/moduleEM.f90 b/src/modules/solver/electromagnetic/moduleEM.f90 index bdf6b03..d5d0793 100644 --- a/src/modules/solver/electromagnetic/moduleEM.f90 +++ b/src/modules/solver/electromagnetic/moduleEM.f90 @@ -30,8 +30,9 @@ MODULE moduleEM INTEGER, ALLOCATABLE:: nodes(:) INTEGER:: n + nNodes = 1 nNodes = edge%nNodes - nodes = edge%getNodes(nNodes) + nodes = edge%getNodes(nNodes) DO n = 1, nNodes SELECT CASE(self%typeEM) -- 2.49.1 From 72dd3c9073f5123da5267c6f3f6e38749e683e0d Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Thu, 11 Jul 2024 17:40:57 +0200 Subject: [PATCH 20/22] I think I have it So the radius for the volume integral in the nodes has to be set with a 1/4 3/4 ratio to match the change in volume as the radius changes along the volume. This has a bigger impact close to the edge. Still unsure if this is the "right" thing to do, but at least it works okay (it seems). --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 2d300b9..ccf0c0f 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -247,7 +247,7 @@ MODULE moduleMesh2DCyl !QUAD FUNCTIONS !Init element SUBROUTINE initCellQuad2DCyl(self, n, p, nodes) - USE moduleRefParam + USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshCell2DCylQuad), INTENT(out):: self @@ -594,17 +594,17 @@ MODULE moduleMesh2DCyl r = DOT_PRODUCT(fPsi,self%r) !Computes total volume of the cell self%volume = r*detJ*PI8 !2*pi * 4 (weight of 1 point 2D-Gaussian integral) - !Computes volume per node - Xi = (/-5.D-1, -5.D-1, 0.D0/) + !Computes volume per node. Change the radius point to calculate the area to improve accuracy near the axis. + Xi = (/-5.D-1, -0.25D0, 0.D0/) r = self%gatherF(Xi, 4, self%r) self%n1%v = self%n1%v + fPsi(1)*r*detJ*PI8 - Xi = (/ 5.D-1, -5.D-1, 0.D0/) + Xi = (/ 5.D-1, -0.25D0, 0.D0/) r = self%gatherF(Xi, 4, self%r) self%n2%v = self%n2%v + fPsi(2)*r*detJ*PI8 - Xi = (/ 5.D-1, 5.D-1, 0.D0/) + Xi = (/ 5.D-1, 0.75D0, 0.D0/) r = self%gatherF(Xi, 4, self%r) self%n3%v = self%n3%v + fPsi(3)*r*detJ*PI8 - Xi = (/-5.D-1, 5.D-1, 0.D0/) + Xi = (/-5.D-1, 0.75D0, 0.D0/) r = self%gatherF(Xi, 4, self%r) self%n4%v = self%n4%v + fPsi(4)*r*detJ*PI8 -- 2.49.1 From 152ae6b097422d5b5e924835627b5d52473c5c5b Mon Sep 17 00:00:00 2001 From: JGonzalez Date: Thu, 11 Jul 2024 18:19:26 +0200 Subject: [PATCH 21/22] No longer needed The correction in the node volume is no longer needed as now things are being calculated right with the last change. Still, at some point I should review the calculation of the node volume in 2DCyl. --- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 14 -------------- src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 | 14 -------------- 2 files changed, 28 deletions(-) diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 1c8de50..1ad6a36 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -297,20 +297,6 @@ MODULE moduleMeshInputGmsh2 CLOSE(10) - ! Adjust node volume at axis - SELECT CASE(self%geometry) - CASE("Cyl") - DO n = 1, self%numNodes - r = self%nodes(n)%obj%getCoordinates() - IF (r(2) == 0.D0) THEN - self%nodes(n)%obj%v = self%nodes(n)%obj%v * 3.0D0/2.0D0 - - END IF - - END DO - - END SELECT - !Call mesh connectivity CALL self%connectMesh diff --git a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 index d408387..184d645 100644 --- a/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 +++ b/src/modules/mesh/inout/vtu/moduleMeshInputVTU.f90 @@ -497,20 +497,6 @@ MODULE moduleMeshInputVTU END DO - ! Adjust node volume at axis - SELECT CASE(self%geometry) - CASE("Cyl") - DO n = 1, self%numNodes - r = self%nodes(n)%obj%getCoordinates() - IF (r(2) == 0.D0) THEN - self%nodes(n)%obj%v = self%nodes(n)%obj%v * 3.0D0/2.0D0 - - END IF - - END DO - - END SELECT - !Call mesh connectivity CALL self%connectMesh -- 2.49.1 From fb9d1ad8375267eaa1f4bfe7c3b0c44952c94a4d Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Thu, 11 Jul 2024 16:44:29 +0000 Subject: [PATCH 22/22] Update moduleMesh2DCyl.f90 This is not needed. --- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index ccf0c0f..ae1eb92 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -247,7 +247,6 @@ MODULE moduleMesh2DCyl !QUAD FUNCTIONS !Init element SUBROUTINE initCellQuad2DCyl(self, n, p, nodes) - USE moduleRefParam, ONLY: L_ref IMPLICIT NONE CLASS(meshCell2DCylQuad), INTENT(out):: self -- 2.49.1