do_write_final_db Subroutine

public subroutine do_write_final_db(write_text)

Calculate and write , overwriting existing values

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: write_text

Write to text file


Contents

Source Code


Source Code

  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