metno / emep-ctm

Open Source EMEP/MSC-W model
GNU General Public License v3.0
27 stars 18 forks source link

coding style guidelines #13

Open avaldebe opened 7 years ago

avaldebe commented 7 years ago

We need to write "down the law" on issues such as:

mifads commented 7 years ago

Some points:

It would be a very long set of rules to cover everything, but we do have some suggestions on style in the ProgStructure and Progrules docs in Manual. A good practice though is to try to keep the style consistent with what came before, thus "end do", "end function" over "enddo", "endfunction". Actually my own style (and hence EMEP's until recently...) was based largely upon F:

https://en.wikipedia.org/wiki/F_(programming_language)

Although relaxing some constraints (e.g. F doesn't allow 1-line if statements), this F-language base ensures we use only modern fortran.

The one thing I would really like people to learn is to avoid hard-coded indices (such as the EC_C_WOOD type stuff in Derived), since this (i) often messes up chemical schemes that don't have such species, (ii) the hacks we have such as iadv_EC_C_WOOD and find_index in Derived_ml are just asking for trouble, since the names can change frequently, and (iii) most importantly, with the groups system we have we can loop over any particular groups. In this case, if EC_C_WOOD has say EC or WOOD in its GenIn.species, we can handle this as part of loops over all EC and/or WOOD species.

In the near future I will try to merge the EMEP and ESX and python-based GenChem/BoxChem systems. A key part of this is to have modules which can span all systems. These should be stand-alone where possible, or at least not depend on netcdf and MPI libraries. A big advantage of having e.g. box models is that we can test parts of the EMEP code quickly, and even get non-EMEP people to try and give feedback. So, when writing modules, consider non-EMEP applications too,

avaldebe commented 7 years ago

Found the following best practices document

mifads commented 7 years ago

_m, _ml, _mod, or nothing?

The best practice document above suggests using _t for type and _m for module. I agree with _t, but am moving towards _mod for module. This is used by GEOS_Chem and I think it just 'looks pretty' compared to _ml.

As essentially all of our code is in modules we could skip the suffix, but maybe we should keep something for compatibility with the various style guides. Here's another one

(WRFChem uses module as prefix, which seems like a waste of characters.)