From e25b567d3697184aed889a9e936c72e5bf37762e Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Tue, 13 Apr 2021 16:55:50 +0200 Subject: [PATCH] Now the initial state has the same format as the mesh file, i.e., is easy to use a file from a previous run without processing it into a plain text file. Although the previous method presented some updates for 1D small cases, this is quite easy to do with any type of simulations and, in the future, with different mesh formats. --- doc/user-manual/fpakc_UserManual.pdf | Bin 168123 -> 166920 bytes doc/user-manual/fpakc_UserManual.tex | 21 +--- src/modules/mesh/1DCart/moduleMesh1DCart.f90 | 7 -- src/modules/mesh/1DRad/moduleMesh1DRad.f90 | 7 -- src/modules/mesh/2DCart/moduleMesh2DCart.f90 | 7 -- src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 | 7 -- src/modules/mesh/3DCart/moduleMesh3DCart.f90 | 19 +-- .../mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 | 73 ++++++++++++ src/modules/mesh/moduleMesh.f90 | 25 +++- src/modules/moduleInput.f90 | 108 +++++++++++++----- 10 files changed, 180 insertions(+), 94 deletions(-) diff --git a/doc/user-manual/fpakc_UserManual.pdf b/doc/user-manual/fpakc_UserManual.pdf index 5f8e76a235c4ac1be1b3650ee9f1268855e71f6d..8e8309bdecbb35d44ad50be138065e6f8295665a 100644 GIT binary patch delta 22881 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 HDUtp^-gL+i delta 23939 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 diff --git a/doc/user-manual/fpakc_UserManual.tex b/doc/user-manual/fpakc_UserManual.tex index a485c95..3249d02 100644 --- a/doc/user-manual/fpakc_UserManual.tex +++ b/doc/user-manual/fpakc_UserManual.tex @@ -618,25 +618,12 @@ make Required values are: \begin{itemize} \item \textbf{speciesName}: Character. - Name of species. + Name of species as defined in the object \textbf{species}. \item \textbf{initialState}: Character. - Plain text file that contains the information about the species macroscopic properties in the grid. - Initial particles are assumed to be Maxwellian. + 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}. - The file must contain the following columns in this specific order: - \begin{itemize} - \item \textit{Element}: Integer. - Identifier of the volume in the mesh. - It is not required to specify empty volumes. - \item \textit{Density}: Real. - Species density in $\unit{m^-3}$. - \item \textit{Velocity}: Real. - Three colums representing the initial velocity in each direction. - Units are $\unit{m s^-1}$. - \item \textit{Temperature}: Real. - One column that represents the initial temperature in $\unit{K}$. - - \end{itemize} \end{itemize} \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/modules/mesh/1DCart/moduleMesh1DCart.f90 b/src/modules/mesh/1DCart/moduleMesh1DCart.f90 index a6e4248..73a4c1d 100644 --- a/src/modules/mesh/1DCart/moduleMesh1DCart.f90 +++ b/src/modules/mesh/1DCart/moduleMesh1DCart.f90 @@ -36,19 +36,12 @@ MODULE moduleMesh1DCart CONTAINS PROCEDURE, PASS:: detJac => detJ1DCart PROCEDURE, PASS:: invJac => invJ1DCart - PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer END TYPE meshVol1DCart ABSTRACT INTERFACE - PURE FUNCTION fPsi_interface(xi) RESULT(fPsi) - REAL(8), INTENT(in):: xi(1:3) - REAL(8), ALLOCATABLE:: fPsi(:) - - END FUNCTION fPsi_interface - PURE FUNCTION dPsi_interface(xi) RESULT(dPsi) REAL(8), INTENT(in):: xi(1:3) REAL(8), ALLOCATABLE:: dPsi(:,:) diff --git a/src/modules/mesh/1DRad/moduleMesh1DRad.f90 b/src/modules/mesh/1DRad/moduleMesh1DRad.f90 index 2bd9d5b..d8e5c51 100644 --- a/src/modules/mesh/1DRad/moduleMesh1DRad.f90 +++ b/src/modules/mesh/1DRad/moduleMesh1DRad.f90 @@ -36,19 +36,12 @@ MODULE moduleMesh1DRad CONTAINS PROCEDURE, PASS:: detJac => detJ1DRad PROCEDURE, PASS:: invJac => invJ1DRad - PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer END TYPE meshVol1DRad ABSTRACT INTERFACE - PURE FUNCTION fPsi_interface(xi) RESULT(fPsi) - REAL(8), INTENT(in):: xi(1:3) - REAL(8), ALLOCATABLE:: fPsi(:) - - END FUNCTION fPsi_interface - PURE FUNCTION dPsi_interface(xi) RESULT(dPsi) REAL(8), INTENT(in):: xi(1:3) REAL(8), ALLOCATABLE:: dPsi(:,:) diff --git a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 index 89704d6..c830f8d 100644 --- a/src/modules/mesh/2DCart/moduleMesh2DCart.f90 +++ b/src/modules/mesh/2DCart/moduleMesh2DCart.f90 @@ -41,19 +41,12 @@ MODULE moduleMesh2DCart CONTAINS PROCEDURE, PASS:: detJac => detJ2DCart PROCEDURE, PASS:: invJac => invJ2DCart - PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer END TYPE meshVol2DCart ABSTRACT INTERFACE - PURE FUNCTION fPsi_interface(xi) RESULT(fPsi) - REAL(8), INTENT(in):: xi(1:3) - REAL(8), ALLOCATABLE:: fPsi(:) - - END FUNCTION fPsi_interface - PURE FUNCTION dPsi_interface(xi) RESULT(dPsi) REAL(8), INTENT(in):: xi(1:3) REAL(8), ALLOCATABLE:: dPsi(:,:) diff --git a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 index 2784414..80c0665 100644 --- a/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 +++ b/src/modules/mesh/2DCyl/moduleMesh2DCyl.f90 @@ -41,19 +41,12 @@ MODULE moduleMesh2DCyl CONTAINS PROCEDURE, PASS:: detJac => detJ2DCyl PROCEDURE, PASS:: invJac => invJ2DCyl - PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer END TYPE meshVol2DCyl ABSTRACT INTERFACE - PURE FUNCTION fPsi_interface(xi) RESULT(fPsi) - REAL(8), INTENT(in):: xi(1:3) - REAL(8), ALLOCATABLE:: fPsi(:) - - END FUNCTION fPsi_interface - PURE FUNCTION dPsi_interface(xi) RESULT(dPsi) REAL(8), INTENT(in):: xi(1:3) REAL(8), ALLOCATABLE:: dPsi(:,:) diff --git a/src/modules/mesh/3DCart/moduleMesh3DCart.f90 b/src/modules/mesh/3DCart/moduleMesh3DCart.f90 index ad5c65d..e65ff25 100644 --- a/src/modules/mesh/3DCart/moduleMesh3DCart.f90 +++ b/src/modules/mesh/3DCart/moduleMesh3DCart.f90 @@ -35,19 +35,12 @@ MODULE moduleMesh3DCart CONTAINS PROCEDURE, PASS:: detJac => detJ3DCart PROCEDURE, PASS:: invJac => invJ3DCart - PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer END TYPE meshVol3DCart ABSTRACT INTERFACE - PURE FUNCTION fPsi_interface(xii) RESULT(fPsi) - REAL(8), INTENT(in):: xii(1:3) - REAL(8), ALLOCATABLE:: fPsi(:) - - END FUNCTION fPsi_interface - PURE FUNCTION dPsi_interface(xii) RESULT(dPsi) REAL(8), INTENT(in):: xii(1:3) REAL(8), ALLOCATABLE:: dPsi(:,:) @@ -327,18 +320,18 @@ MODULE moduleMesh3DCart END SUBROUTINE volumeTetra !Computes element functions in point xii - PURE FUNCTION fPsiTetra(xii) RESULT(fPsi) + PURE FUNCTION fPsiTetra(xi) RESULT(fPsi) IMPLICIT NONE - REAL(8), INTENT(in):: xii(1:3) + REAL(8), INTENT(in):: xi(1:3) REAL(8), ALLOCATABLE:: fPsi(:) ALLOCATE(fPsi(1:4)) - fPsi(1) = 1.D0 - xii(1) - xii(2) - xii(3) - fPsi(2) = xii(1) - fPsi(3) = xii(2) - fPsi(4) = xii(3) + fPsi(1) = 1.D0 - xi(1) - xi(2) - xi(3) + fPsi(2) = xi(1) + fPsi(3) = xi(2) + fPsi(4) = xi(3) END FUNCTION fPsiTetra diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index 59d7064..35e6fce 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -14,6 +14,7 @@ MODULE moduleMeshInputGmsh2 TYPE IS(meshParticles) self%printOutput => printOutputGmsh2 self%printEM => printEMGmsh2 + self%readInitial => readInitialGmsh2 END SELECT self%readMesh => readGmsh2 @@ -288,4 +289,76 @@ MODULE moduleMeshInputGmsh2 END SUBROUTINE readGmsh2 + !Reads the initial information from an output file for an species + SUBROUTINE readInitialGmsh2(sp, filename, density, velocity, temperature) + USE moduleRefParam + IMPLICIT NONE + + INTEGER, INTENT(in):: sp + CHARACTER(:), ALLOCATABLE, INTENT(in):: filename + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:):: density + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:,:):: velocity + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:):: temperature + INTEGER:: i, e + INTEGER:: numNodes + + OPEN(10, file = TRIM(filename)) + + !Skip first lines + DO i = 1, 11 + READ(10, *) + + END DO + + !Reads number of nodes in file + READ(10, *) numNodes + ALLOCATE(density(1:numNodes)) + ALLOCATE(velocity(1:numNodes, 1:3)) + ALLOCATE(temperature(1:numNodes)) + + DO i = 1, numNodes + !Reads the density + READ(10, *), e, density(i) + + END DO + + DO i = 1, 10 + READ(10, *) + + END DO + + DO i = 1, numNodes + !Reads the velocity + READ(10, *), e, velocity(i, 1:3) + + END DO + + !Skip uneccessary lines + DO i = 1, 10 + READ(10, *) + + END DO + + !Assign density to nodes + DO i = 1, numNodes + !Skips pressure + READ(10, *) + + END DO + + !Skip uneccessary lines + DO i = 1, 10 + READ(10, *) + + END DO + + !Assign density to nodes + DO i = 1, numNodes + !Skips pressure + READ(10, *) e, temperature(i) + + END DO + + END SUBROUTINE readInitialGmsh2 + END MODULE moduleMeshInputGmsh2 diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index 8ddee60..1deb764 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -161,6 +161,7 @@ MODULE moduleMesh PROCEDURE(initVol_interface), DEFERRED, PASS:: init PROCEDURE(getNodesVol_interface), DEFERRED, PASS:: getNodes PROCEDURE(randPosVol_interface), DEFERRED, PASS:: randPos + PROCEDURE(fPsi_interface), DEFERRED, NOPASS:: fPsi PROCEDURE(scatter_interface), DEFERRED, PASS:: scatter PROCEDURE(gatherEF_interface), DEFERRED, PASS:: gatherEF PROCEDURE(elemK_interface), DEFERRED, PASS:: elemK @@ -208,6 +209,12 @@ MODULE moduleMesh END FUNCTION getNodesVol_interface + PURE FUNCTION fPsi_interface(xi) RESULT(fPsi) + REAL(8), INTENT(in):: xi(1:3) + REAL(8), ALLOCATABLE:: fPsi(:) + + END FUNCTION fPsi_interface + PURE FUNCTION elemK_interface(self) RESULT(localK) IMPORT:: meshVol CLASS(meshVol), INTENT(in):: self @@ -271,9 +278,10 @@ MODULE moduleMesh TYPE(meshNodeCont), ALLOCATABLE:: nodes(:) !Array of volume elements TYPE(meshVolCont), ALLOCATABLE:: vols(:) - PROCEDURE(readMesh_interface), POINTER, PASS:: readMesh => NULL() - PROCEDURE(connectMesh_interface), POINTER, PASS:: connectMesh => NULL() - PROCEDURE(printColl_interface), POINTER, PASS:: printColl => NULL() + PROCEDURE(readMesh_interface), POINTER, PASS:: readMesh => NULL() + PROCEDURE(readInitial_interface), POINTER, NOPASS:: readInitial => NULL() + PROCEDURE(connectMesh_interface), POINTER, PASS:: connectMesh => NULL() + PROCEDURE(printColl_interface), POINTER, PASS:: printColl => NULL() CONTAINS PROCEDURE, PASS:: doCollisions @@ -289,6 +297,15 @@ MODULE moduleMesh END SUBROUTINE readMesh_interface + SUBROUTINE readInitial_interface(sp, filename, density, velocity, temperature) + INTEGER, INTENT(in):: sp + CHARACTER(:), ALLOCATABLE, INTENT(in):: filename + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:):: density + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:,:):: velocity + REAL(8), ALLOCATABLE, INTENT(out), DIMENSION(:):: temperature + + END SUBROUTINE readInitial_interface + !Connects volume and edges to the mesh SUBROUTINE connectMesh_interface(self) IMPORT meshGeneric @@ -655,8 +672,6 @@ MODULE moduleMesh END SUBROUTINE doCollisions SUBROUTINE doCoulomb(self) - IMPORT meshParticles - CLASS(meshParticles), INTENT(inout):: self END SUBROUTINE doCoulomb diff --git a/src/modules/moduleInput.f90 b/src/modules/moduleInput.f90 index 9d9de19..8699f69 100644 --- a/src/modules/moduleInput.f90 +++ b/src/modules/moduleInput.f90 @@ -206,7 +206,6 @@ MODULE moduleInput CALL config%get(object // '.WeightingScheme', WSType, found) CALL solver%initWS(WSType) - !Makes tau(s) non-dimensional tau = tau / ti_ref tauMin = tauMin / ti_ref @@ -219,7 +218,6 @@ MODULE moduleInput !Read initial state for species CALL verboseError('Reading Initial state...') CALL readInitial(config) - CALL checkStatus(config, "readInitial") END SUBROUTINE readCase @@ -237,14 +235,21 @@ MODULE moduleInput LOGICAL:: found CHARACTER(:), ALLOCATABLE:: object INTEGER:: nInitial - INTEGER:: i, p, e + INTEGER:: i, j, p, e CHARACTER(LEN=2):: iString CHARACTER(:), ALLOCATABLE:: spName INTEGER:: sp CHARACTER(:), ALLOCATABLE:: spFile - INTEGER:: stat - CHARACTER(100):: dummy - REAL(8):: density, velocity(1:3), temperature + CHARACTER(:), ALLOCATABLE:: filename + REAL(8), ALLOCATABLE, DIMENSION(:):: density, temperature + REAL(8), ALLOCATABLE, DIMENSION(:,:):: velocity + INTEGER, ALLOCATABLE, DIMENSION(:):: nodes + INTEGER:: nNodes + REAL(8), ALLOCATABLE, DIMENSION(:):: source, fPsi + !Density at the volume centroid + REAL(8):: densityCen + !Mean velocity and temperature at particle position + REAL(8):: velocityXi(1:3), temperatureXi INTEGER:: nNewPart = 0.D0 TYPE(particle), POINTER:: partNew REAL(8):: vTh @@ -260,38 +265,76 @@ MODULE moduleInput CALL config%get(object // '.speciesName', spName, found) sp = speciesName2Index(spName) CALL config%get(object // '.initialState', spFile, found) - OPEN (10, FILE = path // spFile, ACTION = 'READ') - DO - READ(10, '(A)', IOSTAT = stat) dummy - !If EoF, exit reading - IF (stat /= 0) EXIT - !If comment, skip - IF (INDEX(dummy,'#') /= 0) CYCLE - !Go up one line - BACKSPACE(10) - !Read information - READ(10, *) e, density, velocity, temperature + !Reads node values at the nodes + filename = path // spFile + CALL mesh%readInitial(sp, filename, density, velocity, temperature) + !For each volume in the node, create corresponding particles + DO e = 1, mesh%numVols !Scale variables - !Particles in cell volume - nNewPart = INT(density * (mesh%vols(e)%obj%volume*Vol_ref) / species(sp)%obj%weight) - !Non-dimensional velocity - velocity = velocity / v_ref - !Non-dimensional temperature - temperature = temperature / T_ref - !Non-dimensional thermal temperature - vTh = DSQRT(temperature/species(sp)%obj%m) + !Density at centroid of cell + nodes = mesh%vols(e)%obj%getNodes() + nNodes = SIZE(nodes) + !TODO: Procedure to obtain centroid from element (also for printing Electric Field) + fPsi = mesh%vols(e)%obj%fPsi((/0.D0, 0.D0, 0.D0/)) + ALLOCATE(source(1:nNodes)) + DO j = 1, nNodes + source(j) = density(nodes(j)) + + END DO + densityCen = DOT_PRODUCT(fPsi, source) + DEALLOCATE(fPsi) + + !Calculate number of particles + nNewPart = INT(densityCen * (mesh%vols(e)%obj%volume*Vol_ref) / species(sp)%obj%weight) + !Allocate new particles DO p = 1, nNewPart ALLOCATE(partNew) partNew%species => species(sp)%obj - partNew%v(1) = velocity(1) + vTh*randomMaxwellian() - partNew%v(2) = velocity(2) + vTh*randomMaxwellian() - partNew%v(3) = velocity(3) + vTh*randomMaxwellian() - partNew%vol = e partNew%r = mesh%vols(e)%obj%randPos() partNew%xi = mesh%vols(e)%obj%phy2log(partNew%r) - partNew%n_in = .TRUE. - partNew%weight = species(sp)%obj%weight + !Get mean velocity at particle position + fPsi = mesh%vols(e)%obj%fPsi(partNew%xi) + DO j = 1, nNodes + source(j) = velocity(nodes(j), 1) + + END DO + velocityXi(1) = DOT_PRODUCT(fPsi, source) + DO j = 1, nNodes + source(j) = velocity(nodes(j), 2) + + END DO + velocityXi(2) = DOT_PRODUCT(fPsi, source) + DO j = 1, nNodes + source(j) = velocity(nodes(j), 3) + + END DO + velocityXi(3) = DOT_PRODUCT(fPsi, source) + + velocityXi = velocityXi / v_ref + + !Get temperature at particle position + DO j = 1, nNodes + source(j) = temperature(nodes(j)) + + END DO + temperatureXi = DOT_PRODUCT(fPsi, source) + temperatureXi = temperatureXi / T_ref + + vTh = DSQRT(temperatureXi / species(sp)%obj%m) + partNew%v(1) = velocityXi(1) + vTh*randomMaxwellian() + partNew%v(2) = velocityXi(2) + vTh*randomMaxwellian() + partNew%v(3) = velocityXi(3) + vTh*randomMaxwellian() + partNew%vol = e + IF (ASSOCIATED(meshForMCC, mesh)) THEN + partNew%volColl = partNew%vol + + ELSE + partNew%volColl = findCellBrute(meshColl, partNew%r) + + END IF + partNew%n_in = .TRUE. + partNew%weight = species(sp)%obj%weight !If charged species, add qm to particle SELECT TYPE(sp => species(sp)%obj) TYPE IS (speciesCharged) @@ -305,8 +348,11 @@ MODULE moduleInput !Assign particle to temporal list of particles CALL partInitial%add(partNew) + END DO + DEALLOCATE(source) + END DO END DO