Minor improvement in mesh structure to allow different imput formats.

Organization of meshes per geometry type.
This commit is contained in:
Jorge Gonzalez 2020-12-08 18:28:24 +01:00
commit 3b125d0952
14 changed files with 158 additions and 100 deletions

View file

@ -1,46 +1,26 @@
OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o\ OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o \
moduleMesh.o moduleMeshCyl.o moduleMeshCylBoundary.o\ moduleOutput.o moduleInput.o moduleSolver.o \
moduleMeshCylRead.o moduleOutput.o moduleInput.o \ moduleCollisions.o moduleTable.o moduleParallel.o \
moduleSolver.o moduleCollisions.o moduleTable.o \ moduleEM.o
moduleParallel.o moduleEM.o moduleMesh1D.o \
moduleMesh1DBoundary.o moduleMesh1DRead.o
all: $(OBJS) all: $(OBJS) mesh.o
moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleMeshCyl.f95 mesh.o: moduleCollisions.o moduleBoundary.o
$(MAKE) -C mesh all
moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleCollisions.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleMesh.o moduleMeshCylRead.o moduleMesh1DRead.o moduleErrors.o moduleSpecies.o moduleInput.f95 moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleErrors.o moduleSpecies.o moduleInput.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleInject.o: moduleSpecies.o moduleSolver.o moduleMesh.o moduleMeshCyl.o moduleInject.f95 moduleInject.o: moduleSpecies.o moduleSolver.o moduleInject.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleList.o: moduleSpecies.o moduleErrors.o moduleList.f95 moduleList.o: moduleSpecies.o moduleErrors.o moduleList.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh.o: moduleCollisions.o moduleOutput.o moduleList.o moduleSpecies.o moduleMesh.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMeshCyl.o: moduleRefParam.o moduleCollisions.o moduleOutput.o moduleMesh.o moduleMeshCyl.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMeshCylBoundary.o: moduleMeshCyl.o moduleMeshCylBoundary.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMeshCylRead.o: moduleBoundary.o moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh1D.o: moduleRefParam.o moduleCollisions.o moduleOutput.o moduleMesh.o moduleMesh1D.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh1DBoundary.o: moduleMesh1D.o moduleMesh1DBoundary.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh1DRead.o: moduleBoundary.o moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleOutput.o: moduleSpecies.o moduleRefParam.o moduleOutput.f95 moduleOutput.o: moduleSpecies.o moduleRefParam.o moduleOutput.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
@ -50,13 +30,13 @@ moduleRefParam.o: moduleConstParam.o moduleRefParam.f95
moduleSpecies.o: moduleErrors.o moduleCaseParam.o moduleSpecies.f95 moduleSpecies.o: moduleErrors.o moduleCaseParam.o moduleSpecies.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleSolver.o: moduleList.o moduleEM.o moduleSpecies.o moduleRefParam.o moduleMesh.o moduleOutput.o moduleSolver.f95 moduleSolver.o: mesh.o moduleList.o moduleEM.o moduleSpecies.o moduleRefParam.o moduleOutput.o moduleSolver.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleTable.o: moduleErrors.o moduleTable.f95 moduleTable.o: moduleErrors.o moduleTable.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleEM.o: moduleSpecies.o moduleMesh.o moduleEM.f95 moduleEM.o: mesh.o moduleSpecies.o moduleEM.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@ $(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
%.o: %.f95 %.o: %.f95

View file

@ -0,0 +1,11 @@
all: moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.o
moduleMesh1D.o: moduleMesh1D.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh1DBoundary.o: moduleMesh1D.o moduleMesh1DBoundary.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMesh1DRead.o: moduleMesh1D.o moduleMesh1DBoundary.o moduleMesh1DRead.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@

View file

@ -109,10 +109,10 @@ MODULE moduleMesh1D
END SUBROUTINE initNode1D END SUBROUTINE initNode1D
FUNCTION getCoord1D(self) RESULT(r) PURE FUNCTION getCoord1D(self) RESULT(r)
IMPLICIT NONE IMPLICIT NONE
CLASS(meshNode1D):: self CLASS(meshNode1D), INTENT(in):: self
REAL(8):: r(1:3) REAL(8):: r(1:3)
r = (/ self%x, 0.D0, 0.D0 /) r = (/ self%x, 0.D0, 0.D0 /)
@ -369,7 +369,7 @@ MODULE moduleMesh1D
END FUNCTION gatherEFSegm END FUNCTION gatherEFSegm
!Get nodes from segment !Get nodes from 1D volume
PURE FUNCTION getNodesSegm(self) RESULT(n) PURE FUNCTION getNodesSegm(self) RESULT(n)
IMPLICIT NONE IMPLICIT NONE

View file

@ -3,8 +3,10 @@ MODULE moduleMesh1DRead
USE moduleMesh1D USE moduleMesh1D
USE moduleMesh1DBoundary USE moduleMesh1DBoundary
!TODO: make this abstract to allow different mesh formats
TYPE, EXTENDS(meshGeneric):: mesh1DGeneric TYPE, EXTENDS(meshGeneric):: mesh1DGeneric
CONTAINS CONTAINS
PROCEDURE, PASS:: init => init1DMesh
PROCEDURE, PASS:: readMesh => readMesh1D PROCEDURE, PASS:: readMesh => readMesh1D
END TYPE END TYPE
@ -15,11 +17,34 @@ MODULE moduleMesh1DRead
END INTERFACE connected END INTERFACE connected
CONTAINS CONTAINS
!Init 1D mesh
SUBROUTINE init1DMesh(self, meshFormat)
USE moduleMesh
USE moduleErrors
IMPLICIT NONE
CLASS(mesh1DGeneric), INTENT(out):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat
SELECT CASE(meshFormat)
CASE ("gmsh")
self%printOutput => printOutputGmsh
self%printColl => printCollGmsh
self%printEM => printEMGmsh
CASE DEFAULT
CALL criticalError("Mesh type " // meshFormat // " not supported.", "init1D")
END SELECT
END SUBROUTINE init1DMesh
!Reads 1D mesh
SUBROUTINE readMesh1D(self, filename) SUBROUTINE readMesh1D(self, filename)
USE moduleBoundary USE moduleBoundary
IMPLICIT NONE IMPLICIT NONE
CLASS(mesh1DGeneric), INTENT(out):: self CLASS(mesh1DGeneric), INTENT(inout):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename CHARACTER(:), ALLOCATABLE, INTENT(in):: filename
REAL(8):: x REAL(8):: x
INTEGER:: p(1:2) INTEGER:: p(1:2)

View file

@ -0,0 +1,11 @@
all : moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.o
moduleMeshCyl.o: moduleMeshCyl.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMeshCylBoundary.o: moduleMeshCyl.o moduleMeshCylBoundary.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@
moduleMeshCylRead.o: moduleMeshCyl.o moduleMeshCylBoundary.o moduleMeshCylRead.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@

View file

@ -154,10 +154,10 @@ MODULE moduleMeshCyl
END SUBROUTINE initNodeCyl END SUBROUTINE initNodeCyl
FUNCTION getCoordCyl(self) RESULT(r) PURE FUNCTION getCoordCyl(self) RESULT(r)
IMPLICIT NONE IMPLICIT NONE
CLASS(meshNodeCyl):: self CLASS(meshNodeCyl), INTENT(in):: self
REAL(8):: r(1:3) REAL(8):: r(1:3)
r = (/self%z, self%r, 0.D0/) r = (/self%z, self%r, 0.D0/)
@ -367,7 +367,7 @@ MODULE moduleMeshCyl
REAL(8):: r, xi(1:3) REAL(8):: r, xi(1:3)
REAL(8):: fPsi(1:4), dPsi(1:2,1:4) REAL(8):: fPsi(1:4), dPsi(1:2,1:4)
REAL(8):: ke(1:4,1:4) REAL(8):: ke(1:4,1:4)
REAL(8):: j(1:2,1:2), detJ REAL(8):: invJ(1:2,1:2), detJ
INTEGER:: l, m INTEGER:: l, m
ke=0.D0 ke=0.D0
@ -381,9 +381,9 @@ MODULE moduleMeshCyl
dPsi(2,:) = self%dPsiXi2(xi(1)) dPsi(2,:) = self%dPsiXi2(xi(1))
fPsi = self%fPsi(xi) fPsi = self%fPsi(xi)
detJ = self%detJac(xi,dPsi) detJ = self%detJac(xi,dPsi)
j = self%invJac(xi,dPsi) invJ = self%invJac(xi,dPsi)
r = DOT_PRODUCT(fPsi,self%r) r = DOT_PRODUCT(fPsi,self%r)
ke = ke + MATMUL(TRANSPOSE(MATMUL(j,dPsi)),MATMUL(j,dPsi))*r*wQuad(l)*wQuad(m)/detJ ke = ke + MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)),MATMUL(invJ,dPsi))*r*wQuad(l)*wQuad(m)/detJ
END DO END DO
END DO END DO

