First EM pusher

First implementation of Electromagnetic pusher.

Some testing is still required.

Documentation needs to be upgraded to match the changes in this branch.
This commit is contained in:
Jorge Gonzalez 2022-04-09 08:57:06 +02:00
commit 8006f9d768
13 changed files with 331 additions and 57 deletions

View file

@ -155,6 +155,7 @@ MODULE moduleInput
Vol_ref = L_ref**3 !reference volume
EF_ref = qe*n_ref*L_ref/eps_0 !reference electric field
Volt_ref = EF_ref*L_ref !reference voltage
B_ref = m_ref / (ti_ref * qe) !reference magnetic field
END SUBROUTINE readReference
@ -177,8 +178,9 @@ MODULE moduleInput
!simulation final and initial times in [t]
REAL(8):: finalTime, initialTime
CHARACTER(:), ALLOCATABLE:: pusherType, WSType, EMType
REAL(8):: B(1:3)
INTEGER:: nTau, nSolver
INTEGER:: i
INTEGER:: i, n
CHARACTER(2):: iString
CHARACTER(1):: tString
@ -267,6 +269,31 @@ MODULE moduleInput
!Read BC
CALL readEMBoundary(config)
CASE("ConstantB")
!Read BC
CALL readEMBoundary(config)
!Read constant magnetic field
DO i = 1, 3
WRITE(istring, '(i2)') i
CALL config%get(object // '.B(' // istring // ')', B(i), found)
IF (.NOT. found) THEN
CALL criticalError('Constant magnetic field not provided in direction ' // iString, 'readSolver')
END IF
END DO
!Non-dimensional magnetic field
B = B / B_ref
!Assign it to the nodes
DO n =1, mesh%numNodes
mesh%nodes(n)%obj%emData%B(1) = B(1)
mesh%nodes(n)%obj%emData%B(2) = B(2)
mesh%nodes(n)%obj%emData%B(3) = B(3)
END DO
CASE DEFAULT
CALL criticalError('EM Solver ' // EMType // ' not found', 'readSolver')