MODgvec_boundaryFromFile Module

Module **Read in the boundary from a specifically defined NETCDF file **

deallocate everything


Uses

  • module~~modgvec_boundaryfromfile~~UsesGraph module~modgvec_boundaryfromfile MODgvec_boundaryFromFile module~modgvec_globals MODgvec_Globals module~modgvec_boundaryfromfile->module~modgvec_globals module~modgvec_io_netcdf MODgvec_IO_NETCDF module~modgvec_boundaryfromfile->module~modgvec_io_netcdf iso_fortran_env iso_fortran_env module~modgvec_globals->iso_fortran_env module~modgvec_io_netcdf->module~modgvec_globals

Used by

  • module~~modgvec_boundaryfromfile~~UsedByGraph module~modgvec_boundaryfromfile MODgvec_boundaryFromFile module~modgvec_mhd3d_vars MODgvec_MHD3D_Vars module~modgvec_mhd3d_vars->module~modgvec_boundaryfromfile proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->module~modgvec_boundaryfromfile proc~initmhd3d->module~modgvec_mhd3d_vars proc~addboundaryperturbation AddBoundaryPerturbation proc~addboundaryperturbation->module~modgvec_mhd3d_vars proc~analyze Analyze proc~analyze->module~modgvec_mhd3d_vars proc~applybc_fstrong ApplyBC_Fstrong proc~applybc_fstrong->module~modgvec_mhd3d_vars proc~buildprecond BuildPrecond proc~buildprecond->module~modgvec_mhd3d_vars proc~evalaux EvalAux proc~evalaux->module~modgvec_mhd3d_vars proc~evalenergy EvalEnergy proc~evalenergy->module~modgvec_mhd3d_vars proc~evalforce EvalForce proc~evalforce->module~modgvec_mhd3d_vars proc~evaluate_hmap evaluate_hmap proc~evaluate_hmap->module~modgvec_mhd3d_vars proc~evaluate_hmap_derivs evaluate_hmap_derivs proc~evaluate_hmap_derivs->module~modgvec_mhd3d_vars proc~evaluate_hmap_only evaluate_hmap_only proc~evaluate_hmap_only->module~modgvec_mhd3d_vars proc~evaluate_hmap_only_pw evaluate_hmap_only_pw proc~evaluate_hmap_only_pw->module~modgvec_mhd3d_vars proc~evaluate_hmap_pw evaluate_hmap_pw proc~evaluate_hmap_pw->module~modgvec_mhd3d_vars proc~evaluate_jac_h_derivs evaluate_jac_h_derivs proc~evaluate_jac_h_derivs->module~modgvec_mhd3d_vars proc~evaluate_jac_h_derivs_pw evaluate_jac_h_derivs_pw proc~evaluate_jac_h_derivs_pw->module~modgvec_mhd3d_vars proc~evaluate_metric_derivs evaluate_metric_derivs proc~evaluate_metric_derivs->module~modgvec_mhd3d_vars proc~evaluate_profile evaluate_profile proc~evaluate_profile->module~modgvec_mhd3d_vars proc~evaluate_rho2_profile evaluate_rho2_profile proc~evaluate_rho2_profile->module~modgvec_mhd3d_vars proc~finalizemhd3d t_functional_mhd3d%FinalizeMHD3D proc~finalizemhd3d->module~modgvec_mhd3d_vars proc~finalizemhd3d_evalfunc FinalizeMHD3D_EvalFunc proc~finalizemhd3d_evalfunc->module~modgvec_mhd3d_vars proc~find_pest_angles_2d find_pest_angles_2D proc~find_pest_angles_2d->module~modgvec_mhd3d_vars proc~get_boozer get_boozer proc~get_boozer->module~modgvec_mhd3d_vars proc~init Init proc~init->module~modgvec_mhd3d_vars proc~init_boozer init_boozer proc~init_boozer->module~modgvec_mhd3d_vars proc~init_la_from_solution Init_LA_from_Solution proc~init_la_from_solution->module~modgvec_mhd3d_vars proc~initaverageaxis InitAverageAxis proc~initaverageaxis->module~modgvec_mhd3d_vars proc~initializemhd3d_evalfunc InitializeMHD3D_evalFunc proc~initializemhd3d_evalfunc->module~modgvec_mhd3d_vars proc~initprofilesgp InitProfilesGP proc~initprofilesgp->module~modgvec_mhd3d_vars proc~initsolutionmhd3d t_functional_mhd3d%InitSolutionMHD3D proc~initsolutionmhd3d->module~modgvec_mhd3d_vars proc~initsolution~2 InitSolution proc~initsolution~2->module~modgvec_mhd3d_vars proc~minimize minimize proc~minimize->module~modgvec_mhd3d_vars proc~minimizemhd3d t_functional_mhd3d%MinimizeMHD3D proc~minimizemhd3d->module~modgvec_mhd3d_vars proc~restartfromstate RestartFromState proc~restartfromstate->module~modgvec_mhd3d_vars proc~select_base select_base proc~select_base->module~modgvec_mhd3d_vars proc~select_base_dofs select_base_dofs proc~select_base_dofs->module~modgvec_mhd3d_vars proc~writestatetoascii WriteStateToASCII proc~writestatetoascii->module~modgvec_mhd3d_vars

