Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
3b785c9
Update: RefElement
vickysharma0812 Aug 9, 2023
12ff27d
Formatting: Gmsh_Class
vickysharma0812 Aug 9, 2023
d2c1e48
Update: VTKPlot
vickysharma0812 Aug 9, 2023
8f6298a
Update: install
vickysharma0812 Aug 9, 2023
b138d62
Format: DirichletBC_Class
vickysharma0812 Sep 3, 2023
bdccd05
Update: FPL_Method
vickysharma0812 Sep 3, 2023
342c5ff
Update: LinSolver_Class
vickysharma0812 Sep 3, 2023
8891486
Update: MSHFile_Class
vickysharma0812 Sep 3, 2023
241f762
Format: MatrixField_Class
vickysharma0812 Sep 3, 2023
cd299a5
Format: Mesh_Class
vickysharma0812 Sep 3, 2023
b6a23ae
Update: ScalarField
vickysharma0812 Sep 3, 2023
cd3a5ee
Format: MeshSelection_Class
vickysharma0812 Sep 3, 2023
6096980
Format: Polynomial2D_Class
vickysharma0812 Sep 3, 2023
5162a07
Update: RefElement
vickysharma0812 Sep 3, 2023
1d54bf2
Update: FiniteElement
vickysharma0812 Sep 3, 2023
163c385
Update: AbstractField_Class
vickysharma0812 Sep 25, 2023
eb1cea3
Update: AbstractMeshField_Class
vickysharma0812 Sep 25, 2023
74d9044
Update: AbstractNodeField_Class
vickysharma0812 Sep 25, 2023
5d54cd7
Update: BlockNodeField_Class
vickysharma0812 Sep 25, 2023
5119e08
Update: DirichletBC_Class
vickysharma0812 Sep 25, 2023
74bed82
Update: Domain_Class
vickysharma0812 Sep 25, 2023
4da87ed
Update: DomainConnectivity_Class
vickysharma0812 Sep 25, 2023
ac3a8ef
Update: ElementFactory
vickysharma0812 Sep 25, 2023
0a1ebc4
Update: EasyPlplot
vickysharma0812 Sep 25, 2023
41c4e6f
Update: FPL_Method
vickysharma0812 Sep 25, 2023
d84ae1c
Update: FacetElement_Class
vickysharma0812 Sep 25, 2023
557e8dc
Update: FieldFactory
vickysharma0812 Sep 25, 2023
a5e7b70
Update: FiniteElement
vickysharma0812 Sep 25, 2023
e2bce95
Update: Mesh_Class
vickysharma0812 Sep 25, 2023
8c8271f
Update: MeshSelection_Class
vickysharma0812 Sep 25, 2023
c3069ce
Update: NeumannBC_Class
vickysharma0812 Sep 25, 2023
fb02c98
Update: NitscheBC_Class
vickysharma0812 Sep 25, 2023
265d658
Update: RefElement
vickysharma0812 Sep 25, 2023
3d77164
Update: STScalarMeshField_Class
vickysharma0812 Sep 25, 2023
56dae5c
Update: STScalarMeshField_Class
vickysharma0812 Sep 25, 2023
2f17535
Update: HDF5File_Class
vickysharma0812 Sep 25, 2023
30ea6ea
Update: STVectorMeshField_Class
vickysharma0812 Sep 25, 2023
55b08c9
Update: ScalarField_Class
vickysharma0812 Sep 25, 2023
ae03bdc
Update: ScalarMeshField_Class
vickysharma0812 Sep 25, 2023
aef43e9
Update: TensorMeshField_Class
vickysharma0812 Sep 25, 2023
f2e0d44
Update: VectorField_Class
vickysharma0812 Sep 25, 2023
8b87b58
Update: VectorMeshField_Class
vickysharma0812 Sep 25, 2023
2d4a347
Update: FieldFactory
vickysharma0812 Sep 25, 2023
09a7b81
Update: STVectorField_Class
vickysharma0812 Sep 25, 2023
4cf208b
Updates: Mesh and Fields
vickysharma0812 Sep 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion install.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#!/usr/bin/env python3

