Small set of corrections to the tag v2.5. Includes changes to python scripts to plot data. Includes new 'fast' setup conditions that allow to output cases in an hour or so with still a good CFL condition and grid resolution.
311 lines
11 KiB
Fortran
311 lines
11 KiB
Fortran
module output
|
|
use constantParameters, only: dp
|
|
implicit none
|
|
|
|
public
|
|
private:: dataRef_id, dataBC_id, dataF_id, dataPhi_id, dataCum_id
|
|
private:: formatFloat, formatSep, formatTime
|
|
|
|
integer:: everyOutput, everyWrite
|
|
character(:), allocatable:: pathOutput
|
|
integer, parameter:: dataRef_id = 10
|
|
integer, parameter:: dataBC_id = 20
|
|
integer, parameter:: dataF_id = 30
|
|
integer, parameter:: dataPhi_id = 40
|
|
integer, parameter:: dataCum_id = 50
|
|
integer, parameter:: dataTime_id = 60
|
|
character(len=*), parameter :: formatInt = 'I0'
|
|
character(len=7), parameter:: formatFloat = 'ES0.6e3'
|
|
character(len=3), parameter:: formatSep = '","'
|
|
character(len=7):: formatTime
|
|
|
|
contains
|
|
subroutine setTimeFormat(nt)
|
|
integer, intent(in):: nt
|
|
integer:: l
|
|
|
|
l=max(1,ceiling(log10(real(nt))))
|
|
write(formatTime, '(A2,I0,".",I0,A1)') '(I',l,l,')'
|
|
|
|
end subroutine setTimeFormat
|
|
|
|
subroutine createPath()
|
|
character(8) :: date_now
|
|
character(10) :: time_now
|
|
|
|
call date_and_time(date_now, time_now)
|
|
|
|
!Compose the folder name
|
|
pathOutput = date_now(1:4) // '-' // date_now(5:6) // '-' // date_now(7:8) // '_' // &
|
|
time_now(1:2) // '.' // time_now(3:4) // '.' // time_now(5:6) // '/'
|
|
|
|
call system('mkdir ' // pathOutput)
|
|
|
|
end subroutine createPath
|
|
|
|
subroutine writeOutputF(t, dt, nz, nr, r, nv, v, f, Z_list)
|
|
use referenceValues, only: L_ref, n_ref, u_ref, t_ref
|
|
|
|
integer, intent(in):: t
|
|
integer, intent(in):: nz, nr, nv
|
|
real(dp), intent(in):: dt
|
|
real(dp), intent(in):: r(1:nr)
|
|
real(dp), intent(in):: v(1:nv)
|
|
real(dp), intent(in):: f(1:nr,1:nv)
|
|
real(dp), intent(in):: Z_list(1:nz)
|
|
character(len=30) :: myfmt
|
|
character(:), allocatable:: filename
|
|
integer:: i, j
|
|
character(len=10):: timeString
|
|
character(len=10) :: ZString
|
|
|
|
do j = 1, nz
|
|
write (timeString, formatTime) t
|
|
write(ZString, '(F6.3)') Z_list(j)
|
|
ZString = adjustl(trim(ZString))
|
|
|
|
ZString = adjustl(ZString)
|
|
ZString = ZString(:index(ZString // '.', '.') - 1) // ZString(index(ZString, '.') + 1:)
|
|
filename = 'time_' // trim(timeString) // '_Z' // trim(ZString) // '_f_i.csv'
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
|
|
open(unit=dataF_id, file=pathOutput // filename)
|
|
write(dataF_id, '(A)') "t (s)"
|
|
write(dataF_id, '('//formatFloat//')') t*dt*t_ref
|
|
write(dataF_id, '(A)') "Z"
|
|
write(dataF_id, '('//formatFloat//')') Z_list(j)
|
|
write(myfmt, "(I0)") nr
|
|
myfmt = '(A,' // trim(myfmt) // '(' // formatSep // ',' // formatFloat // '))'
|
|
write(dataF_id, myfmt) "v (m/s) / r (m)", r*L_ref
|
|
write(myfmt, "(I0)") nr
|
|
myfmt = '(' // formatFloat // ',' // trim(myfmt) // '(' // formatSep // ',' // formatFloat // '))'
|
|
do i = 1, nv
|
|
write(dataF_id, myfmt) v(i)*u_ref, f(:,i)*n_ref/u_ref
|
|
|
|
end do
|
|
|
|
close(unit=dataF_id)
|
|
end do
|
|
|
|
end subroutine writeOutputF
|
|
|
|
subroutine writeOutputPhi(t, dt, nr, r, phi, E, n_e)
|
|
use constantParameters, only: eV_to_K
|
|
use referenceValues, only: L_ref, phi_ref, t_ref, n_ref
|
|
|
|
integer, intent(in):: t
|
|
integer, intent(in):: nr
|
|
real(dp), intent(in):: dt
|
|
real(dp), intent(in):: r(1:nr)
|
|
real(dp), intent(in):: phi(1:nr)
|
|
real(dp), intent(in):: E(1:nr)
|
|
real(dp), intent(in):: n_e(1:nr)
|
|
character(:), allocatable:: filename
|
|
integer:: i
|
|
character(len=10):: timeString
|
|
|
|
write (timeString, formatTime) t
|
|
filename = 'time_' // trim(timeString)//'_phi.csv'
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
|
|
open(unit=dataPhi_id, file=pathOutput//filename)
|
|
write(dataPhi_id, '(A)') "t (s)"
|
|
write(dataPhi_id, '('//formatFloat//')') t*dt*t_ref
|
|
write(dataPhi_id, '(A,3('//formatSep//',A))') "r (m)","phi (V)","E (V m^-1)","n_e (m^-3)"
|
|
do i = 1, nr
|
|
write(dataPhi_id, '('//formatFloat//',3('//formatSep //','//formatFloat//'))') &
|
|
r(i)*L_ref, &
|
|
phi(i)*phi_ref, &
|
|
E(i)*phi_ref/L_ref, &
|
|
n_e(i)*n_ref
|
|
|
|
end do
|
|
|
|
close(unit=dataPhi_id)
|
|
|
|
end subroutine writeOutputPhi
|
|
|
|
subroutine writeOutputMom(t, dt, nz, nr, r, n_i, u_i, T_i, Z_list)
|
|
use constantParameters, only: eV_to_K
|
|
use referenceValues, only: L_ref, t_ref, n_ref, u_ref, Temp_ref
|
|
|
|
integer, intent(in):: t
|
|
integer, intent(in):: nr
|
|
integer, intent(in):: nz
|
|
real(dp), intent(in):: dt
|
|
real(dp), intent(in):: r(1:nr)
|
|
real(dp), intent(in):: n_i(1:nz,1:nr)
|
|
real(dp), intent(in):: u_i(1:nz,1:nr)
|
|
real(dp), intent(in):: T_i(1:nz,1:nr)
|
|
real(dp), intent(in):: Z_list(1:nz)
|
|
character(:), allocatable:: filename
|
|
integer:: i
|
|
integer:: j
|
|
character(len=10):: timeString
|
|
character(len=10) :: ZString
|
|
|
|
do j = 1, nz
|
|
write (timeString, formatTime) t
|
|
write(ZString, '(F6.3)') Z_list(j)
|
|
ZString = adjustl(trim(ZString))
|
|
|
|
ZString = adjustl(ZString)
|
|
ZString = ZString(:index(ZString // '.', '.') - 1) // ZString(index(ZString, '.') + 1:)
|
|
filename = 'time_' // trim(timeString) // '_Z' // trim(ZString) // '_mom_i.csv'
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
|
|
open(unit=dataPhi_id, file=pathOutput//filename)
|
|
write(dataPhi_id, '(A)') "t (s)"
|
|
write(dataPhi_id, '('//formatFloat//')') t*dt*t_ref
|
|
write(dataPhi_id, '(A)') "Z"
|
|
write(dataPhi_id, '('//formatFloat//')') Z_list(j)
|
|
write(dataPhi_id, '(A,3('//formatSep//',A))') "r (m)","n_i (m^-3)","u_i (m s^-1)", "T_i (eV)"
|
|
do i = 1, nr
|
|
write(dataPhi_id, '('//formatFloat//',3('//formatSep //','//formatFloat//'))') &
|
|
r(i)*L_ref, &
|
|
n_i(j,i)*n_ref, &
|
|
u_i(j,i)*u_ref, &
|
|
T_i(j,i)*Temp_ref/ev_to_K
|
|
|
|
end do
|
|
|
|
close(unit=dataPhi_id)
|
|
end do
|
|
end subroutine writeOutputMom
|
|
|
|
subroutine writeOutputBoundary(t, dt, n, u, Temp, Zinj)
|
|
use constantParameters, only: eV_to_K
|
|
use referenceValues, only: t_ref, n_ref, u_ref, Temp_ref
|
|
|
|
integer, intent(in):: t
|
|
real(dp), intent(in):: dt
|
|
real(dp), intent(in):: n, u, Temp, Zinj
|
|
character(len=6), parameter:: filename = 'bc.csv'
|
|
logical:: res
|
|
|
|
inquire(file=pathOutput // filename, exist=res)
|
|
if (.not. res) then
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
open(unit=dataBC_id, file=pathOutput // filename, action='write', position='append')
|
|
write(dataBC_id, '(A,4(' // formatSep // ',A))') 't (s)', 'n (m^-3)', 'u (m s^-1)', 'T (eV)','Zinj'
|
|
close(dataBC_id)
|
|
|
|
end if
|
|
|
|
open(unit=dataBC_id, file=pathOutput // filename, action='write', position='append')
|
|
write(dataBC_id, '(' // formatFloat // ',4('// formatSep // ',' // formatFloat // '))') &
|
|
t*dt*t_ref, n*n_ref, u*u_ref, Temp*Temp_ref/eV_to_K, Zinj
|
|
|
|
close(dataBC_id)
|
|
|
|
end subroutine writeOutputBoundary
|
|
|
|
! JG: What is this procedure?
|
|
! subroutine writeOutputTime(t, time, bins)
|
|
! integer, intent(in):: t
|
|
! real(dp), intent(in):: time
|
|
! real(dp), intent(in):: bins
|
|
! character(len=8), parameter:: filename = 'time.csv'
|
|
! logical:: res
|
|
!
|
|
! inquire(file=pathOutput // filename, exist=res)
|
|
! if (.not. res) then
|
|
! write (*, '(A, A)') 'Writing: ', filename
|
|
! open(unit=dataTime_id, file=pathOutput // filename, action='write', position='append')
|
|
! write(dataTime_id, '(A,2(' // formatSep // ',A))') 'timestep', 'duration (s)', '#bins'
|
|
! close(dataTime_id)
|
|
!
|
|
! end if
|
|
!
|
|
! open(unit=dataTime_id, file=pathOutput // filename, action='write', position='append')
|
|
! write(dataTime_id, '(' // formatInt // ',2('// formatSep // ',' // formatFloat // '))') &
|
|
! t, time, bins
|
|
!
|
|
! close(dataTime_id)
|
|
!
|
|
! end subroutine writeOutputTime
|
|
|
|
subroutine writeOutputZList(nz, Z_list)
|
|
integer, intent(in):: nz
|
|
real(dp), intent(in):: Z_list(1:nz)
|
|
character(:), allocatable:: filename
|
|
integer:: i
|
|
|
|
filename = 'ZList.csv'
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
open(unit=dataPhi_id, file=pathOutput//filename)
|
|
write(dataPhi_id, '(A)') "Z_list"
|
|
do i = 1, nz
|
|
write(dataPhi_id, '('//formatFloat//')') Z_list(i)
|
|
|
|
end do
|
|
close(unit=dataPhi_id)
|
|
|
|
end subroutine writeOutputZList
|
|
|
|
subroutine writeOutputRef()
|
|
use referenceValues, only: t_ref, L_ref, n_ref, u_ref, Temp_ref, phi_ref
|
|
use constantParameters, only: eV_to_K
|
|
|
|
character(len=7), parameter:: filename = 'ref.csv'
|
|
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
open(unit=dataRef_id, file=pathOutput // filename)
|
|
write(dataRef_id, '(A,5(' // formatSep // ',A))') 't_ref (s)', 'L_ref (m)', 'n_ref (m^-3)', &
|
|
'u_ref (m s^-1)', 'T_ref (eV)', 'phi_ref (V)'
|
|
write(dataRef_id, '(' // formatFloat // ',5('// formatSep // ',' // formatFloat // '))') &
|
|
t_ref, L_ref, n_ref, &
|
|
u_ref, Temp_ref/eV_to_K, phi_ref
|
|
|
|
close(dataRef_id)
|
|
|
|
end subroutine writeOutputRef
|
|
|
|
subroutine writeOutputFCum(t, dt, nz, r, nv, v, f, Z_list)
|
|
use referenceValues, only: L_ref, n_ref, u_ref, t_ref
|
|
|
|
integer, intent(in):: t
|
|
real(dp), intent(in):: dt
|
|
integer, intent(in):: nz, nv
|
|
real(dp), intent(in):: r
|
|
real(dp), intent(in):: v(1:nv)
|
|
real(dp), intent(in):: f(1:nz, 1:nv)
|
|
real(dp), intent(in):: Z_list(1:nz)
|
|
character(len=30) :: myfmt
|
|
character(:), allocatable:: filename
|
|
integer:: i, j
|
|
character(len=10):: timeString
|
|
character(len=10) :: ZString
|
|
|
|
|
|
do j = 1, nz
|
|
write (timeString, formatTime) t
|
|
write(ZString, '(F6.3)') Z_list(j)
|
|
ZString = adjustl(trim(ZString))
|
|
|
|
ZString = adjustl(ZString)
|
|
ZString = ZString(:index(ZString // '.', '.') - 1) // ZString(index(ZString, '.') + 1:)
|
|
filename = 'time_' // trim(timeString) // '_Z' // trim(ZString) // '_fCum_i.csv'
|
|
write (*, '(A, A)') 'Writing: ', filename
|
|
|
|
open(unit=dataCum_id, file=pathOutput // filename)
|
|
write(dataCum_id, '(A)') "t (s)"
|
|
write(dataCum_id, '('//formatFloat//')') t*dt*t_ref
|
|
write(dataCum_id, '(A)') "Z"
|
|
write(dataCum_id, '('//formatFloat//')') Z_list(j)
|
|
write(myfmt, "(I0)") 1
|
|
myfmt = '(A,' // trim(myfmt) // '(' // formatSep // ',' // formatFloat // '))'
|
|
write(dataCum_id, myfmt) "v (m/s) / r (m)", r*L_ref
|
|
write(myfmt, "(I0)") 1
|
|
myfmt = '(' // formatFloat // ',' // trim(myfmt) // '(' // formatSep // ',' // formatFloat // '))'
|
|
do i = 1, nv
|
|
write(dataCum_id, myfmt) v(i)*u_ref, f(j,i)*n_ref/u_ref
|
|
|
|
end do
|
|
|
|
close(unit=dataCum_id)
|
|
end do
|
|
end subroutine writeOutputFCum
|
|
|
|
end module output
|
|
|