Note
The most helpful contributions - at the moment - is an engagement with the library and reporting what works well, what doesn't work, and what needs to be done to make it work for you. Open an issue on GitHub with your comments and suggestions, or e-mail me if you think the GitHub issue format is not suitable for what you'd like to dicuss.
Thank you for considering contributing to FSML. Please review and follow the guidelines below to make the process efficient and enjoyable for all. Since this is a relatively small project, the guidelines are kept short and you are encouraged to simply contact sebastian@mutz.science when in doubt.
If you are interested in contributing code, you certify that you own or are allowed to share the content of your contribution under the fsml license.
A consistent style improves the readability and maintainability of software. The best way to get a sense for it is to study the existing code. Some of the conventions for the project are highlighted below:
goto
statements and the likes. Best leave them in the past. :)real*8
.if
, do
, etc...eq.
, .lt.
)eof_analysis
).f_[module_name]_[function_descriptor]
and s_[module_name]_[function_descriptor]
, respectively. Pure procedures that have impure wrappers
should append _core
. For example, s_nlp_kmeans_core
is the pure procedure with impure wrapper s_nlp_kmeans
.
Public interfaces are declared in fsml.f90
and should simplify procedure names like s_nlp_kmeans
to fsml_kmeans
.program
, module
, function
or subroutine
names in their end statement.
For example, end subroutine f_nlp_kmeans_core
.real
should use the working precision (real(wp)
), and integers should be integer(i4)
, unless
there is a good reason to deviate from it.intent
for arguments. The optional
attribute should follow the intent
.dimension
attribute. Instead, use real, allocatable :: x(:)
.doc/api
).These are extremely valuable for improving software. If you can identify a problem with the code, follow these simple steps in reporting it: