...
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
...
...
Fortran
4. Open example file
Handling IDSes: put() CPO vs . putSlice()IDS |
---|
Code Block |
---|
language | py |
---|
title | $TUTORIAL_DIR/ids_basics/python/put_ids_array.py |
---|
linenumbers | true |
---|
| 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 |
---|
language | py |
---|
title | $TUTORIAL_DIR/ids_basics/python/put_ids_slices.py |
---|
linenumbers | true |
---|
| 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 |
---|
linenumbers | true |
---|
| 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 |
---|
linenumbers | true |
---|
| 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 |
---|
language | cpp |
---|
title | ITM |
---|
linenumbers | true |
---|
| 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 |
---|
| 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 |
|
...