Added the possibility to have different boundary conditions per species.
A boundary condition for each species must be indicated in the case file. This opens the door to use boundary conditions with different parameters (for example, a wall temperature, coefficients for reflection or absorption...) The examples included with the code have been updated accordently.
This commit is contained in:
parent
dc98fe9399
commit
2c3e25b40e
18 changed files with 19389 additions and 1174 deletions
|
|
@ -15,7 +15,7 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END TYPE meshNode1DRad
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshEdge):: meshEdge1DRad
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge):: meshEdge1DRad
|
||||
!Element coordinates
|
||||
REAL(8):: r = 0.D0
|
||||
!Connectivity to nodes
|
||||
|
|
@ -27,6 +27,28 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END TYPE meshEdge1DRad
|
||||
|
||||
!Boundary functions defined in the submodule Boundary
|
||||
INTERFACE
|
||||
MODULE SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
MODULE SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
END INTERFACE
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshVol):: meshVol1DRad
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: detJac => detJ1DRad
|
||||
|
|
@ -123,6 +145,9 @@ MODULE moduleMesh1DRad
|
|||
!EDGE FUNCTIONS
|
||||
!Inits edge element
|
||||
SUBROUTINE initEdge1DRad(self, n, p, bt, physicalSurface)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRad), INTENT(out):: self
|
||||
|
|
@ -131,6 +156,7 @@ MODULE moduleMesh1DRad
|
|||
INTEGER, INTENT(in):: bt
|
||||
INTEGER, INTENT(in):: physicalSurface
|
||||
REAL(8), DIMENSION(1:3):: r1
|
||||
INTEGER:: s
|
||||
|
||||
self%n = n
|
||||
self%n1 => mesh%nodes(p(1))%obj
|
||||
|
|
@ -142,7 +168,24 @@ MODULE moduleMesh1DRad
|
|||
self%normal = (/ 1.D0, 0.D0, 0.D0 /)
|
||||
|
||||
!Boundary index
|
||||
self%bt = bt
|
||||
self%boundary => boundary(bt)
|
||||
ALLOCATE(self%fboundary(1:nSpecies))
|
||||
!Assign functions to boundary
|
||||
DO s = 1, nSpecies
|
||||
SELECT TYPE(obj => self%boundary%bTypes(s)%obj)
|
||||
TYPE IS(boundaryAbsorption)
|
||||
self%fBoundary(s)%apply => absorption
|
||||
|
||||
TYPE IS(boundaryReflection)
|
||||
self%fBoundary(s)%apply => reflection
|
||||
|
||||
CLASS DEFAULT
|
||||
CALL criticalError("Boundary type not defined in this geometry", 'initEdge1DRad')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
!Physical Surface
|
||||
self%physicalSurface = physicalSurface
|
||||
|
||||
|
|
|
|||
|
|
@ -1,40 +1,32 @@
|
|||
MODULE moduleMesh1DRadBoundary
|
||||
SUBMODULE (moduleMesh1DRad) moduleMesh1DRadBoundary
|
||||
USE moduleMesh1DRad
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DRad):: meshEdge1DRadRef
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => reflection
|
||||
|
||||
END TYPE meshEdge1DRadRef
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DRad):: meshEdge1DRadAbs
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => absorption
|
||||
|
||||
END TYPE meshEdge1DRadAbs
|
||||
|
||||
CONTAINS
|
||||
SUBROUTINE reflection(self, part)
|
||||
SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRadRef), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*self%r - part%r(1)
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DRad)
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*edge%r - part%r(1)
|
||||
|
||||
END SELECT
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
SUBROUTINE absorption(self, part)
|
||||
SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRadAbs), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
END MODULE moduleMesh1DRadBoundary
|
||||
END SUBMODULE moduleMesh1DRadBoundary
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
MODULE moduleMesh1DRadRead
|
||||
USE moduleMesh
|
||||
USE moduleMesh1DRad
|
||||
USE moduleMesh1DRadBoundary
|
||||
|
||||
!TODO: make this abstract to allow different mesh formats
|
||||
TYPE, EXTENDS(meshGeneric):: mesh1DRadGeneric
|
||||
|
|
@ -107,14 +106,8 @@ MODULE moduleMesh1DRadRead
|
|||
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
|
||||
!Associate boundary condition
|
||||
bt = getBoundaryId(boundaryType)
|
||||
SELECT CASE(boundary(bt)%obj%boundaryType)
|
||||
CASE ('reflection')
|
||||
ALLOCATE(meshEdge1DRadRef:: self%edges(e)%obj)
|
||||
|
||||
CASE ('absorption')
|
||||
ALLOCATE(meshEdge1DRadAbs:: self%edges(e)%obj)
|
||||
|
||||
END SELECT
|
||||
ALLOCATE(meshEdge1DRad:: self%edges(e)%obj)
|
||||
|
||||
CALL self%edges(e)%obj%init(n, p(1:1), bt, boundaryType)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue