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
.
idof
s 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