Skip to content

Commit

Permalink
Start cleaning namelists.
Browse files Browse the repository at this point in the history
  • Loading branch information
HanneThienpondt committed Feb 27, 2025
1 parent 94d1d90 commit 8f3b2c8
Show file tree
Hide file tree
Showing 19 changed files with 368 additions and 140 deletions.
8 changes: 8 additions & 0 deletions COMPILATION/Makefile.depend
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ stella_mod = \
$(OBJ_DIR)/mp.o \
$(OBJ_DIR)/mp_lu_decomposition.o \
$(OBJ_DIR)/multibox.o \
$(OBJ_DIR)/namelist_adiabatic_electrons.o \
$(OBJ_DIR)/namelist_dissipation.o \
$(OBJ_DIR)/neasyf.o \
$(OBJ_DIR)/neoclassical_terms.o \
Expand Down Expand Up @@ -131,6 +132,7 @@ update_input_file_program_mod = \
$(OBJ_DIR)/mp.o \
$(OBJ_DIR)/mp_lu_decomposition.o \
$(OBJ_DIR)/multibox.o \
$(OBJ_DIR)/namelist_adiabatic_electrons.o \
$(OBJ_DIR)/namelist_dissipation.o \
$(OBJ_DIR)/neoclassical_terms.o \
$(OBJ_DIR)/netcdf_utils.o \
Expand Down Expand Up @@ -806,6 +808,10 @@ $(OBJ_DIR)/multibox.o: \
$(OBJ_DIR)/stella_time.o \
$(OBJ_DIR)/text_options.o \
$(OBJ_DIR)/zgrid.o
$(OBJ_DIR)/namelist_adiabatic_electrons.o: \
$(OBJ_DIR)/file_utils.o \
$(OBJ_DIR)/mp.o \
$(OBJ_DIR)/text_options.o
$(OBJ_DIR)/namelist_dissipation.o: \
$(OBJ_DIR)/file_utils.o \
$(OBJ_DIR)/mp.o
Expand Down Expand Up @@ -874,6 +880,7 @@ $(OBJ_DIR)/parameters_numerical.o: \
$(OBJ_DIR)/parameters_physics.o: \
$(OBJ_DIR)/file_utils.o \
$(OBJ_DIR)/mp.o \
$(OBJ_DIR)/namelist_adiabatic_electrons.o \
$(OBJ_DIR)/text_options.o
$(OBJ_DIR)/ran.o:
$(OBJ_DIR)/redistribute.o: \
Expand Down Expand Up @@ -1078,6 +1085,7 @@ $(OBJ_DIR)/update_input_file.o: \
$(OBJ_DIR)/hyper.o \
$(OBJ_DIR)/init_g.o \
$(OBJ_DIR)/multibox.o \
$(OBJ_DIR)/namelist_adiabatic_electrons.o \
$(OBJ_DIR)/namelist_dissipation.o \
$(OBJ_DIR)/neoclassical_terms.o \
$(OBJ_DIR)/parameters_diagnostics.o \
Expand Down
12 changes: 6 additions & 6 deletions COMPILATION/Makefile.stella
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ export GEOMETRY=$(STELLA_DIR)/geometry
export GRIDS=$(STELLA_DIR)/grids
export GYROKINETIC_TERMS=$(STELLA_DIR)/gyrokinetic_terms
export NEOCLASSICAL=$(STELLA_DIR)/neoclassical
export PARAMETERS=$(STELLA_DIR)/parameters
export NAMELISTS=$(STELLA_DIR)/namelists
export RADIAL_VARIATION=$(STELLA_DIR)/radial_variation
export INPUTFILETOOL=$(STELLA_DIR)/parameters/input_file_tool
export INPUTFILETOOL=$(STELLA_DIR)/namelists/input_file_tool
SUBFOLDERS := $(CALCULATIONS) $(DIAGNOSTICS) $(COLLISIONS) $(FIELDS) $(GEOMETRY) $(GRIDS)
SUBFOLDERS := $(SUBFOLDERS) $(GYROKINETIC_TERMS) $(NEOCLASSICAL) $(PARAMETERS) $(RADIAL_VARIATION)
SUBFOLDERS := $(SUBFOLDERS) $(GYROKINETIC_TERMS) $(NEOCLASSICAL) $(NAMELISTS) $(RADIAL_VARIATION)
SUBFOLDERS := $(SUBFOLDERS) $(INPUTFILETOOL)
VPATH_SUBFOLDERS := :$(CALCULATIONS):$(DIAGNOSTICS):$(COLLISIONS):$(FIELDS):$(GEOMETRY):$(GRIDS):
VPATH_SUBFOLDERS := :$(VPATH_SUBFOLDERS):$(GYROKINETIC_TERMS):$(NEOCLASSICAL):$(PARAMETERS):$(RADIAL_VARIATION):
VPATH_SUBFOLDERS := :$(VPATH_SUBFOLDERS):$(GYROKINETIC_TERMS):$(NEOCLASSICAL):$(NAMELISTS):$(RADIAL_VARIATION):
VPATH_SUBFOLDERS := :$(VPATH_SUBFOLDERS):$(INPUTFILETOOL):

# Check directories
Expand Down Expand Up @@ -266,7 +266,7 @@ $(OBJ)/%.o: $(GYROKINETIC_TERMS)/%.f90 $(external_modules) | $(OBJ) $(MOD)
$(OBJ)/%.o: $(NEOCLASSICAL)/%.f90 $(external_modules) | $(OBJ) $(MOD)
@echo " (stella) *.f90 to *.o: $(notdir $<)"
@$(FC) $(F90FLAGS) $(INC_FLAGS) $(MOD_FLAGS_STELLA) -o $@ -c $<
$(OBJ)/%.o: $(PARAMETERS)/%.f90 $(external_modules) | $(OBJ) $(MOD)
$(OBJ)/%.o: $(NAMELISTS)/%.f90 $(external_modules) | $(OBJ) $(MOD)
@echo " (stella) *.f90 to *.o: $(notdir $<)"
@$(FC) $(F90FLAGS) $(INC_FLAGS) $(MOD_FLAGS_STELLA) -o $@ -c $<
$(OBJ)/%.o: $(RADIAL_VARIATION)/%.f90 $(external_modules) | $(OBJ) $(MOD)
Expand Down Expand Up @@ -432,7 +432,7 @@ remove-temp-files:
@echo " - remove temp files"
@-rm -f $(UTILS)/*~ $(CALCULATIONS)/*~ $(DIAGNOSTICS)/*~ $(COLLISIONS)/*~
@-rm -f $(FIELDS)/*~ $(GEOMETRY)/*~ $(GRIDS)/*~ $(GYROKINETIC_TERMS)/*~
@-rm -f $(NEOCLASSICAL)/*~ $(PARAMETERS)/*~ $(RADIAL_VARIATION)/*~
@-rm -f $(NEOCLASSICAL)/*~ $(NAMELISTS)/*~ $(RADIAL_VARIATION)/*~

# In case cmake was used, clean it up as well
CMAKE := $(COMPILATION_DIR)/build_cmake
Expand Down
File renamed without changes.
125 changes: 125 additions & 0 deletions STELLA_CODE/namelists/namelist_adiabatic_electrons.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
!###############################################################################
!###################### READ ADIABATIC ELECTRONS NAMELIST ######################
!###############################################################################
! Read the <adiabatic_electrons> namelist in the input file:
!
! &adiabatic_electroms
! adiabatic_option = 'field-line-average-term'
! tite = 1.0
! nine = 1.0
!/
!###############################################################################
module namelist_adiabatic_electrons

implicit none

public :: read_namelist

private

contains

subroutine read_namelist(adiabatic_option_switch, nine, tite, &
adiabatic_option_fieldlineavg, adiabatic_option_periodic)

use mp, only: proc0

implicit none

real, intent(out) :: tite, nine
integer, intent(out) :: adiabatic_option_switch
integer, intent(out) :: adiabatic_option_periodic
integer, intent(out) :: adiabatic_option_fieldlineavg

! Local variable to set <adiabatic_option_switch>
character(30) :: adiabatic_option

if (.not. proc0) return
call set_default_parameters
call read_input_file
call check_inputs

contains

!**********************************************************************
! DEFAULT PARAMETERS !
!**********************************************************************
! Set the default input parameters.
!**********************************************************************
subroutine set_default_parameters()

implicit none

adiabatic_option = 'field-line-average-term'
tite = 1.0
nine = 1.0

end subroutine set_default_parameters


!**********************************************************************
! READ INPUT FILE !
!**********************************************************************
! Overwrite any default options with those specified in the input file.
! Then change the other parameters consistently.
!**********************************************************************
subroutine read_input_file

use file_utils, only: input_unit_exist, error_unit
use text_options, only: text_option, get_option_value

implicit none

! Variables needed to read the input file
integer :: ierr, in_file
logical :: dexist

! Create parameters for the text option
integer, parameter :: periodic = 1
integer, parameter :: fieldlineavg = 2

! Link text options for <adiabatic_option> to an integer value
type(text_option), dimension(6), parameter :: adiabaticopts = &
(/text_option('default', fieldlineavg), &
text_option('no-field-line-average-term', periodic), &
text_option('field-line-average-term', fieldlineavg), &
text_option('iphi00=0', periodic), &
text_option('iphi00=1', periodic), &
text_option('iphi00=2', fieldlineavg)/)

! Define variables in the <adiabatic_electrons> namelist
namelist /adiabatic_electrons/ adiabatic_option, tite, nine

!----------------------------------------------------------------------

! Save the values of the adiabatic option
adiabatic_option_periodic = periodic
adiabatic_option_fieldlineavg = fieldlineavg

! Overwrite the default input parameters by those specified in the input file
in_file = input_unit_exist("adiabatic_electrons", dexist)
if (dexist) read (unit=in_file, nml=adiabatic_electrons)

! Read the text option in <adiabatic_option> and store it in <adiabatic_option_switch>
ierr = error_unit()
call get_option_value(adiabatic_option, adiabaticopts, adiabatic_option_switch, &
ierr, "adiabatic_option in parameters_physics")

end subroutine read_input_file


!**********************************************************************
! CHECK INPUTS !
!**********************************************************************
! Make sure that the input variables are set correctly.
!**********************************************************************
subroutine check_inputs

implicit none

end subroutine check_inputs

end subroutine read_namelist

end module namelist_adiabatic_electrons

92 changes: 92 additions & 0 deletions STELLA_CODE/namelists/namelist_dissipation.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
!###############################################################################
!########################## READ DISSIPATION NAMELIST ##########################
!###############################################################################
! Read the <dissipation> namelist in the input file
!###############################################################################
module namelist_dissipation

implicit none

public :: read_namelist

private

contains

subroutine read_namelist(include_collisions, collisions_implicit, collision_model, hyper_dissipation)

use mp, only: proc0

implicit none

logical, intent(out) :: include_collisions, collisions_implicit, hyper_dissipation
character(30), intent(out) :: collision_model

if (.not. proc0) return
call set_default_parameters
call read_input_file
call check_inputs

contains

!**********************************************************************
! READ INPUT FILE !
!**********************************************************************
! Overwrite any default options with those specified in the input file.
! Then change the other parameters consistently.
!**********************************************************************
subroutine read_input_file

use file_utils, only: input_unit_exist

implicit none

integer :: in_file
logical :: dexist

! Variables in the <dissipation> namelist
namelist /dissipation/ include_collisions, collisions_implicit, collision_model, hyper_dissipation

! Overwrite the default input parameters by those specified in the input file
in_file = input_unit_exist("dissipation", dexist)
if (dexist) read (unit=in_file, nml=dissipation)

end subroutine read_input_file


!**********************************************************************
! CHECK INPUTS !
!**********************************************************************
! Make sure that the input variables are set correctly.
!**********************************************************************
subroutine check_inputs

implicit none

if (.not. include_collisions) collisions_implicit = .false.

end subroutine check_inputs


!**********************************************************************
! DEFAULT PARAMETERS !
!**********************************************************************
! Set the default input parameters.
!**********************************************************************
subroutine set_default_parameters()

implicit none

include_collisions = .false.
collisions_implicit = .true.
hyper_dissipation = .false.

! dougherty or fokker-planck
collision_model = "dougherty"

end subroutine set_default_parameters

end subroutine read_namelist

end module namelist_dissipation

Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,13 @@ subroutine write_parameters_physics(unit_number, write_input_file)
use file_utils, only: input_unit_exist
use parameters_physics, only: set_default_parameters_physics => set_default_parameters
use parameters_physics, only: include_parallel_streaming, include_mirror, nonlinear
use parameters_physics, only: xdriftknob, ydriftknob, wstarknob, adiabatic_option, prp_shear_enabled
use parameters_physics, only: xdriftknob, ydriftknob, wstarknob, prp_shear_enabled
use parameters_physics, only: hammett_flow_shear, include_pressure_variation, include_geometric_variation
use parameters_physics, only: include_parallel_nonlinearity, suppress_zonal_interaction, full_flux_surface
use parameters_physics, only: include_apar, include_bpar, radial_variation
use parameters_physics, only: beta, zeff, tite, nine, rhostar, vnew_ref
use parameters_physics, only: beta, zeff, rhostar, vnew_ref
use parameters_physics, only: g_exb, g_exbfac, omprimfac, irhostar
use namelist_adiabatic_electrons, only: read_adiabatic_electrons_namelist => read_namelist

implicit none

Expand All @@ -212,13 +213,19 @@ subroutine write_parameters_physics(unit_number, write_input_file)
integer :: unit_number_temp
logical :: new_nml_exist

! Define the variables in the namelist <adiabatic_electrons>
integer :: adiabatic_option_switch, adiabatic_option_periodic, adiabatic_option_fieldlineavg
character(30) :: adiabatic_option
real :: tite, nine

! Current namelist
namelist /parameters_physics/ include_parallel_streaming, include_mirror, nonlinear, &
adiabatic_option, prp_shear_enabled, include_apar, include_bpar, radial_variation, &
hammett_flow_shear, include_pressure_variation, include_geometric_variation, &
include_parallel_nonlinearity, suppress_zonal_interaction, full_flux_surface, &
xdriftknob, ydriftknob, wstarknob, g_exb, g_exbfac, omprimfac, irhostar, &
beta, zeff, tite, nine, rhostar, vnew_ref
beta, zeff, tite, nine, rhostar, vnew_ref
namelist /adiabatic_electrons/ adiabatic_option, tite, nine

!-------------------------------------------------------------------------

Expand All @@ -236,9 +243,16 @@ subroutine write_parameters_physics(unit_number, write_input_file)
call backwards_compatibility_physics_flags()
call backwards_compatibility_time_advance_knobs()
end if

! TODO - Finish this
call read_adiabatic_electrons_namelist(adiabatic_option_switch, nine, tite, &
adiabatic_option_fieldlineavg, adiabatic_option_periodic)
if (adiabatic_option_switch==adiabatic_option_periodic) adiabatic_option = 'no-field-line-average-term'
if (adiabatic_option_switch==adiabatic_option_fieldlineavg) adiabatic_option = 'field-line-average-term'

! Write the namelist to <run_name>_with_defaults.in or default_stella_input.in
write(unit=unit_number, nml=parameters_physics)
write(unit=unit_number, nml=adiabatic_electrons)

contains

Expand Down
File renamed without changes.
Loading

0 comments on commit 8f3b2c8

Please sign in to comment.