You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

In this tutorial

  • how can you integrate your code with UAL
  • how can you access data via UAL

Accessing data from UAL requires some modification to your code. In this part of tutorial, we will take a closer look on how to access IDS via UAL.

 

Warning

Stop here for a moment. Make sure you have followed the configuration setup before proceeding any further!

Configuration related tutorial is here -> Click me! <-

 

1.1.1. 3.1 Accessing data using Fortran

CHEAT SHEET
ITMIMAS
use euitm_schemas
use ids_schemas
use euitm_routines
use ids_routines
type (type_<cpo_name>) :: cpo 
type (ids_<ids_name>) :: ids 
type (type_<cpo_name>), pointer :: cpoArray(:) ! <= Array !!!
type (ids_<ids_name>) :: ids <== SINGLE OBJ !!!
call euitm_create('euitm', shot, run, refShot, refRun, idx)
call imas_create('ids', shot, run, refShot, refRun, idx)
call euitm_open('euitm', shot, run, idx)
call imas_open('ids', shot, run, idx)
call euitm_put(idx, '<cpo_name>', cpoArray) <== ARRAY!
call ids_put(idx, '<ids_name>', ids)  <== SINGLE OBJ
call euitm_put_non_timed(idx,"<cpo_name>", cpo)
call ids_put_non_timed(idx,"<ids_name>",ids)
call euitm_put_slice(idx, '<cpo_name>', cpo)
call ids_put_slice(idx, '<ids_name>', ids)
call euitm_deallocate(cpoArray)
call ids_deallocate(ids)
call euitm_close(idx)
call imas_close(idx)
call euitm_enable_mem_cache(idx)
call imas_enable_mem_cache(idx)
call euitm_disable_mem_cache(idx)
call imas_disable_mem_cache(idx)
call euitm_flush_all(idx)
call imas_flush_all(idx)

 

4. Open example file

put() CPO vs IDS
ITM
program diagnostic
    use euitm_schemas
    use euitm_routines
    implicit none

    integer :: idx, i
    type (type_equilibrium) :: cpo ! <= Single object !!!

	! Open a database
    call euitm_create('euitm', 11, 22, -1, -1, idx)





	! CPO structure allocation
	

!SCALARS (!)
	 	cpo%time = VALUE
        cpo%x%y = VALUE
   
    



call euitm_put_slice(idx, 'equilibrium', cpo)
call euitm_deallocate(cpoArray)
    ! Close a pulse file
    call euitm_close(idx)
end program
IMAS
program diagnostic
    use ids_schemas
    use ids_routines
    implicit none

    integer :: idx, i
    type (ids_core_profiles) :: ids ! <= Single object !!!

	! Open a database
    call imas_create('ids', 11, 22, -1, -1, idx)
  
   ! Mandatory to define this property
  ids%ids_properties%homogeneous_time = 1 


allocate(ids%ids_properties%comment(1))
 ids%ids_properties%comment(1) = 'A test ids put using put_slice'
 call ids_put_non_timed(idx,"core_profiles",ids)


 ! IDS structure allocation
allocate(ids%time(1))
allocate(ids%x%y(1))   
 
!SCALARS (!)
    	ids%time(1) = VALUE
        ids%x%y(1) = VALUE


call ids_put_slice(idx, 'core_profiles', ids)
	call ids_deallocate(ids)
! Close a pulse file
    call imas_close(idx)
end program

 

 

 
 

4. Open example file

putSlice() CPO vs IDS
ITM
program diagnostic
    use euitm_schemas
    use euitm_routines
    implicit none

    integer :: idx, i, arraySize
    type (type_equilibrium), pointer :: cpoArray(:) ! <= Array !!!

	! Open a database
    call euitm_create('euitm', 11, 22, -1, -1, idx)





	! CPO structure allocation
	allocate(cpoArray(10))

!SCALARS (!)
	do i=1, 10
    	cpoArray(i)%time = VALUE
        cpoArray(i)%x%y = VALUE
    enddo
    




call euitm_put(idx, 'equilibrium', cpoArray)
call euitm_deallocate(cpoArray)
    ! Close a pulse file
    call euitm_close(idx)
end program
IMAS
program diagnostic
    use ids_schemas
    use ids_routines
    implicit none

    integer :: idx, i
    type (ids_core_profiles) :: ids ! <= Single object !!!

	! Open a database
    call imas_create('ids', 11, 22, -1, -1, idx)
  
   ! Mandatory to define this property
    ids%ids_properties%homogeneous_time = 1 

! IDS structure allocation
allocate(ids%time(1))
allocate(ids%x%y(1))

 !SCALARS (!)
	do i=1, 10
    	ids%time(i) = VALUE
        ids%x%y(i) = VALUE
    enddo
! VECTORS
    	ids%time = timeVector
        ids%x%y  = valueVector

call ids_put(idx, 'core_profiles', ids)
	call ids_deallocate(ids)
! Close a pulse file
    call imas_close(idx)
end program

 

 

 

Let's check how to read these data in Fortran.

1.1.2. 3.2 Accessing data using Fortran

Exercise no. 4 - After this exercise you will:

 

 

 

get() CPO vs IDS
ITM
program diagnostic
    use euitm_schemas
    use euitm_routines
    implicit none

    integer :: idx, i, arraySize
    type (type_equilibrium), pointer :: cpoArray(:) ! <= Array !!!


	! Open a database
    call euitm_open('euitm', 14, 4, idx)
  
    ! Get data
    call euitm_get(idx, 'equilibrium', cpoArray)
   
	! Check array size
	arraySize = size(cpoArray)   ! <= array of CPOs
   
    
	! SCALARS (!)
	do i=1, arraySize
    	write (*,*) "Time : ", cpoArray(i)%time
        write (*,*) "Value: ", cpoArray(i)%x%y
    enddo
    




    ! Close a pulse file
    call euitm_close(idx)
end program
IMAS
program diagnostic
    use ids_schemas
    use ids_routines
    implicit none

    integer :: idx, i, arraySize
    type (ids_core_profiles) :: ids ! <= Single object !!!


	! Open a database
    call imas_open('ids', 14, 4, idx)
  
    ! Get data
    call imas_get(idx, 'core_profiles', ids)

	! Check array size
    arraySize = size(ids%time)  ! <= time vector
    
    
	! SCALARS (!)
	do i=1, arraySize
    	write (*,*) "Time : ", ids%time(i)
        write (*,*) "Value: ", ids%x%y(i)
    enddo

	! VECTORS
    write (*,*) "Time : ", ids%time
    write (*,*) "Value: ", ids%x%y
	
	! Close a pulse file
    call imas_close(idx)
end program

 

4. Compile the code
 getSlice() CPO vs IDS
ITM
program diagnostic
   ! UAL library
    use euitm_schemas
    use euitm_routines  
	implicit none
 
    integer :: idx 
    type (type_equilibrium) :: cpo
    
    ! Open a database
    call euitm_open('euitm', 11, 4, idx)
    
    ! Get data
    call euitm_get_slice(idx, 'equilibrium', cpo, 4.0, 1)
             
    write (*,*) "Time  : ", cpo%time
    write (*,*) "Value : ", cpo%x%y
     
	! Memory clean-up
	call euitm_deallocate(cpo)

    ! Close a pulse file 
    call euitm_close(idx)
end program
IMAS
program diagnostic
    ! UAL library
    use ids_schemas
    use ids_routines  
    implicit none

    integer :: idx 
    type (ids_core_profiles) :: ids
    
    ! Open a database
    call imas_open('ids', 11, 22, idx)
    
    ! Get data
    call ids_get_slice(idx, 'core_profiles', ids, 4.0, 1)
            
    write (*,*) "Time  : ", ids%time
    write (*,*) "Value : ", ids%x%y

	! Memory clean-up
    call ids_deallocate(ids)

    ! Close a pulse file
    call imas_close(idx)
end program
  • No labels