Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Warning

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

 

3.1 Accessing data using

...

Exercise no. 3 - After this exercise you will:

  • know how to access UAL using Python
  • know how to retrieve IDS from UAL
  • know how to access IDS data

Exercise no. 3 (approx. 15 min)

 

1. source ITMv1 script by invoking

source $ITMSCRIPTDIR/ITMv1 kepler test 4.10b > /dev/null 

2. Go to example directory

cd $TUTORIAL_DIR/ids_basics/python/

3. Execute sample code

...

languagebash

...

Fortran

 

 

4. Open example file

Handling IDSes: put() CPO vs . putSlice()IDS
Code Block
languagepy
title$TUTORIAL_DIR/ids_basics/python/put_ids_array.py
linenumberstrue
importprogram sysdiagnostic
from  pylab import *use 
import ual

ids = ual.itm(13,3)
ids.create()

if not ids.isConnected():euitm_schemas
    use euitm_routines
    implicit none

    printinteger 'error during itmdb entry creation'
:: idx, i, arraySize
    type sys.exit(1)

ids.equilibriumArray.resize(10)
equi = ids.equilibriumArray

#First fill fields which are not time-dependent.
equi.array[0].datainfo.dataprovider = 'MKO'
equi.array[0].datainfo.putdate = '20/09/2016'
equi.array[0].codeparam.parameters = 'param'



# ---- a loop ----
for i in range(0, 10):
    #Fill time-dependent fields 
    equi.array[i].eqgeometry.boundary.resize(1)
    equi.array[i].eqgeometry.boundary[0].r = sin(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
    equi.array[i].eqgeometry.boundary[0].z = cos(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
    
	#Do not forget time!!
    equi.array[i].time = i
# ---- a loop ----

#Save data in the database
equi.put() # <= Called outside the loop

#close the pulse file
ids.close()(type_equilibrium), pointer :: cpoArray(:) ! <= Array !!!

	! Open a database
    call euitm_create('ids', 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', ids)
call euitm_deallocate(cpoArray)
    ! Close a pulse file
    call euitm_close(idx)
end program
Code Block
languagepy
title$TUTORIAL_DIR/ids_basics/python/put_ids_slices.py
linenumberstrue
importprogram sysdiagnostic
from  pylab import *use ids_schemas
import ual

ids = ual.itm(14,4)
ids.create()

if not ids.isConnected():
    print 'error during itmdb entry creation'
    sys.exit(1)

equi = ids.equilibrium


#First fill fields which are not time-dependent.
equi.datainfo.dataprovider = 'MKO'
equi.datainfo.putdate = '20/09/2016'
equi.codeparam.parameters = 'param'

#Save time independent fields
equi.putNonTimed()
# ---- a loop ----
for i in range(0, 10):
	#Fill time-dependent fields 
	equi.eqgeometry.boundary.resize(1)
    equi.eqgeometry.boundary[0].r = sin(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
    equi.eqgeometry.boundary[0].z = cos(arange(0,2*pi,2*pi/100)) + (1/float(100-i))
    
    #Do not forget time!!
    equi.time = i 
    
    #Append this slice in the database
    equi.putSlice() # <= Called inside the loop
# ---- a loop ----

#close the pulse file
ids.close()

...

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

 

 

vi $TUTORIAL_DIR/ids_basics/python/put_ids.py

What you can see here is a simple code that stores particular IDS into MDSPlus database using UAL.

 

 

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

...

Exercise no. 4 - After this exercise you will:

  • know how to connect to UAL
  • know how to retrieve data from UAL
  • know how to prepare Makefile for your Fortran code

Exercise no. 4 (approx. 15 min)

In this exercise you will read IDS and print some data stored inside.

1. source ITMv1 script by invoking

source $ITMSCRIPTDIR/ITMv1 kepler test 4.10b > /dev/null

2. Change directory to a demo location for this exercise

 

cd $TUTORIAL_DIR/ids_basics/fortran
 

 

get() CPO vs IDS
Code Block
title$TUTORIAL_DIR/ids_basics/fortran/get_ids_array.f90ITM
linenumberstrue
program diagnostic
    use euitm_schemas
    use euitm_routines
    implicit none

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


! Open a database
    call euitm_open('IDSeuitm', 14, 4, idx)
    ! Get data
    call euitm_get(idx, 'equilibrium', eqArraycpoArray)
    arraySize = size(eqArray)
    write (*,*) "Number of slices: ", arraySize
    
! SCALARS (!)
	do i=1, arraySize
    	write (*,*) "Time : ", eqArraycpoArray(i)%time
        write (*,*) "Value of r: ", eqArraycpoArray(i)%eqgeometry%boundary(1)%r(1)%x%y
    enddo
    write (*,*) "Value of z: ", eqArray(i)%eqgeometry%boundary(1)%z(1)
    enddo




    ! Close a pulse file
    call call euitm_close(idx)
end prograprogram
Code Block
title$TUTORIAL_DIR/ids_basics/fortran/get_ids_slices.f90IMAS
linenumberstrue
program diagnostic
    use imasids_schemas
    use imasids_routines
    implicit none

    integer :: idx, i, arraySize
    type (typeids_core_equilibriumprofiles), pointer :: eqArray(:)ids ! <= ArraySingle object !!!


	! Open a database
    call imas_open('IDSids', 14, 4, idx)
  
    ! Get data
    call imas_get(idx, 'equilibriumcore_profiles', eqArrayids)
    arraySize = size(eqArrayids%time)
    write (*,*) "Number of slices: ", arraySize
    
!SCALARS (!)
	do i=1, arraySize
    	write (*,*) "Time : ", eqArrayids%time(i)%time
        write (*,*) "Value of r: ", eqArrayids%x%y(i)%eqgeometry%boundary(1)%r(1)
    enddo

! VECTORS
    	write (*,*) "Time : ", ids%time
        write (*,*) "Value of z: ", eqArray(i)%eqgeometry%boundary(1)%z(1)
    enddoids%x%y
	
! Close a pulse file
    call call imas_close(idx)
end program

...

 getSlice() CPO vs IDS
Code Block
languagecpp
titleITM
linenumberstrue
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
     
	call euitm_deallocate(idscpo)
    call euitm_close(idx)
end program
Code Block
titleIMAS
linenumberstrue
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

    call ids_deallocate(ids)
	call imas_close(idx)
end program

...