Merged in admin/update_next_with_8.1.0 (pull request #570)
88802fc·Author: Joseph Parker·Closed by: Joseph Parker·2021-12-10
Description
No conflicts to fix!
Autogenerated message:
Increase nstep in fft test
Make two levels of benchmarking test
Make two levels for fields_local test
Increase nstep in fields_local
Make levels for init benchmark
Make bm levels in g_to_gf redist test
Increase level 2 test size
Update tests for g_to_le
Update g to xxf test
xxf to yxf test
Update timestep test
Reduce number of steps in level 2 test
Double nstep in timestep level 2 test
Remove layouts in xxf to yxf redist test
This test is independent of g_lo layout!
Update readme to include benchmark levels
Update ffts test to take three different layouts
Change wdriftttp to be distribution function shaped.
This ensures we distribute the memory associated with this, potentially large, array. This comes at the cost of using more memory at low core counts. The new approach uses less memory when nproc > nlambda. Cases that don't satisfy this may be expected to be relatively small jobs where resource requirements are less demanding.
This approach may also help avoid a potential bug where the lambda dependent Coriolis drift is added to the totally trapped drift array. Before this commit this would "clobber" any previously set value.
Update utils to bring in get_git_version
Add some basic command line arguments
Add a routine to estimate the NL source error based on order comparison
Use the order based error check to enable timestep reduction
Far from ideal as can currently "fight" with the traditional CFL limit checks.
Add missing declaration
Add code_dt_max to mirror code_dt_min in gs2_time.
Also adds save_dt_max to set the maximum time step.
Use code_dt_max rather than dt0 when determining new time step.
More closely mirrors treatment of minimum timestep.
Store maximum timestep in restart files
Restore maximum time step when initialising time step from restart file
Use dt_not_set rather than hard coded value when we can't find time variables in the restart file
Change how we detect issue with restoring time steps from restart file
Now we allow per-variable failure detection so that we restore everything that we can but fall back to defaults for the variables we couldn't restore.
We will still get netcdf error messages to indicate there has been an issue.
Updating NL error estimate to use variable time step coefficients
Tweak level 2 timestep benchmark to get more sweetspots
Merge init and time advance benchmarks into a single test
Delete init and timestep benchmarks that are superceded by the new benchmark
Add gitignore
Add note in README that timestep test can be skipped by setting nstep=0
Update get_adams_bashforth_coefficients to allow user specified maximum order
Update order based error estimate to use get_adams_bashforth_coefficients
Exclude hyper terms when istep <= 0
This removes these terms from the response calculation. See issue #133 for some discussion.
Add some documentation of lgridset
Add some more documentation
Refactor lgridset to split out passing and trapped calculations
Refactor lgridset related code further.
Hopefully this will help make this code easier to test and more readable
Remove inaccurate comments
Remove commented code and add some comments
Used passed weights array rather than module level one
Add a note
Add an integration test for new_trap_int
Currently this fails due to the mod vpa and related cases
Split the new_trap_int weights calculation into two sub-domains
Found to significantly reduce error in test cases
Add a high resolution tight tolerance test case
Use minimum of CLF/error time limit
Ensures we don't exceed the cfl limit based on the error estimate.
Add functions to get the module-level config for each module
Add gs2_config_type::get_configs to copy all module-level configs
Write out the used input parameter values for GS2
Remove cfl scaling factor on error based time step limit
Add module for creating a standard header for files and output
Use standard_header() in various outputs
Fix typo in gs2_init template
Add file git_hash.fpp that gets recompiled on git repo changes
This file is deliberately not in a module, so please don't add one! We want to recompile this file when the git hash or state changes, but we don't want to recompile the entire project when that happens. If this were in a module, then anything that used it would pick up a dependency and therefore need rebuilding on new commits. Instead, we just rebuild this file and link the object in at the link stage -- so the executables get relinked, but that's it. standard_header.f90 has explicit interfaces for these functions, so please use that module in order to call these function.
A downside of having this file sort of out of the dependency tree generated by fortdep, is that we can't tell which executables depend on it. Currently, the dependency on this file needs to be added manually -- it also needs to be added to the front of the dependency list for the linker to actually see the function implementations.
Regenerate git_hash.f90 if not using ONE_STEP_PP
Add a routine to resample the output of eikcoefs onto a different theta resolution
Add routine to set geometry module level outputs
from passed data. We shouldn't really need to do this but may be useful as an interim implementation.
Add ntheta_geometry input to allow specification of resolution in geometry calculation
Use new geometry routines rather than calling eikcoeffs directly
Add missing declarations
Release notes for 8.1
Add line wrapping
Add section on tests
Add that users can speify npassing
Add module for generating UUIDs
Contains its own MT19937 implementation in order to not interact with random number generation in the rest of the code
Add run UUID to standard_header
Use parameter for length of UUID
Remove unused local variable
Increase integer kind for intermediate large values
Convert standard_header to a type to cache date/time and UUID
Ensures we get a consistent time across all files/outputs where header is used
Make sure header is only printed once
Move g0 work array to dist_fn_arrays to aid reuse in other modules
Rename to g0_tmp in the move to help distinguish from other g0 appearances throughout the code.
Pass in the weight distribution in flux calculation routines rather than rely on "global" arrays being allocated and set
Ensure we set the correct lower bound on passed array
Rename g0_tmp to g_work
Rewrite getan in terms of a routine which takes the distribution function to use.
Rename getan_from_g to getan_from_dfn
Add a routine to calculate the potentials from a given distribution function
This routine considers the passed distribution function to be the "raw" non-adibatic distribution function, rather than the function evolved by GS2, g.
Add initial_condition_is_nonadiabatic_dfn input flag
If true then we assume the initial condition specifies the initial non-adibatic distribution function, rather than the compound function evolved by GS2. If true this triggers a calculation of the consistent fields and uses these to form the function evolved by GS2.
Move iglo loop into invert_rhs_1
Replace return with cycle
Move constant calculations out of loop
Rearrange loop body to group similar parts
Remove some repeated logic with named variable
Tidy up comments
Give names to some more common logic
Make use of named logic variables to make logic a bit clearer
Simplify logic in one place
Switch is_ttp for is_not_ttp
Add some comments
Add is_passing logical
Add is_trapped logical
Try to consolidate the logic for calling self_periodic
Add some comments and small restructure
Add some minor comments
Add some brief documentation to invert_rhs_1
Remove ntgl and ntgr as used inconsistently with +/-ntgrid
Add a sketch of the routine structure
Add doc string for self_periodic
Bugfix: Use explicit allocation to ensure lower bound is set correctly.
Switch from function to subroutine to tidy up the code
If we haven't set ntheta_geometry then use old approach
Correct link formatting
Add pfunit test case using ntheta_geometry to calculate coefficients at higher accuracy
Expand existing Miller pfunit test to check more of the outputs
Add a helper routine to dump the current golden answers
Tidy up helper routine formatting
Correct typo
Use better name for lambda grid in passing grid setup
Do something with the error flag returned by get_weights
Rename al to lambda_grid when setting up trapped weights.
Split the trapped lambda grid into two routines for the two different methods
Fix typo
Update init_dt call in gryfx code
Add docstrings
Fix couple of typos
Add vspace_integration_error and exit_reason files to CLEANCOMMAND
Add regression test for nonadiabatic initialisation
Note the test only just passes at this resolution/duration. However, running for longer we find that the result converges to the same result as fields_local_single_mode.in
Add some crude tests of calculation of potentials from initial conditions
Tidy up comment
Calculate new theta grid by interpolating in index space rather than assuming uniform spacing.
Should hopefully allow us to capture choices such as equal_arc.
Update pfunit test to account for change in theta grid when resampling
Use periodic spline in eeq for periodic boundary values
Add some comments for consideration
Ensure thetab and r_bound deallocated with other arrays
Adopt periodic spline in deq::bound
Ensure thetab and r_bound deallocated in deq
Update and expand efit pfunit golden answer test
Update utils commit
Try to work out if we should drop the last point in periodic spline setup
Update utils commit to get bug fix for splines
Drop the duplicate point in boundary spline for geqdsk files
Drop the duplicate point in boundary spline for dfit files
Enable file_safety_check in new diagnostics
Reuse subroutine across old and new diagnostics
Improve error messages if restart files are not writable
Include actual name of restart directory
Include error message from system
Note that the system error message may not be very useful in the case where the directory doesn't exist, because we're actually checking we can write a file. Fortran doesn't seem to have a portable, intrinsic method of checking directories
Add changelog for 8.1
Correct type in collision_model documentation
Ensure max_vel initialised when dt_cfl initialised
Pull cfl calculation out of add_nl and into add_explicit
This puts both the cfl and error based time step limit calculations next to each other.
Restructure code slightly to reduce duplication
Add use_cfl_limit flag to enable users to disable the cfl check
Only reduce the max_vel if we have at least one check active
Simplify logic slightly.
Add ingen output reporting on timestep control methods
Expand comment slightly
Ensure code_dt_cfl is set even if no checks are active
Remove name
Start to restructure test clean targets
Fix restarting test and ensure test_name set
Remove CLEANCOMMAND and use targets instead to specify extra files for tests to clean up
Ensure we remove all created files
Ensure benchmarks are cleaned with correct target
Tweak how we set GK_HEAD_DIR and report the value in test_make
Add rule to rebuild Makefile.utils if not present
Basically just for running make from individual test directories, in which case GK_HEAD_DIR is not set when we include tests/Makefile.tests_common which would lead to errors without this line. Ideally we might instead set GK_HEAD_DIR correctly here.
Add some helper targets which allow us to build individual tests by running make in the test directory
Ensure GK_HEAD_UTILS is set in Makefile.tests_common
Small tweak to avoid double backslash
Move test_level to Makefiles.tests_common
Fix GK_HEAD_DIR definition
Make use of GK_HEAD_DIR rather than relative path in local_test recipe
Try auto-enabling colour output from make
Move definition of processName so that sub-make invocations have access to this
Move definition of processName so that sub-make invocations have access to this
Add a comment explaining defaulting of WITH_COLOR
Make local_test target a bit quieter
Add reset escape code
Make use of existing escape code when colouring test output
Now the test colouring is automatically disabled in we're not using colouring for the rest of make. This should allow us to remove NO_TEST_COLOURS as a separate option for controlling test colour output.
Move default TEST_LEVEL back into tests_and_benchmarks but add fallback option
Fallback option in tests_common ensures test_level is set even if we run make in the test directory and defaults to the current tests level such that the individual case will be active by default.
Default QUIET if not set in tests_common
Add clean as synonym for clean_individual_test
Remove duplicated dependency between individual and local test
Tweak approach to specifying local test files for clean
Reduces duplication and number of lines involved in setting the files to remove
Fix typo
Make sure a few of our helper codes are built by default
Add breaking changes document
Fix for fact SLEPc removed FEAST for v3.12 and v3.13
Switch src/diagnostics/generate_diagnostics_ascii.rb for python
Fix typo in routine name
Replace ruby generator for diagnostics_create_and_write with python version
Remove ruby generator for diagnostics_create_and_write
Convert generate_read_chease from ruby to python
Add missing _chease
Avoid some duplication
Correct generated allocations
Replace ruby with python in simpledataio_read generation
Replace ruby with python in simpledataio_write generation
Remove filtering of real promotion flags
Minor tweaks to avoid special treatment of real promotion
Minor makefile tidy up
Remove special recipes no longer required as we don't need special handling for double promotion
Remove a bit of unused code from makefiles
Fix name in tests makefile
Fix name in pfunit tests
Fix typo, density->temperature
Add changes missing from PR 448 required to register cgyro option
Port/update dist_fn namelist docstrings
Update comment in generate_read_chease.py
Replace ruby with python in overrides generation
Remove generated gs2_init and ruby generator
Update the gs2_init template file
Replace ruby with python in gs2_init generator
Update docstrings for init_g_knobs namelist
Update docstrings for parameter_scan_knobs namelist
Change name of included files to fit with fortdep assumptions
Make gs2_init use preprocessor includes rather than fortran includes to aid fortdep.
Update namelist docstrings for theta_grid_gridgen_knobs
Mostly not helpful because they are not documented anywhere, and so their meaning needs to be determined by understanding griden, which is non-trivial
Update knobs namelists
Update layouts namelist
Fix makefile for generate gs2_init dependencies
Bugfix for going up/down
Tweaks to theta_grid_eik_knobs namelist docstrings
Add link to geometry spec docs in init_g_knobs docstring
Tweak theta_grid_file_knobs namelist docstring
Correct l2norm calculation for complex variables
Add "restart" as a synonym for ginit_option = "many"
Move most of ginit_option docs out into standalone page
Fix formatting and links in init_g_knobs docstrings
Add/fix some procedure docstrings in init_g
Remove some commented out code and fix some formatting in init_g
Fix overzealous re-formatting
Fix LaTeX in normalisations docstrings
Fix typo in run_parameters
Be more specific in a couple of namelist docstrings
Add an option to find eigenvalues of the time derivative operator rather than the time advance one.
Add a test for the field equation consistency
Add gitignore
Bugfix for flipped case
Rename ddt to analyse_ddt_operator
Make the condition number a property of the supercell type
Add ability to save condition number alongside response matrix dump
Make fields_local save condition number when dumping response matrix
Add option to output condition number at GK_VERBOSITY=1
Remove CLEANCOMMAND
Finish renaming ddt to analyse_ddt_operator
Fix eigenvalue timer reporting
Make sure INCLUDES is always passed to preprocessor commands
For ONE_STEP_PP builds this is already achieved as INCLUDES is included in F90FLAGS
Add helper script to compile and build petsc and slepc
Add slepc to gfortran 10 CI job
Use correct script name
Switch from lapack to openblas
Add mention of python for code generation in readme
Add some flags to give more control over building pfunit
Start to add CI caching.
Separate cache per job, disabled for most jobs currently.
Try to install pfunit in cached area
Try to enable pfunit tests in gfortran 10 build
Revert "Try to enable pfunit tests in gfortran 10 build"
Infrastructure for using pfunit v4 not ready for CI
Reduce number of pfunit build jobs in CI to account for actual hardware provided
Move code for setting up intel compiler into script to tidy gitlab yaml
Add some timing to intel build script
Don't report the trapped/passing error breakdown for Radau-Gauss grids
Remove unused use
Make sure that code_dt_cfl is initialised.
Existing code in nonlinear_terms:add_explicit attempting to do this does not appear to trigger.
Add file git_hash.fpp that gets recompiled on git repo changes
This file is deliberately not in a module, so please don't add one! We want to recompile this file when the git hash or state changes, but we don't want to recompile the entire project when that happens. If this were in a module, then anything that used it would pick up a dependency and therefore need rebuilding on new commits. Instead, we just rebuild this file and link the object in at the link stage -- so the executables get relinked, but that's it. git_version_mod.f90 has explicit interfaces for these functions, so please use that module in order to call these functions.
A downside of having this file sort of out of the dependency tree generated by fortdep, is that we can't tell which executables depend on it. Currently, the dependency on this file needs to be added manually -- it also needs to be added to the front of the dependency list for the linker to actually see the function implementations.
Add function for git version from git describe
Add some rudimentary build configuration output to command line args
Only match release tags; print git version in test_make
Add module-level config instance getter to generator script
Add utils uuid branch
Small tweak to account for change in type of gexp_1 with SHMEM
Replace uuid module with utils version
Fix wrong argument in parse_command_line
Move build config output to build_config module
Alternative approach, putting breaking changes in changelog
Only use the git version to check for rebuilding of git_hash.fpp
Add runtime error for wrong command line flags
Force immediate evaluation of GIT_STATE
Remove refs to file_safety_check not working in new diagnostics
Make write_heating a synonym of write_hrate, deprecate latter
Use write_heating everywhere instead of write_hrate
Make write_hrate private to base config module
Expand argument documentation
Fix very minor typo
Add integrated test to check that our cfl and error based time step adjustment can stabilise a case
Add an example of a test expected to fail
Add some documentation around the response matrices and condition number
Fix relative links
Fix Ford interceptor script to be compatible with Ford 6.1
Add comment about known issue with in_memory
Make sure nstep_measure is at least 2
Don't reset istep_last when reading parameters in nonlinear_terms
This avoids an issue whereby each time we change the timestep we reset istep_last to zero, therefore misidentifying repeat calls to add_explicit on the same iteration.
Add pytest-based test for command line arguments
Update to latest utils
Update to latest utils
Immediately evaluate make variable
Guard create-test-virtualenv recipe in case python not present
Use sh instead of bash in create-test-virtualenv
Wider support
Use $(call message*) for make messages
Add folder issue to changelog
Finish removing uuid module
Remove duplicated variable in antenna
no_driver was essentially a synonym for ant_off or not having the namelist present in the input file.
This removes the module level (private) variable ant_off in favour of (existing public) no_driver. The input variable still exists.
We now also set ant_off = no_driver in the config object for consistency
Try to fix in_memory for nonlinear runs -- ensure we copy explicit source terms as well
Addition of new option " hzero_passing_electron" in knobs default value false. when true the non-adiabatic piece of the distribution function for passing electrons in non-zonal modes is set to 0 these changes are not yet compatible with the collision operator.
Additions of 2 methods of making the collision operator consistent with a non-adiabatic response h=0 for passing electrons this is an intermediate check in before a final clean version the methods checked in with this version are controlled with hzero_passing_electron_collisions,hzero_passing_electron_collisions_matrix in knobs, default false. hzero_passing_electron_collisions, operates by changing the tri-diagonal solver in the pitch angle scattering routines. hzero_passing_electron_collisions_matrix operates by changing the pitch angle scattering matrix coefficients without changing the solver. In the 2nd option it was necessary to change g_adjust to enforce that h=0 when transforming from g -> h this means that now fphi < 0 is inconsistent with this feature
Fix linking issue with write_default_input_file
Needs git_hash.o
Fix bug in theta_grid_params::get_theta_grid_params_config
Commit of cleaned version of the non-zonal non-adiabatic electron response h=0 feature. This feature is controlled by 2 separate logicals in the species_knobs namelist
hzero_passing_electron = .true. (default.false.) Sets the electron response h =0 in the collision as part of the algorithm and in g_adjust when going from g_gs2 to h (g_wesson in the note in g_adjust). This change restricts fphi >= 0 if it is not already restricted to be so.
hzero_passing_electron_collisions_matrix = .true. (default.false.) Modifies the collision operator for electron pitch angle scattering so that the pitch angle scattering piece of the collision operator vanishes for the passing particles (i.e.the tri-diagonal solver uses the identity matrix for passing particles) and the trapped particles use a 0 boundary condition at the trapped-passing boundary.
In this we regard wfb point in phase space as passing since the parallel boundary condition can propagate h=0 for the world's fattest banana.
for ms_pgelres:
changes for the hzero_passing_electron option
The previous method did not modify the response matrix. This method modifies the calculation of the potential. The response of the passing non-zonal electrons is known to be g = - J_0 e phi/ T F_0, this is enforced in the calculation of potential in the field solve, and in the calculation of the initial condition. This behaviour is consistent with the previous modifications.
in species_knobs to enable the h = 0 for non-zonal passing electron model. To enforce that the initial condition is always made consistent, regardless of the value of force_maxwell_reinit, set
hzero_passing_electron_response_init = .true.
in species_knobs.
Replace anon with nonmaxwell_corr
Replace another anon
Change intents to allow side effect
Fix variable names
Conditionally ensure_single_val on gamtot_hzero
Reduce duplication in collisions
Remove unused use statement
Add method documentation
Avoid touching generated code
Remove unnecessary call to init_antenna_data
We now don't call it in the first place if no_driver
Add hybrid_electron species type
Aim to use this instead of hzero_* flags to enable hybrid electron treatment
Avoid possible bug -- make sure is always set if required
Make use of is_electron_species rather than comparing against electron_species
Add is_hybrid_electron_species method
Add has_hybrid_electron_species method
Add is_ion_species method
Make has_hybrid_electron_species method public
Also tidy up related functions slightly
Remove hzero_* input flags and instead set from presence of hybrid_electron
Keep separate flags for now to aid testing
Fix typo
Start to add a test of the timestep change code
Ensure that initialized in gs2_init defaults to false.
This ensures we read the init_knobs namelist.
Add some more timestep change test cases but don't run them yet as we expect them to fail
Turn off timestep_change test if we don't have netcdf
We may want to be more selective once the in_memory approach is working and only disable those tests which need to write restart files.
Expand timestep change test to also test that explicit source behaves as expected following an attempt to repeat the current step.
Remove warnings about in_memory now that we have a fix
Try to be more selective about what we disable when we don't have netcdf
Enable the in_memory version of timestep_change test
Expect this to fail until PR #490 or equivalent is merged
Disable timestep_change test if no fft library
Revert "Disable timestep_change test if no fft library"
Change gfarray into an allocatable array from an automatic array
Different compilers treat automatic arrays in different ways. For example gfortran puts them on the heap whilst intel puts them on the stack. The gfarray array is likely to be large and can cause problems with intel when there is a limit to the stack size.
This change avoids the memory requirements associated with gfarray when it is not required.
Tweak header comment format
Remove some more large gf related automatic arrays
Improve the formatting of the config namelist output
Turn off DEBUG in intel builds again
Make problem size smaller in timestep change test
Remove unused namelists and disable unused diagnostics
Improve/fix tolerance in slab_itg test and update target answer
Increase number of time steps to get slightly more reliable results
Specify a seed to help make run more reproducible
Improve comment
Add a version of the slab_itg test which adds in hybrid electrons
We'd expect this case to give us results identical to the original adiabatic electron version
CI: Print version and build-config
Workaround for Cray bug which didn't like type renaming on use
Use is_hybrid_electron_species in appropriate places
Add test for writing used inputs
Use git version in standard header
Fix used inputs test for no-deps build; require netcdf
Add indexed version of get_module_config to generator
Rename standard_header module to match filename
Add method to coordinate reporting on condition numbers
Moves all reporting to proc0 to avoid issues with error_unit not being defined on other processors
Add comment about performance
Print a better warning message if Python not found
Send which pytest errors to /dev/null; allow setting name of exe
Try to fix CI failures by ensuring array initialised
Add file descriptions to headers of output files
Avoid error from invalid floating point operation
If theta_grid_knobs::equilibrium_option isn't eik, then neither surfarea nor dvdrhon are set, resulting in an invalid floating point operation error. grhoavg is already calculated, so just use that. It will still be undefined if eik isn't used, but at least we won't be dividing by NaNs.
Another solution would be to only set these variables if eik is used
Apply initialisation fix to gf_fields_local as well
Ensure D_v and D_eta are always initialised
This avoids the use of uninitialised variables in dist_fn:get_heating when not using certain hyper models
Try to avoid divide by zero in estimate_error
Initialise outputs in getan_nogath
This avoids a potential bug in using uninitialised data elsewhere
Add a Debug CI case which forces initialisation of values and watches for invalid operations
Initialise user_dt_cfl and code_dt_cfl to dt_not_set
Avoids potential uses of uninitialised data
Initialise moments if in replay mode
Initialised phi_corr_2pi if in replay mode
Turn on flags
Guard against some potential uses of uninitialised file units
Don't call new diagnostics clean up if using old diagnostics
Avoids possible attempt to deallocate unallocated array in diagnostics tests
Ensure big is initialised prior to use.
Leave do_write_parity as soon as possible
Make sure thetaShift and beta_0 are set when setting surface properties for testing
Make theta_grid provide surfarea and dvdrhon
Update utils to get redistribute bug fix
Attmept to fix bug in crpgrad not being initialised
Avoids potential uninitialised data being used for nperiod>1
This could impact runs which use the Coriolis drift (Cdrift)
Remove jacob from eik_get_grids and salpha_get_grids interface as not set
We did not (although perhaps could) set jacob in these routines despite it being marked as intent(out). This could lead to the use of uninitialised data.
Make sure ctmp is initialised
We need to initialise the receiving buffer in g2le redistibutes as currently our redistribute does not populate every element in the receiver. Presumably this is because these buffers have a dimension negrid+1 whilst the sending layout only has negrid energy points.
Make sure g2le receiving buffer is initialised
Fix bug in check_g2le where we did not loop over the energy dimension
Use ulim_alloc rather than ulim_proc when reversing array
Avoids issues when running at large processor count and we may not have ulim_proc==ulim_alloc everywhere
Enable debug for gfortran 5 build
Remove DEBUG from debug build and rename
Don't return from save/read restart if n_elements is zero
This could avoid potential hangs when built with parallel netcdf which call barrier after this early return
Avoid n_elements becoming negative
Remove n_elements > 0 guards
Removes a number of preprocessor directives through introduction of runtime parameter.
This can make the code a bit more readable
Remove duplicated include
Simplify treatment of SHMEM directive
Simplify some of the utility routines
Make sure kt_grids_knobs wnml output is a valid namelist
Use proc0 rather than testing iproc
Simplify handling of applying known suffix in some cases
Pull out duplicated code into a function
Expand use of get_file_proc to tidy up the code
Remove duplicate period
Bug prevention -- ensure we set the correct initialized flag when leaving the gs2_save_for_restart routine
Remove initialized flags in gs2_save
These were always supposed to be reset to false but their presence could lead to potential bugs should they ever be left in a true state.
Remove duplicated calls to error_unit
Tidy up handling of optional arguments
Try to reduce scope of variables
Small reduction in memory use by reusing temporary arrays
Make save/restore routines deallocate module level arrays to reduce peak memory slightly
Reduce some duplication
Add some comments
Remove unused exit_in argument to gs2_save_for_restart
Remove optional distfn argument in gs2_save_for_restart
This only resulted in .dfn being added to the file name and fileopt already provides a way to achieve this.
Reduce scope of abort_on_restart_fail
Make sure betaprim is initialised
This can be used to give a smart default for the beta_prime_input value so it is important that this is initialised.
Make sure we don't use uninitialised gryfx parameter
This avoids potential bugs in non-box runs where the gryfx function will return an uninitialised flag to indicate if we're in a gryfx run. If this returns true we would end up changing the time step, number of steps and collision frequency.
Fix typo
Make nonlinear timestep change case a little smaller
Reduce cyclone_itg NL test case size
Dont always print blank line in close_module_test
Avoids large numbers of blank lines when running tests on large processor count
Try to make gs2_diagnostics test better resolved
Remove change to new_trap_int weights calculation for 8.1
Remove associated tests
Actually remove tests from Makefile
Try to reduce the amount of code to represent hybrid electrons
Set h_non_adiabatic to zero in the linear parallel solve (i.e. gnew = -adj). Remove special treatment in getan. Remove gamtot_hzero from field equations.
Whilst these changes successfully reproduce a linear collision scan test case very well need to test this further, particularly non-linearly.
Make sure save_many and read_many are always initialised
Accept any length string in call to set_restart_file
Truncate set_restart_file argument if required (and warn)
Add some comments about c_rate type
Guard against using c_rate based on heating flag
Don't allocate c_rate if heating is false
Add some comments about memory cost of extended correlation diagnostic
Add a couple of more common files to the clean test list
Make runcommand_expect_fail also capture error stream
Add a few tests of our input file handling
Some of these are currently failing either because of bugs in our handling (invalid_input_name_indexed) or because of differences between my assumptions and the actual handling in the code (circular dependencies, missing inputs)
Fix incorrect namelist names
Update utils commit to pull in changes to file_utils
Update config generator to account for changes in indexed namelist handling
Update namelist read handling
Provide a means to pass extra flags to the pfunit cmake command
Make coverage job use more recent image (and compiler)
Fixes issue with coverage job hanging
Update utils commit
Make sure vnm_init is always initialised
Change vnmult initialisation to -1
Always initialise vnmult to the value of vnm_init
This should make sure that restarted jobs set vnmult to the value stored in the restart file rather than defaulting to 1 as would happen otherwise.
Add vnmult to the set of things saved/restored during a timestep change
Make sure vnmult is restored during a timestep change before the collision operator is reinitialised.
Correct logic
Update utils commit to bring in fixes/changes
If pFUnit not found make error message give some more suggestions for how the user can fix this.
Don't initialise input file if automatically initialising file utils
This is required because we now abort if the input file isn't found
Small cleanup around check if geometry needs to initialise fileutils
Create new netCDF files using the netCDF-4 model
Files created using previous versions of GS2 (and using the old diagnostics) will have been created with the "netCDF classic" model. These files can still be opened with netCDF, and simulations can still be restarted using those files.
Note required versions of FFTW and Python
And that HDF5 is only required for linking when using parallel netcdf
Try to account for change in MPI flag name for pfunit between v3 and v4
Add declaration of hyper_in_initialisation
Remove quotes around variable
Add check_frequency test to functional_tests
Add some tests of hybrid electrons
Relax tolerance to account for slight differences between old and new diagnostic calculations
Remove contribution to conservation terms from hybrid-passing electrons
Slightly tweak the logic for detecting adiabatic-passing treatment
Really we should probably wrap this logic up in a single function
Add tools for estimating current and peak memory usage.
Dump estimates at end of run
Add fallback message if can't determine memory use
Fix for markdown nested in HTML for namelist docs
Python-markdown 3.3 changed how the md_in_html extension worked, and it now requires markdown='1' attribute on any HTML tag if it or its children contain markdown. This attribute is ignored for python-markdown < 3.3, so should always be safe to include
Fix for Ford "alias" not present in 6.0.0
Use ensure_netcdf_var_exists in gs2_save::gs2_save_for_restart
This reduces boilerplate code and will enable us to easily enable compression etc. with a change in just one place.
Use ensure_netcdf_dim_exists
Update fields read to get memory usage estimates.
This now seems to better match the output of valgrind's massif tool
Use var/dim exists wrappers in save_response
Use var/dim exists wrappers in eigenmode files
Remove unused use entries
Update utils commit to get access to netcdf compression
Add make flag to default netcdf compression to on
Enable netcdf compression in onestep ci build
Update golden answers due to fix in conservation terms from PR #535
Remove extra call to get_init_field in ginit
Add function to determine if current point is a passing hybrid electron which should be skipped or not.
Use logic wrapper to determine when dealing with passing hybrid electron
Remove fixed hzero flags in favour of use of functions
Try to respect h=0 for hybrid electrons in initial conditions
Currently this is only implemented when the initial conditions are directly h (i.e. initial_condition_is_nonadiabatic_dfn = .true.)
Fix logic inversion init_g::flae
Remove some unused use'd variables
Remove unused use
Avoid using hard-coded species type values
Also rename Slowing to Tracer
Add hybrid type to species report
Add a warning if using hybrid electrons but not initialising h directly
Add comment
Add missing and
Move duplicated code into subroutine
Improve documentation
Respect nonad_zero = .false. in linked boundary conditions
Guard writing used inputs file on rank0
Also pull out into separate function
Rename PARALLEL define to SIMPLEDATAIO_HAS_PARALLEL_NETCDF in order to avoid potential side effects by defining PARALLEL
Remove unused variables
Change format type
Specify kind in conversion to avoid warnings
Remove unused variables in generator
Fix generator to remove unused variables
Put gridgen config parameters in order
Add skip_gridgen flag
Make use of skip_gridgen flag
Add note about skip_gridgen impose assumptions
Disable memory usage message by default and enable through make flag.
Reorder declarations to follow standard more strictly
Replace non-standard kind declaration
Replace non-standard kind declaration
Fix non-standard declarations and declaration order
Update utils commit to fetch fix for uuid_mod
Make sure use_sub is false if the x dimension is split
This avoids potential out of bounds accesses
Add missing g_lo%
Try to make use_sub logic clearer
Don't communicate forbidden region in g_lo <-> le_lo redistribute
Duplicate code for saving/restoring kx_shift for theta0_shift
This should address issue #163 although may lead to warnings when attempting to restart from restart files generated prior to this commit which do not contain theta0_shift
Make sure ingen respects npmax input
Fix typo
Use named variable for repeated logic
Cleanup treatment of optional and remove commented lines
Add comment on shift/jump calculation
Leave exb_shear early if no jumps
Add a comment about use of redistributes
Communicate both sigma at once in exb_shear (flux tube branch)
Communicate both sigma at once in exb_shear (ballooning space branch)
Fix typo
Update utils to get mpi timers and report these at end of run
Remove commented out code
Report redistribute timer breakdown in time report
Add vparknob used to scale vparallel
Note that hybrid electrons are considered experimental in input documentation
Add an ingen warning if using hybrid electrons
Add comment about incompatibility of hybrid model and EM simulations
Move hybrid electron EM warning to run_parameters to avoid circular dependency
Add random_sine initial condition.
Motivation is to provide an initial condition which will satisfy our parallel boundary condition.
Reduce max_mode limit from ntheta/4 to ntheta/8
This avoids sharp oscillations
Swap order of loops such that changing max_mode doesn't change the random numbers for existing mode numbers for fixed seed
Make sure we actually sum the modes
Change mode loop to include even function contributions
Force ky=kx=0 mode to zero in random_sine
Fix typo
Make sure random_sine respects reality
If either nx or ny are zero then we cannot setup the transforms so detect this and abort with a helpful message
This avoids hitting a possible seg-fault/divide by zero
Refactor loop body slightly in order to make it easier to switch out
Time calls to add_explicit_terms
Time calls to vspace_derivatives
Report time spent in collisions and nonlinear terms
Note the collisions time will include time spent in collisions during the initialisation phase as well as advance
Try to work around variable quoting
Change quote type to try to make sure flags get passed correctly
Update utils to current 8.1-RC now dependent features merged
Split out mpi related packages to aid changing this
Update standard test case to F35 and gfortran 11
Update Makefiles commit to get gcc regex fix for version >= 11
Update gfortran10 build to v11 and use mpich
Also enables pfunit tests in this build
Update CI build name
Fix logic inversion
Move field timer out of getfield_local to call site
Needed to more fairly capture the field update done separately in some situations.
Mover field timer out of getfield to call site.
Enables us to capture the field update step as well for fairness.
Record fraction of field solve time spent in MPI
Report field solve mpi time
Don't restrict time_messsage calls to proc0
Make sure fields gf local timers match other implementations
Update utils commit
Write time at which run finishes
Add missing use statements
Update utils to 8.1-RC
Fix version string if exactly on tag
Fix new diagnostics not using netCDF4 file format
Diagnostics test has changed because netCDF4 can have issues with trying to read a file while another process has it open for writing
Write some metadata to netCDF files
Pull redistribute time out into top level entry in timer output
Remove explicit save parameters
Fix writing the netCDF version
Add some special handling for always building a serial version of mp
Add tools for making targets serial and apply to ingen and other serial codes
Tweak method for adding git_hash.o to dependencies for consistency
Move fft_save_wisdom handling to target makefile and use consistent treatment
Update utils commit to fix mp serial build
Update utils commit to get fix for running serial ingen
Write standard metadata as global attributes
This is more in line with various metadata conventions
Add "title" and "Conventions" to netCDF metadata
Remove some misleading metadata from new diagnostics
Make sdatio_(end|recommence)_definitions no-ops with netCDF4
Remove commented out code and minor indentation fixes
Add an internal debug flag to re-enable communication of forbidden region
Add brackets around logic to help clarity
Remove unused variable from simpledataio
Add "comment", "references" metadata to netcdf
Add MODDIR to some dependenices to avoid warnings when preprocessing with gfortran
Move create_metadata to separate file to avoid circular dependency
Add standard metadata to more netCDF files
Update release notes slightly
Show change log and release notes on website
Fix typo
Reference couple of bug fixes and fix typo
Avoid clobbering parallel mp.mod with serial version
Update utils commit to get mp changes for serial build
Make building serial tools as serial opt in for now
Add comment about HDF5 file locking
Add comment about HDF5 file locking in CHANGELOG
Update utils commit to 8.1-RC
Add breaking changes from release notes into changelog
No conflicts to fix!
Autogenerated message:
Increase nstep in fft test
Make two levels of benchmarking test
Make two levels for fields_local test
Increase nstep in fields_local
Make levels for init benchmark
Make bm levels in g_to_gf redist test
Increase level 2 test size
Update tests for g_to_le
Update g to xxf test
xxf to yxf test
Update timestep test
Reduce number of steps in level 2 test
Double nstep in timestep level 2 test
Remove layouts in xxf to yxf redist test
This test is independent of g_lo layout!
Update readme to include benchmark levels
Update ffts test to take three different layouts
Change wdriftttp to be distribution function shaped.
This ensures we distribute the memory associated with this, potentially large, array. This comes at the cost of using more memory at low core counts. The new approach uses less memory when
nproc > nlambda
. Cases that don't satisfy this may be expected to be relatively small jobs where resource requirements are less demanding.This approach may also help avoid a potential bug where the lambda dependent Coriolis drift is added to the totally trapped drift array. Before this commit this would "clobber" any previously set value.
Update utils to bring in get_git_version
Add some basic command line arguments
Add a routine to estimate the NL source error based on order comparison
Use the order based error check to enable timestep reduction
Far from ideal as can currently "fight" with the traditional CFL limit checks.
Add missing declaration
Add code_dt_max to mirror code_dt_min in gs2_time.
Also adds save_dt_max to set the maximum time step.
Use code_dt_max rather than dt0 when determining new time step.
More closely mirrors treatment of minimum timestep.
Store maximum timestep in restart files
Restore maximum time step when initialising time step from restart file
Use dt_not_set rather than hard coded value when we can't find time variables in the restart file
Change how we detect issue with restoring time steps from restart file
Now we allow per-variable failure detection so that we restore everything that we can but fall back to defaults for the variables we couldn't restore.
We will still get netcdf error messages to indicate there has been an issue.
Updating NL error estimate to use variable time step coefficients
Revert "Update utils to bring in get_git_version"
This reverts commit 3f53d5642b856b01454d608af0fdfdf71d5af656.
Move command line parsing to subroutine in gs2_main
Use a single
write
statement, this makes it a bit more obvious how a potentialhelp
argument would need to be formattedOnly check the order based error method after specified number of steps
Add some comments and use the order based target timestep to set the timestep limit and reset state
Make some settings for order based error method be user inputs
Increase size of timestep benchmark
Revert "Increase size of timestep benchmark"
This reverts commit d6ff3edeb3a59a0c3d405671d9b1e0a2400a6492.
Add expensive timestep level 3 benchmark
Tweak level 2 timestep benchmark to get more sweetspots
Merge init and time advance benchmarks into a single test
Delete init and timestep benchmarks that are superceded by the new benchmark
Add gitignore
Add note in README that timestep test can be skipped by setting nstep=0
Update get_adams_bashforth_coefficients to allow user specified maximum order
Update order based error estimate to use get_adams_bashforth_coefficients
Exclude hyper terms when istep <= 0
This removes these terms from the response calculation. See issue #133 for some discussion.
Add some documentation of lgridset
Add some more documentation
Refactor lgridset to split out passing and trapped calculations
Refactor lgridset related code further.
Hopefully this will help make this code easier to test and more readable
Remove inaccurate comments
Remove commented code and add some comments
Used passed weights array rather than module level one
Add a note
Add an integration test for new_trap_int
Currently this fails due to the mod vpa and related cases
Split the new_trap_int weights calculation into two sub-domains
Found to significantly reduce error in test cases
Add a high resolution tight tolerance test case
Use minimum of CLF/error time limit
Ensures we don't exceed the cfl limit based on the error estimate.
Add functions to get the module-level config for each module
Add gs2_config_type::get_configs to copy all module-level configs
Write out the used input parameter values for GS2
Remove cfl scaling factor on error based time step limit
Add module for creating a standard header for files and output
Use standard_header() in various outputs
Fix typo in gs2_init template
Add file git_hash.fpp that gets recompiled on git repo changes
This file is deliberately not in a module, so please don't add one! We want to recompile this file when the git hash or state changes, but we don't want to recompile the entire project when that happens. If this were in a module, then anything that
use
d it would pick up a dependency and therefore need rebuilding on new commits. Instead, we just rebuild this file and link the object in at the link stage -- so the executables get relinked, but that's it. standard_header.f90 has explicit interfaces for these functions, so pleaseuse
that module in order to call these function.A downside of having this file sort of out of the dependency tree generated by fortdep, is that we can't tell which executables depend on it. Currently, the dependency on this file needs to be added manually -- it also needs to be added to the front of the dependency list for the linker to actually see the function implementations.
Regenerate git_hash.f90 if not using ONE_STEP_PP
Add a routine to resample the output of eikcoefs onto a different theta resolution
Add routine to set geometry module level outputs
from passed data. We shouldn't really need to do this but may be useful as an interim implementation.
Add ntheta_geometry input to allow specification of resolution in geometry calculation
Use new geometry routines rather than calling eikcoeffs directly
Add missing declarations
Release notes for 8.1
Add line wrapping
Add section on tests
Add that users can speify npassing
Add module for generating UUIDs
Contains its own MT19937 implementation in order to not interact with random number generation in the rest of the code
Add run UUID to standard_header
Use parameter for length of UUID
Remove unused local variable
Increase integer kind for intermediate large values
Convert standard_header to a type to cache date/time and UUID
Ensures we get a consistent time across all files/outputs where header is used
Make sure header is only printed once
Move g0 work array to dist_fn_arrays to aid reuse in other modules
Rename to g0_tmp in the move to help distinguish from other g0 appearances throughout the code.
Pass in the weight distribution in flux calculation routines rather than rely on "global" arrays being allocated and set
Ensure we set the correct lower bound on passed array
Rename g0_tmp to g_work
Rewrite getan in terms of a routine which takes the distribution function to use.
Rename getan_from_g to getan_from_dfn
Add a routine to calculate the potentials from a given distribution function
This routine considers the passed distribution function to be the "raw" non-adibatic distribution function, rather than the function evolved by GS2,
g
.Add
initial_condition_is_nonadiabatic_dfn
input flagIf true then we assume the initial condition specifies the initial non-adibatic distribution function, rather than the compound function evolved by GS2. If true this triggers a calculation of the consistent fields and uses these to form the function evolved by GS2.
Move iglo loop into invert_rhs_1
Replace return with cycle
Move constant calculations out of loop
Rearrange loop body to group similar parts
Remove some repeated logic with named variable
Tidy up comments
Give names to some more common logic
Make use of named logic variables to make logic a bit clearer
Simplify logic in one place
Switch is_ttp for is_not_ttp
Add some comments
Add is_passing logical
Add is_trapped logical
Try to consolidate the logic for calling self_periodic
Add some comments and small restructure
Add some minor comments
Add some brief documentation to invert_rhs_1
Remove ntgl and ntgr as used inconsistently with +/-ntgrid
Add a sketch of the routine structure
Add doc string for self_periodic
Bugfix: Use explicit allocation to ensure lower bound is set correctly.
Switch from function to subroutine to tidy up the code
If we haven't set ntheta_geometry then use old approach
Correct link formatting
Add pfunit test case using ntheta_geometry to calculate coefficients at higher accuracy
Expand existing Miller pfunit test to check more of the outputs
Add a helper routine to dump the current golden answers
Tidy up helper routine formatting
Correct typo
Use better name for lambda grid in passing grid setup
Do something with the error flag returned by get_weights
Rename al to lambda_grid when setting up trapped weights.
Split the trapped lambda grid into two routines for the two different methods
Fix typo
Update init_dt call in gryfx code
Add docstrings
Fix couple of typos
Add vspace_integration_error and exit_reason files to CLEANCOMMAND
Add regression test for nonadiabatic initialisation
Note the test only just passes at this resolution/duration. However, running for longer we find that the result converges to the same result as fields_local_single_mode.in
Add some crude tests of calculation of potentials from initial conditions
Tidy up comment
Calculate new theta grid by interpolating in index space rather than assuming uniform spacing.
Should hopefully allow us to capture choices such as equal_arc.
Update pfunit test to account for change in theta grid when resampling
Use periodic spline in eeq for periodic boundary values
Add some comments for consideration
Ensure thetab and r_bound deallocated with other arrays
Adopt periodic spline in deq::bound
Ensure thetab and r_bound deallocated in deq
Update and expand efit pfunit golden answer test
Update utils commit
Try to work out if we should drop the last point in periodic spline setup
Update utils commit to get bug fix for splines
Drop the duplicate point in boundary spline for geqdsk files
Drop the duplicate point in boundary spline for dfit files
Enable
file_safety_check
in new diagnosticsReuse subroutine across old and new diagnostics
Improve error messages if restart files are not writable
Include actual name of restart directory
Include error message from system
Note that the system error message may not be very useful in the case where the directory doesn't exist, because we're actually checking we can write a file. Fortran doesn't seem to have a portable, intrinsic method of checking directories
Add changelog for 8.1
Correct type in collision_model documentation
Ensure max_vel initialised when dt_cfl initialised
Pull cfl calculation out of add_nl and into add_explicit
This puts both the cfl and error based time step limit calculations next to each other.
Restructure code slightly to reduce duplication
Add use_cfl_limit flag to enable users to disable the cfl check
Only reduce the max_vel if we have at least one check active
Simplify logic slightly.
Add ingen output reporting on timestep control methods
Expand comment slightly
Ensure code_dt_cfl is set even if no checks are active
Remove name
Start to restructure test clean targets
Fix restarting test and ensure test_name set
Remove CLEANCOMMAND and use targets instead to specify extra files for tests to clean up
Ensure we remove all created files
Ensure benchmarks are cleaned with correct target
Tweak how we set GK_HEAD_DIR and report the value in test_make
Add rule to rebuild Makefile.utils if not present
Basically just for running make from individual test directories, in which case GK_HEAD_DIR is not set when we include tests/Makefile.tests_common which would lead to errors without this line. Ideally we might instead set GK_HEAD_DIR correctly here.
Add some helper targets which allow us to build individual tests by running make in the test directory
Ensure GK_HEAD_UTILS is set in Makefile.tests_common
Small tweak to avoid double backslash
Move test_level to Makefiles.tests_common
Fix GK_HEAD_DIR definition
Make use of GK_HEAD_DIR rather than relative path in local_test recipe
Try auto-enabling colour output from make
Move definition of processName so that sub-make invocations have access to this
Move definition of processName so that sub-make invocations have access to this
Add a comment explaining defaulting of WITH_COLOR
Make local_test target a bit quieter
Add reset escape code
Make use of existing escape code when colouring test output
Now the test colouring is automatically disabled in we're not using colouring for the rest of make. This should allow us to remove NO_TEST_COLOURS as a separate option for controlling test colour output.
Move default TEST_LEVEL back into tests_and_benchmarks but add fallback option
Fallback option in tests_common ensures test_level is set even if we run make in the test directory and defaults to the current tests level such that the individual case will be active by default.
Default QUIET if not set in tests_common
Add clean as synonym for clean_individual_test
Remove duplicated dependency between individual and local test
Tweak approach to specifying local test files for clean
Reduces duplication and number of lines involved in setting the files to remove
Fix typo
Make sure a few of our helper codes are built by default
Add breaking changes document
Fix for fact SLEPc removed FEAST for v3.12 and v3.13
Switch src/diagnostics/generate_diagnostics_ascii.rb for python
Fix typo in routine name
Replace ruby generator for diagnostics_create_and_write with python version
Remove ruby generator for diagnostics_create_and_write
Convert generate_read_chease from ruby to python
Add missing _chease
Avoid some duplication
Correct generated allocations
Replace ruby with python in simpledataio_read generation
Replace ruby with python in simpledataio_write generation
Remove filtering of real promotion flags
Minor tweaks to avoid special treatment of real promotion
Minor makefile tidy up
Remove special recipes no longer required as we don't need special handling for double promotion
Remove a bit of unused code from makefiles
Fix name in tests makefile
Fix name in pfunit tests
Fix typo, density->temperature
Add changes missing from PR 448 required to register cgyro option
Port/update dist_fn namelist docstrings
Update comment in generate_read_chease.py
Replace ruby with python in overrides generation
Remove generated gs2_init and ruby generator
Update the gs2_init template file
Replace ruby with python in gs2_init generator
Update docstrings for
init_g_knobs
namelistUpdate docstrings for
parameter_scan_knobs
namelistChange name of included files to fit with fortdep assumptions
Make gs2_init use preprocessor includes rather than fortran includes to aid fortdep.
Update namelist docstrings for theta_grid_gridgen_knobs
Mostly not helpful because they are not documented anywhere, and so their meaning needs to be determined by understanding griden, which is non-trivial
Update
knobs
namelistsUpdate
layouts
namelistFix makefile for generate gs2_init dependencies
Bugfix for going up/down
Tweaks to theta_grid_eik_knobs namelist docstrings
Add link to geometry spec docs in init_g_knobs docstring
Tweak theta_grid_file_knobs namelist docstring
Correct l2norm calculation for complex variables
Add "restart" as a synonym for
ginit_option = "many"
Move most of
ginit_option
docs out into standalone pageFix formatting and links in
init_g_knobs
docstringsAdd/fix some procedure docstrings in
init_g
Remove some commented out code and fix some formatting in
init_g
Fix overzealous re-formatting
Fix LaTeX in normalisations docstrings
Fix typo in run_parameters
Be more specific in a couple of namelist docstrings
Add an option to find eigenvalues of the time derivative operator rather than the time advance one.
Add a test for the field equation consistency
Add gitignore
Bugfix for flipped case
Rename ddt to analyse_ddt_operator
Make the condition number a property of the supercell type
Add ability to save condition number alongside response matrix dump
Make fields_local save condition number when dumping response matrix
Add option to output condition number at GK_VERBOSITY=1
Remove CLEANCOMMAND
Finish renaming ddt to analyse_ddt_operator
Fix eigenvalue timer reporting
Make sure INCLUDES is always passed to preprocessor commands
For ONE_STEP_PP builds this is already achieved as INCLUDES is included in F90FLAGS
Add helper script to compile and build petsc and slepc
Add slepc to gfortran 10 CI job
Use correct script name
Switch from lapack to openblas
Add mention of python for code generation in readme
Add some flags to give more control over building pfunit
Start to add CI caching.
Separate cache per job, disabled for most jobs currently.
Try to install pfunit in cached area
Try to enable pfunit tests in gfortran 10 build
Revert "Try to enable pfunit tests in gfortran 10 build"
This reverts commit feef706e6de3afbb907a3385a943833a8becb77a.
Infrastructure for using pfunit v4 not ready for CI
Reduce number of pfunit build jobs in CI to account for actual hardware provided
Move code for setting up intel compiler into script to tidy gitlab yaml
Add some timing to intel build script
Don't report the trapped/passing error breakdown for Radau-Gauss grids
Remove unused use
Make sure that code_dt_cfl is initialised.
Existing code in nonlinear_terms:add_explicit attempting to do this does not appear to trigger.
Add file git_hash.fpp that gets recompiled on git repo changes
This file is deliberately not in a module, so please don't add one! We want to recompile this file when the git hash or state changes, but we don't want to recompile the entire project when that happens. If this were in a module, then anything that
use
d it would pick up a dependency and therefore need rebuilding on new commits. Instead, we just rebuild this file and link the object in at the link stage -- so the executables get relinked, but that's it.git_version_mod.f90
has explicit interfaces for these functions, so pleaseuse
that module in order to call these functions.A downside of having this file sort of out of the dependency tree generated by fortdep, is that we can't tell which executables depend on it. Currently, the dependency on this file needs to be added manually -- it also needs to be added to the front of the dependency list for the linker to actually see the function implementations.
Add function for git version from
git describe
Add some rudimentary build configuration output to command line args
Only match release tags; print git version in test_make
Add module-level config instance getter to generator script
Add utils uuid branch
Small tweak to account for change in type of gexp_1 with SHMEM
Replace uuid module with utils version
Fix wrong argument in parse_command_line
Move build config output to build_config module
Alternative approach, putting breaking changes in changelog
Only use the git version to check for rebuilding of git_hash.fpp
Add runtime error for wrong command line flags
Force immediate evaluation of GIT_STATE
Remove refs to
file_safety_check
not working in new diagnosticsMake
write_heating
a synonym ofwrite_hrate
, deprecate latterFixes #125
Use
write_heating
everywhere instead ofwrite_hrate
Make
write_hrate
private to base config moduleExpand argument documentation
Fix very minor typo
Add integrated test to check that our cfl and error based time step adjustment can stabilise a case
Add an example of a test expected to fail
Add some documentation around the response matrices and condition number
Fix relative links
Fix Ford interceptor script to be compatible with Ford 6.1
Add comment about known issue with in_memory
Make sure nstep_measure is at least 2
Don't reset istep_last when reading parameters in nonlinear_terms
This avoids an issue whereby each time we change the timestep we reset istep_last to zero, therefore misidentifying repeat calls to add_explicit on the same iteration.
Add pytest-based test for command line arguments
Update to latest utils
Update to latest utils
Immediately evaluate make variable
Guard create-test-virtualenv recipe in case python not present
Use
sh
instead ofbash
in create-test-virtualenvWider support
Use $(call message*) for make messages
Add folder issue to changelog
Finish removing uuid module
Remove duplicated variable in antenna
no_driver
was essentially a synonym forant_off
or not having the namelist present in the input file.This removes the module level (private) variable
ant_off
in favour of (existing public)no_driver
. The input variable still exists.We now also set
ant_off = no_driver
in the config object for consistencyTry to fix in_memory for nonlinear runs -- ensure we copy explicit source terms as well
Addition of new option " hzero_passing_electron" in knobs default value false. when true the non-adiabatic piece of the distribution function for passing electrons in non-zonal modes is set to 0 these changes are not yet compatible with the collision operator.
Additions of 2 methods of making the collision operator consistent with a non-adiabatic response h=0 for passing electrons this is an intermediate check in before a final clean version the methods checked in with this version are controlled with hzero_passing_electron_collisions,hzero_passing_electron_collisions_matrix in knobs, default false. hzero_passing_electron_collisions, operates by changing the tri-diagonal solver in the pitch angle scattering routines. hzero_passing_electron_collisions_matrix operates by changing the pitch angle scattering matrix coefficients without changing the solver. In the 2nd option it was necessary to change g_adjust to enforce that h=0 when transforming from g -> h this means that now fphi < 0 is inconsistent with this feature
Fix linking issue with write_default_input_file
Needs git_hash.o
Fix bug in theta_grid_params::get_theta_grid_params_config
Commit of cleaned version of the non-zonal non-adiabatic electron response h=0 feature. This feature is controlled by 2 separate logicals in the species_knobs namelist
hzero_passing_electron = .true. (default.false.) Sets the electron response h =0 in the collision as part of the algorithm and in g_adjust when going from g_gs2 to h (g_wesson in the note in g_adjust). This change restricts fphi >= 0 if it is not already restricted to be so.
hzero_passing_electron_collisions_matrix = .true. (default.false.) Modifies the collision operator for electron pitch angle scattering so that the pitch angle scattering piece of the collision operator vanishes for the passing particles (i.e.the tri-diagonal solver uses the identity matrix for passing particles) and the trapped particles use a 0 boundary condition at the trapped-passing boundary.
In this we regard wfb point in phase space as passing since the parallel boundary condition can propagate h=0 for the world's fattest banana.
for ms_pgelres:
changes for the hzero_passing_electron option
The previous method did not modify the response matrix. This method modifies the calculation of the potential. The response of the passing non-zonal electrons is known to be g = - J_0 e phi/ T F_0, this is enforced in the calculation of potential in the field solve, and in the calculation of the initial condition. This behaviour is consistent with the previous modifications.
Use the flags
hzero_passing_electron =.true. hzero_passing_electron_collisions_matrix = .true. hzero_passing_electron_response = .true.
in species_knobs to enable the h = 0 for non-zonal passing electron model. To enforce that the initial condition is always made consistent, regardless of the value of force_maxwell_reinit, set
hzero_passing_electron_response_init = .true.
in species_knobs.
Replace anon with nonmaxwell_corr
Replace another anon
Change intents to allow side effect
Fix variable names
Conditionally ensure_single_val on gamtot_hzero
Reduce duplication in collisions
Remove unused use statement
Add method documentation
Avoid touching generated code
Remove unnecessary call to
init_antenna_data
We now don't call it in the first place if
no_driver
Add hybrid_electron species type
Aim to use this instead of
hzero_*
flags to enable hybrid electron treatmentAvoid possible bug -- make sure is always set if required
Make use of is_electron_species rather than comparing against electron_species
Add is_hybrid_electron_species method
Add has_hybrid_electron_species method
Add is_ion_species method
Make has_hybrid_electron_species method public
Also tidy up related functions slightly
Remove hzero_* input flags and instead set from presence of hybrid_electron
Keep separate flags for now to aid testing
Fix typo
Start to add a test of the timestep change code
Ensure that initialized in gs2_init defaults to false.
This ensures we read the init_knobs namelist.
Add some more timestep change test cases but don't run them yet as we expect them to fail
Turn off timestep_change test if we don't have netcdf
We may want to be more selective once the in_memory approach is working and only disable those tests which need to write restart files.
Expand timestep change test to also test that explicit source behaves as expected following an attempt to repeat the current step.
Remove warnings about in_memory now that we have a fix
Try to be more selective about what we disable when we don't have netcdf
Enable the in_memory version of timestep_change test
Expect this to fail until PR #490 or equivalent is merged
Disable timestep_change test if no fft library
Revert "Disable timestep_change test if no fft library"
This reverts commit 783101f2831adf7346408f6f08bf87c596ebfef7.
Add a bit more information when allocation fails
Show the error file if test fails
Make intel CI run in debug mode
Revert "Show the error file if test fails"
This reverts commit 4e1048deca874a4bb50da0506525b8b2de18ec3b.
Change gfarray into an allocatable array from an automatic array
Different compilers treat automatic arrays in different ways. For example gfortran puts them on the heap whilst intel puts them on the stack. The gfarray array is likely to be large and can cause problems with intel when there is a limit to the stack size.
This change avoids the memory requirements associated with gfarray when it is not required.
Tweak header comment format
Remove some more large gf related automatic arrays
Update utils commit to bring in intel bug fix
Update utils to get bug fix to bug fix
Partially revert 7bc0025f
Improve the formatting of the config namelist output
Turn off DEBUG in intel builds again
Make problem size smaller in timestep change test
Remove unused namelists and disable unused diagnostics
Improve/fix tolerance in slab_itg test and update target answer
Increase number of time steps to get slightly more reliable results
Specify a seed to help make run more reproducible
Improve comment
Add a version of the slab_itg test which adds in hybrid electrons
We'd expect this case to give us results identical to the original adiabatic electron version
CI: Print version and build-config
Workaround for Cray bug which didn't like type renaming on use
Use is_hybrid_electron_species in appropriate places
Add test for writing used inputs
Use git version in standard header
Fix used inputs test for no-deps build; require netcdf
Add indexed version of get_module_config to generator
Rename
standard_header
module to match filenameAdd method to coordinate reporting on condition numbers
Moves all reporting to proc0 to avoid issues with error_unit not being defined on other processors
Add comment about performance
Print a better warning message if Python not found
Send
which pytest
errors to /dev/null; allow setting name of exeTry to fix CI failures by ensuring array initialised
Add file descriptions to headers of output files
Avoid error from invalid floating point operation
If
theta_grid_knobs::equilibrium_option
isn'teik
, then neithersurfarea
nordvdrhon
are set, resulting in an invalid floating point operation error.grhoavg
is already calculated, so just use that. It will still be undefined ifeik
isn't used, but at least we won't be dividing by NaNs.Another solution would be to only set these variables if
eik
is usedApply initialisation fix to gf_fields_local as well
Ensure D_v and D_eta are always initialised
This avoids the use of uninitialised variables in dist_fn:get_heating when not using certain hyper models
Try to avoid divide by zero in estimate_error
Initialise outputs in getan_nogath
This avoids a potential bug in using uninitialised data elsewhere
Add a Debug CI case which forces initialisation of values and watches for invalid operations
Initialise user_dt_cfl and code_dt_cfl to dt_not_set
Avoids potential uses of uninitialised data
Initialise moments if in replay mode
Initialised phi_corr_2pi if in replay mode
Turn on flags
Guard against some potential uses of uninitialised file units
Don't call new diagnostics clean up if using old diagnostics
Avoids possible attempt to deallocate unallocated array in diagnostics tests
Ensure
big
is initialised prior to use.Leave do_write_parity as soon as possible
Make sure thetaShift and beta_0 are set when setting surface properties for testing
Make theta_grid provide surfarea and dvdrhon
Update utils to get redistribute bug fix
Attmept to fix bug in crpgrad not being initialised
Avoids potential uninitialised data being used for nperiod>1
This could impact runs which use the Coriolis drift (Cdrift)
Remove jacob from eik_get_grids and salpha_get_grids interface as not set
We did not (although perhaps could) set jacob in these routines despite it being marked as intent(out). This could lead to the use of uninitialised data.
Make sure ctmp is initialised
We need to initialise the receiving buffer in g2le redistibutes as currently our redistribute does not populate every element in the receiver. Presumably this is because these buffers have a dimension
negrid+1
whilst the sending layout only hasnegrid
energy points.Make sure g2le receiving buffer is initialised
Fix bug in check_g2le where we did not loop over the energy dimension
Use ulim_alloc rather than ulim_proc when reversing array
Avoids issues when running at large processor count and we may not have ulim_proc==ulim_alloc everywhere
Enable debug for gfortran 5 build
Remove DEBUG from debug build and rename
Don't return from save/read restart if n_elements is zero
This could avoid potential hangs when built with parallel netcdf which call barrier after this early return
Avoid n_elements becoming negative
Remove n_elements > 0 guards
Removes a number of preprocessor directives through introduction of runtime parameter.
This can make the code a bit more readable
Remove duplicated include
Simplify treatment of SHMEM directive
Simplify some of the utility routines
Make sure kt_grids_knobs wnml output is a valid namelist
Use proc0 rather than testing iproc
Simplify handling of applying known suffix in some cases
Pull out duplicated code into a function
Expand use of get_file_proc to tidy up the code
Remove duplicate period
Bug prevention -- ensure we set the correct initialized flag when leaving the gs2_save_for_restart routine
Remove initialized flags in gs2_save
These were always supposed to be reset to false but their presence could lead to potential bugs should they ever be left in a true state.
Remove duplicated calls to error_unit
Tidy up handling of optional arguments
Try to reduce scope of variables
Small reduction in memory use by reusing temporary arrays
Make save/restore routines deallocate module level arrays to reduce peak memory slightly
Reduce some duplication
Add some comments
Remove unused exit_in argument to gs2_save_for_restart
Remove optional distfn argument in gs2_save_for_restart
This only resulted in
.dfn
being added to the file name andfileopt
already provides a way to achieve this.Reduce scope of abort_on_restart_fail
Make sure betaprim is initialised
This can be used to give a smart default for the beta_prime_input value so it is important that this is initialised.
Make sure we don't use uninitialised gryfx parameter
This avoids potential bugs in non-box runs where the gryfx function will return an uninitialised flag to indicate if we're in a gryfx run. If this returns true we would end up changing the time step, number of steps and collision frequency.
Fix typo
Make nonlinear timestep change case a little smaller
Reduce cyclone_itg NL test case size
Dont always print blank line in close_module_test
Avoids large numbers of blank lines when running tests on large processor count
Try to make gs2_diagnostics test better resolved
Remove change to new_trap_int weights calculation for 8.1
Remove associated tests
Actually remove tests from Makefile
Try to reduce the amount of code to represent hybrid electrons
Set h_non_adiabatic to zero in the linear parallel solve (i.e. gnew = -adj). Remove special treatment in getan. Remove gamtot_hzero from field equations.
Whilst these changes successfully reproduce a linear collision scan test case very well need to test this further, particularly non-linearly.
Make sure save_many and read_many are always initialised
Accept any length string in call to set_restart_file
Truncate set_restart_file argument if required (and warn)
Add some comments about c_rate type
Guard against using c_rate based on heating flag
Don't allocate c_rate if heating is false
Add some comments about memory cost of extended correlation diagnostic
Add a couple of more common files to the clean test list
Make runcommand_expect_fail also capture error stream
Add a few tests of our input file handling
Some of these are currently failing either because of bugs in our handling (invalid_input_name_indexed) or because of differences between my assumptions and the actual handling in the code (circular dependencies, missing inputs)
Fix incorrect namelist names
Update utils commit to pull in changes to file_utils
Update config generator to account for changes in indexed namelist handling
Update namelist read handling
Provide a means to pass extra flags to the pfunit cmake command
Make coverage job use more recent image (and compiler)
Fixes issue with coverage job hanging
Update utils commit
Make sure vnm_init is always initialised
Change vnmult initialisation to -1
Always initialise vnmult to the value of vnm_init
This should make sure that restarted jobs set vnmult to the value stored in the restart file rather than defaulting to 1 as would happen otherwise.
Add vnmult to the set of things saved/restored during a timestep change
Make sure vnmult is restored during a timestep change before the collision operator is reinitialised.
Correct logic
Update utils commit to bring in fixes/changes
If pFUnit not found make error message give some more suggestions for how the user can fix this.
Don't initialise input file if automatically initialising file utils
This is required because we now abort if the input file isn't found
Small cleanup around check if geometry needs to initialise fileutils
Create new netCDF files using the netCDF-4 model
Files created using previous versions of GS2 (and using the old diagnostics) will have been created with the "netCDF classic" model. These files can still be opened with netCDF, and simulations can still be restarted using those files.
Note required versions of FFTW and Python
And that HDF5 is only required for linking when using parallel netcdf
[skip ci]
Add test case with no input file specified
Update utils commit
Add hyper_in_initialisation flag
See PR #528 for more
Use hyper_in_initialisation flag
Try to account for change in MPI flag name for pfunit between v3 and v4
Add declaration of hyper_in_initialisation
Remove quotes around variable
Add check_frequency test to functional_tests
Add some tests of hybrid electrons
Relax tolerance to account for slight differences between old and new diagnostic calculations
Remove contribution to conservation terms from hybrid-passing electrons
Slightly tweak the logic for detecting adiabatic-passing treatment
Really we should probably wrap this logic up in a single function
Add tools for estimating current and peak memory usage.
Dump estimates at end of run
Add fallback message if can't determine memory use
Fix for markdown nested in HTML for namelist docs
Python-markdown 3.3 changed how the
md_in_html
extension worked, and it now requiresmarkdown='1'
attribute on any HTML tag if it or its children contain markdown. This attribute is ignored for python-markdown < 3.3, so should always be safe to includeFix for Ford "alias" not present in 6.0.0
Use ensure_netcdf_var_exists in gs2_save::gs2_save_for_restart
This reduces boilerplate code and will enable us to easily enable compression etc. with a change in just one place.
Use ensure_netcdf_dim_exists
Update fields read to get memory usage estimates.
This now seems to better match the output of valgrind's massif tool
Use var/dim exists wrappers in save_response
Use var/dim exists wrappers in eigenmode files
Remove unused use entries
Update utils commit to get access to netcdf compression
Add make flag to default netcdf compression to on
Enable netcdf compression in onestep ci build
Update golden answers due to fix in conservation terms from PR #535
Remove extra call to get_init_field in ginit
Add function to determine if current point is a passing hybrid electron which should be skipped or not.
Use logic wrapper to determine when dealing with passing hybrid electron
Remove fixed hzero flags in favour of use of functions
Try to respect h=0 for hybrid electrons in initial conditions
Currently this is only implemented when the initial conditions are directly
h
(i.e.initial_condition_is_nonadiabatic_dfn = .true.
)Fix logic inversion init_g::flae
Remove some unused use'd variables
Remove unused use
Avoid using hard-coded species type values
Also rename Slowing to Tracer
Add hybrid type to species report
Add a warning if using hybrid electrons but not initialising h directly
Add comment
Add missing and
Move duplicated code into subroutine
Improve documentation
Respect
nonad_zero = .false.
in linked boundary conditionsGuard writing used inputs file on rank0
Also pull out into separate function
Rename PARALLEL define to SIMPLEDATAIO_HAS_PARALLEL_NETCDF in order to avoid potential side effects by defining PARALLEL
Remove unused variables
Change format type
Specify kind in conversion to avoid warnings
Remove unused variables in generator
Fix generator to remove unused variables
Put gridgen config parameters in order
Add skip_gridgen flag
Make use of skip_gridgen flag
Add note about skip_gridgen impose assumptions
Disable memory usage message by default and enable through make flag.
Reorder declarations to follow standard more strictly
Replace non-standard kind declaration
Replace non-standard kind declaration
Fix non-standard declarations and declaration order
Update utils commit to fetch fix for uuid_mod
Make sure use_sub is false if the x dimension is split
This avoids potential out of bounds accesses
Add missing
g_lo%
Try to make
use_sub
logic clearerDon't communicate forbidden region in
g_lo <-> le_lo
redistributeDuplicate code for saving/restoring kx_shift for theta0_shift
This should address issue #163 although may lead to warnings when attempting to restart from restart files generated prior to this commit which do not contain theta0_shift
Make sure ingen respects npmax input
Fix typo
Use named variable for repeated logic
Cleanup treatment of optional and remove commented lines
Add comment on shift/jump calculation
Leave exb_shear early if no jumps
Add a comment about use of redistributes
Communicate both sigma at once in exb_shear (flux tube branch)
Communicate both sigma at once in exb_shear (ballooning space branch)
Fix typo
Update utils to get mpi timers and report these at end of run
Remove commented out code
Report redistribute timer breakdown in time report
Add vparknob used to scale vparallel
Note that hybrid electrons are considered experimental in input documentation
Add an ingen warning if using hybrid electrons
Add comment about incompatibility of hybrid model and EM simulations
Move hybrid electron EM warning to run_parameters to avoid circular dependency
Add random_sine initial condition.
Motivation is to provide an initial condition which will satisfy our parallel boundary condition.
Reduce max_mode limit from ntheta/4 to ntheta/8
This avoids sharp oscillations
Swap order of loops such that changing max_mode doesn't change the random numbers for existing mode numbers for fixed seed
Make sure we actually sum the modes
Change mode loop to include even function contributions
Force ky=kx=0 mode to zero in random_sine
Fix typo
Make sure random_sine respects reality
If either nx or ny are zero then we cannot setup the transforms so detect this and abort with a helpful message
This avoids hitting a possible seg-fault/divide by zero
Refactor loop body slightly in order to make it easier to switch out
Time calls to add_explicit_terms
Time calls to vspace_derivatives
Report time spent in collisions and nonlinear terms
Note the collisions time will include time spent in collisions during the initialisation phase as well as advance
Try to work around variable quoting
Change quote type to try to make sure flags get passed correctly
Update utils to current 8.1-RC now dependent features merged
Split out mpi related packages to aid changing this
Update standard test case to F35 and gfortran 11
Update Makefiles commit to get gcc regex fix for version >= 11
Update gfortran10 build to v11 and use mpich
Also enables pfunit tests in this build
Update CI build name
Fix logic inversion
Move field timer out of getfield_local to call site
Needed to more fairly capture the field update done separately in some situations.
Mover field timer out of getfield to call site.
Enables us to capture the field update step as well for fairness.
Record fraction of field solve time spent in MPI
Report field solve mpi time
Don't restrict time_messsage calls to proc0
Make sure fields gf local timers match other implementations
Update utils commit
Write time at which run finishes
Add missing use statements
Update utils to 8.1-RC
Fix version string if exactly on tag
Fix new diagnostics not using netCDF4 file format
Diagnostics test has changed because netCDF4 can have issues with trying to read a file while another process has it open for writing
Write some metadata to netCDF files
Pull redistribute time out into top level entry in timer output
Remove explicit save parameters
Fix writing the netCDF version
Add some special handling for always building a serial version of mp
Add tools for making targets serial and apply to ingen and other serial codes
Tweak method for adding git_hash.o to dependencies for consistency
Move fft_save_wisdom handling to target makefile and use consistent treatment
Update utils commit to fix mp serial build
Update utils commit to get fix for running serial ingen
Write standard metadata as global attributes
This is more in line with various metadata conventions
Add "title" and "Conventions" to netCDF metadata
Remove some misleading metadata from new diagnostics
Make sdatio_(end|recommence)_definitions no-ops with netCDF4
Remove commented out code and minor indentation fixes
Add an internal debug flag to re-enable communication of forbidden region
Add brackets around logic to help clarity
Remove unused variable from simpledataio
Add "comment", "references" metadata to netcdf
Add MODDIR to some dependenices to avoid warnings when preprocessing with gfortran
Move
create_metadata
to separate file to avoid circular dependencyAdd standard metadata to more netCDF files
Update release notes slightly
Show change log and release notes on website
Fix typo
Reference couple of bug fixes and fix typo
Avoid clobbering parallel mp.mod with serial version
Update utils commit to get mp changes for serial build
Make building serial tools as serial opt in for now
Add comment about HDF5 file locking
Add comment about HDF5 file locking in CHANGELOG
Update utils commit to 8.1-RC
Add breaking changes from release notes into changelog
Replace dodgy character
Update DOI and release number in citation.cff
Update makefiles and utils to release versions
Update changelog
Fix changelog formatting
Update DOI in readme
[skip-ci]
Â