Put Entire IDSΒΆ

This example focuses on putting IDS into entry and passing IDS validation.

See also

API documentation for: ids_put()

subroutine put_entire_ids()
    use ids_routines
    implicit none

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

    ! 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)

    ! set mandatory field
    equilibrium%ids_properties%homogeneous_time = IDS_TIME_MODE_HOMOGENEOUS

    ! when ids_properties.homogeneous_time is set to IDS_TIME_MODE_HOMOGENEOUS,
    ! all time-dependent fields values correspond to <ids>.time vector.
    allocate(equilibrium%time(3))
    equilibrium%time = (/ 1.0, 2.0, 3.0 /)

    ! equilibrium/vacuum_toroidal_field/b0 should have the same size as equilibrium/time
    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)

    ! NOTE: some IDS fields are put automatically by Access Layer. Examples of this type of fields are:
    ! - <ids>/ids_properties/version_put/data_dictionary
    ! - <ids>/ids_properties/version_put/access_layer
    ! - <ids>/ids_properties/version_put/access_layer_language

    ! IDSs fields can be printed using write or print statement
    write(*,*) 'printing equilibrium from put_entire_ids() subroutine'
    write(*,*) 'equilibrium/time:'
    write(*,'(F5.2)') equilibrium%time
    write(*,*) 'equilibrium/vacuum_toroidal_field/b0 :'
    write(*,'(F5.2)') equilibrium%vacuum_toroidal_field%b0

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

end subroutine put_entire_ids