Files renamed and makefile make compatible with ifort.
This commit is contained in:
parent
3b125d0952
commit
af74205932
25 changed files with 5439 additions and 0 deletions
91
src/modules/moduleList.f90
Normal file
91
src/modules/moduleList.f90
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
!Linked list of particles
|
||||
MODULE moduleList
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE lNode
|
||||
TYPE(particle), POINTER:: part => NULL()
|
||||
TYPE(lNode), POINTER:: next => NULL()
|
||||
|
||||
END TYPE lNode
|
||||
|
||||
TYPE listNode
|
||||
INTEGER:: amount = 0!TODO: Make private
|
||||
TYPE(lNode),POINTER:: head => NULL()
|
||||
TYPE(lNode),POINTER:: tail => NULL()
|
||||
CONTAINS
|
||||
PROCEDURE,PASS:: add => addToList
|
||||
PROCEDURE,PASS:: convert2Array
|
||||
PROCEDURE,PASS:: erase => eraseList
|
||||
|
||||
END TYPE listNode
|
||||
|
||||
TYPE(listNode):: partNAScheme !Particles comming from the nonAnalogue scheme
|
||||
|
||||
TYPE pointerArray
|
||||
TYPE(particle), POINTER:: part
|
||||
|
||||
END TYPE
|
||||
|
||||
CONTAINS
|
||||
!Adds element to list
|
||||
SUBROUTINE addToList(self,part)
|
||||
USE moduleSpecies
|
||||
CLASS(listNode), INTENT(inout):: self
|
||||
TYPE(particle),INTENT(in), TARGET:: part
|
||||
TYPE(lNode),POINTER:: temp
|
||||
|
||||
ALLOCATE(temp)
|
||||
temp%part => part
|
||||
temp%next => NULL()
|
||||
self%amount = self%amount + 1
|
||||
IF (.NOT. ASSOCIATED(self%head)) THEN
|
||||
!First element
|
||||
self%head => temp
|
||||
self%tail => temp
|
||||
ELSE
|
||||
!Append element
|
||||
self%tail%next => temp
|
||||
self%tail => temp
|
||||
END IF
|
||||
|
||||
END SUBROUTINE addToList
|
||||
|
||||
!converts list to array
|
||||
FUNCTION convert2Array(self) RESULT(partArray)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(listNode), INTENT(in):: self
|
||||
TYPE(pointerArray), ALLOCATABLE:: partArray(:)
|
||||
TYPE(lNode), POINTER:: tempNode
|
||||
INTEGER:: n
|
||||
|
||||
ALLOCATE(partArray(1:self%amount))
|
||||
tempNode => self%head
|
||||
DO n=1, self%amount
|
||||
!Point element in array to element in list
|
||||
partArray(n)%part => tempNode%part
|
||||
!Go to next element
|
||||
tempNode => tempNode%next
|
||||
|
||||
END DO
|
||||
|
||||
END FUNCTION convert2Array
|
||||
|
||||
!Erase list
|
||||
SUBROUTINE eraseList(self)
|
||||
CLASS(listNode):: self
|
||||
TYPE(lNode),POINTER:: current, next
|
||||
|
||||
current => self%head
|
||||
DO WHILE (ASSOCIATED(current))
|
||||
next => current%next
|
||||
DEALLOCATE(current)
|
||||
current => next
|
||||
END DO
|
||||
IF (ASSOCIATED(self%head)) NULLIFY(self%head)
|
||||
IF (ASSOCIATED(self%tail)) NULLIFY(self%tail)
|
||||
self%amount = 0
|
||||
END SUBROUTINE eraseList
|
||||
|
||||
END MODULE moduleList
|
||||
Loading…
Add table
Add a link
Reference in a new issue