Read Entire IDSΒΆ

This example focuses on reading whole IDS from entry.

See also

API documentation for:
subroutine read_entire_ids()
    !! We are storing and reading back an IDS - equilibrium. Data are stored inside MDS+ file.
    use ids_routines
    implicit none

    integer(ids_int) :: data_entry, status
    type(ids_equilibrium) :: equilibrium

    ! NOTE: this block of code uses FORCE_CREATE_PULSE mode in order to create example data
    call imas_open('imas:mdsplus?path=./testdb_mdsplus', FORCE_CREATE_PULSE, data_entry, status)

    ! fill IDS with example data
    equilibrium%ids_properties%homogeneous_time = IDS_TIME_MODE_HOMOGENEOUS
    allocate(equilibrium%time(3))
    equilibrium%time = (/ 1.0, 2.0, 3.0 /)
    allocate(equilibrium%vacuum_toroidal_field%b0(3))
    equilibrium%vacuum_toroidal_field%b0 = (/ 1.0, 2.0, 3.0 /)
    
    call ids_put(data_entry, 'equilibrium', equilibrium)

    call ids_deallocate(equilibrium)
    call imas_close(data_entry, status)

    ! NOTE: this block of code uses OPEN_PULSE mode in order to read example data
    call imas_open('imas:mdsplus?path=./testdb_mdsplus', OPEN_PULSE, data_entry, status)

    call ids_get(data_entry, 'equilibrium', equilibrium)

    ! here you can access content of the IDS equilibrium
    ! some_variable = equilibrium.some_element
    ! equilibrium.some_element = ...
    ! etc.

    ! one may check if IDS was filled with data using ids_ids_defined(<ids>) subroutine
    write(*,*) 'is equilibrium defined?: ', ids_is_defined(equilibrium)
    call ids_deallocate(equilibrium)

end subroutine read_entire_ids