User Tools

Site Tools


developers:coding_rules

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
developers:coding_rules [2021/08/31 20:31] – [Modules] Xavier Gonzedevelopers:coding_rules [2021/08/31 20:33] – [ABINIT style for Fortran programming] Xavier Gonze
Line 3: Line 3:
  
 (revised many times from the original draft in 1991, BUT NOT REALLY UP_TO_DATE ... SHOULD BE REVISED ONCE MORE) (revised many times from the original draft in 1991, BUT NOT REALLY UP_TO_DATE ... SHOULD BE REVISED ONCE MORE)
- 
-The following sections are covered: 
- 
-    * Foreword. 
-    * Declarations. 
-    * Variables 
-    * File format 
-    * Constructs for flow control 
-    * Use of arrays 
-    * Coding practice 
-    * Exception handling, I/Os 
-    * To be avoided. 
-    * Use of BLAS and LAPACK subroutines. 
-    * Modules 
-    * Derived datatypes 
-    * Other topics 
-    * Useful links 
- 
 ====== 1. Foreword ====== ====== 1. Foreword ======
  
Line 695: Line 677:
 Be cautious when you introduce such a feature, and mention it to the ABINIT coordinator. Be cautious when you introduce such a feature, and mention it to the ABINIT coordinator.
  
-====== Derived datatypes ======+====== 12. Derived datatypes ======
  
-Derived datatypes should be declared in the adequate module (MG: And this rule is not followed in many places, e.g dataset_type, header_type ...)+12.a. Derived datatypes should be declared in the adequate module (MG: And this rule is not followed in many places, e.g dataset_type, header_type ...)
 These are powerful F90 constructs, but the information about them is not local to the subroutine  These are powerful F90 constructs, but the information about them is not local to the subroutine 
 where they are used, so they should be introduced in a controlled way, in order for the programmers to become sufficiently easily familiarized with them: the introduction of a new derived datatype must be made in agreement with the coordinator of ABINIT. where they are used, so they should be introduced in a controlled way, in order for the programmers to become sufficiently easily familiarized with them: the introduction of a new derived datatype must be made in agreement with the coordinator of ABINIT.
 The introduction of appropriate derived datatypes in ABINIT is one of the central issues of v3.2 and later versions. The introduction of appropriate derived datatypes in ABINIT is one of the central issues of v3.2 and later versions.
  
-11.b. Suffix a type identifier with '_type'. (MG: What about ''obj_t'' At present we use both!) For example:+12.b. Suffix a type identifier with '_type'. (MG: What about ''obj_t'' At present we use both!) For example:
  
     TYPE ipe_type              ! information on program execution     TYPE ipe_type              ! information on program execution
Line 713: Line 695:
    TYPE(ipe_type) :: ipe    TYPE(ipe_type) :: ipe
  
-11.c. Pros and cons.+12.c. Pros and cons.
  
 Grouping connected variables into structured types is interesting for readability (it avoids too long Grouping connected variables into structured types is interesting for readability (it avoids too long
Line 723: Line 705:
 However, source code itself may become less readable. Also, remember that the use of structured types is never more efficient for CPU: complex declarations should be avoided. However, source code itself may become less readable. Also, remember that the use of structured types is never more efficient for CPU: complex declarations should be avoided.
  
-====== 12. Other topics ======+====== 13. Other topics ======
  
 For the time being, pointers are only allowed when an array has to be allocated in a subprogram, and For the time being, pointers are only allowed when an array has to be allocated in a subprogram, and
developers/coding_rules.txt · Last modified: 2021/08/31 20:35 by Xavier Gonze