GetNodeLoc
Get the location (index) of node number.
This method returns the location of degree of freedom number idof at node number nodenum.
nodenum should be lesser than the total number of nodes defined for dof number idof.
idofs are continuously numbered, so if there are two or more physical variables, then idof of the second or later physical variables does not start from 1.
Calling example:
GetNodeLoc(obj, nodenum, idof)Interface 1GetNodeLoc(obj, nodenum(:), idof)Interface 2GetNodeLoc(obj, nodenum, idof(:) )Interface 3GetNodeLoc(obj, idof)Interface 4GetNodeLoc(obj, nodenum, ivar, idof)Interface 5GetNodeLoc(obj, nodenum(:), ivar, idof)Interface 6GetNodeLoc(obj, nodenum, ivar, spacecompo, timecompo)Interface 7GetNodeLoc(obj, nodenum(:), ivar, spacecompo, timecompo)Interface 8GetNodeLoc(obj, nodenum, ivar, idof(:) )Interface 9GetNodeLoc(obj, nodenum, ivar, spacecompo, timecompo(:) )Interface 10GetNodeLoc(obj, nodenum, ivar, spacecompo(:), timecompo)Interface 11GetNodeLoc(obj, nodenum(:), ivar, spacecompo, timecompo(:) )Interface 12GetNodeLoc(obj, nodenum(:), ivar, spacecompo(:), timecompo)Interface 13
Interface 1
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, idof) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: idof
INTEGER(I4B) :: ans
END FUNCTION GetNodeLoc
END INTERFACE
It returns the location of degree of freedom number idof at node number nodenum.
nodenum should be lesser than the total number of nodes defined for dof number idof.
idofs are continuously numbered, so if there are two or more physical variables, then idof of the second or later physical variables will not start from 1.
Interface 2
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, idof) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum(:)
INTEGER(I4B), INTENT(IN) :: idof
INTEGER(I4B) :: ans(SIZE(nodenum))
END FUNCTION GetNodeLoc
END INTERFACE
It returns the location of degree of freedom number idof at node number nodenum.
nodenum should be lesser than the total number of nodes defined for dof number idof.
idofs are continuously numbered, so if there are two or more physical variables, then idof of the second or later physical variables will not start from 1.
Interface 3
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, idof) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: idof(:)
INTEGER(I4B) :: ans(SIZE(idof))
END FUNCTION GetNodeLoc
END INTERFACE
It returns the location of degree of freedom number idof at node number nodenum.
nodenum should be lesser than the total number of nodes defined for dof number idof.
idofs are continuously numbered, so if there are two or more physical variables, then idof of the second or later physical variables will not start from 1.
Interface 4
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, idof) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: idof
INTEGER(I4B) :: ans(3)
END FUNCTION GetNodeLoc
END INTERFACE
ans(1) : istart
ans(2) : iend
ans(3) : stride
In this way a given degree of freedom idof will be located in vec(istart:iend:stride).
In DOF object, idofs are continuously numbered, so if there are two or more physical variables, then idof of the second or later physical variables will not start from 1.
Interface 5
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, idof) &
& RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: idof
INTEGER(I4B) :: ans
END FUNCTION GetNodeLoc
END INTERFACE
Interface 6
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, idof) &
& RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum(:)
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: idof
INTEGER(I4B) :: ans(SIZE(nodenum))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 7
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo
INTEGER(I4B), INTENT(IN) :: timecompo
INTEGER(I4B) :: ans
END FUNCTION GetNodeLoc
END INTERFACE
Interface 8
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum(:)
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo
INTEGER(I4B), INTENT(IN) :: timecompo
INTEGER(I4B) :: ans(SIZE(nodenum))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 9
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, idof) &
& RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: idof(:)
INTEGER(I4B) :: ans(SIZE(idof))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 10
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo
INTEGER(I4B), INTENT(IN) :: timecompo(:)
INTEGER(I4B) :: ans(SIZE(timecompo))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 11
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo(:)
INTEGER(I4B), INTENT(IN) :: timecompo
INTEGER(I4B) :: ans(SIZE(spacecompo))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 12
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum(:)
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo
INTEGER(I4B), INTENT(IN) :: timecompo(:)
INTEGER(I4B) :: ans(SIZE(timecompo) * SIZE(nodenum))
END FUNCTION GetNodeLoc
END INTERFACE
Interface 13
INTERFACE
MODULE PURE FUNCTION GetNodeLoc(obj, nodenum, ivar, spacecompo, &
& timecompo) RESULT(ans)
TYPE(DOF_), INTENT(IN) :: obj
INTEGER(I4B), INTENT(IN) :: nodenum(:)
INTEGER(I4B), INTENT(IN) :: ivar
INTEGER(I4B), INTENT(IN) :: spacecompo(:)
INTEGER(I4B), INTENT(IN) :: timecompo
INTEGER(I4B) :: ans(SIZE(spacecompo) * SIZE(nodenum))
END FUNCTION GetNodeLoc
END INTERFACE
Examples
- ️܀ Example 1
- ️܀ Example 2
- ↢
PROGRAM main
USE GlobalData
USE DOF_Method
USE BaseType, ONLY: DOF_
USE Test_Method
IMPLICIT NONE
TYPE(DOF_) :: obj
CALL Initiate(obj, tNodes=[20, 10], &
names=["V", "P"], spaceCompo=[3, 1], &
timeCompo=[2, 2], storageFMT=FMT_DOF)
! `v`, spacecompo=1, timecompo=1, at node 1
CALL OK(GetNodeLoc(obj, 1, 1) .EQ. 1, &
'GetNodeLoc(obj, 1, 1): ')
! `v`, spacecompo=2, timecompo=1, at node 1
CALL OK(GetNodeLoc(obj, 1, 2) .EQ. 21, &
'GetNodeLoc(obj, 1, 2): ')
! `v`, spacecompo=3, timecompo=1, at node 1
CALL OK(GetNodeLoc(obj, 1, 3) .EQ. 41, &
'GetNodeLoc(obj, 1, 3): ')
! `v`, spacecompo=1, timecompo=2, at node 1
CALL OK(GetNodeLoc(obj, 1, 4) .EQ. 61, &
'GetNodeLoc(obj, 1, 4): ')
! `v`, spacecompo=2, timecompo=2, at node 1
CALL OK(GetNodeLoc(obj, 1, 5) .EQ. 81, &
'GetNodeLoc(obj, 1, 5): ')
! `v`, spacecompo=3, timecompo=2, at node 1
CALL OK(GetNodeLoc(obj, 1, 6) .EQ. 101, &
'GetNodeLoc(obj, 1, 6): ')
! `P`, spacecompo=1, timecompo=1, at node 1
CALL OK(GetNodeLoc(obj, 1, 7) .EQ. 121, &
'GetNodeLoc(obj, 1, 7): ')
! `P`, spacecompo=1, timecompo=2, at node 1
CALL OK(GetNodeLoc(obj, 1, 8) .EQ. 131, &
'GetNodeLoc(obj, 1, 8): ')
! `V`, spacecompo=1, timecompo=1, at node 10
CALL OK(GetNodeLoc(obj, 10, 1) .EQ. 10, &
'GetNodeLoc(obj, 10, 1): ')
! `V`, spacecompo=2, timecompo=1, at node 10
CALL OK(GetNodeLoc(obj, 10, 2) .EQ. 30, &
'GetNodeLoc(obj, 10, 2): ')
! `V`, spacecompo=3, timecompo=1, at node 10
CALL OK(GetNodeLoc(obj, 10, 3) .EQ. 50, &
'GetNodeLoc(obj, 10, 3): ')
! `V`, spacecompo=1, timecompo=2, at node 10
CALL OK(GetNodeLoc(obj, 10, 4) .EQ. 70, &
'GetNodeLoc(obj, 10, 4): ')
! `V`, spacecompo=2, timecompo=2, at node 10
CALL OK(GetNodeLoc(obj, 10, 5) .EQ. 90, &
'GetNodeLoc(obj, 10, 5): ')
! `V`, spacecompo = 3, timecompo = 2, at node 10
CALL OK(GetNodeLoc(obj, 10, 6) .EQ. 110, &
'GetNodeLoc(obj, 10, 6): ')
! `P`, spacecompo = 1, timecompo = 1, at node 10
CALL OK(GetNodeLoc(obj, 10, 7) .EQ. 130, &
'GetNodeLoc(obj, 10, 7): ')
! `P`, spacecompo = 1, timecompo = 2, at node 10
CALL OK(GetNodeLoc(obj, 10, 8) .EQ. 140, &
'GetNodeLoc(obj, 10, 8): ')
! `V`, spacecompo = 1, timecompo = 1
CALL OK(ALL(GetNodeLoc(obj, 1) .EQ. [1, 20, 1]), &
'GetNodeLoc(obj, 1): ')
! `V`, spacecompo = 2, timecompo = 1
CALL OK(ALL(GetNodeLoc(obj, 2) .EQ. [21, 40, 1]), &
'GetNodeLoc(obj, 2): ')
! `V`, spacecompo = 3, timecompo = 1
CALL OK(ALL(GetNodeLoc(obj, 3) .EQ. [41, 60, 1]), &
'GetNodeLoc(obj, 3): ')
! `P`, spacecompo = 1, timecompo = 1
CALL OK(ALL(GetNodeLoc(obj, 7) .EQ. [121, 130, 1]), &
'GetNodeLoc(obj, 7): ')
! `P`, spacecompo = 1, timecompo = 2
CALL OK(ALL(GetNodeLoc(obj, 8) .EQ. [131, 140, 1]), &
'GetNodeLoc(obj, 7): ')
CALL DEALLOCATE (obj)
END PROGRAM main
PROGRAM main
USE GlobalData
USE BaseType, ONLY: DOF_
USE DOF_Method
USE Test_Method
IMPLICIT NONE
TYPE(DOF_) :: obj
! Initiate DOF
CALL Initiate(obj, tNodes=[20, 20], &
names=["V", "P"], spaceCompo=[3, 1], &
timeCompo=[2, 2], storageFMT=FMT_NODES)
CALL OK(getNodeLoc(obj, 1, 1) .EQ. 1, &
'getNodeLoc(obj, 1, 1): ')
CALL OK(getNodeLoc(obj, 1, 2) .EQ. 2, &
'getNodeLoc(obj, 1, 2): ')
CALL OK(getNodeLoc(obj, 1, 3) .EQ. 3, &
'getNodeLoc(obj, 1, 3): ')
CALL OK(getNodeLoc(obj, 1, 4) .EQ. 4, &
'getNodeLoc(obj, 1, 4): ')
CALL OK(getNodeLoc(obj, 1, 5) .EQ. 5, &
'getNodeLoc(obj, 1, 5): ')
CALL OK(getNodeLoc(obj, 1, 6) .EQ. 6, &
'getNodeLoc(obj, 1, 6): ')
CALL OK(getNodeLoc(obj, 1, 7) .EQ. 7, &
'getNodeLoc(obj, 1, 7): ')
CALL OK(getNodeLoc(obj, 1, 8) .EQ. 8, &
'getNodeLoc(obj, 1, 8): ')
CALL OK(ALL(getNodeLoc(obj, 1) .EQ. [1, 160, 8]), &
'getNodeLoc(obj, 1): ')
CALL OK(ALL(getNodeLoc(obj, 2) .EQ. [2, 160, 8]), &
'getNodeLoc(obj, 2): ')
CALL OK(ALL(getNodeLoc(obj, 3) .EQ. [3, 160, 8]), &
'getNodeLoc(obj, 3): ')
CALL OK(ALL(getNodeLoc(obj, 7) .EQ. [7, 160, 8]), &
'getNodeLoc(obj, 7): ')
CALL OK(ALL(getNodeLoc(obj, 8) .EQ. [8, 160, 8]), &
'getNodeLoc(obj, 7): ')
CALL DEALLOCATE (obj)
END PROGRAM main