Difference between revisions of "PHASTA/Wish List"
From PHASTA Wiki
(Created page with "This page is intended to be a log of useful features to add to various tools such as Phasta and NSpre. Odds are that no one will ever actually implement anything listed on this ...") |
m (Jrwrigh moved page Wish List to PHASTA/Wish List: Move to a subpage organization) |
||
(16 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
This page is intended to be a log of useful features to add to various tools such as Phasta and NSpre. Odds are that no one will ever actually implement anything listed on this page, but if you somehow find yourself with a little extra time, it's always here. | This page is intended to be a log of useful features to add to various tools such as Phasta and NSpre. Odds are that no one will ever actually implement anything listed on this page, but if you somehow find yourself with a little extra time, it's always here. | ||
− | + | == Phasta == | |
− | * | + | |
+ | *Standardize the Sync IO library to work as is across Phasta and Paraview. | ||
+ | *Get rid of the need to know a priori how many fields will need to be written when using Sync IO | ||
+ | *Write interface to allow Phasta to read and write both Sync IO and Posix | ||
+ | *Fix bug in Sync IO to allow serial IO. | ||
+ | *Modify <code>common.h</code> (and the rest of the code) to allow <code>implicit none</code>. | ||
+ | *Convert all Fortran to a separate language (such as C or Julia) | ||
*Cross Platform (Hey, I can dream) | *Cross Platform (Hey, I can dream) | ||
+ | *Add testing (unit ''and'' regression) | ||
+ | ** See [https://github.com/fortesg/fortrantestgenerator FortranTestGenerator] to automatically generate unit tests from the code (and it's accompanying [https://ieeexplore.ieee.org/document/7839465 IEEE paper]). | ||
+ | ** Also possibly build up using [https://github.com/jrwrigh/libFRUIT libFRUIT] for unit tests | ||
+ | *Convert all code to use <code>blk%_</code> instead of it's equivalents (<code>npro</code>, etc.) | ||
+ | *Split generation of <code>d2wall</code> from SA code into a separate module | ||
+ | *Make timestep increaseable through <code>rerun-check</code> | ||
+ | ** Replace iterative do loop with while loop | ||
+ | *Implement style guide/formatter | ||
+ | ** [https://sourceforge.net/projects/findent/ findent] for formatting and converting fixed-form to free-form (also actively maintained!) | ||
+ | ** [https://github.com/pseewald/fprettify fprettify] is a Python derived version | ||
+ | * Convert to free-form Fortran | ||
+ | ** Most tools these days support >=F90 format, also generally just an easier format to use | ||
+ | **[https://sourceforge.net/projects/findent/ findent] will convert fixed-form to free-form (also actively maintained!) | ||
+ | ** Several tools listed in this [http://degenerateconic.com/fixed-to-free-form-fortran-conversion/ webpage] | ||
+ | * Documentation via doxygen | ||
+ | ** See <code>jrwrigh/volumetric-stg-DoxygenTest</code> branch for example. Open <code>docs/index.html</code> in a browser to see resulting code. | ||
+ | ** The compressible and incompressible should be documented with different Doxygen instances, then be linked to separately | ||
+ | *Review code for use of <code>nshl</code> vs <code>nenl</code>. | ||
+ | **Things having to do with nodes (<code>xl</code>) or linear fields (<code>dwallocalized</code>) are nodal fields and are size <code>nenl</code>. | ||
+ | ** Other fields that would be interpolated by all of the shape functions on an element (e.g., <code>yl</code>, <code>acl</code>, ) or residuals (<code>rl</code>) are of size <code>nshl</code>. | ||
+ | **Similarly, at the global level nodal/linear fields are sized <code>numnp</code> while things that could be higher order are <code>nshg</code>. | ||
+ | ** These maybe hidden bugs, as they won't have a problem unless you run higher order basis functions. | ||
+ | * Modern <code>solver.inp</code> file format | ||
+ | ** json, yaml, toml | ||
+ | ** Requirements are the ability to comment/uncomment data and have flexible inputs (boolean, string, array, path, etc.) | ||
+ | ** Code should also have a way of checking for valid inputs (ie. a list of valid options from which to pick from) | ||
+ | * Have input file checking utility | ||
+ | ** Something like <code>phasta --check-inputs</code> to run the input file reader and check if there are any errors in the file | ||
+ | ** Codewise, this would need to be in front of the MPI initialization to allow for execution without <code>mpiexec</code> | ||
+ | * Replace <code>temp</code> (and other) arrays with <code>associate</code> statements | ||
+ | ** Makes for much more readable code, and also clearly segments where temporary arrays are used and reset | ||
+ | * Remove <code>goto</code> statements from code (see <code>jrwrigh/convert-goto</code>) | ||
+ | ** Better replaced by either subroutine calls or programming constructs (ie. do loops, if statements) | ||
+ | ** Required to move to free-form Fortran | ||
+ | * Move <code>common.h</code> to a module instead of common blocks | ||
+ | ** common blocks have been deprecated for awhile in favor of modules | ||
− | |||
− | *Error checking to make sure that the size of the mesh contained in geom.sms is equal to the size of the mesh associated with restart.*.0. | + | == NSpre == |
+ | |||
+ | *Error checking to make sure that the size of the mesh contained in <code>geom.sms</code> is equal to the size of the mesh associated with <code>restart.*.0</code>. | ||
*Ability to interpolate directly from a partitioned mesh. | *Ability to interpolate directly from a partitioned mesh. | ||
+ | |||
+ | [[Category:PHASTA]] |
Latest revision as of 10:43, 18 September 2022
This page is intended to be a log of useful features to add to various tools such as Phasta and NSpre. Odds are that no one will ever actually implement anything listed on this page, but if you somehow find yourself with a little extra time, it's always here.
Phasta
- Standardize the Sync IO library to work as is across Phasta and Paraview.
- Get rid of the need to know a priori how many fields will need to be written when using Sync IO
- Write interface to allow Phasta to read and write both Sync IO and Posix
- Fix bug in Sync IO to allow serial IO.
- Modify
common.h
(and the rest of the code) to allowimplicit none
. - Convert all Fortran to a separate language (such as C or Julia)
- Cross Platform (Hey, I can dream)
- Add testing (unit and regression)
- See FortranTestGenerator to automatically generate unit tests from the code (and it's accompanying IEEE paper).
- Also possibly build up using libFRUIT for unit tests
- Convert all code to use
blk%_
instead of it's equivalents (npro
, etc.) - Split generation of
d2wall
from SA code into a separate module - Make timestep increaseable through
rerun-check
- Replace iterative do loop with while loop
- Implement style guide/formatter
- Convert to free-form Fortran
- Documentation via doxygen
- See
jrwrigh/volumetric-stg-DoxygenTest
branch for example. Opendocs/index.html
in a browser to see resulting code. - The compressible and incompressible should be documented with different Doxygen instances, then be linked to separately
- See
- Review code for use of
nshl
vsnenl
.- Things having to do with nodes (
xl
) or linear fields (dwallocalized
) are nodal fields and are sizenenl
. - Other fields that would be interpolated by all of the shape functions on an element (e.g.,
yl
,acl
, ) or residuals (rl
) are of sizenshl
. - Similarly, at the global level nodal/linear fields are sized
numnp
while things that could be higher order arenshg
. - These maybe hidden bugs, as they won't have a problem unless you run higher order basis functions.
- Things having to do with nodes (
- Modern
solver.inp
file format- json, yaml, toml
- Requirements are the ability to comment/uncomment data and have flexible inputs (boolean, string, array, path, etc.)
- Code should also have a way of checking for valid inputs (ie. a list of valid options from which to pick from)
- Have input file checking utility
- Something like
phasta --check-inputs
to run the input file reader and check if there are any errors in the file - Codewise, this would need to be in front of the MPI initialization to allow for execution without
mpiexec
- Something like
- Replace
temp
(and other) arrays withassociate
statements- Makes for much more readable code, and also clearly segments where temporary arrays are used and reset
- Remove
goto
statements from code (seejrwrigh/convert-goto
)- Better replaced by either subroutine calls or programming constructs (ie. do loops, if statements)
- Required to move to free-form Fortran
- Move
common.h
to a module instead of common blocks- common blocks have been deprecated for awhile in favor of modules
NSpre
- Error checking to make sure that the size of the mesh contained in
geom.sms
is equal to the size of the mesh associated withrestart.*.0
. - Ability to interpolate directly from a partitioned mesh.