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
!> author: Vikas Sharma, Ph. D.
! date: 2025-10-27
! summary: Testing initiate method for MeshField_Class
PROGRAM main
USE AbstractField_Class
USE AbstractMeshField_Class
USE MeshField_Class
USE FPL
USE GlobalData
USE FEDomain_Class
USE AbstractMesh_Class
USE ScalarField_Class
USE FEDOF_Class
USE AbstractFE_Class
USE Display_Method
USE ReallocateUtility, ONLY: Reallocate
USE FieldOpt_Class, ONLY: TypeFieldOpt
USE BaseType, ONLY: TypeFEVariableOpt, &
FEVariable_, &
TypeFEVariableVector, &
TypeFEVariableSpace, &
TypeInterpolationOpt
USE EngineOpt_Class, ONLY: TypeEngineOpt
USE ExceptionHandler_Class, ONLY: e, EXCEPTION_INFORMATION
USE FEVariable_Method, ONLY: NodalVariable, &
FEVariable_Set => Set
IMPLICIT NONE
TYPE(FEDomain_) :: dom
CLASS(AbstractMesh_), POINTER :: mesh
TYPE(MeshField_) :: obj
TYPE(FEVariable_) :: fevar
CHARACTER(*), PARAMETER :: tomlFileName = "./config.toml", &
engine = TypeEngineOpt%native_serial, &
myName = "main", &
modName = "_Initiate_test_1.F90"
INTEGER(I4B), PARAMETER :: nsd = 3, varType = TypeFEVariableOpt%Space, &
fieldType = TypeFieldOpt%normal, &
defineOn = TypeFieldOpt%nodal, &
order(3) = 9, &
ipType(3) = TypeInterpolationOpt%Equidistance
INTEGER(I4B) :: maxCon, tElements, iel, xij_i, xij_j, maxXijCon
REAL(DFP) :: elemCoord(3, 8)
REAL(DFP), ALLOCATABLE :: xij(:, :)
TYPE(FEDOF_) :: fedof, geofedof
TYPE(ScalarField_) :: u
CLASS(AbstractFE_), POINTER :: feptr
CALL e%SetQuietMode(EXCEPTION_INFORMATION, .TRUE.)
CALL dom%ImportFromToml(fileName=tomlFileName, tomlName="domain")
CALL u%ImportFromToml(fedof=fedof, geofedof=geofedof, dom=dom, &
fileName=tomlFileName, tomlName="u")
mesh => dom%GetMeshPointer()
tElements = mesh%GetTotalElements()
maxCon = fedof%GetMaxTotalConnectivity()
maxXijCon = 0
DO iel = 1, tElements
! CALL fedof%SetFE(globalElement=iel, islocal=.TRUE.)
feptr => fedof%GetFEPointer(globalElement=iel, islocal=.TRUE.)
xij_j = feptr%GetTotalInterpolationPoints(order=order, ipType=ipType)
maxXijCon = MAX(maxXijCon, xij_j)
END DO
CALL VectorMeshFieldInitiate( &
obj=obj, name="xij", fieldType=fieldType, varType=varType, &
engine=engine, defineOn=defineOn, spaceCompo=nsd, nns=maxXijCon, &
mesh=mesh)
CALL Reallocate(xij, 3, maxXijCon)
fevar = NodalVariable(val=xij, rank=TypeFEVariableVector, &
varType=TypeFEVariableSpace)
DO iel = 1, tElements
CALL fedof%SetFE(globalElement=iel, islocal=.TRUE.)
feptr => fedof%GetFEPointer(globalElement=iel, islocal=.TRUE.)
CALL feptr%GetInterpolationPoints( &
xij=elemCoord, ans=xij, nrow=xij_i, ncol=xij_j, order=order, &
ipType=ipType)
CALL FEVariable_Set( &
obj=fevar, val=xij(1:3, 1:xij_j), rank=TypeFEVariableVector, &
vartype=TypeFEVariableSpace, scale=1.0_DFP, addContribution=.FALSE.)
CALL obj%Insert(globalElement=iel, islocal=.TRUE., fevar=fevar)
END DO
CALL obj%Display(msg="MeshField info: ")
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
valandindxVal. The size ofindxValistelements+1, i.e., 15. - The data for element
ielwill 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
valandindxVal. The size ofindxValistelements+1, i.e., 15. - The data for element
ielwill 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
valwill 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
valandindxVal. The size ofindxValistelements+1, i.e., 15. - The data for element
ielwill 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
valwill 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