First commit of code.
New functionality:
- DSMC module:
- 2D cyl geometry
- GMSH file format
- Elastic cross-section for Argon-Argon collisions.
- Basic boundary conditions: reflection, absorption and axis
symmetry.
Bugs fixed:
Other comments:
- Still searching for name.
This commit is contained in:
commit
bd7e8b040b
29 changed files with 4069 additions and 0 deletions
113
src/modules/moduleSolver.f95
Normal file
113
src/modules/moduleSolver.f95
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
MODULE moduleSolver
|
||||
|
||||
CONTAINS
|
||||
|
||||
SUBROUTINE scatterGrid()
|
||||
USE moduleSpecies
|
||||
USE moduleRefParam
|
||||
USE moduleMesh
|
||||
USE moduleOutput
|
||||
INTEGER:: n, e, k
|
||||
|
||||
!Cleans previous output
|
||||
!$OMP DO PRIVATE(k)
|
||||
DO e = 1, mesh%numNodes
|
||||
DO k= 1, nSpecies
|
||||
mesh%nodes(e)%obj%output(k)%den = 0.D0
|
||||
mesh%nodes(e)%obj%output(k)%mom = 0.D0
|
||||
mesh%nodes(e)%obj%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END DO
|
||||
!$OMP END DO
|
||||
|
||||
!Loops over the particles to scatter them
|
||||
!$OMP DO
|
||||
DO n=1, n_part_old
|
||||
CALL mesh%vols(part_old(n)%e_p)%obj%scatter(part_old(n))
|
||||
|
||||
END DO
|
||||
!$OMP END DO
|
||||
|
||||
|
||||
END SUBROUTINE scatterGrid
|
||||
|
||||
SUBROUTINE push(part)
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
IMPLICIT NONE
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8):: v_p_oh_star(2:3)
|
||||
TYPE(particle):: part_temp
|
||||
REAL(8):: x_new, y_new, r, sin_alpha, cos_alpha, alpha
|
||||
|
||||
part_temp = part
|
||||
!z
|
||||
part_temp%v(1) = part%v(1)
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tau
|
||||
!r,theta
|
||||
v_p_oh_star(2) = part%v(2)
|
||||
x_new = part%r(2) + v_p_oh_star(2)*tau
|
||||
v_p_oh_star(3) = part%v(3)
|
||||
y_new = v_p_oh_star(3)*tau
|
||||
r = DSQRT(x_new**2+y_new**2)
|
||||
part_temp%r(2) = r
|
||||
alpha = 0.D0!ATAN2(y_new,x_new) !0 in 2D problem
|
||||
part_temp%r(3) = part%r(3) + alpha
|
||||
IF (r > 0.D0) THEN
|
||||
sin_alpha = y_new/r
|
||||
cos_alpha = x_new/r
|
||||
ELSE
|
||||
sin_alpha = 0.D0
|
||||
cos_alpha = 1.D0
|
||||
END IF
|
||||
part_temp%v(2) = cos_alpha*v_p_oh_star(2)+sin_alpha*v_p_oh_star(3)
|
||||
part_temp%v(3) = -sin_alpha*v_p_oh_star(2)+cos_alpha*v_p_oh_star(3)
|
||||
part_temp%pt = part%pt
|
||||
part_temp%e_p = part%e_p
|
||||
!Assign cell to particle
|
||||
part=part_temp
|
||||
CALL mesh%vols(part%e_p)%obj%findCell(part)
|
||||
|
||||
END SUBROUTINE push
|
||||
|
||||
SUBROUTINE resetParticles()
|
||||
USE moduleSpecies
|
||||
USE moduleList
|
||||
USE moduleMesh
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER:: nn, n
|
||||
TYPE(particle), ALLOCATABLE:: partTemp(:)
|
||||
|
||||
IF (n_part_old > 0) THEN
|
||||
n_part_new = COUNT(part_old%n_in) + COUNT(part_inj%n_in)
|
||||
ELSE
|
||||
n_part_new = COUNT(part_inj%n_in)
|
||||
END IF
|
||||
|
||||
CALL MOVE_ALLOC(part_old, partTemp)
|
||||
ALLOCATE(part_old(1:n_part_new))
|
||||
|
||||
nn = 0
|
||||
DO n = 1, nPartInj
|
||||
IF (part_inj(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
part_old(nn) = part_inj(n)
|
||||
CALL mesh%vols(part_old(nn)%e_p)%obj%listPart_in%add(nn)
|
||||
END IF
|
||||
END DO
|
||||
DO n = 1, n_part_old
|
||||
IF (partTemp(n)%n_in) THEN
|
||||
nn = nn + 1
|
||||
part_old(nn) = partTemp(n)
|
||||
CALL mesh%vols(part_old(nn)%e_p)%obj%listPart_in%add(nn)
|
||||
END IF
|
||||
END DO
|
||||
n_part_old = n_part_new
|
||||
|
||||
END SUBROUTINE resetParticles
|
||||
|
||||
END MODULE moduleSolver
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue