Skip to content

Commit bf37b5f

Browse files
Merge pull request #162 from vickysharma0812/dev
Updates in Fields and FiniteElements
2 parents 08dd52e + 4cf208b commit bf37b5f

File tree

106 files changed

+9209
-3788
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+9209
-3788
lines changed

install.py

100644100755
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#!/usr/bin/env python3
2+
13
# This program is a part of EASIFEM library.
24
# See. www.easifem.com
35
# Copyright (c) 2020-2021, All right reserved, Vikas Sharma, Ph.D.
@@ -25,7 +27,8 @@
2527
print("CMAKE DEF : ", cmake_def)
2628
_build0 = os.path.join(os.environ["HOME"], "temp")
2729
build_dir = os.path.join(
28-
os.environ.get("EASIFEM_BUILD_DIR", _build0), "easifem", "classes", "build"
30+
os.environ.get("EASIFEM_BUILD_DIR",
31+
_build0), "easifem", "classes", "build"
2932
)
3033
# build_dir = os.environ["HOME"] + "/temp/easifem-base/build"
3134
os.makedirs(build_dir, exist_ok=True)

src/modules/AbstractField/src/AbstractField_Class.F90

Lines changed: 104 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,8 @@ MODULE AbstractField_Class
4646
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT = 2
4747
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT_SPACE = 3
4848
INTEGER(I4B), PARAMETER, PUBLIC :: FIELD_TYPE_CONSTANT_TIME = 4
49-
! CHARACTER( LEN = * ), PARAMETER, PUBLIC :: FIELD_TYPE_NAME( 4 ) = &
50-
! & [ &
51-
! & "NORMAL ", &
52-
! & "CONSTANT ", &
53-
! & "CONSTANT_SPACE", &
54-
! & "CONSTANT_TIME " &
55-
! & ]
56-
5749
CHARACTER(*), PARAMETER :: modName = "AbstractField_Class"
50+
PUBLIC :: AbstractFieldInitiate
5851

5952
!----------------------------------------------------------------------------
6053
! AbstractField_
@@ -66,19 +59,19 @@ MODULE AbstractField_Class
6659

6760
TYPE, ABSTRACT :: AbstractField_
6861
LOGICAL(LGT) :: isInitiated = .FALSE.
69-
!! It is true if the object is initiated
62+
!! It is true if the object is initiated
7063
INTEGER(I4B) :: fieldType = FIELD_TYPE_NORMAL
71-
!! fieldType can be normal, constant, can vary in space and/ or both.
64+
!! fieldType can be normal, constant, can vary in space and/ or both.
7265
TYPE(String) :: name
73-
!! name of the field
66+
!! name of the field
7467
TYPE(String) :: engine
75-
!! Engine of the field, for example
76-
!! NATIVE_SERIAL
77-
!! NATIVE_OMP,
78-
!! NATIVE_MPI,
79-
!! PETSC,
80-
!! LIS_OMP,
81-
!! LIS_MPI
68+
!! Engine of the field, for example
69+
!! NATIVE_SERIAL
70+
!! NATIVE_OMP,
71+
!! NATIVE_MPI,
72+
!! PETSC,
73+
!! LIS_OMP,
74+
!! LIS_MPI
8275
INTEGER(I4B) :: comm = 0_I4B
8376
!! communication group (MPI)
8477
INTEGER(I4B) :: myRank = 0_I4B
@@ -97,13 +90,13 @@ MODULE AbstractField_Class
9790
!! lis_ptr is pointer returned by the LIS library
9891
!! It is used when engine is LIS_OMP or LIS_MPI
9992
TYPE(Domain_), POINTER :: domain => NULL()
100-
!! Domain contains the information of the finite element meshes.
93+
!! Domain contains the information of the finite element meshes.
10194
TYPE(DomainPointer_), ALLOCATABLE :: domains(:)
102-
!! Domain for each physical variables
103-
!! The size of `domains` should be equal to the total number of
104-
!! physical variables.
105-
!! It is used in the case of BlockNodeField
106-
!! and BlockMatrixField
95+
!! Domain for each physical variables
96+
!! The size of `domains` should be equal to the total number of
97+
!! physical variables.
98+
!! It is used in the case of BlockNodeField
99+
!! and BlockMatrixField
107100
CONTAINS
108101
PRIVATE
109102
PROCEDURE(aField_checkEssentialParam), DEFERRED, PUBLIC, PASS(obj) :: &
@@ -131,6 +124,18 @@ MODULE AbstractField_Class
131124
GENERIC, PUBLIC :: WriteData => WriteData_vtk, WriteData_hdf5
132125
PROCEDURE, PASS(obj), NON_OVERRIDABLE, PUBLIC :: GetParam
133126
PROCEDURE, PASS(obj), NON_OVERRIDABLE, PUBLIC :: SetParam
127+
PROCEDURE, PUBLIC, PASS(obj) :: GetSpaceCompo => aField_GetSpaceCompo
128+
!! Return space component
129+
!! INFO: This routine should be implemented by child classes
130+
PROCEDURE, PUBLIC, PASS(obj) :: GetTimeCompo => aField_GetTimeCompo
131+
!! Return time component
132+
!! INFO: This routine should be implemented by child classes
133+
PROCEDURE, PUBLIC, PASS(obj) :: GetStorageFMT => aField_GetStorageFMT
134+
!! Return storage format
135+
!! INFO: This routine should be implemented by child classes
136+
PROCEDURE, PUBLIC, PASS(obj), NON_OVERRIDABLE :: isConstant &
137+
& => aField_isConstant
138+
!! It returns true if the field is constant field
134139
END TYPE AbstractField_
135140

136141
PUBLIC :: AbstractField_
@@ -168,6 +173,23 @@ SUBROUTINE aField_Initiate1(obj, param, dom)
168173
END SUBROUTINE aField_Initiate1
169174
END INTERFACE
170175

176+
!----------------------------------------------------------------------------
177+
! Initiate
178+
!----------------------------------------------------------------------------
179+
180+
!> authors: Vikas Sharma, Ph. D.
181+
! date: 2023-09-22
182+
! summary: Initiate the field by reading param and given domain
183+
184+
INTERFACE
185+
MODULE SUBROUTINE AbstractFieldInitiate(obj, param, dom, prefix)
186+
CLASS(AbstractField_), INTENT(INOUT) :: obj
187+
TYPE(ParameterList_), INTENT(IN) :: param
188+
TYPE(Domain_), TARGET, INTENT(IN) :: dom
189+
CHARACTER(*), INTENT(IN) :: prefix
190+
END SUBROUTINE AbstractFieldInitiate
191+
END INTERFACE
192+
171193
!----------------------------------------------------------------------------
172194
! InitiateByCopy
173195
!----------------------------------------------------------------------------
@@ -424,4 +446,62 @@ MODULE SUBROUTINE GetParam(obj, &
424446
END SUBROUTINE GetParam
425447
END INTERFACE
426448

449+
!----------------------------------------------------------------------------
450+
! GetSpaceCompo
451+
!----------------------------------------------------------------------------
452+
453+
!> author: Vikas Sharma, Ph. D.
454+
! date: 2023-09-22
455+
! summary: Returns space components
456+
457+
INTERFACE
458+
MODULE FUNCTION aField_GetSpaceCompo(obj) RESULT(ans)
459+
CLASS(AbstractField_), INTENT(IN) :: obj
460+
INTEGER(I4B), ALLOCATABLE :: ans(:)
461+
END FUNCTION aField_GetSpaceCompo
462+
END INTERFACE
463+
464+
!----------------------------------------------------------------------------
465+
! GetTimeCompo
466+
!----------------------------------------------------------------------------
467+
468+
!> author: Vikas Sharma, Ph. D.
469+
! date: 2023-09-22
470+
! summary: Returns Time components
471+
472+
INTERFACE
473+
MODULE FUNCTION aField_GetTimeCompo(obj) RESULT(ans)
474+
CLASS(AbstractField_), INTENT(IN) :: obj
475+
INTEGER(I4B), ALLOCATABLE :: ans(:)
476+
END FUNCTION aField_GetTimeCompo
477+
END INTERFACE
478+
479+
!----------------------------------------------------------------------------
480+
! GetStorageFMT
481+
!----------------------------------------------------------------------------
482+
483+
!> author: Vikas Sharma, Ph. D.
484+
! date: 2023-09-22
485+
! summary: Returns storage format
486+
487+
INTERFACE
488+
MODULE FUNCTION aField_GetStorageFMT(obj) RESULT(ans)
489+
CLASS(AbstractField_), INTENT(IN) :: obj
490+
INTEGER(I4B) :: ans
491+
END FUNCTION aField_GetStorageFMT
492+
END INTERFACE
493+
494+
!----------------------------------------------------------------------------
495+
! isConstant
496+
!----------------------------------------------------------------------------
497+
498+
!> author: Vikas Sharma, Ph. D.
499+
! date: 2023-09-22
500+
! summary: Returns true if the field is constant
501+
INTERFACE
502+
MODULE FUNCTION aField_isConstant(obj) RESULT(ans)
503+
CLASS(AbstractField_), INTENT(IN) :: obj
504+
LOGICAL(LGT) :: ans
505+
END FUNCTION aField_isConstant
506+
END INTERFACE
427507
END MODULE AbstractField_Class

src/modules/AbstractMeshField/src/AbstractMeshField_Class.F90

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
MODULE AbstractMeshField_Class
1818
USE GlobalData
19-
USE BaseType
19+
USE BaSetype
2020
USE String_Class, ONLY: String
2121
USE FPL, ONLY: ParameterList_
2222
USE Mesh_Class, ONLY: Mesh_
@@ -27,6 +27,13 @@ MODULE AbstractMeshField_Class
2727
IMPLICIT NONE
2828
PRIVATE
2929
CHARACTER(*), PARAMETER :: modName = "AbstractMeshField_Class"
30+
PUBLIC :: AbstractMeshField_
31+
PUBLIC :: AbstractMeshFieldPointer_
32+
PUBLIC :: SetAbstractMeshFieldParam
33+
PUBLIC :: AbstractFieldCheckEssentialParam
34+
PUBLIC :: AbstractMeshFieldDeallocate
35+
PUBLIC :: AbstractMeshFieldInitiate
36+
PUBLIC :: DEALLOCATE
3037

3138
!----------------------------------------------------------------------------
3239
! AbstractMeshField_
@@ -96,7 +103,7 @@ MODULE AbstractMeshField_Class
96103
!! Export data in vtkFile
97104
PROCEDURE, PUBLIC, PASS(obj) :: DEALLOCATE => aField_Deallocate
98105
!! Deallocate the field
99-
PROCEDURE, PUBLIC, PASS(obj) :: getPointer => aField_getPointer
106+
PROCEDURE, PUBLIC, PASS(obj) :: GetPointer => aField_getPointer
100107
!! Return pointer to val
101108
PROCEDURE, PUBLIC, PASS(obj) :: Size => aField_Size
102109
!! Returns size
@@ -110,8 +117,6 @@ MODULE AbstractMeshField_Class
110117
!! Getting the value
111118
END TYPE AbstractMeshField_
112119

113-
PUBLIC :: AbstractMeshField_
114-
115120
!----------------------------------------------------------------------------
116121
!
117122
!----------------------------------------------------------------------------
@@ -120,18 +125,16 @@ MODULE AbstractMeshField_Class
120125
CLASS(AbstractMeshField_), POINTER :: ptr => NULL()
121126
END TYPE AbstractMeshFieldPointer_
122127

123-
PUBLIC :: AbstractMeshFieldPointer_
124-
125128
!----------------------------------------------------------------------------
126-
! setAbstractMeshFieldParam@ConstructorMethods
129+
! SetAbstractMeshFieldParam@ConstructorMethods
127130
!----------------------------------------------------------------------------
128131

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

133136
INTERFACE
134-
MODULE SUBROUTINE setAbstractMeshFieldParam(param, prefix, name, &
137+
MODULE SUBROUTINE SetAbstractMeshFieldParam(param, prefix, name, &
135138
& fieldType, engine, defineOn, varType, rank, s)
136139
TYPE(ParameterList_), INTENT(INOUT) :: param
137140
CHARACTER(*), INTENT(IN) :: prefix
@@ -142,11 +145,9 @@ MODULE SUBROUTINE setAbstractMeshFieldParam(param, prefix, name, &
142145
INTEGER(I4B), INTENT(IN) :: varType
143146
INTEGER(I4B), INTENT(IN) :: rank
144147
INTEGER(I4B), INTENT(IN) :: s(:)
145-
END SUBROUTINE setAbstractMeshFieldParam
148+
END SUBROUTINE SetAbstractMeshFieldParam
146149
END INTERFACE
147150

148-
PUBLIC :: setAbstractMeshFieldParam
149-
150151
!----------------------------------------------------------------------------
151152
! checkEssentialParam@ConstructorMethods
152153
!----------------------------------------------------------------------------
@@ -178,8 +179,6 @@ MODULE SUBROUTINE AbstractFieldCheckEssentialParam(obj, prefix, param)
178179
END SUBROUTINE AbstractFieldCheckEssentialParam
179180
END INTERFACE
180181

181-
PUBLIC :: AbstractFieldCheckEssentialParam
182-
183182
!----------------------------------------------------------------------------
184183
! Deallocate@ConstructorMethods
185184
!----------------------------------------------------------------------------
@@ -198,7 +197,19 @@ END SUBROUTINE aField_Deallocate
198197
MODULE PROCEDURE aField_Deallocate
199198
END INTERFACE AbstractMeshFieldDeallocate
200199

201-
PUBLIC :: AbstractMeshFieldDeallocate
200+
!----------------------------------------------------------------------------
201+
! Deallocate@ConstructorMethods
202+
!----------------------------------------------------------------------------
203+
204+
!> author: Vikas Sharma, Ph. D.
205+
! date: 2023-09-12
206+
! summary: Deallocate the vector of NeumannBC_
207+
208+
INTERFACE DEALLOCATE
209+
MODULE SUBROUTINE aField_Deallocate_Ptr_Vector(obj)
210+
TYPE(AbstractMeshFieldPointer_), ALLOCATABLE :: obj(:)
211+
END SUBROUTINE aField_Deallocate_Ptr_Vector
212+
END INTERFACE DEALLOCATE
202213

203214
!----------------------------------------------------------------------------
204215
! Initiate@ConstructorMethods
@@ -233,8 +244,6 @@ MODULE SUBROUTINE AbstractMeshFieldInitiate(obj, prefix, param, mesh)
233244
END SUBROUTINE AbstractMeshFieldInitiate
234245
END INTERFACE
235246

236-
PUBLIC :: AbstractMeshFieldInitiate
237-
238247
!----------------------------------------------------------------------------
239248
! Initiate@ConstructorMethods
240249
!----------------------------------------------------------------------------
@@ -255,18 +264,18 @@ END SUBROUTINE aField_Initiate2
255264
END INTERFACE
256265

257266
!----------------------------------------------------------------------------
258-
! getPointer@ConstructorMethods
267+
! GetPointer@ConstructorMethods
259268
!----------------------------------------------------------------------------
260269

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

265274
INTERFACE
266-
MODULE FUNCTION aField_getPointer(obj) RESULT(ans)
275+
MODULE FUNCTION aField_GetPointer(obj) RESULT(ans)
267276
CLASS(AbstractMeshField_), TARGET, INTENT(IN) :: obj
268277
REAL(DFP), POINTER :: ans(:, :)
269-
END FUNCTION aField_getPointer
278+
END FUNCTION aField_GetPointer
270279
END INTERFACE
271280

272281
!----------------------------------------------------------------------------

0 commit comments

Comments
 (0)