New functions to read VTU
Added a few functions to read .vtu meshes.
Output in .vtu changed to output data in 6 columns (seems to be the
standard.)
This commit is contained in:
parent
f5be04587a
commit
63fd8fdb91
3 changed files with 192 additions and 56 deletions
|
|
@ -860,6 +860,7 @@ MODULE moduleInput
|
||||||
SUBROUTINE readGeometry(config)
|
SUBROUTINE readGeometry(config)
|
||||||
USE moduleMesh
|
USE moduleMesh
|
||||||
USE moduleMeshInputGmsh2, ONLY: initGmsh2
|
USE moduleMeshInputGmsh2, ONLY: initGmsh2
|
||||||
|
USE moduleMeshInputVTU, ONLY: initVTU, readVTU !TEMPORARY TO TEST VTU OUTPUT
|
||||||
USE moduleMeshInput0D, ONLY: init0D
|
USE moduleMeshInput0D, ONLY: init0D
|
||||||
USE moduleErrors
|
USE moduleErrors
|
||||||
USE moduleOutput
|
USE moduleOutput
|
||||||
|
|
@ -873,6 +874,7 @@ MODULE moduleInput
|
||||||
LOGICAL:: found
|
LOGICAL:: found
|
||||||
CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile
|
CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile
|
||||||
REAL(8):: volume
|
REAL(8):: volume
|
||||||
|
CHARACTER(:), ALLOCATABLE:: meshFileVTU !Temporary to test VTU OUTPUT
|
||||||
|
|
||||||
object = 'geometry'
|
object = 'geometry'
|
||||||
|
|
||||||
|
|
@ -973,6 +975,8 @@ MODULE moduleInput
|
||||||
CALL config%get(object // '.meshFile', meshFile, found)
|
CALL config%get(object // '.meshFile', meshFile, found)
|
||||||
pathMeshParticle = path // meshFile
|
pathMeshParticle = path // meshFile
|
||||||
CALL mesh%readMesh(pathMeshParticle)
|
CALL mesh%readMesh(pathMeshParticle)
|
||||||
|
meshFileVTU = '/home/jorge/fpakc/runs/cylFlow/mesh.vtu' !TEMPORARY TO TEST VTU OUTPUT
|
||||||
|
CALL readVTU(mesh, meshFileVTU) !TEMPORARY TO TEST VTU OUTPUT
|
||||||
DEALLOCATE(meshFile)
|
DEALLOCATE(meshFile)
|
||||||
IF (doubleMesh) THEN
|
IF (doubleMesh) THEN
|
||||||
!Reads the mesh file for collisions
|
!Reads the mesh file for collisions
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,138 @@
|
||||||
MODULE moduleMeshInputVTK
|
MODULE moduleMeshInputVTU
|
||||||
!Reads mesh in the VTU format
|
!Reads mesh in the VTU format
|
||||||
|
|
||||||
|
INTERFACE getValueFromLine
|
||||||
|
MODULE PROCEDURE getIntegerFromLine, getRealFromLine
|
||||||
|
|
||||||
|
END INTERFACE
|
||||||
|
|
||||||
CONTAINS
|
CONTAINS
|
||||||
SUBROUTINE initVTK(self)
|
FUNCTION findLine(fileID, text) RESULT(line)
|
||||||
|
USE moduleErrors
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
INTEGER, INTENT(in):: fileID
|
||||||
|
CHARACTER(*):: text
|
||||||
|
CHARACTER(LEN=256):: line
|
||||||
|
INTEGER:: error, found
|
||||||
|
|
||||||
|
error = 0
|
||||||
|
found = 0
|
||||||
|
!Reads all the file to find the 'text' string in a line
|
||||||
|
DO WHILE(error == 0 .AND. found == 0)
|
||||||
|
READ(fileID, "(A)", IOSTAT=error) line
|
||||||
|
found = INDEX(line, text)
|
||||||
|
IF (found > 0) THEN
|
||||||
|
EXIT
|
||||||
|
|
||||||
|
END IF
|
||||||
|
END DO
|
||||||
|
|
||||||
|
!If no line is found, return an error
|
||||||
|
IF (found == 0) THEN
|
||||||
|
CALL criticalError('String ' // text // ' not found in file.', 'findLine')
|
||||||
|
|
||||||
|
END IF
|
||||||
|
|
||||||
|
END FUNCTION findLine
|
||||||
|
|
||||||
|
SUBROUTINE getIntegerFromLine(line, label, valueInteger)
|
||||||
|
USE moduleErrors
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
CHARACTER(LEN=256), INTENT(in):: line
|
||||||
|
CHARACTER(*), INTENT(in):: label
|
||||||
|
INTEGER, INTENT(out):: valueInteger
|
||||||
|
INTEGER:: labelStart, valueStart, valueEnd
|
||||||
|
|
||||||
|
labelStart = 0
|
||||||
|
labelStart = INDEX(line, label)
|
||||||
|
IF (labelStart == 0) THEN
|
||||||
|
CALL criticalError('Label '// label // ' not found in line', 'getValueFromLine')
|
||||||
|
|
||||||
|
END IF
|
||||||
|
valueStart = INDEX(line(labelStart:256), '"') + labelStart
|
||||||
|
valueEnd = INDEX(line(valueStart:256), '"') + valueStart - 2
|
||||||
|
READ(line(valueStart:valueEnd), '(I10)') valueInteger
|
||||||
|
|
||||||
|
END SUBROUTINE getIntegerFromLine
|
||||||
|
|
||||||
|
SUBROUTINE getRealFromLine(line, label, valueReal)
|
||||||
|
USE moduleErrors
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
CHARACTER(LEN=256), INTENT(in):: line
|
||||||
|
CHARACTER(*), INTENT(in):: label
|
||||||
|
REAL(8), INTENT(out):: valueReal
|
||||||
|
INTEGER:: labelStart, valueStart, valueEnd
|
||||||
|
|
||||||
|
labelStart = 0
|
||||||
|
labelStart = INDEX(line, label)
|
||||||
|
IF (labelStart == 0) THEN
|
||||||
|
CALL criticalError('Label '// label // ' not found in line', 'getValueFromLine')
|
||||||
|
|
||||||
|
END IF
|
||||||
|
valueStart = INDEX(line(labelStart:256), '"') + labelStart
|
||||||
|
valueEnd = INDEX(line(valueStart:256), '"') + valueStart - 2
|
||||||
|
READ(line(valueStart:valueEnd), '(F16.14)') valueReal
|
||||||
|
|
||||||
|
END SUBROUTINE getRealFromLine
|
||||||
|
|
||||||
|
SUBROUTINE readIntegerBlock(fileID, nData, array)
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
INTEGER, INTENT(in):: fileID
|
||||||
|
INTEGER, INTENT(in):: nData
|
||||||
|
INTEGER, INTENT(out):: array(1:nData)
|
||||||
|
INTEGER:: iStart, iEnd, block
|
||||||
|
|
||||||
|
iStart = 0
|
||||||
|
iEnd = 0
|
||||||
|
block = 6 !Assumes block of data in 6 columns
|
||||||
|
|
||||||
|
DO WHILE (iStart < nData)
|
||||||
|
iStart = iStart + 1
|
||||||
|
iEnd = iStart - 1 + block
|
||||||
|
PRINT *, iStart, iEnd
|
||||||
|
IF (iEnd > nData) THEN
|
||||||
|
iEnd = nData
|
||||||
|
|
||||||
|
END IF
|
||||||
|
READ(fileID, *) array(iStart:iEnd)
|
||||||
|
iStart = iEnd
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
|
END SUBROUTINE readIntegerBlock
|
||||||
|
|
||||||
|
SUBROUTINE readRealBlock(fileID, nData, array)
|
||||||
|
IMPLICIT NONE
|
||||||
|
|
||||||
|
INTEGER, INTENT(in):: fileID
|
||||||
|
INTEGER, INTENT(in):: nData
|
||||||
|
REAL(8), INTENT(out):: array(1:nData)
|
||||||
|
INTEGER:: iStart, iEnd, block
|
||||||
|
|
||||||
|
iStart = 0
|
||||||
|
iEnd = 0
|
||||||
|
block = 6 !Assumes block of data in 6 columns
|
||||||
|
|
||||||
|
DO WHILE (iStart < nData)
|
||||||
|
iStart = iStart + 1
|
||||||
|
iEnd = iStart - 1 + block
|
||||||
|
PRINT *, iStart, iEnd
|
||||||
|
IF (iEnd > nData) THEN
|
||||||
|
iEnd = nData
|
||||||
|
|
||||||
|
END IF
|
||||||
|
READ(fileID, *) array(iStart:iEnd)
|
||||||
|
iStart = iEnd
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
|
END SUBROUTINE readRealBlock
|
||||||
|
|
||||||
|
SUBROUTINE initVTU(self)
|
||||||
USE moduleMesh
|
USE moduleMesh
|
||||||
USE moduleMeshOutputVTU
|
USE moduleMeshOutputVTU
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
@ -20,7 +150,7 @@ MODULE moduleMeshInputVTK
|
||||||
END SELECT
|
END SELECT
|
||||||
self%readMesh => readVTU
|
self%readMesh => readVTU
|
||||||
|
|
||||||
END SUBROUTINE initVTK
|
END SUBROUTINE initVTU
|
||||||
|
|
||||||
SUBROUTINE readVTU(self, filename)
|
SUBROUTINE readVTU(self, filename)
|
||||||
USE moduleMesh3DCart
|
USE moduleMesh3DCart
|
||||||
|
|
@ -34,6 +164,34 @@ MODULE moduleMeshInputVTK
|
||||||
CLASS(meshGeneric), INTENT(inout):: self
|
CLASS(meshGeneric), INTENT(inout):: self
|
||||||
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename
|
CHARACTER(:), ALLOCATABLE, INTENT(in):: filename
|
||||||
REAL(8):: r(1:3) !3 generic coordinates
|
REAL(8):: r(1:3) !3 generic coordinates
|
||||||
|
INTEGER:: fileID, error, found
|
||||||
|
CHARACTER(LEN=256):: line
|
||||||
|
INTEGER:: numNodes, numElements
|
||||||
|
INTEGER, ALLOCATABLE, DIMENSION(:):: entitiesID, offsets
|
||||||
|
|
||||||
|
fileID = 10
|
||||||
|
|
||||||
|
OPEN(fileID, FILE=TRIM(filename))
|
||||||
|
|
||||||
|
!Find the number of nodes and elements (edges+cells) in the mesh.
|
||||||
|
line = findLine(fileID, '<Piece')
|
||||||
|
CALL getValueFromLine(line, 'NumberOfPoints', numNodes)
|
||||||
|
CALL getValueFromLine(line, 'NumberOfCells', numElements)
|
||||||
|
REWIND(fileID)
|
||||||
|
|
||||||
|
!Get the IDs of the cells to identify physical surfaces
|
||||||
|
line = findLine(fileID, 'Name="CellEntityIds"')
|
||||||
|
ALLOCATE(entitiesID(1:numElements))
|
||||||
|
CALL readIntegerBlock(fileID, numElements, entitiesID)
|
||||||
|
REWIND(fileID)
|
||||||
|
|
||||||
|
!Get the offsets to read connectivity
|
||||||
|
line = findLine(fileID, 'Name="offsets"')
|
||||||
|
ALLOCATE(offsets(1:numElements))
|
||||||
|
CALL readIntegerBlock(fileID, numElements, offsets)
|
||||||
|
REWIND(fileID)
|
||||||
|
|
||||||
|
CLOSE(fileID)
|
||||||
|
|
||||||
END SUBROUTINE readVTU
|
END SUBROUTINE readVTU
|
||||||
|
|
||||||
|
|
@ -47,4 +205,4 @@ MODULE moduleMeshInputVTK
|
||||||
|
|
||||||
END SUBROUTINE readInitialVTU
|
END SUBROUTINE readInitialVTU
|
||||||
|
|
||||||
END MODULE moduleMeshInputVTK
|
END MODULE moduleMeshInputVTU
|
||||||
|
|
|
||||||
|
|
@ -103,45 +103,37 @@ MODULE moduleMeshOutputVTU
|
||||||
|
|
||||||
CLASS(meshGeneric), INTENT(in):: self
|
CLASS(meshGeneric), INTENT(in):: self
|
||||||
INTEGER, INTENT(in):: fileID
|
INTEGER, INTENT(in):: fileID
|
||||||
CHARACTER(LEN=25):: nodeFormat
|
|
||||||
CHARACTER(LEN=25):: cellFormat
|
|
||||||
INTEGER:: e
|
INTEGER:: e
|
||||||
INTEGER:: offset
|
INTEGER:: offset(1:self%numCells), types(1:self%numCells)
|
||||||
|
|
||||||
!Write nodes coordinates
|
!Write nodes coordinates
|
||||||
WRITE(fileID, "(8X, A)") '<Points>'
|
WRITE(fileID, "(8X, A)") '<Points>'
|
||||||
WRITE(fileID, "(10X,A)") '<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
|
WRITE(fileID, "(10X,A)") '<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(3(ES20.6E3)))"
|
WRITE(fileID, "(6(ES20.6E3))") (self%nodes(e)%obj%getCoordinates()*L_ref, e = 1, self%numNodes)
|
||||||
WRITE(fileID, nodeFormat) (self%nodes(e)%obj%getCoordinates()*L_ref, e = 1, self%numNodes)
|
|
||||||
WRITE(fileID, "(10X, A)") '</DataArray>'
|
WRITE(fileID, "(10X, A)") '</DataArray>'
|
||||||
WRITE(fileID, "(8X, A)") '</Points>'
|
WRITE(fileID, "(8X, A)") '</Points>'
|
||||||
|
|
||||||
WRITE(fileID, "(8X, A)") '<Cells>'
|
WRITE(fileID, "(8X, A)") '<Cells>'
|
||||||
!Write nodes connectivity of each cell
|
!Write nodes connectivity of each cell
|
||||||
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="connectivity" format="ascii">'
|
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="connectivity" format="ascii">'
|
||||||
DO e = 1, self%numCells
|
WRITE(fileID, "(6(I10))") (self%cells(e)%obj%getNodes(self%cells(e)%obj%nNodes) - 1, e = 1, self%numCells) !Array starts on 0
|
||||||
WRITE(cellFormat, "(A,I1,A)") "(",self%cells(e)%obj%nNodes,"(I10))"
|
|
||||||
WRITE(fileID, cellFormat, advance="no") self%cells(e)%obj%getNodes(self%cells(e)%obj%nNodes) - 1 !Array starts on 0
|
|
||||||
|
|
||||||
END DO
|
|
||||||
WRITE(fileID, "(10X, A)") '</DataArray>'
|
WRITE(fileID, "(10X, A)") '</DataArray>'
|
||||||
!Write offset of each cell
|
!Write offset of each cell
|
||||||
offset = 0
|
offset(1) = self%cells(1)%obj%nNodes
|
||||||
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="offsets" format="ascii">'
|
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="offsets" format="ascii">'
|
||||||
DO e = 1, self%numCells
|
DO e = 2, self%numCells
|
||||||
WRITE(cellFormat, "(A,I1,A)") "(I10)"
|
offset(e) = offset(e - 1) + self%cells(e)%obj%nNodes
|
||||||
offset = offset + self%cells(e)%obj%nNodes
|
|
||||||
WRITE(fileID, cellFormat, advance="no") offset
|
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
WRITE(fileID, "(6(I10))") offset
|
||||||
WRITE(fileID, "(10X, A)") '</DataArray>'
|
WRITE(fileID, "(10X, A)") '</DataArray>'
|
||||||
!Write type of each cell
|
!Write type of each cell
|
||||||
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="types" format="ascii">'
|
WRITE(fileID, "(10X,A)") '<DataArray type="Int32" Name="types" format="ascii">'
|
||||||
DO e = 1, self%numCells
|
DO e = 1, self%numCells
|
||||||
WRITE(cellFormat, "(A,I1,A)") "(I10)"
|
types(e) = getCellType(self%cells(e)%obj)
|
||||||
WRITE(fileID, cellFormat, advance="no") getCellType(self%cells(e)%obj)
|
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
WRITE(fileID, "(6(I10))") types
|
||||||
WRITE(fileID, "(10X, A)") '</DataArray>'
|
WRITE(fileID, "(10X, A)") '</DataArray>'
|
||||||
WRITE(fileID, "(8X, A)") '</Cells>'
|
WRITE(fileID, "(8X, A)") '</Cells>'
|
||||||
|
|
||||||
|
|
@ -156,7 +148,6 @@ MODULE moduleMeshOutputVTU
|
||||||
INTEGER, INTENT(in):: fileID
|
INTEGER, INTENT(in):: fileID
|
||||||
INTEGER, INTENT(in):: speciesIndex
|
INTEGER, INTENT(in):: speciesIndex
|
||||||
TYPE(outputFormat):: output(1:self%numNodes)
|
TYPE(outputFormat):: output(1:self%numNodes)
|
||||||
CHARACTER(LEN=25):: nodeFormat
|
|
||||||
INTEGER:: n
|
INTEGER:: n
|
||||||
|
|
||||||
DO n = 1, self%numNodes
|
DO n = 1, self%numNodes
|
||||||
|
|
@ -168,23 +159,19 @@ MODULE moduleMeshOutputVTU
|
||||||
WRITE(fileID,"(8X,A)") '<PointData>'
|
WRITE(fileID,"(8X,A)") '<PointData>'
|
||||||
!Write density
|
!Write density
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Density (m^-3)" NumberOfComponents="1">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Density (m^-3)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (output(n)%density, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (output(n)%density, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
!Write velocity
|
!Write velocity
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Velocity (m s^-1)" NumberOfComponents="3">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Velocity (m s^-1)" NumberOfComponents="3">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(3(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (output(n)%velocity, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (output(n)%velocity, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
!Write pressure
|
!Write pressure
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Pressure (Pa)" NumberOfComponents="1">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Pressure (Pa)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (output(n)%pressure, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (output(n)%pressure, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
!Write temperature
|
!Write temperature
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Temperature (K)" NumberOfComponents="1">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Temperature (K)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (output(n)%temperature, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (output(n)%temperature, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
!End node data
|
!End node data
|
||||||
WRITE(fileID,"(8X,A)") '</PointData>'
|
WRITE(fileID,"(8X,A)") '</PointData>'
|
||||||
|
|
@ -201,7 +188,6 @@ MODULE moduleMeshOutputVTU
|
||||||
INTEGER:: k, c, n
|
INTEGER:: k, c, n
|
||||||
CHARACTER(:), ALLOCATABLE:: title
|
CHARACTER(:), ALLOCATABLE:: title
|
||||||
CHARACTER (LEN=2):: cString
|
CHARACTER (LEN=2):: cString
|
||||||
CHARACTER(LEN=25):: cellFormat
|
|
||||||
|
|
||||||
WRITE(fileID,"(8X,A)") '<CellData>'
|
WRITE(fileID,"(8X,A)") '<CellData>'
|
||||||
DO k = 1, nCollPairs
|
DO k = 1, nCollPairs
|
||||||
|
|
@ -209,8 +195,7 @@ MODULE moduleMeshOutputVTU
|
||||||
WRITE(cString, "(I2)") c
|
WRITE(cString, "(I2)") c
|
||||||
title = 'Pair ' // interactionMatrix(k)%sp_i%name // '-' // interactionMatrix(k)%sp_j%name // ' collision ' // cString
|
title = 'Pair ' // interactionMatrix(k)%sp_i%name // '-' // interactionMatrix(k)%sp_j%name // ' collision ' // cString
|
||||||
WRITE(fileID,"(10X,A, A, A)") '<DataArray type="Float64" Name="',title, '" NumberOfComponents="1">'
|
WRITE(fileID,"(10X,A, A, A)") '<DataArray type="Float64" Name="',title, '" NumberOfComponents="1">'
|
||||||
WRITE(cellFormat, "(A,I10, A)") "(", self%numCells, "(I10))"
|
WRITE(fileID, "(6(I10))") (self%cells(n)%obj%tallyColl(k)%tally(c), n = 1, self%numCells)
|
||||||
WRITE(fileID, cellFormat) (self%cells(n)%obj%tallyColl(k)%tally(c), n = 1, self%numCells)
|
|
||||||
WRITE(fileID, "(10X, A)") '</DataArray>'
|
WRITE(fileID, "(10X, A)") '</DataArray>'
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
|
@ -226,33 +211,27 @@ MODULE moduleMeshOutputVTU
|
||||||
|
|
||||||
CLASS(meshParticles), INTENT(in):: self
|
CLASS(meshParticles), INTENT(in):: self
|
||||||
INTEGER, INTENT(in):: fileID
|
INTEGER, INTENT(in):: fileID
|
||||||
CHARACTER(LEN=25):: nodeFormat
|
|
||||||
CHARACTER(LEN=25):: cellFormat
|
|
||||||
INTEGER:: n
|
INTEGER:: n
|
||||||
REAL(8):: Xi(1:3)
|
REAL(8):: Xi(1:3)
|
||||||
|
|
||||||
Xi = (/ 0.D0, 0.D0, 0.D0 /)
|
|
||||||
|
|
||||||
!Points in nodes
|
!Points in nodes
|
||||||
WRITE(fileID,"(8X,A)") '<PointData>'
|
WRITE(fileID,"(8X,A)") '<PointData>'
|
||||||
!Electric potential
|
!Electric potential
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Potential (V)" NumberOfComponents="1">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Potential (V)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (self%nodes(n)%obj%emData%phi*Volt_ref, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (self%nodes(n)%obj%emData%phi*Volt_ref, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
!Magnetic Field
|
!Magnetic Field
|
||||||
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Magnetic Field (T)" NumberOfComponents="3">'
|
WRITE(fileID,"(10X,A)") '<DataArray type="Float64" Name="Magnetic Field (T)" NumberOfComponents="3">'
|
||||||
WRITE(nodeFormat, "(A,I10, A)") "(", self%numNodes, "(3(ES20.6E3)))"
|
WRITE(fileID,"(6(ES20.6E3))") (self%nodes(n)%obj%emData%B*B_ref, n = 1, self%numNodes)
|
||||||
WRITE(fileID,nodeFormat) (self%nodes(n)%obj%emData%B*B_ref, n = 1, self%numNodes)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
WRITE(fileID,"(8X,A)") '</PointData>'
|
WRITE(fileID,"(8X,A)") '</PointData>'
|
||||||
|
|
||||||
!Cell Data
|
!Cell Data
|
||||||
|
Xi = (/ 0.D0, 0.D0, 0.D0 /)
|
||||||
WRITE(fileID,"(8X,A)") '<CellData>'
|
WRITE(fileID,"(8X,A)") '<CellData>'
|
||||||
!Electric field
|
!Electric field
|
||||||
WRITE(fileID,"(10X,A, A, A)") '<DataArray type="Float64" Name="Electric Field (V m^-1)" NumberOfComponents="3">'
|
WRITE(fileID,"(10X,A, A, A)") '<DataArray type="Float64" Name="Electric Field (V m^-1)" NumberOfComponents="3">'
|
||||||
WRITE(cellFormat, "(A,I10, A)") "(", self%numCells, "(3(ES20.6E3)))"
|
WRITE(fileID, "(6(ES20.6E3))") (self%cells(n)%obj%gatherElectricField(Xi)*EF_ref, n = 1, self%numCells)
|
||||||
WRITE(fileID, cellFormat) (self%cells(n)%obj%gatherElectricField(Xi)*EF_ref, n = 1, self%numCells)
|
|
||||||
WRITE(fileID,"(10X,A)") '</DataArray>'
|
WRITE(fileID,"(10X,A)") '</DataArray>'
|
||||||
WRITE(fileID,"(8X,A)") '</CellData>'
|
WRITE(fileID,"(8X,A)") '</CellData>'
|
||||||
|
|
||||||
|
|
@ -303,7 +282,6 @@ MODULE moduleMeshOutputVTU
|
||||||
INTEGER, INTENT(in):: speciesIndex
|
INTEGER, INTENT(in):: speciesIndex
|
||||||
TYPE(outputFormat):: outputMean(1:self%numNodes)
|
TYPE(outputFormat):: outputMean(1:self%numNodes)
|
||||||
TYPE(outputFormat):: outputDeviation(1:self%numNodes)
|
TYPE(outputFormat):: outputDeviation(1:self%numNodes)
|
||||||
CHARACTER(LEN=25):: nodeFormat
|
|
||||||
INTEGER:: n
|
INTEGER:: n
|
||||||
|
|
||||||
DO n = 1, self%numNodes
|
DO n = 1, self%numNodes
|
||||||
|
|
@ -320,33 +298,29 @@ MODULE moduleMeshOutputVTU
|
||||||
!Write density
|
!Write density
|
||||||
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Density, mean (m^-3)" NumberOfComponents="1">'
|
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Density, mean (m^-3)" NumberOfComponents="1">'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Density, deviation (m^-3)" NumberOfComponents="1">'
|
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Density, deviation (m^-3)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat,"(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileIDMean, "(6(ES20.6E3))") (outputMean(n)%density, n = 1, self%numNodes)
|
||||||
WRITE(fileIDMean, nodeFormat) (outputMean(n)%density, n = 1, self%numNodes)
|
WRITE(fileIDDeviation,"(6(ES20.6E3))") (outputDeviation(n)%density, n = 1, self%numNodes)
|
||||||
WRITE(fileIDDeviation,nodeFormat) (outputDeviation(n)%density, n = 1, self%numNodes)
|
|
||||||
WRITE(fileIDMean,"(10X,A)") '</DataArray>'
|
WRITE(fileIDMean,"(10X,A)") '</DataArray>'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
||||||
!Write velocity
|
!Write velocity
|
||||||
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Velocity, mean (m s^-1)" NumberOfComponents="3">'
|
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Velocity, mean (m s^-1)" NumberOfComponents="3">'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Velocity, deviation (m s^-1)" NumberOfComponents="3">'
|
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Velocity, deviation (m s^-1)" NumberOfComponents="3">'
|
||||||
WRITE(nodeFormat,"(A,I10, A)") "(", self%numNodes, "(3(ES20.6E3)))"
|
WRITE(fileIDMean, "(6(ES20.6E3))") (outputMean(n)%velocity, n = 1, self%numNodes)
|
||||||
WRITE(fileIDMean, nodeFormat) (outputMean(n)%velocity, n = 1, self%numNodes)
|
WRITE(fileIDDeviation,"(6(ES20.6E3))") (outputDeviation(n)%velocity, n = 1, self%numNodes)
|
||||||
WRITE(fileIDDeviation,nodeFormat) (outputDeviation(n)%velocity, n = 1, self%numNodes)
|
|
||||||
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
||||||
!Write pressure
|
!Write pressure
|
||||||
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Pressure, mean (Pa)" NumberOfComponents="1">'
|
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Pressure, mean (Pa)" NumberOfComponents="1">'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Pressure, deviation (Pa)" NumberOfComponents="1">'
|
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Pressure, deviation (Pa)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat,"(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileIDMean, "(6(ES20.6E3))") (outputMean(n)%pressure, n = 1, self%numNodes)
|
||||||
WRITE(fileIDMean, nodeFormat) (outputMean(n)%pressure, n = 1, self%numNodes)
|
WRITE(fileIDDeviation,"(6(ES20.6E3))") (outputDeviation(n)%pressure, n = 1, self%numNodes)
|
||||||
WRITE(fileIDDeviation,nodeFormat) (outputDeviation(n)%pressure, n = 1, self%numNodes)
|
|
||||||
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
||||||
!Write temperature
|
!Write temperature
|
||||||
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Temperature, mean (K)" NumberOfComponents="1">'
|
WRITE(fileIDMean, "(10X,A)") '<DataArray type="Float64" Name="Temperature, mean (K)" NumberOfComponents="1">'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Temperature, deviation (K)" NumberOfComponents="1">'
|
WRITE(fileIDDeviation,"(10X,A)") '<DataArray type="Float64" Name="Temperature, deviation (K)" NumberOfComponents="1">'
|
||||||
WRITE(nodeFormat,"(A,I10, A)") "(", self%numNodes, "(1(ES20.6E3)))"
|
WRITE(fileIDMean, "(6(ES20.6E3))") (outputMean(n)%temperature, n = 1, self%numNodes)
|
||||||
WRITE(fileIDMean, nodeFormat) (outputMean(n)%temperature, n = 1, self%numNodes)
|
WRITE(fileIDDeviation,"(6(ES20.6E3))") (outputDeviation(n)%temperature, n = 1, self%numNodes)
|
||||||
WRITE(fileIDDeviation,nodeFormat) (outputDeviation(n)%temperature, n = 1, self%numNodes)
|
|
||||||
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
WRITE(fileIDMean, "(10X,A)") '</DataArray>'
|
||||||
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
WRITE(fileIDDeviation,"(10X,A)") '</DataArray>'
|
||||||
!End node data
|
!End node data
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue