Skip to main content

Initiate

Initiate an instance of ScalarMeshField_.

Inherited from AbstractMeshField

Initiate

Initiate an instance of AbstractMeshField_.

@ConstructorMethods

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 and indxVal. The size of indxVal is telements+1, i.e., 15.
  • The data for element iel will be stored in val(a:b), where a=indxVal(iel) and b=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 = constant
  • varType = 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 and indxVal. The size of indxVal is telements+1, i.e., 15.
  • The data for element iel will be stored in val(a:b), where a=indxVal(iel) and b=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 set fieldType=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 and indxVal. The size of indxVal is telements+1, i.e., 15.
  • The data for element iel will be stored in val(a:b), where a=indxVal(iel) and b=indxVal(iel+1)-1.
  • The number of data in each element will be 6. This is because, we have set varType=Constant, and defineOn=Nodal, and there specify nns=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 be 14*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