FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | strlen | |||
character(len=strlen), | intent(in) | :: | file_name | |||
integer, | intent(in) | :: | mp_comm | |||
real, | intent(inout), | dimension(2*ntgrid) | :: | gryfx_theta | ||
type(gryfx_parameters_type), | intent(in) | :: | gryfx_parameters |
subroutine init_gs2_gryfx(strlen, file_name, mp_comm, &
gryfx_theta, gryfx_parameters )
use gs2_main, only: initialize_gs2
use gs2_main, only: initialize_equations
use gs2_main, only: initialize_diagnostics
use gs2_main, only: prepare_miller_geometry_overrides
use gs2_main, only: prepare_profiles_overrides
use gs2_main, only: prepare_initial_values_overrides
use gs2_main, only: prepare_kt_grids_overrides
use theta_grid, only: ntgrid
use nonlinear_terms, only: gryfx_zonal
use mp, only: mp_abort, broadcast
use unit_tests, only: debug_message
use geometry, only: equal_arc
use gs2_save, only: init_dt
use gs2_time, only: init_delt, dt_not_set
implicit none
integer, intent(in) :: strlen
character (len=strlen), intent (in) :: file_name
integer, intent(in) :: mp_comm
real, intent(inout), dimension(2*ntgrid) :: gryfx_theta
type(gryfx_parameters_type), intent(in) :: gryfx_parameters
integer :: istatus
real :: delt, delt1, delt2, delt_max
state%mp_comm = mp_comm
state%is_trinity_job = .true.
state%run_name_external = .true.
state%run_name = file_name
state%external_job_id = gryfx_parameters%job_id
state%trinity_timestep = gryfx_parameters%trinity_timestep
state%trinity_iteration = gryfx_parameters%trinity_iteration
gryfx_zonal%on = .true.
call initialize_gs2(state)
!set overrides of naky, x0, y0, dt, vnewk here.
!currently this is hard-coded in kt_grids.f90 and run_parameters.f90
!just search for "GRYFX"
if(.not. test_flag) then
call prepare_miller_geometry_overrides(state)
call set_miller_geometry_overrides
end if
call prepare_kt_grids_overrides(state)
call debug_message(verb, 'setting overrides')
state%init%kt_ov%override_gryfx = .true.
state%init%kt_ov%gryfx = .true.
if(.not. test_flag) then
call prepare_profiles_overrides(state)
call set_profiles_overrides
endif
if (gryfx_parameters%restart==1) then
! Load the saved value of dt
call init_dt(delt, delt1, delt2, delt_max, istatus, dt_not_set)
call init_delt(delt, delt1, delt2)
! Set up gs2 state so that it reads the
! initial values from the restart file.
call prepare_initial_values_overrides(state)
if (state%init%initval_ov%in_memory) then
call mp_abort('ERROR: Gryfx/GS2 restart does not currently work with &
& in_memory set to true', .true.)
end if
state%init%initval_ov%override = .true.
else
state%init%initval_ov%override = .false.
end if
call initialize_equations(state)
call debug_message(verb, 'initialize_equations complete.')
call initialize_diagnostics(state)
call debug_message(verb, 'initialize_diagnostics complete.')
call broadcast(equal_arc)
if (equal_arc) then
write (*,*) 'equal_arc true'
call mp_abort(&
"gs2_gryfx_zonal doesn't work with equal_arc yet", .true.)
end if
call allocate_gryfx_zonal_arrays
call broadcast(gryfx_theta)
call create_interp_matrices(gryfx_theta)
contains
!> FIXME : Add documentation
subroutine set_miller_geometry_overrides
state%init%mgeo_ov%override_rhoc = .true.
state%init%mgeo_ov%rhoc = gryfx_parameters%rhoc
state%init%mgeo_ov%override_qinp = .true.
state%init%mgeo_ov%qinp = gryfx_parameters%qinp ! qval_gs2
state%init%mgeo_ov%override_shat = .true.
state%init%mgeo_ov%shat = gryfx_parameters%shat ! shat_gs2
state%init%mgeo_ov%override_rgeo_lcfs = .true.
state%init%mgeo_ov%rgeo_lcfs = gryfx_parameters%rgeo_lcfs
state%init%mgeo_ov%override_rgeo_local = .true.
state%init%mgeo_ov%rgeo_local = gryfx_parameters%rgeo_local
! OK
state%init%mgeo_ov%override_geoType = .true.
state%init%mgeo_ov%geoType = 0
state%init%mgeo_ov%override_aSurf = .false.
!state%init%mgeo_ov%aSurf = gryfx_parameters%aSurf
state%init%mgeo_ov%override_shift = .true.
state%init%mgeo_ov%shift = gryfx_parameters%shift
state%init%mgeo_ov%override_shiftVert = .false.
!state%init%mgeo_ov%shiftVert = gryfx_parameters%shiftVert
state%init%mgeo_ov%override_mMode = .false.
!state%init%mgeo_ov%mMode = gryfx_parameters%mMode
state%init%mgeo_ov%override_nMode = .false.
!state%init%mgeo_ov%nMode = gryfx_parameters%nMode
state%init%mgeo_ov%override_deltam = .false.
!state%init%mgeo_ov%deltam = gryfx_parameters%deltam
state%init%mgeo_ov%override_deltan = .true.
state%init%mgeo_ov%deltan = gryfx_parameters%tri
state%init%mgeo_ov%override_deltampri = .true.
state%init%mgeo_ov%deltampri = gryfx_parameters%akappri
state%init%mgeo_ov%override_deltanpri = .true.
state%init%mgeo_ov%deltanpri = gryfx_parameters%tripri
state%init%mgeo_ov%override_thetam = .false.
!state%init%mgeo_ov%thetam = gryfx_parameters%thetam
state%init%mgeo_ov%override_thetan = .false.
!state%init%mgeo_ov%thetan = gryfx_parameters%thetan
state%init%mgeo_ov%override_betaprim = .true.
state%init%mgeo_ov%betaprim = gryfx_parameters%beta_prime_input
end subroutine set_miller_geometry_overrides
!> FIXME : Add documentation
subroutine set_profiles_overrides
use species, only: nspec
integer :: is, isg
do is = 1,nspec
isg = is
state%init%prof_ov%override_dens(isg) = .true.
state%init%prof_ov%dens(isg) = gryfx_parameters%dens(is) ! dens_ms(1,is)/dens_ms(1,idens)
state%init%prof_ov%override_temp(isg) = .true.
state%init%prof_ov%temp(isg) = gryfx_parameters%temp(is) ! temp_ms(1,is)/temp_ms(1,1)
state%init%prof_ov%override_fprim(isg) = .true.
state%init%prof_ov%fprim(isg) = gryfx_parameters%fprim(is) ! fprim_gs2(is)
state%init%prof_ov%override_tprim(isg) = .true.
state%init%prof_ov%tprim(isg) = gryfx_parameters%tprim(is) ! tprim_gs2(is)
state%init%prof_ov%override_vnewk(isg) = .true.
state%init%prof_ov%vnewk(isg) = gryfx_parameters%nu(is) ! nu_gs2(is)
end do
!gs2_state%init%prof_ov%override_g_exb = .true.
!gs2_state%init%prof_ov%g_exb = gexb_gs2
!gs2_state%init%prof_ov%override_mach = .true.
!gs2_state%init%prof_ov%mach = mach_gs2
end subroutine set_profiles_overrides
end subroutine init_gs2_gryfx