A new option has been added in which MCC are computed with its own time step. If no time is provided, then the minimum time step of the simulation is employed.
209 lines
6.1 KiB
Fortran
209 lines
6.1 KiB
Fortran
MODULE moduleMeshOutputGmsh2
|
|
|
|
CONTAINS
|
|
!Prints the scattered properties of particles into the nodes
|
|
SUBROUTINE printOutputGmsh2(self, t)
|
|
USE moduleMesh
|
|
USE moduleRefParam
|
|
USE moduleSpecies
|
|
USE moduleOutput
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshParticles), INTENT(in):: self
|
|
INTEGER, INTENT(in):: t
|
|
INTEGER:: n, i
|
|
TYPE(outputFormat):: output(1:self%numNodes)
|
|
REAL(8):: time
|
|
CHARACTER(:), ALLOCATABLE:: fileName
|
|
CHARACTER (LEN=iterationDigits):: tstring
|
|
|
|
time = DBLE(t)*tauMin*ti_ref
|
|
|
|
DO i = 1, nSpecies
|
|
WRITE(tstring, iterationFormat) t
|
|
fileName='OUTPUT_' // tstring// '_' // species(i)%obj%name // '.msh'
|
|
WRITE(*, "(6X,A15,A)") "Creating file: ", fileName
|
|
OPEN (60, file = path // folder // '/' // fileName)
|
|
WRITE(60, "(A)") '$MeshFormat'
|
|
WRITE(60, "(A)") '2.2 0 8'
|
|
WRITE(60, "(A)") '$EndMeshFormat'
|
|
WRITE(60, "(A)") '$NodeData'
|
|
WRITE(60, "(A)") '1'
|
|
WRITE(60, "(A)") '"' // species(i)%obj%name // ' density (m^-3)"'
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) time
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) t
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) self%numNodes
|
|
DO n=1, self%numNodes
|
|
CALL calculateOutput(self%nodes(n)%obj%output(i), output(n), self%nodes(n)%obj%v, species(i)%obj)
|
|
WRITE(60, "(I6,ES20.6E3)") n, output(n)%density
|
|
END DO
|
|
WRITE(60, "(A)") '$EndNodeData'
|
|
WRITE(60, "(A)") '$NodeData'
|
|
WRITE(60, "(A)") '1'
|
|
WRITE(60, "(A)") '"' // species(i)%obj%name // ' velocity (m s^-1)"'
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) time
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) t
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) self%numNodes
|
|
DO n=1, self%numNodes
|
|
WRITE(60, "(I6,3(ES20.6E3))") n, output(n)%velocity
|
|
END DO
|
|
WRITE(60, "(A)") '$EndNodeData'
|
|
WRITE(60, "(A)") '$NodeData'
|
|
WRITE(60, "(A)") '1'
|
|
WRITE(60, "(A)") '"' // species(i)%obj%name // ' pressure (Pa)"'
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) time
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) t
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) self%numNodes
|
|
DO n=1, self%numNodes
|
|
WRITE(60, "(I6,3(ES20.6E3))") n, output(n)%pressure
|
|
END DO
|
|
WRITE(60, "(A)") '$EndNodeData'
|
|
WRITE(60, "(A)") '$NodeData'
|
|
WRITE(60, "(A)") '1'
|
|
WRITE(60, "(A)") '"' // species(i)%obj%name // ' temperature (K)"'
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) time
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) t
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) self%numNodes
|
|
DO n=1, self%numNodes
|
|
WRITE(60, "(I6,3(ES20.6E3))") n, output(n)%temperature
|
|
END DO
|
|
WRITE(60, "(A)") '$EndNodeData'
|
|
CLOSE (60)
|
|
|
|
END DO
|
|
|
|
END SUBROUTINE printOutputGmsh2
|
|
|
|
!Prints the number of collisions into the volumes
|
|
SUBROUTINE printCollGmsh2(self, t)
|
|
USE moduleMesh
|
|
USE moduleRefParam
|
|
USE moduleCaseParam
|
|
USE moduleCollisions
|
|
USE moduleOutput
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshGeneric), INTENT(inout):: self
|
|
INTEGER, INTENT(in):: t
|
|
INTEGER:: numEdges
|
|
INTEGER:: n
|
|
REAL(8):: time
|
|
CHARACTER(:), ALLOCATABLE:: fileName
|
|
CHARACTER (LEN=iterationDigits):: tstring
|
|
|
|
SELECT TYPE(self)
|
|
TYPE IS(meshParticles)
|
|
numEdges = self%numEdges
|
|
|
|
TYPE IS(meshCollisions)
|
|
numEdges = 0
|
|
|
|
CLASS DEFAULT
|
|
numEdges = 0
|
|
|
|
END SELECT
|
|
|
|
IF (collOutput) THEN
|
|
time = DBLE(t)*tauMin*ti_ref
|
|
WRITE(tstring, iterationFormat) t
|
|
|
|
fileName='OUTPUT_' // tstring// '_Collisions.msh'
|
|
WRITE(*, "(6X,A15,A)") "Creating file: ", fileName
|
|
OPEN (60, file = path // folder // '/' // fileName)
|
|
WRITE(60, "(A)") '$MeshFormat'
|
|
WRITE(60, "(A)") '2.2 0 8'
|
|
WRITE(60, "(A)") '$EndMeshFormat'
|
|
WRITE(60, "(A)") '$ElementData'
|
|
WRITE(60, "(A)") '1'
|
|
WRITE(60, "(A)") '"Collisions"'
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) time
|
|
WRITE(60, *) 3
|
|
WRITE(60, *) t
|
|
WRITE(60, *) 1
|
|
WRITE(60, *) self%numVols
|
|
DO n=1, self%numVols
|
|
WRITE(60, "(I6,I10)") n + numEdges, self%vols(n)%obj%nColl
|
|
END DO
|
|
WRITE(60, "(A)") '$EndElementData'
|
|
|
|
CLOSE(60)
|
|
|
|
END IF
|
|
|
|
END SUBROUTINE printCollGmsh2
|
|
|
|
!Prints the electrostatic EM properties into the nodes and volumes
|
|
SUBROUTINE printEMGmsh2(self, t)
|
|
USE moduleMesh
|
|
USE moduleRefParam
|
|
USE moduleCaseParam
|
|
USE moduleOutput
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshParticles), INTENT(in):: self
|
|
INTEGER, INTENT(in):: t
|
|
INTEGER:: n, e
|
|
REAL(8):: time
|
|
CHARACTER(:), ALLOCATABLE:: fileName
|
|
CHARACTER (LEN=iterationDigits):: tstring
|
|
REAL(8):: xi(1:3)
|
|
|
|
xi = (/ 0.D0, 0.D0, 0.D0 /)
|
|
|
|
IF (emOutput) THEN
|
|
time = DBLE(t)*tauMin*ti_ref
|
|
WRITE(tstring, iterationFormat) t
|
|
|
|
fileName='OUTPUT_' // tstring// '_EMField.msh'
|
|
WRITE(*, "(6X,A15,A)") "Creating file: ", fileName
|
|
OPEN (20, file = path // folder // '/' // fileName)
|
|
WRITE(20, "(A)") '$MeshFormat'
|
|
WRITE(20, "(A)") '2.2 0 8'
|
|
WRITE(20, "(A)") '$EndMeshFormat'
|
|
WRITE(20, "(A)") '$NodeData'
|
|
WRITE(20, "(A)") '1'
|
|
WRITE(20, "(A)") '"Potential (V)"'
|
|
WRITE(20, *) 1
|
|
WRITE(20, *) time
|
|
WRITE(20, *) 3
|
|
WRITE(20, *) t
|
|
WRITE(20, *) 1
|
|
WRITE(20, *) self%numNodes
|
|
DO n=1, self%numNodes
|
|
WRITE(20, *) n, self%nodes(n)%obj%emData%phi*Volt_ref
|
|
END DO
|
|
WRITE(20, "(A)") '$EndNodeData'
|
|
|
|
WRITE(20, "(A)") '$ElementData'
|
|
WRITE(20, "(A)") '1'
|
|
WRITE(20, "(A)") '"Electric Field (V m^-1)"'
|
|
WRITE(20, *) 1
|
|
WRITE(20, *) time
|
|
WRITE(20, *) 3
|
|
WRITE(20, *) t
|
|
WRITE(20, *) 3
|
|
WRITE(20, *) self%numVols
|
|
DO e=1, self%numVols
|
|
WRITE(20, *) e+self%numEdges, self%vols(e)%obj%gatherEF(xi)*EF_ref
|
|
END DO
|
|
WRITE(20, "(A)") '$EndElementData'
|
|
CLOSE(20)
|
|
|
|
END IF
|
|
|
|
END SUBROUTINE printEMGmsh2
|
|
|
|
END MODULE moduleMeshOutputGmsh2
|