View file

@ -3,9 +3,11 @@ MODULE moduleMeshCylRead
USE moduleMeshCyl USE moduleMeshCyl
USE moduleMeshCylBoundary USE moduleMeshCylBoundary
!TODO: make this abstract to allow different mesh formats
TYPE, EXTENDS(meshGeneric):: meshCylGeneric TYPE, EXTENDS(meshGeneric):: meshCylGeneric
CONTAINS CONTAINS
PROCEDURE, PASS:: readMesh => readMeshCyl PROCEDURE, PASS:: init => initCylMesh
PROCEDURE, PASS:: readMesh => readMeshCylGmsh
END TYPE END TYPE
@ -15,11 +17,34 @@ MODULE moduleMeshCylRead
END INTERFACE connected END INTERFACE connected
CONTAINS CONTAINS
SUBROUTINE readMeshCyl(self, filename) !Init mesh
USE moduleBoundary SUBROUTINE initCylMesh(self, meshFormat)
USE moduleMesh
USE moduleErrors
IMPLICIT NONE IMPLICIT NONE
CLASS(meshCylGeneric), INTENT(out):: self CLASS(meshCylGeneric), INTENT(out):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat
SELECT CASE(meshFormat)
CASE ("gmsh")
self%printOutput => printOutputGmsh
self%printColl => printCollGmsh
self%printEM => printEMGmsh
CASE DEFAULT
CALL criticalError("Mesh type " // meshFormat // " not supported.", "initCylMesh")
END SELECT
END SUBROUTINE initCylMesh
!Read mesh from gmsh file
SUBROUTINE readMeshCylGmsh(self, filename)
USE moduleBoundary
IMPLICIT NONE
CLASS(meshCylGeneric), INTENT(inout):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename CHARACTER(:), ALLOCATABLE, INTENT(in):: filename
REAL(8):: r, z REAL(8):: r, z
INTEGER:: p(1:4) INTEGER:: p(1:4)
@ -140,7 +165,7 @@ MODULE moduleMeshCylRead
END DO END DO
END SUBROUTINE END SUBROUTINE readMeshCylGmsh
!Selects type of elements to build connection !Selects type of elements to build connection
SUBROUTINE connectedVolVol(elemA, elemB) SUBROUTINE connectedVolVol(elemA, elemB)

11
src/modules/mesh/makefile Normal file
View file

@ -0,0 +1,11 @@
all: moduleMesh.o Cyl.o 1DCart.o
Cyl.o:
$(MAKE) -C Cyl all
1DCart.o:
$(MAKE) -C 1DCart all
moduleMesh.o: moduleMesh.f95
$(FC) $(FCFLAGS) -c $(subst .o,.f95,$@) -o $(OBJDIR)/$@

View file

@ -30,9 +30,9 @@ MODULE moduleMesh
END SUBROUTINE initNode_interface END SUBROUTINE initNode_interface
!Interface to get coordinates from node !Interface to get coordinates from node
FUNCTION getCoord_interface(self) RESULT(r) PURE FUNCTION getCoord_interface(self) RESULT(r)
IMPORT:: meshNode IMPORT:: meshNode
CLASS(meshNode):: self CLASS(meshNode), INTENT(in):: self
REAL(8):: r(1:3) REAL(8):: r(1:3)
END FUNCTION getCoord_interface END FUNCTION getCoord_interface
@ -210,7 +210,7 @@ MODULE moduleMesh
END SUBROUTINE collision_interface END SUBROUTINE collision_interface
SUBROUTINE resetOutput_interface(self) PURE SUBROUTINE resetOutput_interface(self)
IMPORT:: meshVol IMPORT:: meshVol
CLASS(meshVol), INTENT(inout):: self CLASS(meshVol), INTENT(inout):: self
@ -237,25 +237,44 @@ MODULE moduleMesh
REAL(8), ALLOCATABLE, DIMENSION(:,:):: K REAL(8), ALLOCATABLE, DIMENSION(:,:):: K
!Permutation matrix for P L U factorization !Permutation matrix for P L U factorization
INTEGER, ALLOCATABLE, DIMENSION(:,:):: IPIV INTEGER, ALLOCATABLE, DIMENSION(:,:):: IPIV
PROCEDURE(printOutput_interface), POINTER, PASS:: printOutput => NULL()
PROCEDURE(printColl_interface), POINTER, PASS:: printColl => NULL()
PROCEDURE(printEM_interface), POINTER, PASS:: printEM => NULL()
CONTAINS CONTAINS
PROCEDURE(initMesh_interface), DEFERRED, PASS:: init
PROCEDURE(readMesh_interface), DEFERRED, PASS:: readMesh PROCEDURE(readMesh_interface), DEFERRED, PASS:: readMesh
PROCEDURE, PASS:: printOutput
PROCEDURE, PASS:: printColl
PROCEDURE, PASS:: printEM
END TYPE meshGeneric END TYPE meshGeneric
ABSTRACT INTERFACE ABSTRACT INTERFACE
!Inits the mesh
SUBROUTINE initMesh_interface(self, meshFormat)
IMPORT meshGeneric
CLASS(meshGeneric), INTENT(out):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: meshFormat
END SUBROUTINE initMesh_interface
!Reads the mesh from a file !Reads the mesh from a file
SUBROUTINE readMesh_interface(self, filename) SUBROUTINE readMesh_interface(self, filename)
IMPORT meshGeneric IMPORT meshGeneric
CLASS(meshGeneric), INTENT(out):: self CLASS(meshGeneric), INTENT(inout):: self
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename CHARACTER(:), ALLOCATABLE, INTENT(in):: filename
END SUBROUTINE readMesh_interface END SUBROUTINE readMesh_interface
!Prints Species data
SUBROUTINE printOutput_interface(self, t)
IMPORT meshGeneric
CLASS(meshGeneric), INTENT(in):: self
INTEGER, INTENT(in):: t
END SUBROUTINE printOutput_interface
!Prints number of collisions !Prints number of collisions
SUBROUTINE printColl_interface(self, t) SUBROUTINE printColl_interface(self, t)
IMPORT meshGeneric IMPORT meshGeneric
@ -273,6 +292,7 @@ MODULE moduleMesh
INTEGER, INTENT(in):: t INTEGER, INTENT(in):: t
END SUBROUTINE printEM_interface END SUBROUTINE printEM_interface
END INTERFACE END INTERFACE
!Generic mesh !Generic mesh
@ -397,7 +417,7 @@ MODULE moduleMesh
END SUBROUTINE collision END SUBROUTINE collision
SUBROUTINE printOutput(self, t) SUBROUTINE printOutputGmsh(self, t)
USE moduleRefParam USE moduleRefParam
USE moduleSpecies USE moduleSpecies
USE moduleOutput USE moduleOutput
@ -478,9 +498,9 @@ MODULE moduleMesh
END DO END DO
END SUBROUTINE printOutput END SUBROUTINE printOutputGmsh
SUBROUTINE printColl(self, t) SUBROUTINE printCollGmsh(self, t)
USE moduleRefParam USE moduleRefParam
USE moduleCaseParam USE moduleCaseParam
USE moduleOutput USE moduleOutput
@ -522,9 +542,9 @@ MODULE moduleMesh
END IF END IF
END SUBROUTINE printColl END SUBROUTINE printCollGmsh
SUBROUTINE printEM(self, t) SUBROUTINE printEMGmsh(self, t)
USE moduleRefParam USE moduleRefParam
USE moduleCaseParam USE moduleCaseParam
USE moduleOutput USE moduleOutput
@ -581,6 +601,6 @@ MODULE moduleMesh
END IF END IF
END SUBROUTINE printEM END SUBROUTINE printEMGmsh
END MODULE moduleMesh END MODULE moduleMesh

View file

@ -369,7 +369,7 @@ MODULE moduleInput
TYPE(json_file), INTENT(inout):: config TYPE(json_file), INTENT(inout):: config
LOGICAL:: found LOGICAL:: found
CHARACTER(:), ALLOCATABLE:: geometryType, meshType, meshFile CHARACTER(:), ALLOCATABLE:: geometryType, meshFormat, meshFile
CHARACTER(:), ALLOCATABLE:: fullPath CHARACTER(:), ALLOCATABLE:: fullPath
!Selects the type of geometry. !Selects the type of geometry.
@ -389,18 +389,10 @@ MODULE moduleInput
END SELECT END SELECT
!Gets the type of mesh !Gets the type of mesh
CALL config%get('geometry.meshType', meshType, found) CALL config%get('geometry.meshType', meshFormat, found)
SELECT CASE(meshType) CALL mesh%init(meshFormat)
CASE ("gmsh")
!Gets the gmsh file
CALL config%get('geometry.meshFile', meshFile, found)
CASE DEFAULT
CALL criticalError("Mesh type " // meshType // " not supported.", "readGeometry")
END SELECT
!Reads the mesh !Reads the mesh
CALL config%get('geometry.meshFile', meshFile, found)
fullpath = path // meshFile fullpath = path // meshFile
CALL mesh%readMesh(fullPath) CALL mesh%readMesh(fullPath)

View file

@ -95,9 +95,6 @@ MODULE moduleSolver
CASE('Electrostatic') CASE('Electrostatic')
self%solveEM => solveElecField self%solveEM => solveElecField
CASE DEFAULT
self%solveEM => noEMField
END SELECT END SELECT
END SUBROUTINE initEM END SUBROUTINE initEM
@ -114,9 +111,6 @@ MODULE moduleSolver
CASE ('Volume') CASE ('Volume')
self%nonAnalogue => volumeNAScheme self%nonAnalogue => volumeNAScheme
CASE DEFAULT
self%nonAnalogue => noNAScheme
END SELECT END SELECT
END SUBROUTINE initNA END SUBROUTINE initNA
@ -356,6 +350,7 @@ MODULE moduleSolver
SUBROUTINE doScatter SUBROUTINE doScatter
USE moduleSpecies USE moduleSpecies
USE moduleMesh USE moduleMesh
IMPLICIT NONE
INTEGER:: n INTEGER:: n
@ -372,8 +367,11 @@ MODULE moduleSolver
SUBROUTINE doEMField() SUBROUTINE doEMField()
IMPLICIT NONE IMPLICIT NONE
IF (ASSOCIATED(solver%solveEM)) THEN
CALL solver%solveEM() CALL solver%solveEM()
END IF
END SUBROUTINE doEMField END SUBROUTINE doEMField
!Solving the Poisson equation for electrostatic potential !Solving the Poisson equation for electrostatic potential
@ -421,12 +419,6 @@ MODULE moduleSolver
END SUBROUTINE solveElecField END SUBROUTINE solveElecField
!Empty procedure that does no computation of EM field for neutral cases
SUBROUTINE noEMField()
IMPLICIT NONE
END SUBROUTINE noEMField
!Modify particle weight as a function of cell volume and splits particle !Modify particle weight as a function of cell volume and splits particle
SUBROUTINE volumeNAScheme(part, volOld, volNew) SUBROUTINE volumeNAScheme(part, volOld, volNew)
USE moduleSpecies USE moduleSpecies
@ -500,18 +492,6 @@ MODULE moduleSolver
END SUBROUTINE splitParticle END SUBROUTINE splitParticle
!Empty procedure that does no computation of EM field for neutral cases
SUBROUTINE noNAScheme(part, volOld, volNew)
USE moduleSpecies
USE moduleMesh
IMPLICIT NONE
TYPE(particle), INTENT(inout):: part
CLASS(meshVol), POINTER, INTENT(in):: volOld
CLASS(meshVol), POINTER, INTENT(inout):: volNew
END SUBROUTINE noNAScheme
SUBROUTINE updateParticleCell(self, part) SUBROUTINE updateParticleCell(self, part)
USE moduleSpecies USE moduleSpecies
USE moduleMesh USE moduleMesh
@ -525,8 +505,11 @@ MODULE moduleSolver
CALL volOld%findCell(part) CALL volOld%findCell(part)
volNew => mesh%vols(part%vol)%obj volNew => mesh%vols(part%vol)%obj
!Call the NA shcme !Call the NA shcme
IF (ASSOCIATED(self%nonAnalogue)) THEN
CALL self%nonAnalogue(part, volOld, volNew) CALL self%nonAnalogue(part, volOld, volNew)
END IF
END SUBROUTINE updateParticleCell END SUBROUTINE updateParticleCell
!Update the information about if a species needs to be moved this iteration !Update the information about if a species needs to be moved this iteration