# This program is a part of EASIFEM library.
# See. www.easifem.com
# Copyright (c) 2020-2021, All right reserved, Vikas Sharma, Ph.D.
Expand Down Expand Up @@ -25,7 +27,8 @@
print("CMAKE DEF : ", cmake_def)
_build0 = os.path.join(os.environ["HOME"], "temp")
build_dir = os.path.join(
os.environ.get("EASIFEM_BUILD_DIR", _build0), "easifem", "classes", "build"
os.environ.get("EASIFEM_BUILD_DIR",
_build0), "easifem", "classes", "build"
)
# build_dir = os.environ["HOME"] + "/temp/easifem-base/build"
os.makedirs(build_dir, exist_ok=True)
Expand Down
128 changes: 104 additions & 24 deletions src/modules/AbstractField/src/AbstractField_Class.F90
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,8 @@ MODULE AbstractField_Class
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT = 2
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT_SPACE = 3
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT_TIME = 4
! CHARACTER( LEN = * ), PARAMETER, PUBLIC :: FIELD_TYPE_NAME( 4 ) = &
! & [ &
! & "NORMAL ", &
! & "CONSTANT ", &
! & "CONSTANT_SPACE", &
! & "CONSTANT_TIME " &
! & ]

CHARACTER(*), PARAMETER :: modName = "AbstractField_Class"
PUBLIC :: AbstractFieldInitiate

!----------------------------------------------------------------------------
! AbstractField_
Expand All @@ -66,19 +59,19 @@ MODULE AbstractField_Class

TYPE, ABSTRACT :: AbstractField_
LOGICAL(LGT) :: isInitiated = .FALSE.
!! It is true if the object is initiated
!! It is true if the object is initiated
INTEGER(I4B) :: fieldType = FIELD_TYPE_NORMAL
!! fieldType can be normal, constant, can vary in space and/ or both.
!! fieldType can be normal, constant, can vary in space and/ or both.
TYPE(String) :: name
!! name of the field
!! name of the field
TYPE(String) :: engine
!! Engine of the field, for example
!! NATIVE_SERIAL
!! NATIVE_OMP,
!! NATIVE_MPI,
!! PETSC,
!! LIS_OMP,
!! LIS_MPI
!! Engine of the field, for example
!! NATIVE_SERIAL
!! NATIVE_OMP,
!! NATIVE_MPI,
!! PETSC,
!! LIS_OMP,
!! LIS_MPI
INTEGER(I4B) :: comm = 0_I4B
!! communication group (MPI)
INTEGER(I4B) :: myRank = 0_I4B
Expand All @@ -97,13 +90,13 @@ MODULE AbstractField_Class
!! lis_ptr is pointer returned by the LIS library
!! It is used when engine is LIS_OMP or LIS_MPI
TYPE(Domain_), POINTER :: domain => NULL()
!! Domain contains the information of the finite element meshes.
!! Domain contains the information of the finite element meshes.
TYPE(DomainPointer_), ALLOCATABLE :: domains(:)
!! Domain for each physical variables
!! The size of `domains` should be equal to the total number of
!! physical variables.
!! It is used in the case of BlockNodeField
!! and BlockMatrixField
!! Domain for each physical variables
!! The size of `domains` should be equal to the total number of
!! physical variables.
!! It is used in the case of BlockNodeField
!! and BlockMatrixField
CONTAINS
PRIVATE
PROCEDURE(aField_checkEssentialParam), DEFERRED, PUBLIC, PASS(obj) :: &
Expand Down Expand Up @@ -131,6 +124,18 @@ MODULE AbstractField_Class
GENERIC, PUBLIC :: WriteData => WriteData_vtk, WriteData_hdf5
PROCEDURE, PASS(obj), NON_OVERRIDABLE, PUBLIC :: GetParam
PROCEDURE, PASS(obj), NON_OVERRIDABLE, PUBLIC :: SetParam
PROCEDURE, PUBLIC, PASS(obj) :: GetSpaceCompo => aField_GetSpaceCompo
!! Return space component
!! INFO: This routine should be implemented by child classes
PROCEDURE, PUBLIC, PASS(obj) :: GetTimeCompo => aField_GetTimeCompo
!! Return time component
!! INFO: This routine should be implemented by child classes
PROCEDURE, PUBLIC, PASS(obj) :: GetStorageFMT => aField_GetStorageFMT
!! Return storage format
!! INFO: This routine should be implemented by child classes
PROCEDURE, PUBLIC, PASS(obj), NON_OVERRIDABLE :: isConstant &
& => aField_isConstant
!! It returns true if the field is constant field
END TYPE AbstractField_

PUBLIC :: AbstractField_
Expand Down Expand Up @@ -168,6 +173,23 @@ SUBROUTINE aField_Initiate1(obj, param, dom)
END SUBROUTINE aField_Initiate1
END INTERFACE

!----------------------------------------------------------------------------
! Initiate
!----------------------------------------------------------------------------

