Still need to add a 0D pusher and the corresponding input configuration and documentation.
66 lines
1.9 KiB
Fortran
66 lines
1.9 KiB
Fortran
MODULE moduleMeshInput0D
|
|
!Creates a 0D mesh. mostly used for testing collisional processes.
|
|
!This mesh consists on 1 node and 1 volume in which all particles are located.
|
|
!No boundary conditions and no pusher should be applied to this geometry.
|
|
!Output should go to a single file (per species) in which each row represents an iteration.
|
|
!In principle, no EM field is applied.
|
|
|
|
CONTAINS
|
|
!Inits the 0D mesh
|
|
SUBROUTINE init0D(self)
|
|
USE moduleMesh
|
|
USE moduleMeshOutput0D
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshGeneric), INTENT(inout), TARGET:: self
|
|
|
|
IF (ASSOCIATED(meshForMCC, self)) self%printColl => printColl0D
|
|
SELECT TYPE(self)
|
|
TYPE IS(meshParticles)
|
|
self%printOutput => printOutput0D
|
|
self%printEM => printEM0D
|
|
|
|
END SELECT
|
|
self%readMesh => read0D
|
|
|
|
END SUBROUTINE init0D
|
|
|
|
!Reads a 0D mesh file.
|
|
!No reading is actually done as the 0D mesh is a fixed one
|
|
SUBROUTINE read0D(self, filename)
|
|
USE moduleMesh
|
|
USE moduleMesh0D
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshGeneric), INTENT(inout):: self
|
|
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename !Dummy file, not used
|
|
REAL(8):: r(1:3)
|
|
|
|
!Allocates one node
|
|
self%numNodes = 1
|
|
ALLOCATE(self%nodes(1:1))
|
|
!Allocates one volume
|
|
self%numVols = 1
|
|
ALLOCATE(self%vols(1:1))
|
|
!Allocates matrix K
|
|
SELECT TYPE(self)
|
|
TYPE IS(meshParticles)
|
|
ALLOCATE(self%K(1:1, 1:1))
|
|
ALLOCATE(self%IPIV(1:1, 1:1))
|
|
self%K = 0.D0
|
|
self%IPIV = 0.D0
|
|
|
|
END SELECT
|
|
|
|
!Creates the node
|
|
ALLOCATE(meshNode0D:: self%nodes(1)%obj)
|
|
r = 0.D0
|
|
CALL self%nodes(1)%obj%init(1, r)
|
|
|
|
!Creates the volume
|
|
ALLOCATE(meshVol0D:: self%vols(1)%obj)
|
|
CALL self%vols(1)%obj%init(1, (/ 1/), self%nodes)
|
|
|
|
END SUBROUTINE read0D
|
|
|
|
END MODULE moduleMeshInput0D
|