Calculate and write , overwriting existing values
No netCDF output
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | intent(in) | :: | write_text |
Write to text file |
subroutine do_write_final_db(write_text)
use file_utils, only: open_output_file, close_output_file
use mp, only: proc0
use theta_grid, only: ntgrid, gradpar, delthet, bmag, theta
use kt_grids, only: ntheta0, naky, aky, akx
use fields_arrays, only: phinew, aparnew, apar
use gs2_time, only: code_dt
implicit none
!> Write to text file
logical, intent(in) :: write_text
complex, dimension (-ntgrid:ntgrid, ntheta0, naky) :: db
complex, dimension (ntheta0, naky) :: dbfac
integer :: ik, it, ig, unit
if (.not. proc0) return
if (.not. write_text) return
!Calculate db
do ik = 1, naky
do it = 1, ntheta0
if (abs(apar(1, it, ik)) <= epsilon(0.0) &
.or. abs(aparnew(1, it, ik)) <= epsilon(0.0)) then
db(:, it, ik) = 0.0
cycle
end if
dbfac(it,ik) = 1./sum(delthet/bmag/gradpar)/maxval(abs(phinew(:,it,ik)),1) &
* abs(log(aparnew(1,it,ik)/apar(1,it,ik)))/code_dt
ig = -ntgrid
db(ig, it, ik) = aparnew(ig,it,ik)*delthet(ig)/bmag(ig)/gradpar(ig)*dbfac(it,ik)
do ig = -ntgrid+1, ntgrid-1
db(ig, it, ik) = db(ig-1, it, ik) + aparnew(ig,it,ik)*delthet(ig)/bmag(ig)/gradpar(ig)*dbfac(it,ik)
end do
end do
end do
call open_output_file (unit, ".db")
do ik = 1, naky
do it = 1, ntheta0
do ig = -ntgrid, ntgrid-1
write (unit, "(5(1x,e12.5))") &
theta(ig), aky(ik), akx(it), real(db(ig, it,ik)), aimag(db(ig, it, ik))
end do
write (unit, "()")
end do
end do
call close_output_file (unit)
end subroutine do_write_final_db