VisuFrenet Subroutine

public subroutine VisuFrenet(sf, nvisu)

Uses

  • proc~~visufrenet~~UsesGraph proc~visufrenet VisuFrenet module~modgvec_analyze_vars MODgvec_Analyze_Vars proc~visufrenet->module~modgvec_analyze_vars module~modgvec_output_csv MODgvec_Output_CSV proc~visufrenet->module~modgvec_output_csv module~modgvec_output_netcdf MODgvec_Output_netcdf proc~visufrenet->module~modgvec_output_netcdf module~modgvec_output_vtk MODgvec_Output_VTK proc~visufrenet->module~modgvec_output_vtk module~modgvec_globals MODgvec_Globals module~modgvec_analyze_vars->module~modgvec_globals module~modgvec_output_csv->module~modgvec_globals module~modgvec_output_netcdf->module~modgvec_globals module~modgvec_output_vtk->module~modgvec_globals iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env

Write evaluation of the axis and signed frenet frame to file

Arguments

Type IntentOptional Attributes Name
class(t_hmap_frenet), intent(in) :: sf
integer, intent(in) :: nvisu

Calls

proc~~visufrenet~~CallsGraph proc~visufrenet VisuFrenet interface~cross CROSS proc~visufrenet->interface~cross proc~hmap_frenet_eval_x0_fromrz t_hmap_frenet%hmap_frenet_eval_X0_fromRZ proc~visufrenet->proc~hmap_frenet_eval_x0_fromrz proc~hmap_frenet_sigma t_hmap_frenet%hmap_frenet_sigma proc~visufrenet->proc~hmap_frenet_sigma proc~writedatatonetcdf WriteDataToNETCDF proc~visufrenet->proc~writedatatonetcdf proc~writedatatovtk WriteDataToVTK proc~visufrenet->proc~writedatatovtk writedatatocsv writedatatocsv proc~visufrenet->writedatatocsv interface~cross->interface~cross proc~eval_fourier1d eval_fourier1d proc~hmap_frenet_eval_x0_fromrz->proc~eval_fourier1d proc~ncfile_def_dim t_ncfile%ncfile_def_dim proc~writedatatonetcdf->proc~ncfile_def_dim proc~ncfile_end_def_mode t_ncfile%ncfile_end_def_mode proc~writedatatonetcdf->proc~ncfile_end_def_mode proc~ncfile_init ncfile_init proc~writedatatonetcdf->proc~ncfile_init proc~ncfile_put_array t_ncfile%ncfile_put_array proc~writedatatonetcdf->proc~ncfile_put_array proc~ncfile_put_attributes_char t_ncfile%ncfile_put_attributes_char proc~writedatatonetcdf->proc~ncfile_put_attributes_char proc~ncfile_put_char t_ncfile%ncfile_put_char proc~writedatatonetcdf->proc~ncfile_put_char interface~getfreeunit GETFREEUNIT proc~writedatatovtk->interface~getfreeunit sizeof_f sizeof_f proc~writedatatovtk->sizeof_f interface~getfreeunit->interface~getfreeunit nf90_def_dim nf90_def_dim proc~ncfile_def_dim->nf90_def_dim proc~mpi_check_single_access mpi_check_single_access proc~ncfile_def_dim->proc~mpi_check_single_access proc~ncfile_handle_error t_ncfile%ncfile_handle_error proc~ncfile_def_dim->proc~ncfile_handle_error nf90_enddef nf90_enddef proc~ncfile_end_def_mode->nf90_enddef proc~ncfile_end_def_mode->proc~mpi_check_single_access proc~ncfile_end_def_mode->proc~ncfile_handle_error proc~ncfile_init->proc~mpi_check_single_access proc~ncfile_openfile t_ncfile%ncfile_openfile proc~ncfile_init->proc~ncfile_openfile nf90_def_var nf90_def_var proc~ncfile_put_array->nf90_def_var nf90_inq_varid nf90_inq_varid proc~ncfile_put_array->nf90_inq_varid nf90_put_var nf90_put_var proc~ncfile_put_array->nf90_put_var proc~ncfile_put_array->proc~mpi_check_single_access proc~ncfile_put_array->proc~ncfile_handle_error proc~ncfile_put_array->proc~ncfile_openfile proc~ncfile_put_attributes_char->nf90_inq_varid nf90_put_att nf90_put_att proc~ncfile_put_attributes_char->nf90_put_att proc~ncfile_put_attributes_char->proc~mpi_check_single_access proc~ncfile_put_attributes_char->proc~ncfile_handle_error proc~ncfile_put_char->nf90_def_var proc~ncfile_put_char->nf90_inq_varid proc~ncfile_put_char->nf90_put_var proc~ncfile_put_char->proc~mpi_check_single_access proc~ncfile_put_char->proc~ncfile_handle_error proc~ncfile_handle_error->proc~mpi_check_single_access nf90_strerror nf90_strerror proc~ncfile_handle_error->nf90_strerror proc~ncfile_openfile->proc~mpi_check_single_access proc~ncfile_openfile->proc~ncfile_handle_error nf90_create nf90_create proc~ncfile_openfile->nf90_create nf90_open nf90_open proc~ncfile_openfile->nf90_open

Called by

proc~~visufrenet~~CalledByGraph proc~visufrenet VisuFrenet proc~hmap_frenet_init_params hmap_frenet_init_params proc~hmap_frenet_init_params->proc~visufrenet interface~t_hmap_frenet t_hmap_frenet interface~t_hmap_frenet->proc~hmap_frenet_init_params proc~hmap_frenet_init hmap_frenet_init interface~t_hmap_frenet->proc~hmap_frenet_init proc~hmap_frenet_init->proc~hmap_frenet_init_params

Source Code

SUBROUTINE VisuFrenet( sf ,nvisu)
! MODULES
USE MODgvec_Output_CSV,     ONLY: WriteDataToCSV
USE MODgvec_Output_vtk,     ONLY: WriteDataToVTK
USE MODgvec_Output_netcdf,     ONLY: WriteDataToNETCDF
USE MODgvec_Analyze_vars,     ONLY: outfileType
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
  CLASS(t_hmap_frenet), INTENT(IN) :: sf
  INTEGER             , INTENT(IN) :: nvisu     !!
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
  REAL(wp),DIMENSION(3) :: X0,X0p,X0pp,X0ppp,T,N,B
  REAL(wp)              :: zeta,sigma,lp,absB,kappa,tau,eps
  INTEGER               :: iVar,ivisu,itest
  INTEGER,PARAMETER     :: nVars=26
  CHARACTER(LEN=20)     :: VarNames(1:nVars)
  REAL(wp)              :: values(1:nVars,1:nvisu*sf%nfp+1)
!===================================================================================================================================
  IF(nvisu.LE.0) RETURN
  iVar=0
  VarNames(ivar+1:iVar+3)=(/ "x", "y", "z"/);iVar=iVar+3
  VarNames(ivar+1:iVar+3)=(/"TX","TY","TZ"/);iVar=iVar+3
  VarNames(ivar+1:iVar+3)=(/"NX","NY","NZ"/);iVar=iVar+3
  VarNames(ivar+1:iVar+3)=(/"BX","BY","BZ"/);iVar=iVar+3
  VarNames(iVar+1       )="zeta_norm"       ;iVar=iVar+1
  VarNames(iVar+1       )="sigma_sign"      ;iVar=iVar+1
  VarNames(iVar+1       )="lprime"          ;iVar=iVar+1
  VarNames(iVar+1       )="kappa"           ;iVar=iVar+1
  VarNames(iVar+1       )="tau"             ;iVar=iVar+1
  VarNames(ivar+1:iVar+3)=(/ "X0pX", "X0pY", "X0pZ"/);iVar=iVar+3
  VarNames(ivar+1:iVar+3)=(/ "X0ppX", "X0ppY", "X0ppZ"/);iVar=iVar+3
  VarNames(ivar+1:iVar+3)=(/ "X0pppX", "X0pppY", "X0pppZ"/);iVar=iVar+3

!  values=0.
  DO ivisu=1,nvisu*sf%nfp+1
    eps=0.
    kappa=0.
    itest=0
    DO WHILE(kappa.LT.1.0e-6)! for tau being meaningful
      zeta=(REAL(ivisu-1,wp)+eps)/REAL(nvisu*sf%nfp,wp)*TWOPI
      CALL sf%eval_X0(zeta,X0,X0p,X0pp,X0ppp)
      lp=SQRT(SUM(X0p*X0p))
      T=X0p/lp
      B=CROSS(X0p,X0pp)
      absB=SQRT(SUM(B*B))
      kappa=absB/(lp**3)
      itest=itest+1
      eps=10**REAL(-16+itest,wp)
      IF(itest.EQ.15)THEN !meaningful kappa not found
        B=0.
        kappa=1.0e-6 !-12
        absB=1.
      END IF
    END DO
    tau=SUM(X0ppp*B)/(absB**2)
    B=B/absB
    N=CROSS(B,T)
    sigma=sf%sigma(zeta)
    iVar=0
    values(ivar+1:iVar+3,ivisu)=X0                ;iVar=iVar+3
    values(ivar+1:iVar+3,ivisu)=T                 ;iVar=iVar+3
    values(ivar+1:iVar+3,ivisu)=N*sigma           ;iVar=iVar+3
    values(ivar+1:iVar+3,ivisu)=B*sigma           ;iVar=iVar+3
    values(iVar+1       ,ivisu)=zeta*sf%nfp/TWOPI ;iVar=iVar+1
    values(iVar+1       ,ivisu)=sigma             ;iVar=iVar+1
    values(iVar+1       ,ivisu)=lp                ;iVar=iVar+1
    values(iVar+1       ,ivisu)=kappa             ;iVar=iVar+1
    values(iVar+1       ,ivisu)=tau               ;iVar=iVar+1
    values(ivar+1:iVar+3,ivisu)=X0p               ;iVar=iVar+3
    values(ivar+1:iVar+3,ivisu)=X0pp              ;iVar=iVar+3
    values(ivar+1:iVar+3,ivisu)=X0ppp             ;iVar=iVar+3
  END DO !ivisu
  IF((outfileType.EQ.1).OR.(outfileType.EQ.12))THEN
    CALL WriteDataToVTK(1,3,nVars-3,(/nvisu*sf%nfp/),1,VarNames(4:nVars),values(1:3,:),values(4:nVars,:),"visu_hmap_frenet.vtu")
  END IF
  IF((outfileType.EQ.2).OR.(outfileType.EQ.12))THEN
#if NETCDF
    CALL WriteDataToNETCDF(1,3,nVars-3,(/nvisu*sf%nfp/),(/"dim_zeta"/),VarNames(4:nVars),values(1:3,:),values(4:nVars,:), &
         "visu_hmap_frenet")
#else
    CALL WriteDataToCSV(VarNames(:) ,values, TRIM("out_visu_hmap_frenet.csv") ,append_in=.FALSE.)
#endif
  END IF
END SUBROUTINE VisuFrenet