!> authors: Vikas Sharma, Ph. D.
! date: 2023-09-22
! summary: Initiate the field by reading param and given domain

INTERFACE
MODULE SUBROUTINE AbstractFieldInitiate(obj, param, dom, prefix)
CLASS(AbstractField_), INTENT(INOUT) :: obj
TYPE(ParameterList_), INTENT(IN) :: param
TYPE(Domain_), TARGET, INTENT(IN) :: dom
CHARACTER(*), INTENT(IN) :: prefix
END SUBROUTINE AbstractFieldInitiate
END INTERFACE

!----------------------------------------------------------------------------
! InitiateByCopy
!----------------------------------------------------------------------------
Expand Down Expand Up @@ -424,4 +446,62 @@ MODULE SUBROUTINE GetParam(obj, &
END SUBROUTINE GetParam
END INTERFACE

!----------------------------------------------------------------------------
! GetSpaceCompo
!----------------------------------------------------------------------------

!> author: Vikas Sharma, Ph. D.
! date: 2023-09-22
! summary: Returns space components

INTERFACE
MODULE FUNCTION aField_GetSpaceCompo(obj) RESULT(ans)
CLASS(AbstractField_), INTENT(IN) :: obj
INTEGER(I4B), ALLOCATABLE :: ans(:)
END FUNCTION aField_GetSpaceCompo
END INTERFACE

!----------------------------------------------------------------------------
! GetTimeCompo
!----------------------------------------------------------------------------

!> author: Vikas Sharma, Ph. D.
! date: 2023-09-22
! summary: Returns Time components

INTERFACE
MODULE FUNCTION aField_GetTimeCompo(obj) RESULT(ans)
CLASS(AbstractField_), INTENT(IN) :: obj
INTEGER(I4B), ALLOCATABLE :: ans(:)
END FUNCTION aField_GetTimeCompo
END INTERFACE

!----------------------------------------------------------------------------
! GetStorageFMT
!----------------------------------------------------------------------------

!> author: Vikas Sharma, Ph. D.
! date: 2023-09-22
! summary: Returns storage format

INTERFACE
MODULE FUNCTION aField_GetStorageFMT(obj) RESULT(ans)
CLASS(AbstractField_), INTENT(IN) :: obj
INTEGER(I4B) :: ans
END FUNCTION aField_GetStorageFMT
END INTERFACE

!----------------------------------------------------------------------------
! isConstant
!----------------------------------------------------------------------------

!> author: Vikas Sharma, Ph. D.
! date: 2023-09-22
! summary: Returns true if the field is constant
INTERFACE
MODULE FUNCTION aField_isConstant(obj) RESULT(ans)
CLASS(AbstractField_), INTENT(IN) :: obj
LOGICAL(LGT) :: ans
END FUNCTION aField_isConstant
END INTERFACE
END MODULE AbstractField_Class
47 changes: 28 additions & 19 deletions src/modules/AbstractMeshField/src/AbstractMeshField_Class.F90
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

MODULE AbstractMeshField_Class
USE GlobalData
USE BaseType
USE BaSetype
USE String_Class, ONLY: String
USE FPL, ONLY: ParameterList_
USE Mesh_Class, ONLY: Mesh_
Expand All @@ -27,6 +27,13 @@ MODULE AbstractMeshField_Class
IMPLICIT NONE
PRIVATE
CHARACTER(*), PARAMETER :: modName = "AbstractMeshField_Class"
PUBLIC :: AbstractMeshField_
PUBLIC :: AbstractMeshFieldPointer_
PUBLIC :: SetAbstractMeshFieldParam
PUBLIC :: AbstractFieldCheckEssentialParam
PUBLIC :: AbstractMeshFieldDeallocate
PUBLIC :: AbstractMeshFieldInitiate
PUBLIC :: DEALLOCATE

!----------------------------------------------------------------------------
! AbstractMeshField_
Expand Down Expand Up @@ -96,7 +103,7 @@ MODULE AbstractMeshField_Class
!! Export data in vtkFile
PROCEDURE, PUBLIC, PASS(obj) :: DEALLOCATE => aField_Deallocate
!! Deallocate the field
PROCEDURE, PUBLIC, PASS(obj) :: getPointer => aField_getPointer
PROCEDURE, PUBLIC, PASS(obj) :: GetPointer => aField_getPointer
!! Return pointer to val
PROCEDURE, PUBLIC, PASS(obj) :: Size => aField_Size
!! Returns size
Expand All @@ -110,8 +117,6 @@ MODULE AbstractMeshField_Class
!! Getting the value
END TYPE AbstractMeshField_

PUBLIC :: AbstractMeshField_

!----------------------------------------------------------------------------
!
!----------------------------------------------------------------------------
Expand All @@ -120,18 +125,16 @@ MODULE AbstractMeshField_Class
CLASS(AbstractMeshField_), POINTER :: ptr => NULL()
END TYPE AbstractMeshFieldPointer_

PUBLIC :: AbstractMeshFieldPointer_

!----------------------------------------------------------------------------
! setAbstractMeshFieldParam@ConstructorMethods
! SetAbstractMeshFieldParam@ConstructorMethods
!----------------------------------------------------------------------------

!> authors: Vikas Sharma, Ph. D.
! date: 17 Feb 2022
! summary: This routine check the essential parameters in param.

INTERFACE
MODULE SUBROUTINE setAbstractMeshFieldParam(param, prefix, name, &
MODULE SUBROUTINE SetAbstractMeshFieldParam(param, prefix, name, &
& fieldType, engine, defineOn, varType, rank, s)
TYPE(ParameterList_), INTENT(INOUT) :: param
CHARACTER(*), INTENT(IN) :: prefix
Expand All @@ -142,11 +145,9 @@ MODULE SUBROUTINE setAbstractMeshFieldParam(param, prefix, name, &
INTEGER(I4B), INTENT(IN) :: varType
INTEGER(I4B), INTENT(IN) :: rank
INTEGER(I4B), INTENT(IN) :: s(:)
END SUBROUTINE setAbstractMeshFieldParam
END SUBROUTINE SetAbstractMeshFieldParam
END INTERFACE

PUBLIC :: setAbstractMeshFieldParam

!----------------------------------------------------------------------------
! checkEssentialParam@ConstructorMethods
!----------------------------------------------------------------------------
Expand Down Expand Up @@ -178,8 +179,6 @@ MODULE SUBROUTINE AbstractFieldCheckEssentialParam(obj, prefix, param)
END SUBROUTINE AbstractFieldCheckEssentialParam
END INTERFACE

PUBLIC :: AbstractFieldCheckEssentialParam

!----------------------------------------------------------------------------
! Deallocate@ConstructorMethods
!----------------------------------------------------------------------------
Expand All @@ -198,7 +197,19 @@ END SUBROUTINE aField_Deallocate
MODULE PROCEDURE aField_Deallocate
END INTERFACE AbstractMeshFieldDeallocate

PUBLIC :: AbstractMeshFieldDeallocate
!----------------------------------------------------------------------------
! Deallocate@ConstructorMethods
!----------------------------------------------------------------------------

!> author: Vikas Sharma, Ph. D.
! date: 2023-09-12
! summary: Deallocate the vector of NeumannBC_

INTERFACE DEALLOCATE
MODULE SUBROUTINE aField_Deallocate_Ptr_Vector(obj)
TYPE(AbstractMeshFieldPointer_), ALLOCATABLE :: obj(:)
END SUBROUTINE aField_Deallocate_Ptr_Vector
END INTERFACE DEALLOCATE

!----------------------------------------------------------------------------
! Initiate@ConstructorMethods
Expand Down Expand Up @@ -233,8 +244,6 @@ MODULE SUBROUTINE AbstractMeshFieldInitiate(obj, prefix, param, mesh)
END SUBROUTINE AbstractMeshFieldInitiate
END INTERFACE

PUBLIC :: AbstractMeshFieldInitiate

!----------------------------------------------------------------------------
! Initiate@ConstructorMethods
!----------------------------------------------------------------------------
Expand All @@ -255,18 +264,18 @@ END SUBROUTINE aField_Initiate2
END INTERFACE

!----------------------------------------------------------------------------
! getPointer@ConstructorMethods
! GetPointer@ConstructorMethods
!----------------------------------------------------------------------------

!> authors: Vikas Sharma, Ph. D.
! date: 17 Feb 2022
! summary: Returns the pointer to a fortran real vector stored inside realVec

INTERFACE
MODULE FUNCTION aField_getPointer(obj) RESULT(ans)
MODULE FUNCTION aField_GetPointer(obj) RESULT(ans)
CLASS(AbstractMeshField_), TARGET, INTENT(IN) :: obj
REAL(DFP), POINTER :: ans(:, :)
END FUNCTION aField_getPointer
END FUNCTION aField_GetPointer
END INTERFACE

!----------------------------------------------------------------------------
Expand Down
Loading