Interfaces

private interface boundaryFromFile_new


Derived Types

type, public ::  t_boundaryFromFile

Components

Type Visibility Attributes Name Initial
logical, public :: initialized = .FALSE.

set to true in init, set to false in free

integer, public :: nfp

number of field periods

integer, public :: m_max

maximum number of fourier modes of the boundary in theta direction

integer, public :: n_max

maximum number of fourier modes of the boundary in zeta direction (one field period only!)

integer, public :: ntheta

number of interpolation points in theta and zeta (one field period, half grid!!)

integer, public :: nzeta

number of interpolation points in theta and zeta (one field period, half grid!!)

integer, public :: lasym

=0: symmetric, =1: asymmetric fourier series

real(kind=wp), public, ALLOCATABLE :: theta(:)

theta positions [0,2pi), should be half grid!

real(kind=wp), public, ALLOCATABLE :: zeta(:)

zeta positions [0,2pi/nfp) should be on half grid!

real(kind=wp), public, ALLOCATABLE :: X(:,:)

boundary data X/Y positions X[i, j]=X(theta[i],zeta[j]), Y[i, j]=Y(theta[i],zeta[j]), i=0...ntheta-1,j=0...nzeta-1

real(kind=wp), public, ALLOCATABLE :: Y(:,:)

boundary data X/Y positions X[i, j]=X(theta[i],zeta[j]), Y[i, j]=Y(theta[i],zeta[j]), i=0...ntheta-1,j=0...nzeta-1

class(t_ncfile), public, ALLOCATABLE :: nc

container for netcdf-file

character(len=1024), public :: ncfile = " "

name of netcdf file with axis information

Type-Bound Procedures

procedure, public :: init => bff_init
procedure, public :: convert_to_modes => bff_convert_to_modes
procedure, public :: free => bff_free

Subroutines

public subroutine boundaryFromFile_new(sf, fileString)

Allocate class and call init

Arguments

Type IntentOptional Attributes Name
class(t_boundaryFromFile), intent(inout), ALLOCATABLE :: sf

self

character(len=*), intent(in) :: fileString

private subroutine bff_init(sf, fileString)

initialize class: read file and save data to class structure

Arguments

Type IntentOptional Attributes Name
class(t_boundaryFromFile), intent(inout) :: sf

self

character(len=*), intent(in) :: fileString

private subroutine ReadNETCDF(sf)

READ FROM SPECIFIC NETCDF FILE: general data and "boundary" group ======= HEADER OF THE NETCDF FILE VERSION 3.1 =================================================================================== === FILE DESCRIPTION: * axis, normal and binormal of the frame are given in cartesian coordinates along the curve parameter zeta [0,2pi]. * The curve is allowed to have a field periodicity NFP, but the curve must be provided on a full turn. * The data is given in REAL SPACE, sampled along equidistant zeta point positions: zeta(i)=(i+0.5)/nzeta * (2pi/NFP), i=0,...,nzeta-1 always shifted by (2pi/NFP) for the next field period. Thus the number of points along the axis for a full turn is NFP*nzeta * definition of the axis-following frame in cartesian coordinates ( boundary surface at rho=1):

Read more…

Arguments

Type IntentOptional Attributes Name
class(t_boundaryFromFile), intent(inout) :: sf

self

private subroutine bff_convert_to_modes(sf, x1_fbase_in, x2_fbase_in, X1_b, X2_b, scale_minor_radius)

convert from interpolation points X=> X1_b, Y=> X2_b to fourier modes, given from the input fbase convert to maximum allowable number of modes (ntheta>=2m_max+1, nzeta>=2n_max+1) the final m_max/n_max can be smaller or larger. If larger, a change of base is necessary

Arguments

Type IntentOptional Attributes Name
class(t_boundaryFromFile), intent(inout) :: sf

self

type(t_fBase), intent(in) :: x1_fbase_in
type(t_fBase), intent(in) :: x2_fbase_in
real(kind=wp), intent(inout) :: X1_b(x1_fbase_in%modes)
real(kind=wp), intent(inout) :: X2_b(x2_fbase_in%modes)
real(kind=wp), intent(in) :: scale_minor_radius

private subroutine bff_free(sf)

Arguments

Type IntentOptional Attributes Name
class(t_boundaryFromFile), intent(inout) :: sf

self