Minor improvement in mesh structure to allow different imput formats.
Organization of meshes per geometry type.
This commit is contained in:
parent
7152a232fe
commit
3b125d0952
14 changed files with 158 additions and 100 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
11
src/modules/mesh/1DCart/makefile
Normal file
11
src/modules/mesh/1DCart/makefile
Normal 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)/$@
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
11
src/modules/mesh/Cyl/makefile
Normal file
11
src/modules/mesh/Cyl/makefile
Normal 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)/$@
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
11
src/modules/mesh/makefile
Normal 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)/$@
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue