Initiate
Initiate an instance of ScalarMeshField_
.
Inherited from AbstractMeshField
Initiate
Initiate an instance of AbstractMeshField_
.
Interface 1 (Initiate by using param)
INTERFACE AbstractMeshFieldInitiate
MODULE SUBROUTINE Initiate1(obj, param, mesh)
CLASS(AbstractMeshField_), INTENT(INOUT) :: obj
TYPE(ParameterList_), INTENT(IN) :: param
TYPE(Mesh_), TARGET, INTENT(IN) :: mesh
END SUBROUTINE Initiate1
END INTERFACE AbstractMeshFieldInitiate
Interface 2 (Initiate by copying)
INTERFACE
MODULE SUBROUTINE Initiate2(obj, obj2, copyFull, copyStructure, &
& usePointer)
CLASS(AbstractMeshField_), INTENT(INOUT) :: obj
CLASS(AbstractMeshField_), INTENT(INOUT) :: obj2
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: copyFull
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: copyStructure
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: usePointer
END SUBROUTINE Initiate2
END INTERFACE
Interface 3 (Initiate by AbstractMaterial)
INTERFACE
MODULE SUBROUTINE Initiate3(obj, mesh, material, name, engine)
CLASS(AbstractMeshField_), INTENT(INOUT) :: obj
!! AbstractMeshField
TYPE(Mesh_), TARGET, INTENT(IN) :: mesh
!! mesh
CLASS(AbstractMaterial_), INTENT(INOUT) :: material
!! Abstract material
CHARACTER(*), INTENT(IN) :: name
!! name of the AbstractMeshField
CHARACTER(*), INTENT(IN) :: engine
!! engine of the AbstractMeshField
END SUBROUTINE Initiate3
END INTERFACE
Interface 4 (Initiate by UserFunction)
INTERFACE
MODULE SUBROUTINE Initiate4(obj, mesh, func, name, engine, nnt)
CLASS(AbstractMeshField_), INTENT(INOUT) :: obj
!! AbstractMeshField
TYPE(Mesh_), TARGET, INTENT(IN) :: mesh
!! mesh
CLASS(UserFunction_), INTENT(INOUT) :: func
!! Abstract material
CHARACTER(*), INTENT(IN) :: name
!! name of the AbstractMeshField
CHARACTER(*), INTENT(IN) :: engine
!! engine of the AbstractMeshField
INTEGER(I4B), OPTIONAL, INTENT(IN) :: nnt
!! number of nodes in time
END SUBROUTINE Initiate4
END INTERFACE
- Example 1 to Example 4 are related to the Initiate by using Parameters.
- Example 6 and Example 7 are related to the Initiate by using UserFunction.
Example 1
Click here to see the example
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
INTEGER(I4B), PARAMETER :: varType = Constant
INTEGER(I4B), PARAMETER :: fieldType = TypeField%normal
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL amesh%DisplayMeshInfo("mesh info:")
CALL FPL_INIT(); CALL param%initiate()
CALL SetScalarMeshFieldParam(param=param, name='aScalar', &
varType=varType, fieldType=fieldType, &
engine='NATIVE_SERIAL', defineOn=Nodal, nns=6)
CALL obj%Initiate(param=param, mesh=amesh)
CALL obj%Display('obj: ')
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main
Mesh info:
total nodes: 12
total elements: 14
The above code will initiate an instance of ScalarMeshField_
, which will contain following data.
Object INITIATED: TRUE
name: aScalar
prefix: ScalarMeshField
fieldType: NORMAL
engine: NATIVE_SERIAL
tSize: 14
defineOn: Nodal
rank: Scalar
varType: Constant
shape:
---------------------------------
1
val ALLOCATED: TRUE
indxVal ALLOCATED: TRUE
mesh ASSOCIATED: TRUE
- We have saved data in a one dimensional array
val
andindxVal
. The size ofindxVal
istelements+1
, i.e., 15. - The data for element
iel
will be stored inval(a:b)
, wherea=indxVal(iel)
andb=indxVal(iel+1)-1
. - The number of data in each element will be 1, because, we have set
varType=Constant
. It means that data remains constant inside an element. - There are 14 elements in the mesh.
Example 2
Click here to see the example
fieldType
= constantvarType
= constant
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL amesh%DisplayMeshInfo("mesh info:")
CALL FPL_INIT(); CALL param%initiate()
CALL SetScalarMeshFieldParam(param=param, name='aScalar', &
varType=Constant, fieldType=TypeField%constant, &
engine='NATIVE_SERIAL', defineOn=Nodal, nns=6)
CALL obj%Initiate(param=param, mesh=amesh)
CALL obj%Display('obj: ')
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main
The above code will initiate an instance of ScalarMeshField_
, which will contain following data.
Object INITIATED: TRUE
name: aScalar
prefix: ScalarMeshField
fieldType: CONSTANT
engine: NATIVE_SERIAL
tSize: 1
defineOn: Nodal
rank: Scalar
varType: Constant
val ALLOCATED: TRUE
indxVal ALLOCATED: TRUE
mesh ASSOCIATED: TRUE
shape:
---------------------------------
- We have saved data in a one dimensional array
val
andindxVal
. The size ofindxVal
istelements+1
, i.e., 15. - The data for element
iel
will be stored inval(a:b)
, wherea=indxVal(iel)
andb=indxVal(iel+1)-1
. - The number of data in each element will be 1, because, we have set
varType=Constant
. It means that data remains constant inside an element. - The size of
val
will be 1 because we have setfieldType=Constant
.
Example 3
Click here to see the example
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
INTEGER(I4B), PARAMETER :: varType = Space
INTEGER(I4B), PARAMETER :: fieldType = TypeField%normal
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL amesh%DisplayMeshInfo("mesh info:")
CALL FPL_INIT(); CALL param%initiate()
CALL SetScalarMeshFieldParam(param=param, name='aScalar', &
varType=varType, fieldType=fieldType, &
engine='NATIVE_SERIAL', defineOn=Nodal, nns=6)
CALL obj%Initiate(param=param, mesh=amesh)
CALL obj%Display('obj: ')
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main
results
Object INITIATED: TRUE
name: aScalar
prefix: ScalarMeshField
fieldType: NORMAL
engine: NATIVE_SERIAL
tSize: 14
defineOn: Nodal
rank: Scalar
varType: Space
val ALLOCATED: TRUE
Size of val:84
indxVal ALLOCATED: TRUE
Size of indxVal:15
mesh ASSOCIATED: TRUE
shape:
---------------------------------
6
- We have saved data in a one dimensional array
val
andindxVal
. The size ofindxVal
istelements+1
, i.e., 15. - The data for element
iel
will be stored inval(a:b)
, wherea=indxVal(iel)
andb=indxVal(iel+1)-1
. - The number of data in each element will be 6. This is because, we have set
varType=Constant
, anddefineOn=Nodal
, and there specifynns=6
. It means that inside an element the data changes with space. - There are 14 elements in the mesh, therefore, the total size of
val
will be14*6=84
Example 4
Click here to see the example
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
INTEGER(I4B), PARAMETER :: varType = Time
INTEGER(I4B), PARAMETER :: fieldType = TypeField%normal
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL amesh%DisplayMeshInfo("mesh info:")
CALL FPL_INIT(); CALL param%initiate()
CALL SetScalarMeshFieldParam(param=param, name='aScalar', &
varType=varType, fieldType=fieldType, &
engine='NATIVE_SERIAL', defineOn=Nodal, nns=6)
CALL obj%Initiate(param=param, mesh=amesh)
CALL obj%Display('obj: ')
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main
results
Object INITIATED: TRUE
name: aScalar
prefix: ScalarMeshField
fieldType: NORMAL
engine: NATIVE_SERIAL
tSize: 14
defineOn: Nodal
rank: Scalar
varType: Time
val ALLOCATED: TRUE
Size of val:84
indxVal ALLOCATED: TRUE
Size of indxVal:15
mesh ASSOCIATED: TRUE
shape:
---------------------------------
6
Example 6
Click here to see the example
info
Initiate an instance of ScalarMeshField_
by using a UserFunction_
. The user function is constant in this example.
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
USE UserFunction_Class
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
TYPE(UserFunction_) :: func
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
INTEGER( I4B ), PARAMETER :: returnType = Scalar
INTEGER( I4B ), PARAMETER :: argType = Constant
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL FPL_INIT(); CALL param%initiate()
CALL SetUserFunctionParam(param=param, name="func", returnType=returnType, &
argType=argType)
CALL func%Initiate(param)
CALL func%Set(scalarValue=2.0_DFP)
CALL obj%Initiate(mesh=amesh, func=func, name="func", engine="NATIVE_SERIAL")
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main
Example 7
Click here to see the example
info
This example shows how to initiate an instance of ScalarMeshField_
by using a UserFunction
. The user function is space dependent in this example.
PROGRAM main
USE HDF5File_Class
USE FEMesh_Class
USE AbstractField_Class
USE ScalarMeshField_Class
USE FPL
USE GlobalData
USE UserFunction_Class
IMPLICIT NONE
TYPE(HDF5File_) :: meshfile
TYPE(FEMesh_) :: amesh
TYPE(ScalarMeshField_) :: obj
TYPE(ParameterList_) :: param
TYPE(UserFunction_) :: func
CHARACTER(*), PARAMETER :: filename="../../Mesh/examples/meshdata/small_mesh.h5"
INTEGER(I4B), PARAMETER :: nsd = 2
INTEGER(I4B), PARAMETER :: returnType = Scalar
INTEGER(I4B), PARAMETER :: argType = Space
CALL meshfile%Initiate(fileName=filename, MODE="READ")
CALL meshfile%OPEN()
CALL amesh%Initiate(hdf5=meshfile, dim=nsd)
CALL FPL_INIT(); CALL param%initiate()
CALL SetUserFunctionParam(param=param, name="func", returnType=returnType, &
argType=argType)
CALL func%Initiate(param)
CALL func%Set(scalarValue=2.0_DFP)
CALL obj%Initiate(mesh=amesh, func=func, name="func", engine="NATIVE_SERIAL")
CALL obj%DEALLOCATE()
CALL amesh%DEALLOCATE()
CALL meshfile%CLOSE()
CALL meshfile%DEALLOCATE()
CALL param%DEALLOCATE(); CALL FPL_FINALIZE()
END PROGRAM main