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

Compare with Current View Page History

« Previous Version 5 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

 

 

4. Open example file

put() CPO vs IDS
$TUTORIAL_DIR/ids_basics/python/put_ids_array.py
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('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
$TUTORIAL_DIR/ids_basics/python/put_ids_slices.py
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(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

 

 

 

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)
    arraySize = size(eqArray)
    write (*,*) "Number of slices: ", arraySize
    
! 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)
    arraySize = size(ids%time)
    write (*,*) "Number of slices: ", arraySize
    
!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
     
	call euitm_deallocate(cpo)
    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

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

 

4. Compile the code
 
shell> make clean
shell> make

5. Run the code

shell> ./get_ids_array.exe
shell> ./get_ids_slices.exe

 

 

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

1.2. 4. FC2K - Fortran Code to Kepler

It is possible to encapsulate Fortran/C++ code with Java code that represents Kepler actor. This way, you can easily incorporate your Fortran code with existing Kepler workflow. In order to make it happen you will have to:

  1. Prepare Fortran code that has a subroutine to be called and is compiled as a library
  2. Prepare FC2K based description of the actor
  3. Recompile Kepler with newly created actor

After these steps are performed, you will have an access to Kepler actor that encapsulates your Fortran code.

All these topics will be covered in separate tutorial: 1.4 Using FC2K for embedding Fortran code into Kepler

 

  • No labels