write_data_to_vtk_c Subroutine

private subroutine write_data_to_vtk_c(dim1, vecdim, nVal, NPlot, nElems, strlen, VarNames_c, Coord, Values, FileString_c) bind(c,name='write_data_to_vtk')

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT), value :: dim1
integer(kind=C_INT), value :: vecdim
integer(kind=C_INT), value :: nVal
integer(kind=C_INT), intent(in) :: NPlot(dim1)
integer(kind=C_INT), value :: nElems
integer(kind=C_INT), value :: strlen
character(kind=C_CHAR, len=1), intent(in) :: VarNames_c(strlen,nVal)
real(kind=CWP), intent(in) :: Coord(vecdim,1:PRODUCT(Nplot+1),nElems)
real(kind=CWP), intent(in) :: Values(nVal,1:PRODUCT(Nplot+1),nElems)
character(kind=C_CHAR, len=1), dimension(*) :: FileString_c

Calls

proc~~write_data_to_vtk_c~~CallsGraph proc~write_data_to_vtk_c write_data_to_vtk_c proc~c_to_f_string c_to_f_string proc~write_data_to_vtk_c->proc~c_to_f_string proc~get_c_string_length get_c_string_length proc~write_data_to_vtk_c->proc~get_c_string_length proc~get_fortran_string get_fortran_string proc~write_data_to_vtk_c->proc~get_fortran_string proc~writedatatovtk WriteDataToVTK proc~write_data_to_vtk_c->proc~writedatatovtk interface~getfreeunit GETFREEUNIT proc~writedatatovtk->interface~getfreeunit sizeof_f sizeof_f proc~writedatatovtk->sizeof_f interface~getfreeunit->interface~getfreeunit

Source Code

  subroutine write_data_to_vtk_c( &
       dim1,vecDim,nVal,NPlot,nElems,strlen,VarNames_c,Coord,Values,FileString_c) &
       bind(c,name='write_data_to_vtk')
    ! INPUT VARIABLES
    ! dimension of the data (either 2=quads or 3=hexas)
    INTEGER(kind=C_INT), value :: dim1
    INTEGER(kind=C_INT), value :: vecdim ! dimension of coordinates
    INTEGER(kind=C_INT), value :: nVal ! Number of nodal output variables
    ! Number of output points per element: (nPlot+1)**dim1
    INTEGER(kind=C_INT),INTENT(IN) :: NPlot(dim1)
    INTEGER(kind=C_INT), value :: nElems ! Number of output elements
    ! CoordinatesVector
    REAL(kind=CWP),INTENT(IN) :: Coord(vecdim,1:PRODUCT(Nplot+1),nElems)
    integer(kind=C_INT), value :: strlen ! lenght of strings in VarNames_c
    ! Names of all variables that will be written out
    character(kind=C_CHAR,len=1), intent(in) :: VarNames_c(strlen,nVal)
    REAL(kind=CWP),INTENT(IN) :: Values(nVal,1:PRODUCT(Nplot+1),nElems) ! Statevector
    ! Output file name
    character(kind=C_CHAR, len=1), dimension(*) :: FileString_c

    character(len=strlen) :: VarNames_f(nVal)
    character(len=strlen) :: VarName
    character(len=:), allocatable :: FileString_f
    integer :: val, nchar1, nchar2

    nchar1 = get_c_string_length(FileString_c)

    if(nchar1.gt.256) stop "c string length is restricted to 256"

    ! retrieve file name into Fortran string
    call c_to_f_string(FileString_c, FileString_f)

    ! save all var names into VarNames_f
    do val = 1, nVal
      nchar2 = get_c_string_length(VarNames_c(:,val))
      if(nchar2.gt.strlen) stop "c string length is restricted to strlen"
      VarName = get_fortran_string(VarNames_c(:,val),nchar2)
      VarNames_f(val) = trim(VarName(1:nchar2))
    end do

    call WriteDataToVTK( &
         dim1,vecDim,nVal,NPlot,nElems,VarNames_f,Coord,Values,FileString_f)

  end subroutine write_data_to_vtk_c