finish_gs2_diagnostics_new Subroutine

public subroutine finish_gs2_diagnostics_new()

Close the output file and deallocate arrays

Arguments

None

Contents


Source Code

  subroutine finish_gs2_diagnostics_new
    use diagnostics_fluxes, only: finish_diagnostics_fluxes
    use diagnostics_omega, only: finish_diagnostics_omega
    use diagnostics_heating, only: finish_diagnostics_heating
    use diagnostics_ascii, only: finish_diagnostics_ascii
    use diagnostics_config, only: finish_diagnostics_config
    use diagnostics_antenna, only: finish_diagnostics_antenna
    use diagnostics_nonlinear_convergence, only: finish_nonlinear_convergence
    use diagnostics_velocity_space, only: finish_diagnostics_velocity_space
    use collisional_heating, only: finish_collisional
    use diagnostics_kinetic_energy_transfer, only: finish_diagnostics_kinetic_energy_transfer
    use gs2_diagnostics, only: save_restart_dist_fn, do_write_geom, do_write_fyx, do_write_f
    use mp, only: proc0
    use fields_arrays, only: phinew, bparnew
    use unit_tests, only: debug_message
    use neasyf, only: neasyf_close
    implicit none
    integer, parameter :: verb=3
    if (.not. gnostics%write_any) return
    
    call debug_message(verb, 'gs2_diagnostics_new::finish_gs2_diagnostics_new &
         & calling save_restart_dist_fn')
    call save_restart_dist_fn(gnostics%save_for_restart, &
         gnostics%save_distfn, &
         gnostics%save_glo_info_and_grids, &
         gnostics%save_velocities, &
         gnostics%user_time)

    call debug_message(verb, 'gs2_diagnostics_new::finish_gs2_diagnostics_new &
         & calling run_old_final_routines')
    call run_old_final_routines
    
    call debug_message(verb, 'gs2_diagnostics_new::finish_gs2_diagnostics_new finishing submodules')
    call finish_diagnostics_fluxes
    call finish_diagnostics_omega
    call finish_collisional
    call finish_diagnostics_antenna(gnostics)
    call finish_diagnostics_velocity_space()
    call finish_diagnostics_kinetic_energy_transfer
    
    if (gnostics%use_nonlin_convergence) call finish_nonlinear_convergence()
    if (gnostics%write_heating) call finish_diagnostics_heating(gnostics)
    if (gnostics%parallel .or. proc0) then
       if(proc0.and.debug) write(*,*) "Closing new diagnostics"
       call neasyf_close(gnostics%file_id)
    end if
    
    ! Random stuff that needs to be put in properly or removed
    ! Note we don't use gnostics%ascii_files%write_to_yxdist here
    ! because do_write_fyx is collective but gnostics%ascii_files%write_to_yxdist
    ! is only set on proc0
    if (gnostics%write_ascii .and. gnostics%write_gyx) &
         call do_write_fyx (gnostics%ascii_files%yxdist, phinew, bparnew)
    if (gnostics%write_ascii .and. gnostics%write_g) &
         call do_write_f (gnostics%ascii_files%dist)
    if (gnostics%write_ascii) call do_write_geom()
    if (proc0) call finish_diagnostics_ascii(gnostics%ascii_files)

    call finish_diagnostics_config(gnostics)
  end subroutine finish_gs2_diagnostics_new