Versions Compared

Key

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

...

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 CPO via IDS via UAL.

 

 

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

...

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

Exercise no. 3 (approx. 15 min)

...

2. Go to example directory

cd $TUTORIAL_DIR/cpoids_basics/python/

3. Execute sample code

Code Block
languagebash
shell> python ./put_cpoids_array.py
shell> python ./put_cpoids_slices.py

 

 

4. Open example file

Handling CPOsIDSs: put() vs. putSlice()
Code Block
languagepy
title$TUTORIAL_DIR/cpo_basics/python/put_cpo_array.py
linenumberstrue
import sys
from pylab import * 
import ual

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

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

cpoids.equilibriumArray.resize(10)
equi = cpoids.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
cpoids.close()
Code Block
languagepy
title$TUTORIAL_DIR/cpo_basics/python/put_cpo_slices.py
linenumberstrue
import sys
from pylab import * 
import ual

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

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

equi = cpoids.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
cpoids.close()
VI related notice
I will use VI in every place where text files are modified. If you have any other text file editor of your choice - fell free to use it instead.

 

vi $TUTORIAL_DIR/cpoids_basics/python/put_cpoids.py

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

...

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

...

2. Change directory to a demo location for this exercise

cd $TUTORIAL_DIR/cpoids_basics/fortran
 
Handling CPOsIDSs: get() vs. getSlice()
Code Block
title$TUTORIAL_DIR/cpo_basics/fortran/get_cpo_array.f90
linenumberstrue
program diagnostic
    use euitm_schemas
    use euitm_routines
    implicit none

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



    call euitm_open('euitm', 14, 4, idx)
    
    call euitm_get(idx, 'equilibrium', eqArray)
    arraySize = size(eqArray)
    write (*,*) "Number of slices: ", arraySize
    
	do i=1, arraySize
    	write (*,*) "Time: ", eqArray(i)%time
        write (*,*) "Value of r: ", eqArray(i)%eqgeometry%boundary(1)%r(1)
        write (*,*) "Value of z: ", eqArray(i)%eqgeometry%boundary(1)%z(1)
    enddo
    call euitm_close(idx)
end program
Code Block
title$TUTORIAL_DIR/cpo_basics/fortran/get_cpo_slices.f90
linenumberstrue
program diagnostic
    use euitm_schemas
    use euitm_routines  
    implicit none

    integer :: idx, i, arraySize 
    type (type_equilibrium) :: equilibrium
    real(EUITM_R8), pointer :: timeVector(:)
    real(EUITM_R8) :: time

    call euitm_open('euitm', 14, 4, idx)
    
    call euitm_get_times(idx, 'equilibrium',timeVector)
    
    arraySize = size(timeVector)
    write (*,*) "Number of slices: ", arraySize
    write (*,*) "Time vector: ", timeVector
    
	do i = 1, arraySize
        time = timeVector(i)
        call euitm_get_slice(idx, 'equilibrium', equilibrium, time, 1)
            
    	write (*,*) "Time [", time, "]: ",  equilibrium%time
        write (*,*) "Value of r: ", equilibrium%eqgeometry%boundary(1)%r(1)
        write (*,*) "Value of z: ", equilibrium%eqgeometry%boundary(1)%z(1)
    enddo
    
	call euitm_close(idx)
end program

...

5. Run the code

Code Block
shell> ./get_cpoids_array.exe
shell> ./get_cpoids_slices.exe

 

 

6. You should see values that we have stored using Python based code.

...