Changeset 5036


Ignore:
Timestamp:
2015-01-16T14:19:03+01:00 (6 years ago)
Author:
jpaul
Message:

see ticket 1439 commit config manager

Location:
branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN
Files:
22 added
31 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN/README

    r4213 r5036  
    1  This is a first draft of the CONFIGURATION MANAGER demonstrator. 
    2  Unfortunately, there are still bugs in those tools. 
    3  I will continue to work on it next year, to fix those bugs and add some 
    4  improvement as handle north fold... 
     1This is a first release of SIREN. 
    52 
    6  '''WARNING : there are still bugs to fix in those tools!! ''' 
     3To create SIREN documentation, go to ./src and run doxygen  
     4(http://www.stack.nl/~dimitri/doxygen/index.html version 1.8.3.1 or upper) 
     5then 
     6   open ../doc/index.html  
     7or  
     8   run ../doc/latex/gmake and open refman.pdf  
    79 
    8    '''''' 
     10 
     11templates of namelists could be find in templates directory. 
     12read documentation for more information. 
    913 
    1014 1- program to create coordinate file : 
  • branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN/cfg/variable.cfg

    r4213 r5036  
    1 # name       | units          | axis | point | standard name               | long name          | interpolation 
    2 X            | 1              | X    |   | projection_x_coordinate         |                    |                       
    3 Y            | 1              | Y    |   | projection_y_coordinate         |                    |                       
    4 Z            | 1              | Z    |   | projection_z_coordinate         |                    |                       
    5 T            | 1              | T    |   | projection_t_coordinate         |                    |                       
    6 nav_lon      | degrees_east   | XY   | T | longitude                       | Longitude          | cubic                       
    7 nav_lat      | degrees_north  | XY   | T | latitude                        | Latitude           | cubic          
    8 nav_lev      | model_levels   | Z    | T |                                 | Model levels       | cubic         
    9 deptht       | m              | Z    | T | depth                           | Vertical T levels  | 
    10 time_counter |                | T    |   | time                            | Time axis          |  
    11 Bathymetry   | m              | XY   | T | bathymetry                      | Bathymetry         | cubic          
    12 votemper     | degree_Celsius | XYZT | T | sea_water_potential_temperature | Temperature        | cubic          
    13 vozocrtx     | m s-1          | XYZT | U |                                 | Zonal velocity     | cubic          
    14 vomecrty     | m s-1          | XYZT | V |                                 | Meridional velocity| cubic          
    15 vosaline     | PSU            | XYZT | T | sea_water_salinity              | Salinity           | cubic          
    16 sossheig     | m              | XYT  | T | sea_surface_height              | Sea Surface Height | cubic          
    17 glamt        | degrees_east   | XY   | T |                                 | Longitude_T        | cubic 
    18 glamu        | degrees_east   | XY   | U |                                 | Longitude_U        | cubic             
    19 glamv        | degrees_east   | XY   | V |                                 | Longitude_V        | cubic           
    20 glamf        | degrees_east   | XY   | F |                                 | Longitude_F        | cubic          
    21 gphit        | degrees_north  | XY   | T |                                 | Latitude_T         | cubic          
    22 gphiu        | degrees_north  | XY   | U |                                 | Latitude_U         | cubic         
    23 gphiv        | degrees_north  | XY   | V |                                 | Latitude_V         | cubic         
    24 gphif        | degrees_north  | XY   | F |                                 | Latitude_F         | cubic         
    25 e1t          | m              | XY   | T |                                 |                    | cubic/rhoi     
    26 e1u          | m              | XY   | U |                                 |                    | cubic/rhoi      
    27 e1v          | m              | XY   | V |                                 |                    | cubic/rhoi       
    28 e1f          | m              | XY   | F |                                 |                    | cubic/rhoi     
    29 e2t          | m              | XY   | T |                                 |                    | cubic/rhoj       
    30 e2u          | m              | XY   | U |                                 |                    | cubic/rhoj       
    31 e2v          | m              | XY   | V |                                 |                    | cubic/rhoj      
    32 e2f          | m              | XY   | F |                                 |                    | cubic/rhoj       
    33 tmask        |                | XYZ  | T |                                 |                    | nearest        
    34 umask        |                | XYZ  | U |                                 |                    | nearest        
    35 vmask        |                | XYZ  | V |                                 |                    | nearest        
    36 fmask        |                | XYZ  | F |                                 |                    | nearest        
    37 weight       |                | XY   | T |                                 |                    |                
     1# name       | units          | axis | point | standard name                | long name          | interpolation 
     2X            | 1              | X    |   | projection_x_coordinate          |                    |                       
     3Y            | 1              | Y    |   | projection_y_coordinate          |                    |                       
     4Z            | 1              | Z    |   | projection_z_coordinate          |                    |                       
     5T            | 1              | T    |   | projection_t_coordinate          |                    |                       
     6nav_lon      | degrees_east   | XY   | T | longitude                        | Longitude          | cubic                       
     7nav_lat      | degrees_north  | XY   | T | latitude                         | Latitude           | cubic          
     8nav_lev      | model_levels   | Z    | T |                                  | Model levels       | cubic         
     9deptht       | m              | Z    | T | depth                            | Vertical T levels  | 
     10time_counter |                | T    |   | time                             | Time axis          |  
     11Bathymetry   | m              | XY   | T | bathymetry                       | Bathymetry         | cubic          
     12votemper     | degree_Celsius | XYZT | T | sea_water_potential_temperature  | Temperature        | cubic          
     13vozocrtx     | m s-1          | XYZT | U |                                  | Zonal velocity     | cubic          
     14vomecrty     | m s-1          | XYZT | V |                                  | Meridional velocity| cubic          
     15vosaline     | PSU            | XYZT | T | sea_water_salinity               | Salinity           | cubic          
     16sossheig     | m              | XYT  | T | sea_surface_height               | Sea Surface Height | cubic          
     17glamt        | degrees_east   | XY   | T |                                  | Longitude_T        | cubic 
     18glamu        | degrees_east   | XY   | U |                                  | Longitude_U        | cubic             
     19glamv        | degrees_east   | XY   | V |                                  | Longitude_V        | cubic           
     20glamf        | degrees_east   | XY   | F |                                  | Longitude_F        | cubic          
     21gphit        | degrees_north  | XY   | T |                                  | Latitude_T         | cubic          
     22gphiu        | degrees_north  | XY   | U |                                  | Latitude_U         | cubic         
     23gphiv        | degrees_north  | XY   | V |                                  | Latitude_V         | cubic         
     24gphif        | degrees_north  | XY   | F |                                  | Latitude_F         | cubic         
     25e1t          | m              | XY   | T |                                  |                    | cubic/rhoi     
     26e1u          | m              | XY   | U |                                  |                    | cubic/rhoi      
     27e1v          | m              | XY   | V |                                  |                    | cubic/rhoi       
     28e1f          | m              | XY   | F |                                  |                    | cubic/rhoi     
     29e2t          | m              | XY   | T |                                  |                    | cubic/rhoj       
     30e2u          | m              | XY   | U |                                  |                    | cubic/rhoj       
     31e2v          | m              | XY   | V |                                  |                    | cubic/rhoj      
     32e2f          | m              | XY   | F |                                  |                    | cubic/rhoj       
     33tmask        |                | XYZ  | T |                                  |                    | nearest        
     34umask        |                | XYZ  | U |                                  |                    | nearest        
     35vmask        |                | XYZ  | V |                                  |                    | nearest        
     36fmask        |                | XYZ  | F |                                  |                    | nearest        
     37weight       |                | XY   | T |                                  |                    |                
     38kt           |                |      |   |                                  |                    |                
     39ndastp       |                |      |   |                                  |                    |                
     40adatrj       |                |      |   |                                  |                    |                
     41kt           |                |      |   |                                  |                    |                
     42rdt          |                |      |   |                                  |                    |                
     43rdttra1      |                |      |   |                                  |                    |                
     44utau_b       |                | XYT  | U |surface_downward_eastward_stress  |                    |                
     45vtau_b       |                | XYT  | V |surface_downward_northward_stress |                    |                
     46qns_b        |                | XYT  | T |                                  |                    |                
     47emp_b        |                | XYT  | T |                                  |                    |                
     48sfx_b        |                | XYT  | T |                                  |                    |                
     49en           |                | XYZT | T |                                  |                    |                
     50avt          |                | XYZT | T |                                  |                    |                
     51avm          |                | XYZT | T |                                  |                    |                
     52avmu         |                | XYZT | T |                                  |                    |                
     53avmv         |                | XYZT | T |                                  |                    |                
     54dissl        |                | XYZT | T |                                  |                    |                
     55sbc_hc_b     |                | XYT  | T |                                  |                    |                
     56sbc_sc_b     |                | XYT  | T |                                  |                    |                
     57gcx          |                | XYT  | T |                                  |                    |                
     58gcxb         |                | XYT  | T |                                  |                    |                
     59ub           |                | XYZT | U |                                  |                    |                
     60vb           |                | XYZT | V |                                  |                    |                
     61tb           |                | XYZT | T |                                  |                    |                
     62sb           |                | XYZT | T |                                  |                    |                
     63rotb         |                | XYZT | T |                                  |                    |                
     64hdivb        |                | XYZT | T |                                  |                    |                
     65sshb         |                | XYT  | T |                                  |                    |                
     66un           |                | XYZT | U |                                  |                    |                
     67vn           |                | XYZT | V |                                  |                    |                
     68tn           |                | XYZT | T |                                  |                    |                
     69sn           |                | XYZT | T |                                  |                    |                
     70rotn         |                | XYZT | T |                                  |                    |                
     71hdivn        |                | XYZT | T |                                  |                    |                
     72sshn         |                | XYT  | T |                                  |                    |                
     73rhop         |                | XYZT | T |                                  |                    |                
  • branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN/src/Doxyfile

    r4213 r5036  
    1 # Doxyfile 1.6.1 
     1# Doxyfile 1.8.8 
    22 
    33# This file describes the settings to be used by the documentation system 
    4 # doxygen (www.doxygen.org) for a project 
    5 # 
    6 # All text after a hash (#) is considered a comment and will be ignored 
     4# doxygen (www.doxygen.org) for a project. 
     5# 
     6# All text after a double hash (##) is considered a comment and is placed in 
     7# front of the TAG it is preceding. 
     8# 
     9# All text after a single hash (#) is considered a comment and will be ignored. 
    710# The format is: 
    8 #       TAG = value [value, ...] 
    9 # For lists items can also be appended using: 
    10 #       TAG += value [value, ...] 
    11 # Values that contain spaces should be placed between quotes (" ") 
     11# TAG = value [value, ...] 
     12# For lists, items can also be appended using: 
     13# TAG += value [value, ...] 
     14# Values that contain spaces should be placed between quotes (\" \"). 
    1215 
    1316#--------------------------------------------------------------------------- 
     
    1619 
    1720# This tag specifies the encoding used for all characters in the config file 
    18 # that follow. The default is UTF-8 which is also the encoding used for all 
    19 # text before the first occurrence of this tag. Doxygen uses libiconv (or the 
    20 # iconv built into libc) for the transcoding. See 
    21 # http://www.gnu.org/software/libiconv for the list of possible encodings. 
     21# that follow. The default is UTF-8 which is also the encoding used for all text 
     22# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv 
     23# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv 
     24# for the list of possible encodings. 
     25# The default value is: UTF-8. 
    2226 
    2327DOXYFILE_ENCODING      = UTF-8 
    2428 
    25 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
    26 # by quotes) that should identify the project. 
    27  
    28 PROJECT_NAME           = Doxygen Fortran Example 
    29  
    30 # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
    31 # This could be handy for archiving the generated documentation or 
    32 # if some version control system is used. 
    33  
    34 PROJECT_NUMBER         = 
    35  
    36 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
    37 # base path where the generated documentation will be put. 
    38 # If a relative path is entered, it will be relative to the location 
    39 # where doxygen was started. If left blank the current directory will be used. 
    40  
    41 OUTPUT_DIRECTORY       =  
    42  
    43 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
    44 # 4096 sub-directories (in 2 levels) under the output directory of each output 
    45 # format and will distribute the generated files over these directories. 
    46 # Enabling this option can be useful when feeding doxygen a huge amount of 
    47 # source files, where putting all generated files in the same directory would 
    48 # otherwise cause performance problems for the file system. 
     29# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by 
     30# double-quotes, unless you are using Doxywizard) that should identify the 
     31# project for which the documentation is generated. This name is used in the 
     32# title of most generated pages and in a few other places. 
     33# The default value is: My Project. 
     34 
     35PROJECT_NAME           = "SIREN" 
     36 
     37# The PROJECT_NUMBER tag can be used to enter a project or revision number. This 
     38# could be handy for archiving the generated documentation or if some version 
     39# control system is used. 
     40 
     41PROJECT_NUMBER         = "NEMO 3.6" 
     42 
     43# Using the PROJECT_BRIEF tag one can provide an optional one line description 
     44# for a project that appears at the top of each page and should give viewer a 
     45# quick idea about the purpose of the project. Keep the description short. 
     46 
     47PROJECT_BRIEF          = "System and Interface for oceanic RElocable Nesting" 
     48 
     49# With the PROJECT_LOGO tag one can specify an logo or icon that is included in 
     50# the documentation. The maximum height of the logo should not exceed 55 pixels 
     51# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo 
     52# to the output directory. 
     53 
     54PROJECT_LOGO           = ./docsrc/Image/logoSirenNemo.png 
     55 
     56# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path 
     57# into which the generated documentation will be written. If a relative path is 
     58# entered, it will be relative to the location where doxygen was started. If 
     59# left blank the current directory will be used. 
     60 
     61OUTPUT_DIRECTORY       = ../doc 
     62 
     63# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- 
     64# directories (in 2 levels) under the output directory of each output format and 
     65# will distribute the generated files over these directories. Enabling this 
     66# option can be useful when feeding doxygen a huge amount of source files, where 
     67# putting all generated files in the same directory would otherwise causes 
     68# performance problems for the file system. 
     69# The default value is: NO. 
    4970 
    5071CREATE_SUBDIRS         = NO 
     72 
     73# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII 
     74# characters to appear in the names of generated files. If set to NO, non-ASCII 
     75# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode 
     76# U+3044. 
     77# The default value is: NO. 
     78 
     79ALLOW_UNICODE_NAMES    = NO 
    5180 
    5281# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
    5382# documentation generated by doxygen is written. Doxygen will use this 
    5483# information to generate all constant output in the proper language. 
    55 # The default language is English, other supported languages are: 
    56 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
    57 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
    58 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
    59 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
    60 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, 
    61 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. 
     84# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, 
     85# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), 
     86# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, 
     87# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), 
     88# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, 
     89# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, 
     90# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, 
     91# Ukrainian and Vietnamese. 
     92# The default value is: English. 
    6293 
    6394OUTPUT_LANGUAGE        = English 
    6495 
    65 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
    66 # include brief member descriptions after the members that are listed in 
    67 # the file and class documentation (similar to JavaDoc). 
    68 # Set to NO to disable this. 
     96# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member 
     97# descriptions after the members that are listed in the file and class 
     98# documentation (similar to Javadoc). Set to NO to disable this. 
     99# The default value is: YES. 
    69100 
    70101BRIEF_MEMBER_DESC      = YES 
    71102 
    72 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
    73 # the brief description of a member or function before the detailed description. 
    74 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
     103# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief 
     104# description of a member or function before the detailed description 
     105# 
     106# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
    75107# brief descriptions will be completely suppressed. 
     108# The default value is: YES. 
    76109 
    77110REPEAT_BRIEF           = YES 
    78111 
    79 # This tag implements a quasi-intelligent brief description abbreviator 
    80 # that is used to form the text in various listings. Each string 
    81 # in this list, if found as the leading text of the brief description, will be 
    82 # stripped from the text and the result after processing the whole list, is 
    83 # used as the annotated text. Otherwise, the brief description is used as-is. 
    84 # If left blank, the following values are used ("$name" is automatically 
    85 # replaced with the name of the entity): "The $name class" "The $name widget" 
    86 # "The $name file" "is" "provides" "specifies" "contains" 
    87 # "represents" "a" "an" "the" 
     112# This tag implements a quasi-intelligent brief description abbreviator that is 
     113# used to form the text in various listings. Each string in this list, if found 
     114# as the leading text of the brief description, will be stripped from the text 
     115# and the result, after processing the whole list, is used as the annotated 
     116# text. Otherwise, the brief description is used as-is. If left blank, the 
     117# following values are used ($name is automatically replaced with the name of 
     118# the entity):The $name class, The $name widget, The $name file, is, provides, 
     119# specifies, contains, represents, a, an and the. 
    88120 
    89121ABBREVIATE_BRIEF       = 
    90122 
    91123# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
    92 # Doxygen will generate a detailed section even if there is only a brief 
     124# doxygen will generate a detailed section even if there is only a brief 
    93125# description. 
     126# The default value is: NO. 
    94127 
    95128ALWAYS_DETAILED_SEC    = NO 
     
    99132# members were ordinary class members. Constructors, destructors and assignment 
    100133# operators of the base classes will not be shown. 
     134# The default value is: NO. 
    101135 
    102136INLINE_INHERITED_MEMB  = NO 
    103137 
    104 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
    105 # path before files name in the file list and in the header files. If set 
    106 # to NO the shortest path that makes the file name unique will be used. 
     138# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path 
     139# before files name in the file list and in the header files. If set to NO the 
     140# shortest path that makes the file name unique will be used 
     141# The default value is: YES. 
    107142 
    108143FULL_PATH_NAMES        = YES 
    109144 
    110 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
    111 # can be used to strip a user-defined part of the path. Stripping is 
    112 # only done if one of the specified strings matches the left-hand part of 
    113 # the path. The tag can be used to show relative paths in the file list. 
    114 # If left blank the directory from which doxygen is run is used as the 
    115 # path to strip. 
     145# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. 
     146# Stripping is only done if one of the specified strings matches the left-hand 
     147# part of the path. The tag can be used to show relative paths in the file list. 
     148# If left blank the directory from which doxygen is run is used as the path to 
     149# strip. 
     150# 
     151# Note that you can specify absolute paths here, but also relative paths, which 
     152# will be relative from the directory where doxygen is started. 
     153# This tag requires that the tag FULL_PATH_NAMES is set to YES. 
    116154 
    117155STRIP_FROM_PATH        = 
    118156 
    119 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
    120 # the path mentioned in the documentation of a class, which tells 
    121 # the reader which header file to include in order to use a class. 
    122 # If left blank only the name of the header file containing the class 
    123 # definition is used. Otherwise one should specify the include paths that 
    124 # are normally passed to the compiler using the -I flag. 
     157# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the 
     158# path mentioned in the documentation of a class, which tells the reader which 
     159# header file to include in order to use a class. If left blank only the name of 
     160# the header file containing the class definition is used. Otherwise one should 
     161# specify the list of include paths that are normally passed to the compiler 
     162# using the -I flag. 
    125163 
    126164STRIP_FROM_INC_PATH    = 
    127165 
    128 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
    129 # (but less readable) file names. This can be useful is your file systems 
    130 # doesn't support long names like on DOS, Mac, or CD-ROM. 
     166# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but 
     167# less readable) file names. This can be useful is your file systems doesn't 
     168# support long names like on DOS, Mac, or CD-ROM. 
     169# The default value is: NO. 
    131170 
    132171SHORT_NAMES            = NO 
    133172 
    134 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
    135 # will interpret the first line (until the first dot) of a JavaDoc-style 
    136 # comment as the brief description. If set to NO, the JavaDoc 
    137 # comments will behave just like regular Qt-style comments 
    138 # (thus requiring an explicit @brief command for a brief description.) 
     173# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the 
     174# first line (until the first dot) of a Javadoc-style comment as the brief 
     175# description. If set to NO, the Javadoc-style will behave just like regular Qt- 
     176# style comments (thus requiring an explicit @brief command for a brief 
     177# description.) 
     178# The default value is: NO. 
    139179 
    140180JAVADOC_AUTOBRIEF      = NO 
    141181 
    142 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
    143 # interpret the first line (until the first dot) of a Qt-style 
    144 # comment as the brief description. If set to NO, the comments 
    145 # will behave just like regular Qt-style comments (thus requiring 
    146 # an explicit \brief command for a brief description.) 
     182# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first 
     183# line (until the first dot) of a Qt-style comment as the brief description. If 
     184# set to NO, the Qt-style will behave just like regular Qt-style comments (thus 
     185# requiring an explicit \brief command for a brief description.) 
     186# The default value is: NO. 
    147187 
    148188QT_AUTOBRIEF           = NO 
    149189 
    150 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
    151 # treat a multi-line C++ special comment block (i.e. a block of //! or /// 
    152 # comments) as a brief description. This used to be the default behaviour. 
    153 # The new default is to treat a multi-line C++ comment block as a detailed 
    154 # description. Set this tag to YES if you prefer the old behaviour instead. 
     190# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a 
     191# multi-line C++ special comment block (i.e. a block of //! or /// comments) as 
     192# a brief description. This used to be the default behavior. The new default is 
     193# to treat a multi-line C++ comment block as a detailed description. Set this 
     194# tag to YES if you prefer the old behavior instead. 
     195# 
     196# Note that setting this tag to YES also means that rational rose comments are 
     197# not recognized any more. 
     198# The default value is: NO. 
    155199 
    156200MULTILINE_CPP_IS_BRIEF = NO 
    157201 
    158 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
    159 # member inherits the documentation from any documented member that it 
    160 # re-implements. 
     202# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the 
     203# documentation from any documented member that it re-implements. 
     204# The default value is: YES. 
    161205 
    162206INHERIT_DOCS           = YES 
    163207 
    164 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
    165 # a new page for each member. If set to NO, the documentation of a member will 
    166 # be part of the file/class/namespace that contains it. 
     208# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a 
     209# new page for each member. If set to NO, the documentation of a member will be 
     210# part of the file/class/namespace that contains it. 
     211# The default value is: NO. 
    167212 
    168213SEPARATE_MEMBER_PAGES  = NO 
    169214 
    170 # The TAB_SIZE tag can be used to set the number of spaces in a tab. 
    171 # Doxygen uses this value to replace tabs by spaces in code fragments. 
    172  
    173 TAB_SIZE               = 8 
    174  
    175 # This tag can be used to specify a number of aliases that acts 
    176 # as commands in the documentation. An alias has the form "name=value". 
    177 # For example adding "sideeffect=\par Side Effects:\n" will allow you to 
    178 # put the command \sideeffect (or @sideeffect) in the documentation, which 
    179 # will result in a user-defined paragraph with heading "Side Effects:". 
    180 # You can put \n's in the value part of an alias to insert newlines. 
     215# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen 
     216# uses this value to replace tabs by spaces in code fragments. 
     217# Minimum value: 1, maximum value: 16, default value: 4. 
     218 
     219TAB_SIZE               = 3 
     220 
     221# This tag can be used to specify a number of aliases that act as commands in 
     222# the documentation. An alias has the form: 
     223# name=value 
     224# For example adding 
     225# "sideeffect=@par Side Effects:\n" 
     226# will allow you to put the command \sideeffect (or @sideeffect) in the 
     227# documentation, which will result in a user-defined paragraph with heading 
     228# "Side Effects:". You can put \n's in the value part of an alias to insert 
     229# newlines. 
    181230 
    182231ALIASES                = 
    183232 
    184 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
    185 # sources only. Doxygen will then generate output that is more tailored for C. 
    186 # For instance, some of the names that are used will be different. The list 
    187 # of all members will be omitted, etc. 
     233# This tag can be used to specify a number of word-keyword mappings (TCL only). 
     234# A mapping has the form "name=value". For example adding "class=itcl::class" 
     235# will allow you to use the command class in the itcl::class meaning. 
     236 
     237TCL_SUBST              = 
     238 
     239# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
     240# only. Doxygen will then generate output that is more tailored for C. For 
     241# instance, some of the names that are used will be different. The list of all 
     242# members will be omitted, etc. 
     243# The default value is: NO. 
    188244 
    189245OPTIMIZE_OUTPUT_FOR_C  = NO 
    190246 
    191 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
    192 # sources only. Doxygen will then generate output that is more tailored for 
    193 # Java. For instance, namespaces will be presented as packages, qualified 
    194 # scopes will look different, etc. 
     247# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or 
     248# Python sources only. Doxygen will then generate output that is more tailored 
     249# for that language. For instance, namespaces will be presented as packages, 
     250# qualified scopes will look different, etc. 
     251# The default value is: NO. 
    195252 
    196253OPTIMIZE_OUTPUT_JAVA   = NO 
    197254 
    198255# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
    199 # sources only. Doxygen will then generate output that is more tailored for 
    200 # Fortran. 
    201  
    202 OPTIMIZE_FOR_FORTRAN   = YES  
     256# sources. Doxygen will then generate output that is tailored for Fortran. 
     257# The default value is: NO. 
     258 
     259OPTIMIZE_FOR_FORTRAN   = NO 
    203260 
    204261# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
    205 # sources. Doxygen will then generate output that is tailored for 
    206 # VHDL. 
     262# sources. Doxygen will then generate output that is tailored for VHDL. 
     263# The default value is: NO. 
    207264 
    208265OPTIMIZE_OUTPUT_VHDL   = NO 
    209266 
    210 # Doxygen selects the parser to use depending on the extension of the files it parses. 
    211 # With this tag you can assign which parser to use for a given extension. 
    212 # Doxygen has a built-in mapping, but you can override or extend it using this tag. 
    213 # The format is ext=language, where ext is a file extension, and language is one of 
    214 # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, 
    215 # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat 
    216 # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), 
    217 # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. 
    218  
    219 EXTENSION_MAPPING      = 
     267# Doxygen selects the parser to use depending on the extension of the files it 
     268# parses. With this tag you can assign which parser to use for a given 
     269# extension. Doxygen has a built-in mapping, but you can override or extend it 
     270# using this tag. The format is ext=language, where ext is a file extension, and 
     271# language is one of the parsers supported by doxygen: IDL, Java, Javascript, 
     272# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: 
     273# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: 
     274# Fortran. In the later case the parser tries to guess whether the code is fixed 
     275# or free formatted code, this is the default for Fortran type files), VHDL. For 
     276# instance to make doxygen treat .inc files as Fortran files (default is PHP), 
     277# and .f files as C (default is Fortran), use: inc=Fortran f=C. 
     278# 
     279# Note For files without extension you can use no_extension as a placeholder. 
     280# 
     281# Note that for custom extensions you also need to set FILE_PATTERNS otherwise 
     282# the files are not read by doxygen. 
     283 
     284EXTENSION_MAPPING      =  
     285 
     286# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments 
     287# according to the Markdown format, which allows for more readable 
     288# documentation. See http://daringfireball.net/projects/markdown/ for details. 
     289# The output of markdown processing is further processed by doxygen, so you can 
     290# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in 
     291# case of backward compatibilities issues. 
     292# The default value is: YES. 
     293 
     294MARKDOWN_SUPPORT       = YES 
     295 
     296# When enabled doxygen tries to link words that correspond to documented 
     297# classes, or namespaces to their corresponding documentation. Such a link can 
     298# be prevented in individual cases by by putting a % sign in front of the word 
     299# or globally by setting AUTOLINK_SUPPORT to NO. 
     300# The default value is: YES. 
     301 
     302AUTOLINK_SUPPORT       = YES 
    220303 
    221304# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
    222 # to include (a tag file for) the STL sources as input, then you should 
    223 # set this tag to YES in order to let doxygen match functions declarations and 
    224 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
    225 # func(std::string) {}). This also make the inheritance and collaboration 
     305# to include (a tag file for) the STL sources as input, then you should set this 
     306# tag to YES in order to let doxygen match functions declarations and 
     307# definitions whose arguments contain STL classes (e.g. func(std::string); 
     308# versus func(std::string) {}). This also make the inheritance and collaboration 
    226309# diagrams that involve STL classes more complete and accurate. 
     310# The default value is: NO. 
    227311 
    228312BUILTIN_STL_SUPPORT    = NO 
     
    230314# If you use Microsoft's C++/CLI language, you should set this option to YES to 
    231315# enable parsing support. 
     316# The default value is: NO. 
    232317 
    233318CPP_CLI_SUPPORT        = NO 
    234319 
    235 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
    236 # Doxygen will parse them like normal C++ but will assume all classes use public 
    237 # instead of private inheritance when no explicit protection keyword is present. 
     320# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: 
     321# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen 
     322# will parse them like normal C++ but will assume all classes use public instead 
     323# of private inheritance when no explicit protection keyword is present. 
     324# The default value is: NO. 
    238325 
    239326SIP_SUPPORT            = NO 
    240327 
    241 # For Microsoft's IDL there are propget and propput attributes to indicate getter 
    242 # and setter methods for a property. Setting this option to YES (the default) 
    243 # will make doxygen to replace the get and set methods by a property in the 
    244 # documentation. This will only work if the methods are indeed getting or 
    245 # setting a simple type. If this is not the case, or you want to show the 
    246 # methods anyway, you should set this option to NO. 
     328# For Microsoft's IDL there are propget and propput attributes to indicate 
     329# getter and setter methods for a property. Setting this option to YES will make 
     330# doxygen to replace the get and set methods by a property in the documentation. 
     331# This will only work if the methods are indeed getting or setting a simple 
     332# type. If this is not the case, or you want to show the methods anyway, you 
     333# should set this option to NO. 
     334# The default value is: YES. 
    247335 
    248336IDL_PROPERTY_SUPPORT   = YES 
     
    252340# member in the group (if any) for the other members of the group. By default 
    253341# all members of a group must be documented explicitly. 
     342# The default value is: NO. 
    254343 
    255344DISTRIBUTE_GROUP_DOC   = NO 
    256345 
    257 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
    258 # the same type (for instance a group of public functions) to be put as a 
    259 # subgroup of that type (e.g. under the Public Functions section). Set it to 
    260 # NO to prevent subgrouping. Alternatively, this can be done per class using 
    261 # the \nosubgrouping command. 
     346# Set the SUBGROUPING tag to YES to allow class member groups of the same type 
     347# (for instance a group of public functions) to be put as a subgroup of that 
     348# type (e.g. under the Public Functions section). Set it to NO to prevent 
     349# subgrouping. Alternatively, this can be done per class using the 
     350# \nosubgrouping command. 
     351# The default value is: YES. 
    262352 
    263353SUBGROUPING            = YES 
    264354 
    265 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
    266 # is documented as struct, union, or enum with the name of the typedef. So 
     355# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions 
     356# are shown inside the group in which they are included (e.g. using \ingroup) 
     357# instead of on a separate page (for HTML and Man pages) or section (for LaTeX 
     358# and RTF). 
     359# 
     360# Note that this feature does not work in combination with 
     361# SEPARATE_MEMBER_PAGES. 
     362# The default value is: NO. 
     363 
     364INLINE_GROUPED_CLASSES = NO 
     365 
     366# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions 
     367# with only public data fields or simple typedef fields will be shown inline in 
     368# the documentation of the scope in which they are defined (i.e. file, 
     369# namespace, or group documentation), provided this scope is documented. If set 
     370# to NO, structs, classes, and unions are shown on a separate page (for HTML and 
     371# Man pages) or section (for LaTeX and RTF). 
     372# The default value is: NO. 
     373 
     374INLINE_SIMPLE_STRUCTS  = NO 
     375 
     376# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or 
     377# enum is documented as struct, union, or enum with the name of the typedef. So 
    267378# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
    268379# with name TypeT. When disabled the typedef will appear as a member of a file, 
    269 # namespace, or class. And the struct will be named TypeS. This can typically 
    270 # be useful for C code in case the coding convention dictates that all compound 
     380# namespace, or class. And the struct will be named TypeS. This can typically be 
     381# useful for C code in case the coding convention dictates that all compound 
    271382# types are typedef'ed and only the typedef is referenced, never the tag name. 
     383# The default value is: NO. 
    272384 
    273385TYPEDEF_HIDES_STRUCT   = NO 
    274386 
    275 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
    276 # determine which symbols to keep in memory and which to flush to disk. 
    277 # When the cache is full, less often used symbols will be written to disk. 
    278 # For small to medium size projects (<1000 input files) the default value is 
    279 # probably good enough. For larger projects a too small cache size can cause 
    280 # doxygen to be busy swapping symbols to and from disk most of the time 
    281 # causing a significant performance penality. 
    282 # If the system has enough physical memory increasing the cache will improve the 
    283 # performance by keeping more symbols in memory. Note that the value works on 
    284 # a logarithmic scale so increasing the size by one will rougly double the 
    285 # memory usage. The cache size is given by this formula: 
    286 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
    287 # corresponding to a cache size of 2^16 = 65536 symbols 
    288  
    289 SYMBOL_CACHE_SIZE      = 0 
     387# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This 
     388# cache is used to resolve symbols given their name and scope. Since this can be 
     389# an expensive process and often the same symbol appears multiple times in the 
     390# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small 
     391# doxygen will become slower. If the cache is too large, memory is wasted. The 
     392# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range 
     393# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 
     394# symbols. At the end of a run doxygen will report the cache usage and suggest 
     395# the optimal cache size from a speed point of view. 
     396# Minimum value: 0, maximum value: 9, default value: 0. 
     397 
     398LOOKUP_CACHE_SIZE      = 0 
    290399 
    291400#--------------------------------------------------------------------------- 
     
    294403 
    295404# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
    296 # documentation are documented, even if no documentation was available. 
    297 # Private class members and static file members will be hidden unless 
    298 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 
    299  
    300 EXTRACT_ALL            = YES  
    301  
    302 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
    303 # will be included in the documentation. 
     405# documentation are documented, even if no documentation was available. Private 
     406# class members and static file members will be hidden unless the 
     407# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. 
     408# Note: This will also disable the warnings about undocumented members that are 
     409# normally produced when WARNINGS is set to YES. 
     410# The default value is: NO. 
     411 
     412EXTRACT_ALL            = NO 
     413 
     414# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will 
     415# be included in the documentation. 
     416# The default value is: NO. 
    304417 
    305418EXTRACT_PRIVATE        = NO 
    306419 
    307 # If the EXTRACT_STATIC tag is set to YES all static members of a file 
    308 # will be included in the documentation. 
     420# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal 
     421# scope will be included in the documentation. 
     422# The default value is: NO. 
     423 
     424EXTRACT_PACKAGE        = NO 
     425 
     426# If the EXTRACT_STATIC tag is set to YES all static members of a file will be 
     427# included in the documentation. 
     428# The default value is: NO. 
    309429 
    310430EXTRACT_STATIC         = NO 
    311431 
    312 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
    313 # defined locally in source files will be included in the documentation. 
    314 # If set to NO only classes defined in header files are included. 
     432# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined 
     433# locally in source files will be included in the documentation. If set to NO 
     434# only classes defined in header files are included. Does not have any effect 
     435# for Java sources. 
     436# The default value is: YES. 
    315437 
    316438EXTRACT_LOCAL_CLASSES  = YES 
    317439 
    318 # This flag is only useful for Objective-C code. When set to YES local 
    319 # methods, which are defined in the implementation section but not in 
    320 # the interface are included in the documentation. 
    321 # If set to NO (the default) only methods in the interface are included. 
     440# This flag is only useful for Objective-C code. When set to YES local methods, 
     441# which are defined in the implementation section but not in the interface are 
     442# included in the documentation. If set to NO only methods in the interface are 
     443# included. 
     444# The default value is: NO. 
    322445 
    323446EXTRACT_LOCAL_METHODS  = NO 
     
    325448# If this flag is set to YES, the members of anonymous namespaces will be 
    326449# extracted and appear in the documentation as a namespace called 
    327 # 'anonymous_namespace{file}', where file will be replaced with the base 
    328 # name of the file that contains the anonymous namespace. By default 
    329 # anonymous namespace are hidden. 
     450# 'anonymous_namespace{file}', where file will be replaced with the base name of 
     451# the file that contains the anonymous namespace. By default anonymous namespace 
     452# are hidden. 
     453# The default value is: NO. 
    330454 
    331455EXTRACT_ANON_NSPACES   = NO 
    332456 
    333 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
    334 # undocumented members of documented classes, files or namespaces. 
    335 # If set to NO (the default) these members will be included in the 
    336 # various overviews, but no documentation section is generated. 
    337 # This option has no effect if EXTRACT_ALL is enabled. 
     457# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all 
     458# undocumented members inside documented classes or files. If set to NO these 
     459# members will be included in the various overviews, but no documentation 
     460# section is generated. This option has no effect if EXTRACT_ALL is enabled. 
     461# The default value is: NO. 
    338462 
    339463HIDE_UNDOC_MEMBERS     = NO 
    340464 
    341 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
    342 # undocumented classes that are normally visible in the class hierarchy. 
    343 # If set to NO (the default) these classes will be included in the various 
    344 # overviews. This option has no effect if EXTRACT_ALL is enabled. 
     465# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all 
     466# undocumented classes that are normally visible in the class hierarchy. If set 
     467# to NO these classes will be included in the various overviews. This option has 
     468# no effect if EXTRACT_ALL is enabled. 
     469# The default value is: NO. 
    345470 
    346471HIDE_UNDOC_CLASSES     = NO 
    347472 
    348 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
    349 # friend (class|struct|union) declarations. 
    350 # If set to NO (the default) these declarations will be included in the 
    351 # documentation. 
     473# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend 
     474# (class|struct|union) declarations. If set to NO these declarations will be 
     475# included in the documentation. 
     476# The default value is: NO. 
    352477 
    353478HIDE_FRIEND_COMPOUNDS  = NO 
    354479 
    355 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
    356 # documentation blocks found inside the body of a function. 
    357 # If set to NO (the default) these blocks will be appended to the 
    358 # function's detailed documentation block. 
     480# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any 
     481# documentation blocks found inside the body of a function. If set to NO these 
     482# blocks will be appended to the function's detailed documentation block. 
     483# The default value is: NO. 
    359484 
    360485HIDE_IN_BODY_DOCS      = NO 
    361486 
    362 # The INTERNAL_DOCS tag determines if documentation 
    363 # that is typed after a \internal command is included. If the tag is set 
    364 # to NO (the default) then the documentation will be excluded. 
    365 # Set it to YES to include the internal documentation. 
     487# The INTERNAL_DOCS tag determines if documentation that is typed after a 
     488# \internal command is included. If the tag is set to NO then the documentation 
     489# will be excluded. Set it to YES to include the internal documentation. 
     490# The default value is: NO. 
    366491 
    367492INTERNAL_DOCS          = NO 
    368493 
    369 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
    370 # file names in lower-case letters. If set to YES upper-case letters are also 
     494# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file 
     495# names in lower-case letters. If set to YES upper-case letters are also 
    371496# allowed. This is useful if you have classes or files whose names only differ 
    372497# in case and if your file system supports case sensitive file names. Windows 
    373498# and Mac users are advised to set this option to NO. 
     499# The default value is: system dependent. 
    374500 
    375501CASE_SENSE_NAMES       = YES 
    376502 
    377 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
    378 # will show members with their full class and namespace scopes in the 
    379 # documentation. If set to YES the scope will be hidden. 
     503# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with 
     504# their full class and namespace scopes in the documentation. If set to YES the 
     505# scope will be hidden. 
     506# The default value is: NO. 
    380507 
    381508HIDE_SCOPE_NAMES       = NO 
    382509 
    383 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
    384 # will put a list of the files that are included by a file in the documentation 
    385 # of that file. 
     510# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of 
     511# the files that are included by a file in the documentation of that file. 
     512# The default value is: YES. 
    386513 
    387514SHOW_INCLUDE_FILES     = YES 
    388515 
    389 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
    390 # is inserted in the documentation for inline members. 
     516# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each 
     517# grouped member an include statement to the documentation, telling the reader 
     518# which file to include in order to use the member. 
     519# The default value is: NO. 
     520 
     521SHOW_GROUPED_MEMB_INC  = NO 
     522 
     523# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include 
     524# files with double quotes in the documentation rather than with sharp brackets. 
     525# The default value is: NO. 
     526 
     527FORCE_LOCAL_INCLUDES   = NO 
     528 
     529# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the 
     530# documentation for inline members. 
     531# The default value is: YES. 
    391532 
    392533INLINE_INFO            = YES 
    393534 
    394 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
    395 # will sort the (detailed) documentation of file and class members 
    396 # alphabetically by member name. If set to NO the members will appear in 
    397 # declaration order. 
     535# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the 
     536# (detailed) documentation of file and class members alphabetically by member 
     537# name. If set to NO the members will appear in declaration order. 
     538# The default value is: YES. 
    398539 
    399540SORT_MEMBER_DOCS       = YES 
    400541 
    401 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
    402 # brief documentation of file, namespace and class members alphabetically 
    403 # by member name. If set to NO (the default) the members will appear in 
    404 # declaration order. 
     542# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief 
     543# descriptions of file, namespace and class members alphabetically by member 
     544# name. If set to NO the members will appear in declaration order. Note that 
     545# this will also influence the order of the classes in the class list. 
     546# The default value is: NO. 
    405547 
    406548SORT_BRIEF_DOCS        = NO 
    407549 
    408 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. 
     550# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the 
     551# (brief and detailed) documentation of class members so that constructors and 
     552# destructors are listed first. If set to NO the constructors will appear in the 
     553# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. 
     554# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief 
     555# member documentation. 
     556# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting 
     557# detailed member documentation. 
     558# The default value is: NO. 
    409559 
    410560SORT_MEMBERS_CTORS_1ST = NO 
    411561 
    412 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
    413 # hierarchy of group names into alphabetical order. If set to NO (the default) 
    414 # the group names will appear in their defined order. 
     562# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy 
     563# of group names into alphabetical order. If set to NO the group names will 
     564# appear in their defined order. 
     565# The default value is: NO. 
    415566 
    416567SORT_GROUP_NAMES       = NO 
    417568 
    418 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
    419 # sorted by fully-qualified names, including namespaces. If set to 
    420 # NO (the default), the class list will be sorted only by class name, 
    421 # not including the namespace part. 
     569# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by 
     570# fully-qualified names, including namespaces. If set to NO, the class list will 
     571# be sorted only by class name, not including the namespace part. 
    422572# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
    423 # Note: This option applies only to the class list, not to the 
    424 # alphabetical list. 
     573# Note: This option applies only to the class list, not to the alphabetical 
     574# list. 
     575# The default value is: NO. 
    425576 
    426577SORT_BY_SCOPE_NAME     = NO 
    427578 
    428 # The GENERATE_TODOLIST tag can be used to enable (YES) or 
    429 # disable (NO) the todo list. This list is created by putting \todo 
    430 # commands in the documentation. 
     579# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper 
     580# type resolution of all parameters of a function it will reject a match between 
     581# the prototype and the implementation of a member function even if there is 
     582# only one candidate or it is obvious which candidate to choose by doing a 
     583# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still 
     584# accept a match between prototype and implementation in such cases. 
     585# The default value is: NO. 
     586 
     587STRICT_PROTO_MATCHING  = NO 
     588 
     589# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the 
     590# todo list. This list is created by putting \todo commands in the 
     591# documentation. 
     592# The default value is: YES. 
    431593 
    432594GENERATE_TODOLIST      = YES 
    433595 
    434 # The GENERATE_TESTLIST tag can be used to enable (YES) or 
    435 # disable (NO) the test list. This list is created by putting \test 
    436 # commands in the documentation. 
     596# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the 
     597# test list. This list is created by putting \test commands in the 
     598# documentation. 
     599# The default value is: YES. 
    437600 
    438601GENERATE_TESTLIST      = YES 
    439602 
    440 # The GENERATE_BUGLIST tag can be used to enable (YES) or 
    441 # disable (NO) the bug list. This list is created by putting \bug 
    442 # commands in the documentation. 
     603# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug 
     604# list. This list is created by putting \bug commands in the documentation. 
     605# The default value is: YES. 
    443606 
    444607GENERATE_BUGLIST       = YES 
    445608 
    446 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
    447 # disable (NO) the deprecated list. This list is created by putting 
    448 # \deprecated commands in the documentation. 
     609# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) 
     610# the deprecated list. This list is created by putting \deprecated commands in 
     611# the documentation. 
     612# The default value is: YES. 
    449613 
    450614GENERATE_DEPRECATEDLIST= YES 
    451615 
    452 # The ENABLED_SECTIONS tag can be used to enable conditional 
    453 # documentation sections, marked by \if sectionname ... \endif. 
     616# The ENABLED_SECTIONS tag can be used to enable conditional documentation 
     617# sections, marked by \if <section_label> ... \endif and \cond <section_label> 
     618# ... \endcond blocks. 
    454619 
    455620ENABLED_SECTIONS       = 
    456621 
    457 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
    458 # the initial value of a variable or define consists of for it to appear in 
    459 # the documentation. If the initializer consists of more lines than specified 
    460 # here it will be hidden. Use a value of 0 to hide initializers completely. 
    461 # The appearance of the initializer of individual variables and defines in the 
    462 # documentation can be controlled using \showinitializer or \hideinitializer 
    463 # command in the documentation regardless of this setting. 
     622# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the 
     623# initial value of a variable or macro / define can have for it to appear in the 
     624# documentation. If the initializer consists of more lines than specified here 
     625# it will be hidden. Use a value of 0 to hide initializers completely. The 
     626# appearance of the value of individual variables and macros / defines can be 
     627# controlled using \showinitializer or \hideinitializer command in the 
     628# documentation regardless of this setting. 
     629# Minimum value: 0, maximum value: 10000, default value: 30. 
    464630 
    465631MAX_INITIALIZER_LINES  = 30 
    466632 
    467 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
    468 # at the bottom of the documentation of classes and structs. If set to YES the 
    469 # list will mention the files that were used to generate the documentation. 
     633# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at 
     634# the bottom of the documentation of classes and structs. If set to YES the list 
     635# will mention the files that were used to generate the documentation. 
     636# The default value is: YES. 
    470637 
    471638SHOW_USED_FILES        = YES 
    472639 
    473 # If the sources in your project are distributed over multiple directories 
    474 # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
    475 # in the documentation. The default is NO. 
    476  
    477 SHOW_DIRECTORIES       = NO 
    478  
    479 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
    480 # This will remove the Files entry from the Quick Index and from the 
    481 # Folder Tree View (if specified). The default is YES. 
     640# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This 
     641# will remove the Files entry from the Quick Index and from the Folder Tree View 
     642# (if specified). 
     643# The default value is: YES. 
    482644 
    483645SHOW_FILES             = YES 
    484646 
    485 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
    486 # Namespaces page. 
    487 # This will remove the Namespaces entry from the Quick Index 
    488 # and from the Folder Tree View (if specified). The default is YES. 
     647# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces 
     648# page. This will remove the Namespaces entry from the Quick Index and from the 
     649# Folder Tree View (if specified). 
     650# The default value is: YES. 
    489651 
    490652SHOW_NAMESPACES        = YES 
     
    493655# doxygen should invoke to get the current version for each file (typically from 
    494656# the version control system). Doxygen will invoke the program by executing (via 
    495 # popen()) the command <command> <input-file>, where <command> is the value of 
    496 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
    497 # provided by doxygen. Whatever the program writes to standard output 
    498 # is used as the file version. See the manual for examples. 
     657# popen()) the command command input-file, where command is the value of the 
     658# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided 
     659# by doxygen. Whatever the program writes to standard output is used as the file 
     660# version. For an example see the documentation. 
    499661 
    500662FILE_VERSION_FILTER    = 
    501663 
    502 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
    503 # doxygen. The layout file controls the global structure of the generated output files 
    504 # in an output format independent way. The create the layout file that represents 
    505 # doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
    506 # file name after the option, if omitted DoxygenLayout.xml will be used as the name 
    507 # of the layout file. 
     664# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
     665# by doxygen. The layout file controls the global structure of the generated 
     666# output files in an output format independent way. To create the layout file 
     667# that represents doxygen's defaults, run doxygen with the -l option. You can 
     668# optionally specify a file name after the option, if omitted DoxygenLayout.xml 
     669# will be used as the name of the layout file. 
     670# 
     671# Note that if you run doxygen from a directory containing a file called 
     672# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE 
     673# tag is left empty. 
    508674 
    509675LAYOUT_FILE            = 
    510676 
    511 #--------------------------------------------------------------------------- 
    512 # configuration options related to warning and progress messages 
    513 #--------------------------------------------------------------------------- 
    514  
    515 # The QUIET tag can be used to turn on/off the messages that are generated 
    516 # by doxygen. Possible values are YES and NO. If left blank NO is used. 
     677# The CITE_BIB_FILES tag can be used to specify one or more bib files containing 
     678# the reference definitions. This must be a list of .bib files. The .bib 
     679# extension is automatically appended if omitted. This requires the bibtex tool 
     680# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. 
     681# For LaTeX the style of the bibliography can be controlled using 
     682# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the 
     683# search path. See also \cite for info how to create references. 
     684 
     685CITE_BIB_FILES         = 
     686 
     687#--------------------------------------------------------------------------- 
     688# Configuration options related to warning and progress messages 
     689#--------------------------------------------------------------------------- 
     690 
     691# The QUIET tag can be used to turn on/off the messages that are generated to 
     692# standard output by doxygen. If QUIET is set to YES this implies that the 
     693# messages are off. 
     694# The default value is: NO. 
    517695 
    518696QUIET                  = NO 
    519697 
    520698# The WARNINGS tag can be used to turn on/off the warning messages that are 
    521 # generated by doxygen. Possible values are YES and NO. If left blank 
    522 # NO is used. 
     699# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES 
     700# this implies that the warnings are on. 
     701# 
     702# Tip: Turn warnings on while writing the documentation. 
     703# The default value is: YES. 
    523704 
    524705WARNINGS               = YES 
    525706 
    526 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
    527 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
    528 # automatically be disabled. 
     707# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate 
     708# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag 
     709# will automatically be disabled. 
     710# The default value is: YES. 
    529711 
    530712WARN_IF_UNDOCUMENTED   = YES 
    531713 
    532 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
    533 # potential errors in the documentation, such as not documenting some 
    534 # parameters in a documented function, or documenting parameters that 
    535 # don't exist or using markup commands wrongly. 
     714# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for 
     715# potential errors in the documentation, such as not documenting some parameters 
     716# in a documented function, or documenting parameters that don't exist or using 
     717# markup commands wrongly. 
     718# The default value is: YES. 
    536719 
    537720WARN_IF_DOC_ERROR      = YES 
    538721 
    539 # This WARN_NO_PARAMDOC option can be abled to get warnings for 
    540 # functions that are documented, but have no documentation for their parameters 
    541 # or return value. If set to NO (the default) doxygen will only warn about 
    542 # wrong or incomplete parameter documentation, but not about the absence of 
    543 # documentation. 
     722# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that 
     723# are documented, but have no documentation for their parameters or return 
     724# value. If set to NO doxygen will only warn about wrong or incomplete parameter 
     725# documentation, but not about the absence of documentation. 
     726# The default value is: NO. 
    544727 
    545728WARN_NO_PARAMDOC       = NO 
    546729 
    547 # The WARN_FORMAT tag determines the format of the warning messages that 
    548 # doxygen can produce. The string should contain the $file, $line, and $text 
    549 # tags, which will be replaced by the file and line number from which the 
    550 # warning originated and the warning text. Optionally the format may contain 
    551 # $version, which will be replaced by the version of the file (if it could 
    552 # be obtained via FILE_VERSION_FILTER) 
     730# The WARN_FORMAT tag determines the format of the warning messages that doxygen 
     731# can produce. The string should contain the $file, $line, and $text tags, which 
     732# will be replaced by the file and line number from which the warning originated 
     733# and the warning text. Optionally the format may contain $version, which will 
     734# be replaced by the version of the file (if it could be obtained via 
     735# FILE_VERSION_FILTER) 
     736# The default value is: $file:$line: $text. 
    553737 
    554738WARN_FORMAT            = "$file:$line: $text" 
    555739 
    556 # The WARN_LOGFILE tag can be used to specify a file to which warning 
    557 # and error messages should be written. If left blank the output is written 
    558 # to stderr. 
     740# The WARN_LOGFILE tag can be used to specify a file to which warning and error 
     741# messages should be written. If left blank the output is written to standard 
     742# error (stderr). 
    559743 
    560744WARN_LOGFILE           = 
    561745 
    562746#--------------------------------------------------------------------------- 
    563 # configuration options related to the input files 
    564 #--------------------------------------------------------------------------- 
    565  
    566 # The INPUT tag can be used to specify the files and/or directories that contain 
    567 # documented source files. You may enter file names like "myfile.cpp" or 
    568 # directories like "/usr/src/myproject". Separate the files or directories 
    569 # with spaces. 
    570  
    571 INPUT                  = 
     747# Configuration options related to the input files 
     748#--------------------------------------------------------------------------- 
     749 
     750# The INPUT tag is used to specify the files and/or directories that contain 
     751# documented source files. You may enter file names like myfile.cpp or 
     752# directories like /usr/src/myproject. Separate the files or directories with 
     753# spaces. 
     754# Note: If this tag is empty the current directory is searched. 
     755 
     756INPUT                  = . ./docsrc 
    572757 
    573758# This tag can be used to specify the character encoding of the source files 
    574 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
    575 # also the default input encoding. Doxygen uses libiconv (or the iconv built 
    576 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
    577 # the list of possible encodings. 
     759# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses 
     760# libiconv (or the iconv built into libc) for the transcoding. See the libiconv 
     761# documentation (see: http://www.gnu.org/software/libiconv) for the list of 
     762# possible encodings. 
     763# The default value is: UTF-8. 
    578764 
    579765INPUT_ENCODING         = UTF-8 
    580766 
    581767# If the value of the INPUT tag contains directories, you can use the 
    582 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
    583 # and *.h) to filter out the source-files in the directories. If left 
    584 # blank the following patterns are tested: 
    585 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
    586 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 
    587  
    588 FILE_PATTERNS          = *.f90  
    589  
    590 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
    591 # should be searched for input files as well. Possible values are YES and NO. 
    592 # If left blank NO is used. 
     768# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and 
     769# *.h) to filter out the source-files in the directories. If left blank the 
     770# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, 
     771# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, 
     772# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, 
     773# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, 
     774# *.qsf, *.as and *.js. 
     775 
     776FILE_PATTERNS          =  
     777 
     778# The RECURSIVE tag can be used to specify whether or not subdirectories should 
     779# be searched for input files as well. 
     780# The default value is: NO. 
    593781 
    594782RECURSIVE              = NO 
    595783 
    596 # The EXCLUDE tag can be used to specify files and/or directories that should 
     784# The EXCLUDE tag can be used to specify files and/or directories that should be 
    597785# excluded from the INPUT source files. This way you can easily exclude a 
    598786# subdirectory from a directory tree whose root is specified with the INPUT tag. 
     787# 
     788# Note that relative paths are relative to the directory from which doxygen is 
     789# run. 
    599790 
    600791EXCLUDE                = 
    601792 
    602 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
    603 # directories that are symbolic links (a Unix filesystem feature) are excluded 
     793# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
     794# directories that are symbolic links (a Unix file system feature) are excluded 
    604795# from the input. 
     796# The default value is: NO. 
    605797 
    606798EXCLUDE_SYMLINKS       = NO 
     
    608800# If the value of the INPUT tag contains directories, you can use the 
    609801# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
    610 # certain files from those directories. Note that the wildcards are matched 
    611 # against the file with absolute path, so to exclude all test directories 
    612 # for example use the pattern */test/* 
     802# certain files from those directories. 
     803# 
     804# Note that the wildcards are matched against the file with absolute path, so to 
     805# exclude all test directories for example use the pattern */test/* 
    613806 
    614807EXCLUDE_PATTERNS       = 
     
    619812# wildcard * is used, a substring. Examples: ANamespace, AClass, 
    620813# AClass::ANamespace, ANamespace::*Test 
     814# 
     815# Note that the wildcards are matched against the file with absolute path, so to 
     816# exclude all test directories use the pattern */test/* 
    621817 
    622818EXCLUDE_SYMBOLS        = 
    623819 
    624 # The EXAMPLE_PATH tag can be used to specify one or more files or 
    625 # directories that contain example code fragments that are included (see 
    626 # the \include command). 
     820# The EXAMPLE_PATH tag can be used to specify one or more files or directories 
     821# that contain example code fragments that are included (see the \include 
     822# command). 
    627823 
    628824EXAMPLE_PATH           = 
    629825 
    630826# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
    631 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
    632 # and *.h) to filter out the source-files in the directories. If left 
    633 # blank all files are included. 
     827# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and 
     828# *.h) to filter out the source-files in the directories. If left blank all 
     829# files are included. 
    634830 
    635831EXAMPLE_PATTERNS       = 
    636832 
    637833# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
    638 # searched for input files to be used with the \include or \dontinclude 
    639 # commands irrespective of the value of the RECURSIVE tag. 
    640 # Possible values are YES and NO. If left blank NO is used. 
     834# searched for input files to be used with the \include or \dontinclude commands 
     835# irrespective of the value of the RECURSIVE tag. 
     836# The default value is: NO. 
    641837 
    642838EXAMPLE_RECURSIVE      = NO 
    643839 
    644 # The IMAGE_PATH tag can be used to specify one or more files or 
    645 # directories that contain image that are included in the documentation (see 
    646 # the \image command). 
    647  
    648 IMAGE_PATH             =  
     840# The IMAGE_PATH tag can be used to specify one or more files or directories 
     841# that contain images that are to be included in the documentation (see the 
     842# \image command). 
     843 
     844IMAGE_PATH             = ./docsrc/Image 
    649845 
    650846# The INPUT_FILTER tag can be used to specify a program that doxygen should 
    651847# invoke to filter for each input file. Doxygen will invoke the filter program 
    652 # by executing (via popen()) the command <filter> <input-file>, where <filter> 
    653 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
    654 # input file. Doxygen will then use the output that the filter program writes 
    655 # to standard output. 
    656 # If FILTER_PATTERNS is specified, this tag will be 
    657 # ignored. 
     848# by executing (via popen()) the command: 
     849# 
     850# <filter> <input-file> 
     851# 
     852# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the 
     853# name of an input file. Doxygen will then use the output that the filter 
     854# program writes to standard output. If FILTER_PATTERNS is specified, this tag 
     855# will be ignored. 
     856# 
     857# Note that the filter must not add or remove lines; it is applied before the 
     858# code is scanned, but not when the output code is generated. If lines are added 
     859# or removed, the anchors will not be placed correctly. 
    658860 
    659861INPUT_FILTER           = 
    660862 
    661863# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
    662 # basis. 
    663 # Doxygen will compare the file name with each pattern and apply the 
    664 # filter if there is a match. 
    665 # The filters are a list of the form: 
    666 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
    667 # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
    668 # is applied to all files. 
     864# basis. Doxygen will compare the file name with each pattern and apply the 
     865# filter if there is a match. The filters are a list of the form: pattern=filter 
     866# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how 
     867# filters are used. If the FILTER_PATTERNS tag is empty or if none of the 
     868# patterns match the file name, INPUT_FILTER is applied. 
    669869 
    670870FILTER_PATTERNS        = 
    671871 
    672872# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
    673 # INPUT_FILTER) will be used to filter the input files when producing source 
    674 # files to browse (i.e. when SOURCE_BROWSER is set to YES). 
     873# INPUT_FILTER ) will also be used to filter the input files that are used for 
     874# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). 
     875# The default value is: NO. 
    675876 
    676877FILTER_SOURCE_FILES    = NO 
    677878 
    678 #--------------------------------------------------------------------------- 
    679 # configuration options related to source browsing 
    680 #--------------------------------------------------------------------------- 
    681  
    682 # If the SOURCE_BROWSER tag is set to YES then a list of source files will 
    683 # be generated. Documented entities will be cross-referenced with these sources. 
    684 # Note: To get rid of all source code in the generated output, make sure also 
    685 # VERBATIM_HEADERS is set to NO. 
     879# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
     880# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and 
     881# it is also possible to disable source filtering for a specific pattern using 
     882# *.ext= (so without naming a filter). 
     883# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. 
     884 
     885FILTER_SOURCE_PATTERNS = 
     886 
     887# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that 
     888# is part of the input, its contents will be placed on the main page 
     889# (index.html). This can be useful if you have a project on for instance GitHub 
     890# and want to reuse the introduction page also for the doxygen output. 
     891 
     892USE_MDFILE_AS_MAINPAGE = 
     893 
     894#--------------------------------------------------------------------------- 
     895# Configuration options related to source browsing 
     896#--------------------------------------------------------------------------- 
     897 
     898# If the SOURCE_BROWSER tag is set to YES then a list of source files will be 
     899# generated. Documented entities will be cross-referenced with these sources. 
     900# 
     901# Note: To get rid of all source code in the generated output, make sure that 
     902# also VERBATIM_HEADERS is set to NO. 
     903# The default value is: NO. 
    686904 
    687905SOURCE_BROWSER         = NO 
    688906 
    689 # Setting the INLINE_SOURCES tag to YES will include the body 
    690 # of functions and classes directly in the documentation. 
     907# Setting the INLINE_SOURCES tag to YES will include the body of functions, 
     908# classes and enums directly into the documentation. 
     909# The default value is: NO. 
    691910 
    692911INLINE_SOURCES         = NO 
    693912 
    694 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
    695 # doxygen to hide any special comment blocks from generated source code 
    696 # fragments. Normal C and C++ comments will always remain visible. 
     913# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any 
     914# special comment blocks from generated source code fragments. Normal C, C++ and 
     915# Fortran comments will always remain visible. 
     916# The default value is: YES. 
    697917 
    698918STRIP_CODE_COMMENTS    = YES 
    699919 
    700 # If the REFERENCED_BY_RELATION tag is set to YES 
    701 # then for each documented function all documented 
    702 # functions referencing it will be listed. 
     920# If the REFERENCED_BY_RELATION tag is set to YES then for each documented 
     921# function all documented functions referencing it will be listed. 
     922# The default value is: NO. 
    703923 
    704924REFERENCED_BY_RELATION = NO 
    705925 
    706 # If the REFERENCES_RELATION tag is set to YES 
    707 # then for each documented function all documented entities 
    708 # called/used by that function will be listed. 
     926# If the REFERENCES_RELATION tag is set to YES then for each documented function 
     927# all documented entities called/used by that function will be listed. 
     928# The default value is: NO. 
    709929 
    710930REFERENCES_RELATION    = NO 
    711931 
    712 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
    713 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
    714 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
    715 # link to the source code. 
    716 # Otherwise they will link to the documentation. 
     932# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set 
     933# to YES, then the hyperlinks from functions in REFERENCES_RELATION and 
     934# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will 
     935# link to the documentation. 
     936# The default value is: YES. 
    717937 
    718938REFERENCES_LINK_SOURCE = YES 
    719939 
    720 # If the USE_HTAGS tag is set to YES then the references to source code 
    721 # will point to the HTML generated by the htags(1) tool instead of doxygen 
    722 # built-in source browser. The htags tool is part of GNU's global source 
    723 # tagging system (see http://www.gnu.org/software/global/global.html). You 
    724 # will need version 4.8.6 or higher. 
     940# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the 
     941# source code will show a tooltip with additional information such as prototype, 
     942# brief description and links to the definition and documentation. Since this 
     943# will make the HTML file larger and loading of large files a bit slower, you 
     944# can opt to disable this feature. 
     945# The default value is: YES. 
     946# This tag requires that the tag SOURCE_BROWSER is set to YES. 
     947 
     948SOURCE_TOOLTIPS        = YES 
     949 
     950# If the USE_HTAGS tag is set to YES then the references to source code will 
     951# point to the HTML generated by the htags(1) tool instead of doxygen built-in 
     952# source browser. The htags tool is part of GNU's global source tagging system 
     953# (see http://www.gnu.org/software/global/global.html). You will need version 
     954# 4.8.6 or higher. 
     955# 
     956# To use it do the following: 
     957# - Install the latest version of global 
     958# - Enable SOURCE_BROWSER and USE_HTAGS in the config file 
     959# - Make sure the INPUT points to the root of the source tree 
     960# - Run doxygen as normal 
     961# 
     962# Doxygen will invoke htags (and that will in turn invoke gtags), so these 
     963# tools must be available from the command line (i.e. in the search path). 
     964# 
     965# The result: instead of the source browser generated by doxygen, the links to 
     966# source code will now point to the output of htags. 
     967# The default value is: NO. 
     968# This tag requires that the tag SOURCE_BROWSER is set to YES. 
    725969 
    726970USE_HTAGS              = NO 
    727971 
    728 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
    729 # will generate a verbatim copy of the header file for each class for 
    730 # which an include is specified. Set to NO to disable this. 
     972# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a 
     973# verbatim copy of the header file for each class for which an include is 
     974# specified. Set to NO to disable this. 
     975# See also: Section \class. 
     976# The default value is: YES. 
    731977 
    732978VERBATIM_HEADERS       = YES 
    733979 
    734980#--------------------------------------------------------------------------- 
    735 # configuration options related to the alphabetical class index 
    736 #--------------------------------------------------------------------------- 
    737  
    738 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
    739 # of all compounds will be generated. Enable this if the project 
    740 # contains a lot of classes, structs, unions or interfaces. 
     981# Configuration options related to the alphabetical class index 
     982#--------------------------------------------------------------------------- 
     983 
     984# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all 
     985# compounds will be generated. Enable this if the project contains a lot of 
     986# classes, structs, unions or interfaces. 
     987# The default value is: YES. 
    741988 
    742989ALPHABETICAL_INDEX     = NO 
    743990 
    744 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
    745 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
    746 # in which this list will be split (can be a number in the range [1..20]) 
     991# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in 
     992# which the alphabetical index list will be split. 
     993# Minimum value: 1, maximum value: 20, default value: 5. 
     994# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 
    747995 
    748996COLS_IN_ALPHA_INDEX    = 5 
    749997 
    750 # In case all classes in a project start with a common prefix, all 
    751 # classes will be put under the same header in the alphabetical index. 
    752 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
    753 # should be ignored while generating the index headers. 
     998# In case all classes in a project start with a common prefix, all classes will 
     999# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag 
     1000# can be used to specify a prefix (or a list of prefixes) that should be ignored 
     1001# while generating the index headers. 
     1002# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 
    7541003 
    7551004IGNORE_PREFIX          = 
    7561005 
    7571006#--------------------------------------------------------------------------- 
    758 # configuration options related to the HTML output 
    759 #--------------------------------------------------------------------------- 
    760  
    761 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
    762 # generate HTML output. 
     1007# Configuration options related to the HTML output 
     1008#--------------------------------------------------------------------------- 
     1009 
     1010# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output 
     1011# The default value is: YES. 
    7631012 
    7641013GENERATE_HTML          = YES 
    7651014 
    766 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
    767 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    768 # put in front of it. If left blank `html' will be used as the default path. 
     1015# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a 
     1016# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1017# it. 
     1018# The default directory is: html. 
     1019# This tag requires that the tag GENERATE_HTML is set to YES. 
    7691020 
    7701021HTML_OUTPUT            = html 
    7711022 
    772 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
    773 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
    774 # doxygen will generate files with .html extension. 
     1023# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each 
     1024# generated HTML page (for example: .htm, .php, .asp). 
     1025# The default value is: .html. 
     1026# This tag requires that the tag GENERATE_HTML is set to YES. 
    7751027 
    7761028HTML_FILE_EXTENSION    = .html 
    7771029 
    778 # The HTML_HEADER tag can be used to specify a personal HTML header for 
    779 # each generated HTML page. If it is left blank doxygen will generate a 
     1030# The HTML_HEADER tag can be used to specify a user-defined HTML header file for 
     1031# each generated HTML page. If the tag is left blank doxygen will generate a 
    7801032# standard header. 
     1033# 
     1034# To get valid HTML the header file that includes any scripts and style sheets 
     1035# that doxygen needs, which is dependent on the configuration options used (e.g. 
     1036# the setting GENERATE_TREEVIEW). It is highly recommended to start with a 
     1037# default header using 
     1038# doxygen -w html new_header.html new_footer.html new_stylesheet.css 
     1039# YourConfigFile 
     1040# and then modify the file new_header.html. See also section "Doxygen usage" 
     1041# for information on how to generate the default header that doxygen normally 
     1042# uses. 
     1043# Note: The header is subject to change so you typically have to regenerate the 
     1044# default header when upgrading to a newer version of doxygen. For a description 
     1045# of the possible markers and block names see the documentation. 
     1046# This tag requires that the tag GENERATE_HTML is set to YES. 
    7811047 
    7821048HTML_HEADER            = 
    7831049 
    784 # The HTML_FOOTER tag can be used to specify a personal HTML footer for 
    785 # each generated HTML page. If it is left blank doxygen will generate a 
    786 # standard footer. 
     1050# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each 
     1051# generated HTML page. If the tag is left blank doxygen will generate a standard 
     1052# footer. See HTML_HEADER for more information on how to generate a default 
     1053# footer and what special commands can be used inside the footer. See also 
     1054# section "Doxygen usage" for information on how to generate the default footer 
     1055# that doxygen normally uses. 
     1056# This tag requires that the tag GENERATE_HTML is set to YES. 
    7871057 
    7881058HTML_FOOTER            = 
    7891059 
    790 # If the HTML_TIMESTAMP tag is set to YES then the generated HTML 
    791 # documentation will contain the timesstamp. 
    792  
    793 HTML_TIMESTAMP         = NO 
    794  
    795 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
    796 # style sheet that is used by each HTML page. It can be used to 
    797 # fine-tune the look of the HTML output. If the tag is left blank doxygen 
    798 # will generate a default style sheet. Note that doxygen will try to copy 
    799 # the style sheet file to the HTML output directory, so don't put your own 
    800 # stylesheet in the HTML output directory as well, or it will be erased! 
     1060# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style 
     1061# sheet that is used by each HTML page. It can be used to fine-tune the look of 
     1062# the HTML output. If left blank doxygen will generate a default style sheet. 
     1063# See also section "Doxygen usage" for information on how to generate the style 
     1064# sheet that doxygen normally uses. 
     1065# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as 
     1066# it is more robust and this tag (HTML_STYLESHEET) will in the future become 
     1067# obsolete. 
     1068# This tag requires that the tag GENERATE_HTML is set to YES. 
    8011069 
    8021070HTML_STYLESHEET        = 
    8031071 
    804 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
    805 # files or namespaces will be aligned in HTML using tables. If set to 
    806 # NO a bullet list will be used. 
    807  
    808 HTML_ALIGN_MEMBERS     = YES 
     1072# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined 
     1073# cascading style sheets that are included after the standard style sheets 
     1074# created by doxygen. Using this option one can overrule certain style aspects. 
     1075# This is preferred over using HTML_STYLESHEET since it does not replace the 
     1076# standard style sheet and is therefor more robust against future updates. 
     1077# Doxygen will copy the style sheet files to the output directory. 
     1078# Note: The order of the extra stylesheet files is of importance (e.g. the last 
     1079# stylesheet in the list overrules the setting of the previous ones in the 
     1080# list). For an example see the documentation. 
     1081# This tag requires that the tag GENERATE_HTML is set to YES. 
     1082 
     1083HTML_EXTRA_STYLESHEET  = 
     1084 
     1085# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
     1086# other source files which should be copied to the HTML output directory. Note 
     1087# that these files will be copied to the base HTML output directory. Use the 
     1088# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
     1089# files. In the HTML_STYLESHEET file, use the file name only. Also note that the 
     1090# files will be copied as-is; there are no commands or markers available. 
     1091# This tag requires that the tag GENERATE_HTML is set to YES. 
     1092 
     1093HTML_EXTRA_FILES       = 
     1094 
     1095# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen 
     1096# will adjust the colors in the stylesheet and background images according to 
     1097# this color. Hue is specified as an angle on a colorwheel, see 
     1098# http://en.wikipedia.org/wiki/Hue for more information. For instance the value 
     1099# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 
     1100# purple, and 360 is red again. 
     1101# Minimum value: 0, maximum value: 359, default value: 220. 
     1102# This tag requires that the tag GENERATE_HTML is set to YES. 
     1103 
     1104HTML_COLORSTYLE_HUE    = 220 
     1105 
     1106# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors 
     1107# in the HTML output. For a value of 0 the output will use grayscales only. A 
     1108# value of 255 will produce the most vivid colors. 
     1109# Minimum value: 0, maximum value: 255, default value: 100. 
     1110# This tag requires that the tag GENERATE_HTML is set to YES. 
     1111 
     1112HTML_COLORSTYLE_SAT    = 100 
     1113 
     1114# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the 
     1115# luminance component of the colors in the HTML output. Values below 100 
     1116# gradually make the output lighter, whereas values above 100 make the output 
     1117# darker. The value divided by 100 is the actual gamma applied, so 80 represents 
     1118# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not 
     1119# change the gamma. 
     1120# Minimum value: 40, maximum value: 240, default value: 80. 
     1121# This tag requires that the tag GENERATE_HTML is set to YES. 
     1122 
     1123HTML_COLORSTYLE_GAMMA  = 80 
     1124 
     1125# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
     1126# page will contain the date and time when the page was generated. Setting this 
     1127# to NO can help when comparing the output of multiple runs. 
     1128# The default value is: YES. 
     1129# This tag requires that the tag GENERATE_HTML is set to YES. 
     1130 
     1131HTML_TIMESTAMP         = YES 
    8091132 
    8101133# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
    8111134# documentation will contain sections that can be hidden and shown after the 
    812 # page has loaded. For this to work a browser that supports 
    813 # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
    814 # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). 
     1135# page has loaded. 
     1136# The default value is: NO. 
     1137# This tag requires that the tag GENERATE_HTML is set to YES. 
    8151138 
    8161139HTML_DYNAMIC_SECTIONS  = NO 
    8171140 
    818 # If the GENERATE_DOCSET tag is set to YES, additional index files 
    819 # will be generated that can be used as input for Apple's Xcode 3 
    820 # integrated development environment, introduced with OSX 10.5 (Leopard). 
    821 # To create a documentation set, doxygen will generate a Makefile in the 
    822 # HTML output directory. Running make will produce the docset in that 
    823 # directory and running "make install" will install the docset in 
    824 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
    825 # it at startup. 
    826 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. 
     1141# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries 
     1142# shown in the various tree structured indices initially; the user can expand 
     1143# and collapse entries dynamically later on. Doxygen will expand the tree to 
     1144# such a level that at most the specified number of entries are visible (unless 
     1145# a fully collapsed tree already exceeds this amount). So setting the number of 
     1146# entries 1 will produce a full collapsed tree by default. 0 is a special value 
     1147# representing an infinite number of entries and will result in a full expanded 
     1148# tree by default. 
     1149# Minimum value: 0, maximum value: 9999, default value: 100. 
     1150# This tag requires that the tag GENERATE_HTML is set to YES. 
     1151 
     1152HTML_INDEX_NUM_ENTRIES = 100 
     1153 
     1154# If the GENERATE_DOCSET tag is set to YES, additional index files will be 
     1155# generated that can be used as input for Apple's Xcode 3 integrated development 
     1156# environment (see: http://developer.apple.com/tools/xcode/), introduced with 
     1157# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a 
     1158# Makefile in the HTML output directory. Running make will produce the docset in 
     1159# that directory and running make install will install the docset in 
     1160# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at 
     1161# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
     1162# for more information. 
     1163# The default value is: NO. 
     1164# This tag requires that the tag GENERATE_HTML is set to YES. 
    8271165 
    8281166GENERATE_DOCSET        = NO 
    8291167 
    830 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
    831 # feed. A documentation feed provides an umbrella under which multiple 
    832 # documentation sets from a single provider (such as a company or product suite) 
    833 # can be grouped. 
     1168# This tag determines the name of the docset feed. A documentation feed provides 
     1169# an umbrella under which multiple documentation sets from a single provider 
     1170# (such as a company or product suite) can be grouped. 
     1171# The default value is: Doxygen generated docs. 
     1172# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    8341173 
    8351174DOCSET_FEEDNAME        = "Doxygen generated docs" 
    8361175 
    837 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
    838 # should uniquely identify the documentation set bundle. This should be a 
    839 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
    840 # will append .docset to the name. 
     1176# This tag specifies a string that should uniquely identify the documentation 
     1177# set bundle. This should be a reverse domain-name style string, e.g. 
     1178# com.mycompany.MyDocSet. Doxygen will append .docset to the name. 
     1179# The default value is: org.doxygen.Project. 
     1180# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    8411181 
    8421182DOCSET_BUNDLE_ID       = org.doxygen.Project 
    8431183 
    844 # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
    845 # will be generated that can be used as input for tools like the 
    846 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
    847 # of the generated HTML documentation. 
     1184# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify 
     1185# the documentation publisher. This should be a reverse domain-name style 
     1186# string, e.g. com.mycompany.MyDocSet.documentation. 
     1187# The default value is: org.doxygen.Publisher. 
     1188# This tag requires that the tag GENERATE_DOCSET is set to YES. 
     1189 
     1190DOCSET_PUBLISHER_ID    = org.doxygen.Publisher 
     1191 
     1192# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. 
     1193# The default value is: Publisher. 
     1194# This tag requires that the tag GENERATE_DOCSET is set to YES. 
     1195 
     1196DOCSET_PUBLISHER_NAME  = Publisher 
     1197 
     1198# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three 
     1199# additional HTML index files: index.hhp, index.hhc, and index.hhk. The 
     1200# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop 
     1201# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on 
     1202# Windows. 
     1203# 
     1204# The HTML Help Workshop contains a compiler that can convert all HTML output 
     1205# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML 
     1206# files are now used as the Windows 98 help format, and will replace the old 
     1207# Windows help format (.hlp) on all Windows platforms in the future. Compressed 
     1208# HTML files also contain an index, a table of contents, and you can search for 
     1209# words in the documentation. The HTML workshop also contains a viewer for 
     1210# compressed HTML files. 
     1211# The default value is: NO. 
     1212# This tag requires that the tag GENERATE_HTML is set to YES. 
    8481213 
    8491214GENERATE_HTMLHELP      = NO 
    8501215 
    851 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
    852 # be used to specify the file name of the resulting .chm file. You 
    853 # can add a path in front of the file if the result should not be 
     1216# The CHM_FILE tag can be used to specify the file name of the resulting .chm 
     1217# file. You can add a path in front of the file if the result should not be 
    8541218# written to the html output directory. 
     1219# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8551220 
    8561221CHM_FILE               = 
    8571222 
    858 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
    859 # be used to specify the location (absolute path including file name) of 
    860 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
    861 # the HTML help compiler on the generated index.hhp. 
     1223# The HHC_LOCATION tag can be used to specify the location (absolute path 
     1224# including file name) of the HTML help compiler ( hhc.exe). If non-empty 
     1225# doxygen will try to run the HTML help compiler on the generated index.hhp. 
     1226# The file has to be specified with full path. 
     1227# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8621228 
    8631229HHC_LOCATION           = 
    8641230 
    865 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
    866 # controls if a separate .chi index file is generated (YES) or that 
    867 # it should be included in the master .chm file (NO). 
     1231# The GENERATE_CHI flag controls if a separate .chi index file is generated ( 
     1232# YES) or that it should be included in the master .chm file ( NO). 
     1233# The default value is: NO. 
     1234# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8681235 
    8691236GENERATE_CHI           = NO 
    8701237 
    871 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
    872 # is used to encode HtmlHelp index (hhk), content (hhc) and project file 
    873 # content. 
     1238# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) 
     1239# and project file content. 
     1240# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8741241 
    8751242CHM_INDEX_ENCODING     = 
    8761243 
    877 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
    878 # controls whether a binary table of contents is generated (YES) or a 
    879 # normal table of contents (NO) in the .chm file. 
     1244# The BINARY_TOC flag controls whether a binary table of contents is generated ( 
     1245# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it 
     1246# enables the Previous and Next buttons. 
     1247# The default value is: NO. 
     1248# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8801249 
    8811250BINARY_TOC             = NO 
    8821251 
    883 # The TOC_EXPAND flag can be set to YES to add extra items for group members 
    884 # to the contents of the HTML help documentation and to the tree view. 
     1252# The TOC_EXPAND flag can be set to YES to add extra items for group members to 
     1253# the table of contents of the HTML help documentation and to the tree view. 
     1254# The default value is: NO. 
     1255# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    8851256 
    8861257TOC_EXPAND             = NO 
    8871258 
    888 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
    889 # are set, an additional index file will be generated that can be used as input for 
    890 # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
    891 # HTML documentation. 
     1259# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
     1260# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that 
     1261# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help 
     1262# (.qch) of the generated HTML documentation. 
     1263# The default value is: NO. 
     1264# This tag requires that the tag GENERATE_HTML is set to YES. 
    8921265 
    8931266GENERATE_QHP           = NO 
    8941267 
    895 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
    896 # be used to specify the file name of the resulting .qch file. 
    897 # The path specified is relative to the HTML output folder. 
     1268# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify 
     1269# the file name of the resulting .qch file. The path specified is relative to 
     1270# the HTML output folder. 
     1271# This tag requires that the tag GENERATE_QHP is set to YES. 
    8981272 
    8991273QCH_FILE               = 
    9001274 
    901 # The QHP_NAMESPACE tag specifies the namespace to use when generating 
    902 # Qt Help Project output. For more information please see 
    903 # http://doc.trolltech.com/qthelpproject.html#namespace 
    904  
    905 QHP_NAMESPACE          = 
    906  
    907 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
    908 # Qt Help Project output. For more information please see 
    909 # http://doc.trolltech.com/qthelpproject.html#virtual-folders 
     1275# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help 
     1276# Project output. For more information please see Qt Help Project / Namespace 
     1277# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). 
     1278# The default value is: org.doxygen.Project. 
     1279# This tag requires that the tag GENERATE_QHP is set to YES. 
     1280 
     1281QHP_NAMESPACE          = org.doxygen.Project 
     1282 
     1283# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt 
     1284# Help Project output. For more information please see Qt Help Project / Virtual 
     1285# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- 
     1286# folders). 
     1287# The default value is: doc. 
     1288# This tag requires that the tag GENERATE_QHP is set to YES. 
    9101289 
    9111290QHP_VIRTUAL_FOLDER     = doc 
    9121291 
    913 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. 
    914 # For more information please see 
    915 # http://doc.trolltech.com/qthelpproject.html#custom-filters 
     1292# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom 
     1293# filter to add. For more information please see Qt Help Project / Custom 
     1294# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 
     1295# filters). 
     1296# This tag requires that the tag GENERATE_QHP is set to YES. 
    9161297 
    9171298QHP_CUST_FILTER_NAME   = 
    9181299 
    919 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see 
    920 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>. 
     1300# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the 
     1301# custom filter to add. For more information please see Qt Help Project / Custom 
     1302# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 
     1303# filters). 
     1304# This tag requires that the tag GENERATE_QHP is set to YES. 
    9211305 
    9221306QHP_CUST_FILTER_ATTRS  = 
    9231307 
    924 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's 
    925 # filter section matches. 
    926 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>. 
     1308# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
     1309# project's filter section matches. Qt Help Project / Filter Attributes (see: 
     1310# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). 
     1311# This tag requires that the tag GENERATE_QHP is set to YES. 
    9271312 
    9281313QHP_SECT_FILTER_ATTRS  = 
    9291314 
    930 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
    931 # be used to specify the location of Qt's qhelpgenerator. 
    932 # If non-empty doxygen will try to run qhelpgenerator on the generated 
    933 # .qhp file. 
     1315# The QHG_LOCATION tag can be used to specify the location of Qt's 
     1316# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the 
     1317# generated .qhp file. 
     1318# This tag requires that the tag GENERATE_QHP is set to YES. 
    9341319 
    9351320QHG_LOCATION           = 
    9361321 
    937 # The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
    938 # top of each HTML page. The value NO (the default) enables the index and 
    939 # the value YES disables it. 
     1322# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be 
     1323# generated, together with the HTML files, they form an Eclipse help plugin. To 
     1324# install this plugin and make it available under the help contents menu in 
     1325# Eclipse, the contents of the directory containing the HTML and XML files needs 
     1326# to be copied into the plugins directory of eclipse. The name of the directory 
     1327# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. 
     1328# After copying Eclipse needs to be restarted before the help appears. 
     1329# The default value is: NO. 
     1330# This tag requires that the tag GENERATE_HTML is set to YES. 
     1331 
     1332GENERATE_ECLIPSEHELP   = NO 
     1333 
     1334# A unique identifier for the Eclipse help plugin. When installing the plugin 
     1335# the directory name containing the HTML and XML files should also have this 
     1336# name. Each documentation set should have its own identifier. 
     1337# The default value is: org.doxygen.Project. 
     1338# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. 
     1339 
     1340ECLIPSE_DOC_ID         = org.doxygen.Project 
     1341 
     1342# If you want full control over the layout of the generated HTML pages it might 
     1343# be necessary to disable the index and replace it with your own. The 
     1344# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top 
     1345# of each HTML page. A value of NO enables the index and the value YES disables 
     1346# it. Since the tabs in the index contain the same information as the navigation 
     1347# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. 
     1348# The default value is: NO. 
     1349# This tag requires that the tag GENERATE_HTML is set to YES. 
    9401350 
    9411351DISABLE_INDEX          = NO 
    9421352 
    943 # This tag can be used to set the number of enum values (range [1..20]) 
    944 # that doxygen will group on one line in the generated HTML documentation. 
     1353# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
     1354# structure should be generated to display hierarchical information. If the tag 
     1355# value is set to YES, a side panel will be generated containing a tree-like 
     1356# index structure (just like the one that is generated for HTML Help). For this 
     1357# to work a browser that supports JavaScript, DHTML, CSS and frames is required 
     1358# (i.e. any modern browser). Windows users are probably better off using the 
     1359# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can 
     1360# further fine-tune the look of the index. As an example, the default style 
     1361# sheet generated by doxygen has an example that shows how to put an image at 
     1362# the root of the tree instead of the PROJECT_NAME. Since the tree basically has 
     1363# the same information as the tab index, you could consider setting 
     1364# DISABLE_INDEX to YES when enabling this option. 
     1365# The default value is: NO. 
     1366# This tag requires that the tag GENERATE_HTML is set to YES. 
     1367 
     1368GENERATE_TREEVIEW      = NO 
     1369 
     1370# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that 
     1371# doxygen will group on one line in the generated HTML documentation. 
     1372# 
     1373# Note that a value of 0 will completely suppress the enum values from appearing 
     1374# in the overview section. 
     1375# Minimum value: 0, maximum value: 20, default value: 4. 
     1376# This tag requires that the tag GENERATE_HTML is set to YES. 
    9451377 
    9461378ENUM_VALUES_PER_LINE   = 4 
    9471379 
    948 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
    949 # structure should be generated to display hierarchical information. 
    950 # If the tag value is set to YES, a side panel will be generated 
    951 # containing a tree-like index structure (just like the one that 
    952 # is generated for HTML Help). For this to work a browser that supports 
    953 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
    954 # Windows users are probably better off using the HTML help feature. 
    955  
    956 GENERATE_TREEVIEW      = NO 
    957  
    958 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
    959 # and Class Hierarchy pages using a tree view instead of an ordered list. 
    960  
    961 USE_INLINE_TREES       = NO 
    962  
    963 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
    964 # used to set the initial width (in pixels) of the frame in which the tree 
    965 # is shown. 
     1380# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used 
     1381# to set the initial width (in pixels) of the frame in which the tree is shown. 
     1382# Minimum value: 0, maximum value: 1500, default value: 250. 
     1383# This tag requires that the tag GENERATE_HTML is set to YES. 
    9661384 
    9671385TREEVIEW_WIDTH         = 250 
    9681386 
    969 # Use this tag to change the font size of Latex formulas included 
    970 # as images in the HTML documentation. The default is 10. Note that 
    971 # when you change the font size after a successful doxygen run you need 
    972 # to manually remove any form_*.png images from the HTML output directory 
    973 # to force them to be regenerated. 
     1387# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to 
     1388# external symbols imported via tag files in a separate window. 
     1389# The default value is: NO. 
     1390# This tag requires that the tag GENERATE_HTML is set to YES. 
     1391 
     1392EXT_LINKS_IN_WINDOW    = NO 
     1393 
     1394# Use this tag to change the font size of LaTeX formulas included as images in 
     1395# the HTML documentation. When you change the font size after a successful 
     1396# doxygen run you need to manually remove any form_*.png images from the HTML 
     1397# output directory to force them to be regenerated. 
     1398# Minimum value: 8, maximum value: 50, default value: 10. 
     1399# This tag requires that the tag GENERATE_HTML is set to YES. 
    9741400 
    9751401FORMULA_FONTSIZE       = 10 
    9761402 
    977 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript 
    978 # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) 
    979 # there is already a search function so this one should typically 
    980 # be disabled. 
     1403# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
     1404# generated for formulas are transparent PNGs. Transparent PNGs are not 
     1405# supported properly for IE 6.0, but are supported on all modern browsers. 
     1406# 
     1407# Note that when changing this option you need to delete any form_*.png files in 
     1408# the HTML output directory before the changes have effect. 
     1409# The default value is: YES. 
     1410# This tag requires that the tag GENERATE_HTML is set to YES. 
     1411 
     1412FORMULA_TRANSPARENT    = YES 
     1413 
     1414# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see 
     1415# http://www.mathjax.org) which uses client side Javascript for the rendering 
     1416# instead of using prerendered bitmaps. Use this if you do not have LaTeX 
     1417# installed or if you want to formulas look prettier in the HTML output. When 
     1418# enabled you may also need to install MathJax separately and configure the path 
     1419# to it using the MATHJAX_RELPATH option. 
     1420# The default value is: NO. 
     1421# This tag requires that the tag GENERATE_HTML is set to YES. 
     1422 
     1423USE_MATHJAX            = NO 
     1424 
     1425# When MathJax is enabled you can set the default output format to be used for 
     1426# the MathJax output. See the MathJax site (see: 
     1427# http://docs.mathjax.org/en/latest/output.html) for more details. 
     1428# Possible values are: HTML-CSS (which is slower, but has the best 
     1429# compatibility), NativeMML (i.e. MathML) and SVG. 
     1430# The default value is: HTML-CSS. 
     1431# This tag requires that the tag USE_MATHJAX is set to YES. 
     1432 
     1433MATHJAX_FORMAT         = HTML-CSS 
     1434 
     1435# When MathJax is enabled you need to specify the location relative to the HTML 
     1436# output directory using the MATHJAX_RELPATH option. The destination directory 
     1437# should contain the MathJax.js script. For instance, if the mathjax directory 
     1438# is located at the same level as the HTML output directory, then 
     1439# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax 
     1440# Content Delivery Network so you can quickly see the result without installing 
     1441# MathJax. However, it is strongly recommended to install a local copy of 
     1442# MathJax from http://www.mathjax.org before deployment. 
     1443# The default value is: http://cdn.mathjax.org/mathjax/latest. 
     1444# This tag requires that the tag USE_MATHJAX is set to YES. 
     1445 
     1446MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest 
     1447 
     1448# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax 
     1449# extension names that should be enabled during MathJax rendering. For example 
     1450# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols 
     1451# This tag requires that the tag USE_MATHJAX is set to YES. 
     1452 
     1453MATHJAX_EXTENSIONS     = 
     1454 
     1455# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces 
     1456# of code that will be used on startup of the MathJax code. See the MathJax site 
     1457# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an 
     1458# example see the documentation. 
     1459# This tag requires that the tag USE_MATHJAX is set to YES. 
     1460 
     1461MATHJAX_CODEFILE       = 
     1462 
     1463# When the SEARCHENGINE tag is enabled doxygen will generate a search box for 
     1464# the HTML output. The underlying search engine uses javascript and DHTML and 
     1465# should work on any modern browser. Note that when using HTML help 
     1466# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) 
     1467# there is already a search function so this one should typically be disabled. 
     1468# For large projects the javascript based search engine can be slow, then 
     1469# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to 
     1470# search using the keyboard; to jump to the search box use <access key> + S 
     1471# (what the <access key> is depends on the OS and browser, but it is typically 
     1472# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down 
     1473# key> to jump into the search results window, the results can be navigated 
     1474# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel 
     1475# the search. The filter options can be selected when the cursor is inside the 
     1476# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> 
     1477# to select a filter and <Enter> or <escape> to activate or cancel the filter 
     1478# option. 
     1479# The default value is: YES. 
     1480# This tag requires that the tag GENERATE_HTML is set to YES. 
    9811481 
    9821482SEARCHENGINE           = YES 
    9831483 
    984 #--------------------------------------------------------------------------- 
    985 # configuration options related to the LaTeX output 
    986 #--------------------------------------------------------------------------- 
    987  
    988 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
    989 # generate Latex output. 
     1484# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
     1485# implemented using a web server instead of a web client using Javascript. There 
     1486# are two flavors of web server based searching depending on the EXTERNAL_SEARCH 
     1487# setting. When disabled, doxygen will generate a PHP script for searching and 
     1488# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing 
     1489# and searching needs to be provided by external tools. See the section 
     1490# "External Indexing and Searching" for details. 
     1491# The default value is: NO. 
     1492# This tag requires that the tag SEARCHENGINE is set to YES. 
     1493 
     1494SERVER_BASED_SEARCH    = NO 
     1495 
     1496# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP 
     1497# script for searching. Instead the search results are written to an XML file 
     1498# which needs to be processed by an external indexer. Doxygen will invoke an 
     1499# external search engine pointed to by the SEARCHENGINE_URL option to obtain the 
     1500# search results. 
     1501# 
     1502# Doxygen ships with an example indexer ( doxyindexer) and search engine 
     1503# (doxysearch.cgi) which are based on the open source search engine library 
     1504# Xapian (see: http://xapian.org/). 
     1505# 
     1506# See the section "External Indexing and Searching" for details. 
     1507# The default value is: NO. 
     1508# This tag requires that the tag SEARCHENGINE is set to YES. 
     1509 
     1510EXTERNAL_SEARCH        = NO 
     1511 
     1512# The SEARCHENGINE_URL should point to a search engine hosted by a web server 
     1513# which will return the search results when EXTERNAL_SEARCH is enabled. 
     1514# 
     1515# Doxygen ships with an example indexer ( doxyindexer) and search engine 
     1516# (doxysearch.cgi) which are based on the open source search engine library 
     1517# Xapian (see: http://xapian.org/). See the section "External Indexing and 
     1518# Searching" for details. 
     1519# This tag requires that the tag SEARCHENGINE is set to YES. 
     1520 
     1521SEARCHENGINE_URL       = 
     1522 
     1523# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed 
     1524# search data is written to a file for indexing by an external tool. With the 
     1525# SEARCHDATA_FILE tag the name of this file can be specified. 
     1526# The default file is: searchdata.xml. 
     1527# This tag requires that the tag SEARCHENGINE is set to YES. 
     1528 
     1529SEARCHDATA_FILE        = searchdata.xml 
     1530 
     1531# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the 
     1532# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is 
     1533# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple 
     1534# projects and redirect the results back to the right project. 
     1535# This tag requires that the tag SEARCHENGINE is set to YES. 
     1536 
     1537EXTERNAL_SEARCH_ID     = 
     1538 
     1539# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen 
     1540# projects other than the one defined by this configuration file, but that are 
     1541# all added to the same external search index. Each project needs to have a 
     1542# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of 
     1543# to a relative location where the documentation can be found. The format is: 
     1544# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... 
     1545# This tag requires that the tag SEARCHENGINE is set to YES. 
     1546 
     1547EXTRA_SEARCH_MAPPINGS  = 
     1548 
     1549#--------------------------------------------------------------------------- 
     1550# Configuration options related to the LaTeX output 
     1551#--------------------------------------------------------------------------- 
     1552 
     1553# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. 
     1554# The default value is: YES. 
    9901555 
    9911556GENERATE_LATEX         = YES 
    9921557 
    993 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
    994 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    995 # put in front of it. If left blank `latex' will be used as the default path. 
     1558# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a 
     1559# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1560# it. 
     1561# The default directory is: latex. 
     1562# This tag requires that the tag GENERATE_LATEX is set to YES. 
    9961563 
    9971564LATEX_OUTPUT           = latex 
    9981565 
    9991566# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
    1000 # invoked. If left blank `latex' will be used as the default command name. 
     1567# invoked. 
     1568# 
     1569# Note that when enabling USE_PDFLATEX this option is only used for generating 
     1570# bitmaps for formulas in the HTML output, but not in the Makefile that is 
     1571# written to the output directory. 
     1572# The default file is: latex. 
     1573# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10011574 
    10021575LATEX_CMD_NAME         = latex 
    10031576 
    1004 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
    1005 # generate index for LaTeX. If left blank `makeindex' will be used as the 
    1006 # default command name. 
     1577# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate 
     1578# index for LaTeX. 
     1579# The default file is: makeindex. 
     1580# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10071581 
    10081582MAKEINDEX_CMD_NAME     = makeindex 
    10091583 
    1010 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
    1011 # LaTeX documents. This may be useful for small projects and may help to 
    1012 # save some trees in general. 
     1584# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX 
     1585# documents. This may be useful for small projects and may help to save some 
     1586# trees in general. 
     1587# The default value is: NO. 
     1588# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10131589 
    10141590COMPACT_LATEX          = NO 
    10151591 
    1016 # The PAPER_TYPE tag can be used to set the paper type that is used 
    1017 # by the printer. Possible values are: a4, a4wide, letter, legal and 
    1018 # executive. If left blank a4wide will be used. 
    1019  
    1020 PAPER_TYPE             = a4wide 
    1021  
    1022 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
    1023 # packages that should be included in the LaTeX output. 
     1592# The PAPER_TYPE tag can be used to set the paper type that is used by the 
     1593# printer. 
     1594# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x 
     1595# 14 inches) and executive (7.25 x 10.5 inches). 
     1596# The default value is: a4. 
     1597# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1598 
     1599PAPER_TYPE             = a4 
     1600 
     1601# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names 
     1602# that should be included in the LaTeX output. To get the times font for 
     1603# instance you can specify 
     1604# EXTRA_PACKAGES=times 
     1605# If left blank no extra packages will be included. 
     1606# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10241607 
    10251608EXTRA_PACKAGES         = 
    10261609 
    1027 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
    1028 # the generated latex document. The header should contain everything until 
    1029 # the first chapter. If it is left blank doxygen will generate a 
    1030 # standard header. Notice: only use this tag if you know what you are doing! 
     1610# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the 
     1611# generated LaTeX document. The header should contain everything until the first 
     1612# chapter. If it is left blank doxygen will generate a standard header. See 
     1613# section "Doxygen usage" for information on how to let doxygen write the 
     1614# default header to a separate file. 
     1615# 
     1616# Note: Only use a user-defined header if you know what you are doing! The 
     1617# following commands have a special meaning inside the header: $title, 
     1618# $datetime, $date, $doxygenversion, $projectname, $projectnumber, 
     1619# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string, 
     1620# for the replacement values of the other commands the user is refered to 
     1621# HTML_HEADER. 
     1622# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10311623 
    10321624LATEX_HEADER           = 
    10331625 
    1034 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
    1035 # is prepared for conversion to pdf (using ps2pdf). The pdf file will 
    1036 # contain links (just like the HTML output) instead of page references 
    1037 # This makes the output suitable for online browsing using a pdf viewer. 
     1626# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the 
     1627# generated LaTeX document. The footer should contain everything after the last 
     1628# chapter. If it is left blank doxygen will generate a standard footer. See 
     1629# LATEX_HEADER for more information on how to generate a default footer and what 
     1630# special commands can be used inside the footer. 
     1631# 
     1632# Note: Only use a user-defined footer if you know what you are doing! 
     1633# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1634 
     1635LATEX_FOOTER           = 
     1636 
     1637# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or 
     1638# other source files which should be copied to the LATEX_OUTPUT output 
     1639# directory. Note that the files will be copied as-is; there are no commands or 
     1640# markers available. 
     1641# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1642 
     1643LATEX_EXTRA_FILES      = 
     1644 
     1645# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is 
     1646# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will 
     1647# contain links (just like the HTML output) instead of page references. This 
     1648# makes the output suitable for online browsing using a PDF viewer. 
     1649# The default value is: YES. 
     1650# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10381651 
    10391652PDF_HYPERLINKS         = YES 
    10401653 
    1041 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
    1042 # plain latex in the generated Makefile. Set this option to YES to get a 
     1654# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate 
     1655# the PDF file directly from the LaTeX files. Set this option to YES to get a 
    10431656# higher quality PDF documentation. 
     1657# The default value is: YES. 
     1658# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10441659 
    10451660USE_PDFLATEX           = YES 
    10461661 
    1047 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
    1048 # command to the generated LaTeX files. This will instruct LaTeX to keep 
    1049 # running if errors occur, instead of asking the user for help. 
    1050 # This option is also used when generating formulas in HTML. 
     1662# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode 
     1663# command to the generated LaTeX files. This will instruct LaTeX to keep running 
     1664# if errors occur, instead of asking the user for help. This option is also used 
     1665# when generating formulas in HTML. 
     1666# The default value is: NO. 
     1667# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10511668 
    10521669LATEX_BATCHMODE        = NO 
    10531670 
    1054 # If LATEX_HIDE_INDICES is set to YES then doxygen will not 
    1055 # include the index chapters (such as File Index, Compound Index, etc.) 
    1056 # in the output. 
     1671# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the 
     1672# index chapters (such as File Index, Compound Index, etc.) in the output. 
     1673# The default value is: NO. 
     1674# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10571675 
    10581676LATEX_HIDE_INDICES     = NO 
    10591677 
    1060 # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. 
     1678# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source 
     1679# code with syntax highlighting in the LaTeX output. 
     1680# 
     1681# Note that which sources are shown also depends on other settings such as 
     1682# SOURCE_BROWSER. 
     1683# The default value is: NO. 
     1684# This tag requires that the tag GENERATE_LATEX is set to YES. 
    10611685 
    10621686LATEX_SOURCE_CODE      = NO 
    10631687 
    1064 #--------------------------------------------------------------------------- 
    1065 # configuration options related to the RTF output 
    1066 #--------------------------------------------------------------------------- 
    1067  
    1068 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
    1069 # The RTF output is optimized for Word 97 and may not look very pretty with 
    1070 # other RTF readers or editors. 
     1688# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
     1689# bibliography, e.g. plainnat, or ieeetr. See 
     1690# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. 
     1691# The default value is: plain. 
     1692# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1693 
     1694LATEX_BIB_STYLE        = plain 
     1695 
     1696#--------------------------------------------------------------------------- 
     1697# Configuration options related to the RTF output 
     1698#--------------------------------------------------------------------------- 
     1699 
     1700# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The 
     1701# RTF output is optimized for Word 97 and may not look too pretty with other RTF 
     1702# readers/editors. 
     1703# The default value is: NO. 
    10711704 
    10721705GENERATE_RTF           = NO 
    10731706 
    1074 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
    1075 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    1076 # put in front of it. If left blank `rtf' will be used as the default path. 
     1707# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a 
     1708# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1709# it. 
     1710# The default directory is: rtf. 
     1711# This tag requires that the tag GENERATE_RTF is set to YES. 
    10771712 
    10781713RTF_OUTPUT             = rtf 
    10791714 
    1080 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
    1081 # RTF documents. This may be useful for small projects and may help to 
    1082 # save some trees in general. 
     1715# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF 
     1716# documents. This may be useful for small projects and may help to save some 
     1717# trees in general. 
     1718# The default value is: NO. 
     1719# This tag requires that the tag GENERATE_RTF is set to YES. 
    10831720 
    10841721COMPACT_RTF            = NO 
    10851722 
    1086 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
    1087 # will contain hyperlink fields. The RTF file will 
    1088 # contain links (just like the HTML output) instead of page references. 
    1089 # This makes the output suitable for online browsing using WORD or other 
    1090 # programs which support those fields. 
    1091 # Note: wordpad (write) and others do not support links. 
     1723# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will 
     1724# contain hyperlink fields. The RTF file will contain links (just like the HTML 
     1725# output) instead of page references. This makes the output suitable for online 
     1726# browsing using Word or some other Word compatible readers that support those 
     1727# fields. 
     1728# 
     1729# Note: WordPad (write) and others do not support links. 
     1730# The default value is: NO. 
     1731# This tag requires that the tag GENERATE_RTF is set to YES. 
    10921732 
    10931733RTF_HYPERLINKS         = NO 
    10941734 
    1095 # Load stylesheet definitions from file. Syntax is similar to doxygen's 
    1096 # config file, i.e. a series of assignments. You only have to provide 
    1097 # replacements, missing definitions are set to their default value. 
     1735# Load stylesheet definitions from file. Syntax is similar to doxygen's config 
     1736# file, i.e. a series of assignments. You only have to provide replacements, 
     1737# missing definitions are set to their default value. 
     1738# 
     1739# See also section "Doxygen usage" for information on how to generate the 
     1740# default style sheet that doxygen normally uses. 
     1741# This tag requires that the tag GENERATE_RTF is set to YES. 
    10981742 
    10991743RTF_STYLESHEET_FILE    = 
    11001744 
    1101 # Set optional variables used in the generation of an rtf document. 
    1102 # Syntax is similar to doxygen's config file. 
     1745# Set optional variables used in the generation of an RTF document. Syntax is 
     1746# similar to doxygen's config file. A template extensions file can be generated 
     1747# using doxygen -e rtf extensionFile. 
     1748# This tag requires that the tag GENERATE_RTF is set to YES. 
    11031749 
    11041750RTF_EXTENSIONS_FILE    = 
    11051751 
    11061752#--------------------------------------------------------------------------- 
    1107 # configuration options related to the man page output 
    1108 #--------------------------------------------------------------------------- 
    1109  
    1110 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
    1111 # generate man pages 
     1753# Configuration options related to the man page output 
     1754#--------------------------------------------------------------------------- 
     1755 
     1756# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for 
     1757# classes and files. 
     1758# The default value is: NO. 
    11121759 
    11131760GENERATE_MAN           = NO 
    11141761 
    1115 # The MAN_OUTPUT tag is used to specify where the man pages will be put. 
    1116 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    1117 # put in front of it. If left blank `man' will be used as the default path. 
     1762# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a 
     1763# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1764# it. A directory man3 will be created inside the directory specified by 
     1765# MAN_OUTPUT. 
     1766# The default directory is: man. 
     1767# This tag requires that the tag GENERATE_MAN is set to YES. 
    11181768 
    11191769MAN_OUTPUT             = man 
    11201770 
    1121 # The MAN_EXTENSION tag determines the extension that is added to 
    1122 # the generated man pages (default is the subroutine's section .3) 
     1771# The MAN_EXTENSION tag determines the extension that is added to the generated 
     1772# man pages. In case the manual section does not start with a number, the number 
     1773# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is 
     1774# optional. 
     1775# The default value is: .3. 
     1776# This tag requires that the tag GENERATE_MAN is set to YES. 
    11231777 
    11241778MAN_EXTENSION          = .3 
    11251779 
    1126 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
    1127 # then it will generate one additional man file for each entity 
    1128 # documented in the real man page(s). These additional files 
    1129 # only source the real man page, but without them the man command 
    1130 # would be unable to find the correct page. The default is NO. 
     1780# The MAN_SUBDIR tag determines the name of the directory created within 
     1781# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by 
     1782# MAN_EXTENSION with the initial . removed. 
     1783# This tag requires that the tag GENERATE_MAN is set to YES. 
     1784 
     1785MAN_SUBDIR             = 
     1786 
     1787# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it 
     1788# will generate one additional man file for each entity documented in the real 
     1789# man page(s). These additional files only source the real man page, but without 
     1790# them the man command would be unable to find the correct page. 
     1791# The default value is: NO. 
     1792# This tag requires that the tag GENERATE_MAN is set to YES. 
    11311793 
    11321794MAN_LINKS              = NO 
    11331795 
    11341796#--------------------------------------------------------------------------- 
    1135 # configuration options related to the XML output 
    1136 #--------------------------------------------------------------------------- 
    1137  
    1138 # If the GENERATE_XML tag is set to YES Doxygen will 
    1139 # generate an XML file that captures the structure of 
    1140 # the code including all documentation. 
     1797# Configuration options related to the XML output 
     1798#--------------------------------------------------------------------------- 
     1799 
     1800# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that 
     1801# captures the structure of the code including all documentation. 
     1802# The default value is: NO. 
    11411803 
    11421804GENERATE_XML           = NO 
    11431805 
    1144 # The XML_OUTPUT tag is used to specify where the XML pages will be put. 
    1145 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
    1146 # put in front of it. If left blank `xml' will be used as the default path. 
     1806# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a 
     1807# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1808# it. 
     1809# The default directory is: xml. 
     1810# This tag requires that the tag GENERATE_XML is set to YES. 
    11471811 
    11481812XML_OUTPUT             = xml 
    11491813 
    1150 # The XML_SCHEMA tag can be used to specify an XML schema, 
    1151 # which can be used by a validating XML parser to check the 
    1152 # syntax of the XML files. 
    1153  
    1154 XML_SCHEMA             = 
    1155  
    1156 # The XML_DTD tag can be used to specify an XML DTD, 
    1157 # which can be used by a validating XML parser to check the 
    1158 # syntax of the XML files. 
    1159  
    1160 XML_DTD                = 
    1161  
    1162 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
    1163 # dump the program listings (including syntax highlighting 
    1164 # and cross-referencing information) to the XML output. Note that 
    1165 # enabling this will significantly increase the size of the XML output. 
     1814# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program 
     1815# listings (including syntax highlighting and cross-referencing information) to 
     1816# the XML output. Note that enabling this will significantly increase the size 
     1817# of the XML output. 
     1818# The default value is: YES. 
     1819# This tag requires that the tag GENERATE_XML is set to YES. 
    11661820 
    11671821XML_PROGRAMLISTING     = YES 
    11681822 
    11691823#--------------------------------------------------------------------------- 
    1170 # configuration options for the AutoGen Definitions output 
    1171 #--------------------------------------------------------------------------- 
    1172  
    1173 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
    1174 # generate an AutoGen Definitions (see autogen.sf.net) file 
    1175 # that captures the structure of the code including all 
    1176 # documentation. Note that this feature is still experimental 
    1177 # and incomplete at the moment. 
     1824# Configuration options related to the DOCBOOK output 
     1825#--------------------------------------------------------------------------- 
     1826 
     1827# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files 
     1828# that can be used to generate PDF. 
     1829# The default value is: NO. 
     1830 
     1831GENERATE_DOCBOOK       = NO 
     1832 
     1833# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. 
     1834# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in 
     1835# front of it. 
     1836# The default directory is: docbook. 
     1837# This tag requires that the tag GENERATE_DOCBOOK is set to YES. 
     1838 
     1839DOCBOOK_OUTPUT         = docbook 
     1840 
     1841# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the 
     1842# program listings (including syntax highlighting and cross-referencing 
     1843# information) to the DOCBOOK output. Note that enabling this will significantly 
     1844# increase the size of the DOCBOOK output. 
     1845# The default value is: NO. 
     1846# This tag requires that the tag GENERATE_DOCBOOK is set to YES. 
     1847 
     1848DOCBOOK_PROGRAMLISTING = NO 
     1849 
     1850#--------------------------------------------------------------------------- 
     1851# Configuration options for the AutoGen Definitions output 
     1852#--------------------------------------------------------------------------- 
     1853 
     1854# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen 
     1855# Definitions (see http://autogen.sf.net) file that captures the structure of 
     1856# the code including all documentation. Note that this feature is still 
     1857# experimental and incomplete at the moment. 
     1858# The default value is: NO. 
    11781859 
    11791860GENERATE_AUTOGEN_DEF   = NO 
    11801861 
    11811862#--------------------------------------------------------------------------- 
    1182 # configuration options related to the Perl module output 
    1183 #--------------------------------------------------------------------------- 
    1184  
    1185 # If the GENERATE_PERLMOD tag is set to YES Doxygen will 
    1186 # generate a Perl module file that captures the structure of 
    1187 # the code including all documentation. Note that this 
    1188 # feature is still experimental and incomplete at the 
    1189 # moment. 
     1863# Configuration options related to the Perl module output 
     1864#--------------------------------------------------------------------------- 
     1865 
     1866# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module 
     1867# file that captures the structure of the code including all documentation. 
     1868# 
     1869# Note that this feature is still experimental and incomplete at the moment. 
     1870# The default value is: NO. 
    11901871 
    11911872GENERATE_PERLMOD       = NO 
    11921873 
    1193 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
    1194 # the necessary Makefile rules, Perl scripts and LaTeX code to be able 
    1195 # to generate PDF and DVI output from the Perl module output. 
     1874# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary 
     1875# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI 
     1876# output from the Perl module output. 
     1877# The default value is: NO. 
     1878# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
    11961879 
    11971880PERLMOD_LATEX          = NO 
    11981881 
    1199 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
    1200 # nicely formatted so it can be parsed by a human reader. 
    1201 # This is useful 
    1202 # if you want to understand what is going on. 
    1203 # On the other hand, if this 
    1204 # tag is set to NO the size of the Perl module output will be much smaller 
    1205 # and Perl will parse it just the same. 
     1882# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely 
     1883# formatted so it can be parsed by a human reader. This is useful if you want to 
     1884# understand what is going on. On the other hand, if this tag is set to NO the 
     1885# size of the Perl module output will be much smaller and Perl will parse it 
     1886# just the same. 
     1887# The default value is: YES. 
     1888# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
    12061889 
    12071890PERLMOD_PRETTY         = YES 
    12081891 
    1209 # The names of the make variables in the generated doxyrules.make file 
    1210 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
    1211 # This is useful so different doxyrules.make files included by the same 
    1212 # Makefile don't overwrite each other's variables. 
     1892# The names of the make variables in the generated doxyrules.make file are 
     1893# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful 
     1894# so different doxyrules.make files included by the same Makefile don't 
     1895# overwrite each other's variables. 
     1896# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
    12131897 
    12141898PERLMOD_MAKEVAR_PREFIX = 
     
    12181902#--------------------------------------------------------------------------- 
    12191903 
    1220 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
    1221 # evaluate all C-preprocessor directives found in the sources and include 
    1222 # files. 
     1904# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all 
     1905# C-preprocessor directives found in the sources and include files. 
     1906# The default value is: YES. 
    12231907 
    12241908ENABLE_PREPROCESSING   = YES 
    12251909 
    1226 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
    1227 # names in the source code. If set to NO (the default) only conditional 
    1228 # compilation will be performed. Macro expansion can be done in a controlled 
    1229 # way by setting EXPAND_ONLY_PREDEF to YES. 
     1910# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names 
     1911# in the source code. If set to NO only conditional compilation will be 
     1912# performed. Macro expansion can be done in a controlled way by setting 
     1913# EXPAND_ONLY_PREDEF to YES. 
     1914# The default value is: NO. 
     1915# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12301916 
    12311917MACRO_EXPANSION        = NO 
    12321918 
    1233 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
    1234 # then the macro expansion is limited to the macros specified with the 
    1235 # PREDEFINED and EXPAND_AS_DEFINED tags. 
     1919# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then 
     1920# the macro expansion is limited to the macros specified with the PREDEFINED and 
     1921# EXPAND_AS_DEFINED tags. 
     1922# The default value is: NO. 
     1923# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12361924 
    12371925EXPAND_ONLY_PREDEF     = NO 
    12381926 
    1239 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
    1240 # in the INCLUDE_PATH (see below) will be search if a #include is found. 
     1927# If the SEARCH_INCLUDES tag is set to YES the includes files in the 
     1928# INCLUDE_PATH will be searched if a #include is found. 
     1929# The default value is: YES. 
     1930# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12411931 
    12421932SEARCH_INCLUDES        = YES 
    12431933 
    12441934# The INCLUDE_PATH tag can be used to specify one or more directories that 
    1245 # contain include files that are not input files but should be processed by 
    1246 # the preprocessor. 
     1935# contain include files that are not input files but should be processed by the 
     1936# preprocessor. 
     1937# This tag requires that the tag SEARCH_INCLUDES is set to YES. 
    12471938 
    12481939INCLUDE_PATH           = 
     
    12501941# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
    12511942# patterns (like *.h and *.hpp) to filter out the header-files in the 
    1252 # directories. If left blank, the patterns specified with FILE_PATTERNS will 
    1253 # be used. 
     1943# directories. If left blank, the patterns specified with FILE_PATTERNS will be 
     1944# used. 
     1945# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12541946 
    12551947INCLUDE_FILE_PATTERNS  = 
    12561948 
    1257 # The PREDEFINED tag can be used to specify one or more macro names that 
    1258 # are defined before the preprocessor is started (similar to the -D option of 
    1259 # gcc). The argument of the tag is a list of macros of the form: name 
    1260 # or name=definition (no spaces). If the definition and the = are 
    1261 # omitted =1 is assumed. To prevent a macro definition from being 
    1262 # undefined via #undef or recursively expanded use the := operator 
    1263 # instead of the = operator. 
     1949# The PREDEFINED tag can be used to specify one or more macro names that are 
     1950# defined before the preprocessor is started (similar to the -D option of e.g. 
     1951# gcc). The argument of the tag is a list of macros of the form: name or 
     1952# name=definition (no spaces). If the definition and the "=" are omitted, "=1" 
     1953# is assumed. To prevent a macro definition from being undefined via #undef or 
     1954# recursively expanded use the := operator instead of the = operator. 
     1955# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12641956 
    12651957PREDEFINED             = 
    12661958 
    1267 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
    1268 # this tag can be used to specify a list of macro names that should be expanded. 
    1269 # The macro definition that is found in the sources will be used. 
    1270 # Use the PREDEFINED tag if you want to use a different macro definition. 
     1959# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this 
     1960# tag can be used to specify a list of macro names that should be expanded. The 
     1961# macro definition that is found in the sources will be used. Use the PREDEFINED 
     1962# tag if you want to use a different macro definition that overrules the 
     1963# definition found in the source code. 
     1964# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12711965 
    12721966EXPAND_AS_DEFINED      = 
    12731967 
    1274 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
    1275 # doxygen's preprocessor will remove all function-like macros that are alone 
    1276 # on a line, have an all uppercase name, and do not end with a semicolon. Such 
    1277 # function macros are typically used for boiler-plate code, and will confuse 
    1278 # the parser if not removed. 
     1968# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will 
     1969# remove all references to function-like macros that are alone on a line, have 
     1970# an all uppercase name, and do not end with a semicolon. Such function macros 
     1971# are typically used for boiler-plate code, and will confuse the parser if not 
     1972# removed. 
     1973# The default value is: YES. 
     1974# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
    12791975 
    12801976SKIP_FUNCTION_MACROS   = YES 
    12811977 
    12821978#--------------------------------------------------------------------------- 
    1283 # Configuration::additions related to external references 
    1284 #--------------------------------------------------------------------------- 
    1285  
    1286 # The TAGFILES option can be used to specify one or more tagfiles. 
    1287 # Optionally an initial location of the external documentation 
    1288 # can be added for each tagfile. The format of a tag file without 
    1289 # this location is as follows: 
    1290 # 
     1979# Configuration options related to external references 
     1980#--------------------------------------------------------------------------- 
     1981 
     1982# The TAGFILES tag can be used to specify one or more tag files. For each tag 
     1983# file the location of the external documentation should be added. The format of 
     1984# a tag file without this location is as follows: 
    12911985# TAGFILES = file1 file2 ... 
    12921986# Adding location for the tag files is done as follows: 
    1293 # 
    12941987# TAGFILES = file1=loc1 "file2 = loc2" ... 
    1295 # where "loc1" and "loc2" can be relative or absolute paths or 
    1296 # URLs. If a location is present for each tag, the installdox tool 
    1297 # does not have to be run to correct the links. 
    1298 # Note that each tag file must have a unique name 
    1299 # (where the name does NOT include the path) 
    1300 # If a tag file is not located in the directory in which doxygen 
    1301 # is run, you must also specify the path to the tagfile here. 
     1988# where loc1 and loc2 can be relative or absolute paths or URLs. See the 
     1989# section "Linking to external documentation" for more information about the use 
     1990# of tag files. 
     1991# Note: Each tag file must have a unique name (where the name does NOT include 
     1992# the path). If a tag file is not located in the directory in which doxygen is 
     1993# run, you must also specify the path to the tagfile here. 
    13021994 
    13031995TAGFILES               = 
    13041996 
    1305 # When a file name is specified after GENERATE_TAGFILE, doxygen will create 
    1306 # a tag file that is based on the input files it reads. 
     1997# When a file name is specified after GENERATE_TAGFILE, doxygen will create a 
     1998# tag file that is based on the input files it reads. See section "Linking to 
     1999# external documentation" for more information about the usage of tag files. 
    13072000 
    13082001GENERATE_TAGFILE       = 
    13092002 
    1310 # If the ALLEXTERNALS tag is set to YES all external classes will be listed 
    1311 # in the class index. If set to NO only the inherited external classes 
    1312 # will be listed. 
     2003# If the ALLEXTERNALS tag is set to YES all external class will be listed in the 
     2004# class index. If set to NO only the inherited external classes will be listed. 
     2005# The default value is: NO. 
    13132006 
    13142007ALLEXTERNALS           = NO 
    13152008 
    1316 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
    1317 # in the modules index. If set to NO, only the current project's groups will 
     2009# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in 
     2010# the modules index. If set to NO, only the current project's groups will be 
     2011# listed. 
     2012# The default value is: YES. 
     2013 
     2014EXTERNAL_GROUPS        = YES 
     2015 
     2016# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in 
     2017# the related pages index. If set to NO, only the current project's pages will 
    13182018# be listed. 
    1319  
    1320 EXTERNAL_GROUPS        = YES 
     2019# The default value is: YES. 
     2020 
     2021EXTERNAL_PAGES         = YES 
    13212022 
    13222023# The PERL_PATH should be the absolute path and name of the perl script 
    1323 # interpreter (i.e. the result of `which perl'). 
     2024# interpreter (i.e. the result of 'which perl'). 
     2025# The default file (with absolute path) is: /usr/bin/perl. 
    13242026 
    13252027PERL_PATH              = /usr/bin/perl 
     
    13292031#--------------------------------------------------------------------------- 
    13302032 
    1331 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
    1332 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
    1333 # or super classes. Setting the tag to NO turns the diagrams off. Note that 
    1334 # this option is superseded by the HAVE_DOT option below. This is only a 
    1335 # fallback. It is recommended to install and use dot, since it yields more 
     2033# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram 
     2034# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to 
     2035# NO turns the diagrams off. Note that this option also works with HAVE_DOT 
     2036# disabled, but it is recommended to install and use dot, since it yields more 
    13362037# powerful graphs. 
     2038# The default value is: YES. 
    13372039 
    13382040CLASS_DIAGRAMS         = YES 
    13392041 
    13402042# You can define message sequence charts within doxygen comments using the \msc 
    1341 # command. Doxygen will then run the mscgen tool (see 
    1342 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
     2043# command. Doxygen will then run the mscgen tool (see: 
     2044# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the 
    13432045# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
    13442046# the mscgen tool resides. If left empty the tool is assumed to be found in the 
     
    13472049MSCGEN_PATH            = 
    13482050 
    1349 # If set to YES, the inheritance and collaboration graphs will hide 
    1350 # inheritance and usage relations if the target is undocumented 
    1351 # or is not a class. 
     2051# You can include diagrams made with dia in doxygen documentation. Doxygen will 
     2052# then run dia to produce the diagram and insert it in the documentation. The 
     2053# DIA_PATH tag allows you to specify the directory where the dia binary resides. 
     2054# If left empty dia is assumed to be found in the default search path. 
     2055 
     2056DIA_PATH               = 
     2057 
     2058# If set to YES, the inheritance and collaboration graphs will hide inheritance 
     2059# and usage relations if the target is undocumented or is not a class. 
     2060# The default value is: YES. 
    13522061 
    13532062HIDE_UNDOC_RELATIONS   = YES 
    13542063 
    13552064# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
    1356 # available from the path. This tool is part of Graphviz, a graph visualization 
    1357 # toolkit from AT&T and Lucent Bell Labs. The other options in this section 
    1358 # have no effect if this option is set to NO (the default) 
    1359  
    1360 HAVE_DOT               = YES  
    1361  
    1362 # By default doxygen will write a font called FreeSans.ttf to the output 
    1363 # directory and reference it in all dot files that doxygen generates. This 
    1364 # font does not include all possible unicode characters however, so when you need 
    1365 # these (or just want a differently looking font) you can specify the font name 
    1366 # using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
    1367 # which can be done by putting it in a standard location or by setting the 
    1368 # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
    1369 # containing the font. 
    1370  
    1371 DOT_FONTNAME           = FreeSans 
    1372  
    1373 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
    1374 # The default size is 10pt. 
     2065# available from the path. This tool is part of Graphviz (see: 
     2066# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent 
     2067# Bell Labs. The other options in this section have no effect if this option is 
     2068# set to NO 
     2069# The default value is: NO. 
     2070 
     2071HAVE_DOT               = YES 
     2072 
     2073# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed 
     2074# to run in parallel. When set to 0 doxygen will base this on the number of 
     2075# processors available in the system. You can set it explicitly to a value 
     2076# larger than 0 to get control over the balance between CPU load and processing 
     2077# speed. 
     2078# Minimum value: 0, maximum value: 32, default value: 0. 
     2079# This tag requires that the tag HAVE_DOT is set to YES. 
     2080 
     2081DOT_NUM_THREADS        = 0 
     2082 
     2083# When you want a differently looking font in the dot files that doxygen 
     2084# generates you can specify the font name using DOT_FONTNAME. You need to make 
     2085# sure dot is able to find the font, which can be done by putting it in a 
     2086# standard location or by setting the DOTFONTPATH environment variable or by 
     2087# setting DOT_FONTPATH to the directory containing the font. 
     2088# The default value is: Helvetica. 
     2089# This tag requires that the tag HAVE_DOT is set to YES. 
     2090 
     2091DOT_FONTNAME           = Helvetica 
     2092 
     2093# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of 
     2094# dot graphs. 
     2095# Minimum value: 4, maximum value: 24, default value: 10. 
     2096# This tag requires that the tag HAVE_DOT is set to YES. 
    13752097 
    13762098DOT_FONTSIZE           = 10 
    13772099 
    1378 # By default doxygen will tell dot to use the output directory to look for the 
    1379 # FreeSans.ttf font (which doxygen will put there itself). If you specify a 
    1380 # different font using DOT_FONTNAME you can set the path where dot 
    1381 # can find it using this tag. 
     2100# By default doxygen will tell dot to use the default font as specified with 
     2101# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set 
     2102# the path where dot can find it using this tag. 
     2103# This tag requires that the tag HAVE_DOT is set to YES. 
    13822104 
    13832105DOT_FONTPATH           = 
    13842106 
    1385 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
    1386 # will generate a graph for each documented class showing the direct and 
    1387 # indirect inheritance relations. Setting this tag to YES will force the 
    1388 # the CLASS_DIAGRAMS tag to NO. 
     2107# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for 
     2108# each documented class showing the direct and indirect inheritance relations. 
     2109# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. 
     2110# The default value is: YES. 
     2111# This tag requires that the tag HAVE_DOT is set to YES. 
    13892112 
    13902113CLASS_GRAPH            = YES 
    13912114 
    1392 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
    1393 # will generate a graph for each documented class showing the direct and 
    1394 # indirect implementation dependencies (inheritance, containment, and 
    1395 # class references variables) of the class with other documented classes. 
     2115# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a 
     2116# graph for each documented class showing the direct and indirect implementation 
     2117# dependencies (inheritance, containment, and class references variables) of the 
     2118# class with other documented classes. 
     2119# The default value is: YES. 
     2120# This tag requires that the tag HAVE_DOT is set to YES. 
    13962121 
    13972122COLLABORATION_GRAPH    = YES 
    13982123 
    1399 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
    1400 # will generate a graph for groups, showing the direct groups dependencies 
     2124# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for 
     2125# groups, showing the direct groups dependencies. 
     2126# The default value is: YES. 
     2127# This tag requires that the tag HAVE_DOT is set to YES. 
    14012128 
    14022129GROUP_GRAPHS           = YES 
     
    14052132# collaboration diagrams in a style similar to the OMG's Unified Modeling 
    14062133# Language. 
    1407  
    1408 UML_LOOK               = NO 
    1409  
    1410 # If set to YES, the inheritance and collaboration graphs will show the 
    1411 # relations between templates and their instances. 
     2134# The default value is: NO. 
     2135# This tag requires that the tag HAVE_DOT is set to YES. 
     2136 
     2137UML_LOOK               = YES 
     2138 
     2139# If the UML_LOOK tag is enabled, the fields and methods are shown inside the 
     2140# class node. If there are many fields or methods and many nodes the graph may 
     2141# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the 
     2142# number of items for each type to make the size more manageable. Set this to 0 
     2143# for no limit. Note that the threshold may be exceeded by 50% before the limit 
     2144# is enforced. So when you set the threshold to 10, up to 15 fields may appear, 
     2145# but if the number exceeds 15, the total amount of fields shown is limited to 
     2146# 10. 
     2147# Minimum value: 0, maximum value: 100, default value: 10. 
     2148# This tag requires that the tag HAVE_DOT is set to YES. 
     2149 
     2150UML_LIMIT_NUM_FIELDS   = 10 
     2151 
     2152# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and 
     2153# collaboration graphs will show the relations between templates and their 
     2154# instances. 
     2155# The default value is: NO. 
     2156# This tag requires that the tag HAVE_DOT is set to YES. 
    14122157 
    14132158TEMPLATE_RELATIONS     = NO 
    14142159 
    1415 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
    1416 # tags are set to YES then doxygen will generate a graph for each documented 
    1417 # file showing the direct and indirect include dependencies of the file with 
    1418 # other documented files. 
     2160# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to 
     2161# YES then doxygen will generate a graph for each documented file showing the 
     2162# direct and indirect include dependencies of the file with other documented 
     2163# files. 
     2164# The default value is: YES. 
     2165# This tag requires that the tag HAVE_DOT is set to YES. 
    14192166 
    14202167INCLUDE_GRAPH          = YES 
    14212168 
    1422 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
    1423 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
    1424 # documented header file showing the documented files that directly or 
    1425 # indirectly include this file. 
     2169# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are 
     2170# set to YES then doxygen will generate a graph for each documented file showing 
     2171# the direct and indirect include dependencies of the file with other documented 
     2172# files. 
     2173# The default value is: YES. 
     2174# This tag requires that the tag HAVE_DOT is set to YES. 
    14262175 
    14272176INCLUDED_BY_GRAPH      = YES 
    14282177 
    1429 # If the CALL_GRAPH and HAVE_DOT options are set to YES then 
    1430 # doxygen will generate a call dependency graph for every global function 
    1431 # or class method. Note that enabling this option will significantly increase 
    1432 # the time of a run. So in most cases it will be better to enable call graphs 
    1433 # for selected functions only using the \callgraph command. 
    1434  
    1435 CALL_GRAPH             = YES 
    1436  
    1437 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
    1438 # doxygen will generate a caller dependency graph for every global function 
    1439 # or class method. Note that enabling this option will significantly increase 
    1440 # the time of a run. So in most cases it will be better to enable caller 
    1441 # graphs for selected functions only using the \callergraph command. 
    1442  
    1443 CALLER_GRAPH           = YES  
    1444  
    1445 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
    1446 # will graphical hierarchy of all classes instead of a textual one. 
     2178# If the CALL_GRAPH tag is set to YES then doxygen will generate a call 
     2179# dependency graph for every global function or class method. 
     2180# 
     2181# Note that enabling this option will significantly increase the time of a run. 
     2182# So in most cases it will be better to enable call graphs for selected 
     2183# functions only using the \callgraph command. 
     2184# The default value is: NO. 
     2185# This tag requires that the tag HAVE_DOT is set to YES. 
     2186 
     2187CALL_GRAPH             = NO 
     2188 
     2189# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller 
     2190# dependency graph for every global function or class method. 
     2191# 
     2192# Note that enabling this option will significantly increase the time of a run. 
     2193# So in most cases it will be better to enable caller graphs for selected 
     2194# functions only using the \callergraph command. 
     2195# The default value is: NO. 
     2196# This tag requires that the tag HAVE_DOT is set to YES. 
     2197 
     2198CALLER_GRAPH           = NO 
     2199 
     2200# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical 
     2201# hierarchy of all classes instead of a textual one. 
     2202# The default value is: YES. 
     2203# This tag requires that the tag HAVE_DOT is set to YES. 
    14472204 
    14482205GRAPHICAL_HIERARCHY    = YES 
    14492206 
    1450 # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
    1451 # then doxygen will show the dependencies a directory has on other directories 
    1452 # in a graphical way. The dependency relations are determined by the #include 
    1453 # relations between the files in the directories. 
     2207# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the 
     2208# dependencies a directory has on other directories in a graphical way. The 
     2209# dependency relations are determined by the #include relations between the 
     2210# files in the directories. 
     2211# The default value is: YES. 
     2212# This tag requires that the tag HAVE_DOT is set to YES. 
    14542213 
    14552214DIRECTORY_GRAPH        = YES 
    14562215 
    14572216# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
    1458 # generated by dot. Possible values are png, jpg, or gif 
    1459 # If left blank png will be used. 
     2217# generated by dot. 
     2218# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order 
     2219# to make the SVG files visible in IE 9+ (other browsers do not have this 
     2220# requirement). 
     2221# Possible values are: png, jpg, gif and svg. 
     2222# The default value is: png. 
     2223# This tag requires that the tag HAVE_DOT is set to YES. 
    14602224 
    14612225DOT_IMAGE_FORMAT       = png 
    14622226 
    1463 # The tag DOT_PATH can be used to specify the path where the dot tool can be 
     2227# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
     2228# enable generation of interactive SVG images that allow zooming and panning. 
     2229# 
     2230# Note that this requires a modern browser other than Internet Explorer. Tested 
     2231# and working are Firefox, Chrome, Safari, and Opera. 
     2232# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make 
     2233# the SVG files visible. Older versions of IE do not have SVG support. 
     2234# The default value is: NO. 
     2235# This tag requires that the tag HAVE_DOT is set to YES. 
     2236 
     2237INTERACTIVE_SVG        = NO 
     2238 
     2239# The DOT_PATH tag can be used to specify the path where the dot tool can be 
    14642240# found. If left blank, it is assumed the dot tool can be found in the path. 
     2241# This tag requires that the tag HAVE_DOT is set to YES. 
    14652242 
    14662243DOT_PATH               = 
    14672244 
    14682245# The DOTFILE_DIRS tag can be used to specify one or more directories that 
    1469 # contain dot files that are included in the documentation (see the 
    1470 # \dotfile command). 
     2246# contain dot files that are included in the documentation (see the \dotfile 
     2247# command). 
     2248# This tag requires that the tag HAVE_DOT is set to YES. 
    14712249 
    14722250DOTFILE_DIRS           = 
    14732251 
    1474 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
    1475 # nodes that will be shown in the graph. If the number of nodes in a graph 
    1476 # becomes larger than this value, doxygen will truncate the graph, which is 
    1477 # visualized by representing a node as a red box. Note that doxygen if the 
    1478 # number of direct children of the root node in a graph is already larger than 
    1479 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
    1480 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 
     2252# The MSCFILE_DIRS tag can be used to specify one or more directories that 
     2253# contain msc files that are included in the documentation (see the \mscfile 
     2254# command). 
     2255 
     2256MSCFILE_DIRS           = 
     2257 
     2258# The DIAFILE_DIRS tag can be used to specify one or more directories that 
     2259# contain dia files that are included in the documentation (see the \diafile 
     2260# command). 
     2261 
     2262DIAFILE_DIRS           = 
     2263 
     2264# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the 
     2265# path where java can find the plantuml.jar file. If left blank, it is assumed 
     2266# PlantUML is not used or called during a preprocessing step. Doxygen will 
     2267# generate a warning when it encounters a \startuml command in this case and 
     2268# will not generate output for the diagram. 
     2269# This tag requires that the tag HAVE_DOT is set to YES. 
     2270 
     2271PLANTUML_JAR_PATH      = 
     2272 
     2273# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes 
     2274# that will be shown in the graph. If the number of nodes in a graph becomes 
     2275# larger than this value, doxygen will truncate the graph, which is visualized 
     2276# by representing a node as a red box. Note that doxygen if the number of direct 
     2277# children of the root node in a graph is already larger than 
     2278# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that 
     2279# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 
     2280# Minimum value: 0, maximum value: 10000, default value: 50. 
     2281# This tag requires that the tag HAVE_DOT is set to YES. 
    14812282 
    14822283DOT_GRAPH_MAX_NODES    = 50 
    14832284 
    1484 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
    1485 # graphs generated by dot. A depth value of 3 means that only nodes reachable 
    1486 # from the root by following a path via at most 3 edges will be shown. Nodes 
    1487 # that lay further from the root node will be omitted. Note that setting this 
    1488 # option to 1 or 2 may greatly reduce the computation time needed for large 
    1489 # code bases. Also note that the size of a graph can be further restricted by 
     2285# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs 
     2286# generated by dot. A depth value of 3 means that only nodes reachable from the 
     2287# root by following a path via at most 3 edges will be shown. Nodes that lay 
     2288# further from the root node will be omitted. Note that setting this option to 1 
     2289# or 2 may greatly reduce the computation time needed for large code bases. Also 
     2290# note that the size of a graph can be further restricted by 
    14902291# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. 
     2292# Minimum value: 0, maximum value: 1000, default value: 0. 
     2293# This tag requires that the tag HAVE_DOT is set to YES. 
    14912294 
    14922295MAX_DOT_GRAPH_DEPTH    = 0 
    14932296 
    14942297# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
    1495 # background. This is disabled by default, because dot on Windows does not 
    1496 # seem to support this out of the box. Warning: Depending on the platform used, 
    1497 # enabling this option may lead to badly anti-aliased labels on the edges of 
    1498 # a graph (i.e. they become hard to read). 
     2298# background. This is disabled by default, because dot on Windows does not seem 
     2299# to support this out of the box. 
     2300# 
     2301# Warning: Depending on the platform used, enabling this option may lead to 
     2302# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
     2303# read). 
     2304# The default value is: NO. 
     2305# This tag requires that the tag HAVE_DOT is set to YES. 
    14992306 
    15002307DOT_TRANSPARENT        = NO 
     
    15022309# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
    15032310# files in one run (i.e. multiple -o and -T options on the command line). This 
    1504 # makes dot run faster, but since only newer versions of dot (>1.8.10) 
    1505 # support this, this feature is disabled by default. 
     2311# makes dot run faster, but since only newer versions of dot (>1.8.10) support 
     2312# this, this feature is disabled by default. 
     2313# The default value is: NO. 
     2314# This tag requires that the tag HAVE_DOT is set to YES. 
    15062315 
    15072316DOT_MULTI_TARGETS      = NO 
    15082317 
    1509 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
    1510 # generate a legend page explaining the meaning of the various boxes and 
    1511 # arrows in the dot generated graphs. 
     2318# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page 
     2319# explaining the meaning of the various boxes and arrows in the dot generated 
     2320# graphs. 
     2321# The default value is: YES. 
     2322# This tag requires that the tag HAVE_DOT is set to YES. 
    15122323 
    15132324GENERATE_LEGEND        = YES 
    15142325 
    1515 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
    1516 # remove the intermediate dot files that are used to generate 
    1517 # the various graphs. 
     2326# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot 
     2327# files that are used to generate the various graphs. 
     2328# The default value is: YES. 
     2329# This tag requires that the tag HAVE_DOT is set to YES. 
    15182330 
    15192331DOT_CLEANUP            = YES 
  • branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN/src/attribute.f90

    r4213 r5036  
    88!> @brief  
    99!> This module manage attribute of variable or file. 
    10 ! 
     10!> 
    1111!> @details 
    1212!>    define type TATT:<br/> 
    13 !>    TYPE(TATT) :: tl_att<br/> 
     13!> @code 
     14!>    TYPE(TATT) :: tl_att 
     15!> @endcode 
    1416!> 
    1517!>    the attribute value inside attribute structure will be 
    16 !>    character or real(8) 1D table.<br/> 
    17 !>    However the attribute value could be initialised with:<br/> 
     18!>    character or real(8) 1D array.<br/> 
     19!>    However the attribute value could be initialized with:<br/> 
    1820!>    - character 
    1921!>    - scalar (real(4), real(8), integer(4) or integer(8)) 
    20 !>    - table 1D (real(4), real(8), integer(4) or integer(8)) 
     22!>    - array 1D (real(4), real(8), integer(4) or integer(8)) 
    2123!> 
    22 !>    to initialise an attribute structure :<br/> 
    23 !>    tl_att=att_init('attname',value)<br/> 
    24 !>    tl_att=att_init('attname',tab_value)<br/> 
     24!>    to initialize an attribute structure :<br/> 
     25!> @code 
     26!>    tl_att=att_init('attname',value) 
     27!> @endcode 
     28!>    - value is a character, scalar value or table of value 
    2529!> 
    26 !>    to print attribute information of one attribute structure:<br/> 
     30!>    to print attribute information of one or array of attribute structure:<br/> 
     31!> @code 
    2732!>    CALL att_print(td_att)  
     33!> @endcode 
    2834!> 
     35!>    to clean attribute structure:<br/> 
     36!> @code 
     37!>    CALL att_clean(td_att)  
     38!> @endcode 
     39!> 
     40!>    to copy attribute structure in another one (using different memory cell):<br/> 
     41!> @code 
     42!>    tl_att2=att_copy(tl_att1)  
     43!> @endcode 
     44!>    @note as we use pointer for the value array of the attribute structure, 
     45!>    the use of the assignment operator (=) to copy attribute structure  
     46!>    create a pointer on the same array.  
     47!>    This is not the case with this copy function. 
     48!> 
     49!>    to get attribute index, in an array of attribute structure:<br/> 
     50!> @code 
     51!>   il_index=att_get_index( td_att, cd_name ) 
     52!> @endcode 
     53!>    - td_att array of attribute structure 
     54!>    - cd_name attribute name 
     55!>  
     56!>    to get attribute id, read from a file:<br/> 
     57!>@code 
     58!>  il_id=att_get_id( td_att, cd_name ) 
     59!>@endcode 
     60!>    - td_att array of attribute structure 
     61!>    - cd_name attribute name 
     62!> 
     63!>    to get attribute name 
     64!>    - tl_att\%c_name 
     65!>  
    2966!>    to get character length or the number of value store in attribute 
    3067!>    - tl_att\%i_len 
     
    3875!>    - tl_att\%i_type 
    3976!> 
    40 !>    to get attribute id (affected when attributes will be added to  
    41 !>    variable or file):<br/> 
     77!>    to get attribute id (read from file):<br/> 
    4278!>    - tl_att\%i_id 
    4379!> 
    44 !> @author 
    45 !> J.Paul 
     80!> @author J.Paul 
    4681! REVISION HISTORY: 
    47 !> @date Nov, 2013 - Initial Version 
     82!> @date November, 2013 - Initial Version 
     83!> @date November, 2014 - Fix memory leaks bug 
    4884! 
    4985!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    50 !> @todo 
    5186!---------------------------------------------------------------------- 
    5287MODULE att 
     
    5489   USE global                          ! global variable 
    5590   USE kind                            ! F90 kind parameter 
    56    USE logger                             ! log file manager 
     91   USE logger                          ! log file manager 
    5792   USE fct                             ! basic useful function 
    5893   IMPLICIT NONE 
    59    PRIVATE 
    6094   ! NOTE_avoid_public_variables_if_possible 
    6195 
    6296   ! type and variable 
    63    PUBLIC :: TATT       ! attribute structure 
     97   PUBLIC :: TATT       !< attribute structure 
    6498 
    6599   ! function and subroutine 
    66    PUBLIC :: ASSIGNMENT(=)  ! copy attribute structure 
    67    PUBLIC :: att_init     ! initialize attribute structure 
    68    PUBLIC :: att_print    ! print attribute structure 
    69    PUBLIC :: att_get_id   ! get attribute id in table of attribute structure 
    70    PUBLIC :: att_clean    ! clean attribute strcuture 
    71  
    72    PRIVATE :: att__init_c     ! initialise an attribute structure with character value 
    73    PRIVATE :: att__init_dp    ! initialise an attribute structure with table of real(8) value 
    74    PRIVATE :: att__init_dp_0d ! initialise an attribute structure with real(8) value 
    75    PRIVATE :: att__init_sp    ! initialise an attribute structure with table of real(4) value 
    76    PRIVATE :: att__init_sp_0d ! initialise an attribute structure with real(4) value 
    77    PRIVATE :: att__init_i1    ! initialise an attribute structure with table of integer(1) value 
    78    PRIVATE :: att__init_i1_0d ! initialise an attribute structure with integer(1) value 
    79    PRIVATE :: att__init_i2    ! initialise an attribute structure with table of integer(2) value 
    80    PRIVATE :: att__init_i2_0d ! initialise an attribute structure with integer(2) value 
    81    PRIVATE :: att__init_i4    ! initialise an attribute structure with table of integer(4) value 
    82    PRIVATE :: att__init_i4_0d ! initialise an attribute structure with integer(4) value 
    83    PRIVATE :: att__init_i8    ! initialise an attribute structure with table of integer(8) value 
    84    PRIVATE :: att__init_i8_0d ! initialise an attribute structure with integer(8) value 
    85    PRIVATE :: att__copy_unit   ! copy attribute structure 
    86    PRIVATE :: att__copy_tab    ! copy attribute structure 
    87  
    88    !> @struct TATT 
    89    TYPE TATT 
    90       !CHARACTER(LEN=lc) :: c_name = 'unknown'  !< attribute name 
    91       CHARACTER(LEN=lc) :: c_name = ''  !< attribute name 
    92       INTEGER(i4)       :: i_id = 0          !< attribute id 
    93       INTEGER(i4)       :: i_type  = 0       !< attribute type 
     100   PUBLIC :: att_init       !< initialize attribute structure 
     101   PUBLIC :: att_print      !< print attribute structure 
     102   PUBLIC :: att_clean      !< clean attribute strcuture 
     103   PUBLIC :: att_copy       !< copy attribute structure 
     104   PUBLIC :: att_get_index  !< get attribute index, in an array of attribute structure 
     105   PUBLIC :: att_get_id     !< get attribute id, read from file 
     106 
     107   PRIVATE :: att__clean_unit ! clean attribute strcuture 
     108   PRIVATE :: att__clean_arr  ! clean array of attribute strcuture 
     109   PRIVATE :: att__print_unit ! print information on one attribute 
     110   PRIVATE :: att__print_arr  ! print information on a array of attribute 
     111   PRIVATE :: att__init_c     ! initialize an attribute structure with character value 
     112   PRIVATE :: att__init_dp    ! initialize an attribute structure with array of real(8) value 
     113   PRIVATE :: att__init_dp_0d ! initialize an attribute structure with real(8) value 
     114   PRIVATE :: att__init_sp    ! initialize an attribute structure with array of real(4) value 
     115   PRIVATE :: att__init_sp_0d ! initialize an attribute structure with real(4) value 
     116   PRIVATE :: att__init_i1    ! initialize an attribute structure with array of integer(1) value 
     117   PRIVATE :: att__init_i1_0d ! initialize an attribute structure with integer(1) value 
     118   PRIVATE :: att__init_i2    ! initialize an attribute structure with array of integer(2) value 
     119   PRIVATE :: att__init_i2_0d ! initialize an attribute structure with integer(2) value 
     120   PRIVATE :: att__init_i4    ! initialize an attribute structure with array of integer(4) value 
     121   PRIVATE :: att__init_i4_0d ! initialize an attribute structure with integer(4) value 
     122   PRIVATE :: att__init_i8    ! initialize an attribute structure with array of integer(8) value 
     123   PRIVATE :: att__init_i8_0d ! initialize an attribute structure with integer(8) value 
     124   PRIVATE :: att__copy_unit  ! copy attribute structure 
     125   PRIVATE :: att__copy_arr   ! copy array of attribute structure 
     126 
     127   TYPE TATT !< attribute structure 
     128      CHARACTER(LEN=lc) :: c_name = ''       !< attribute name 
     129      INTEGER(i4)       :: i_id   = 0        !< attribute id 
     130      INTEGER(i4)       :: i_type = 0        !< attribute type 
    94131      INTEGER(i4)       :: i_len  = 0        !< number of value store in attribute 
    95132      CHARACTER(LEN=lc) :: c_value = "none"  !< attribute value if type CHAR 
     
    113150   END INTERFACE att_init 
    114151 
    115    INTERFACE ASSIGNMENT(=) 
    116       MODULE PROCEDURE att__copy_unit   ! copy attribute structure 
    117       MODULE PROCEDURE att__copy_tab   ! copy attribute structure 
     152   INTERFACE att_print 
     153      MODULE PROCEDURE att__print_unit ! print information on one attribute 
     154      MODULE PROCEDURE att__print_arr  ! print information on a array of attribute 
     155   END INTERFACE att_print 
     156 
     157   INTERFACE att_clean 
     158      MODULE PROCEDURE att__clean_unit   
     159      MODULE PROCEDURE att__clean_arr    
    118160   END INTERFACE 
    119161 
     162   INTERFACE att_copy 
     163      MODULE PROCEDURE att__copy_unit  ! copy attribute structure 
     164      MODULE PROCEDURE att__copy_arr   ! copy array of attribute structure 
     165   END INTERFACE 
     166 
    120167CONTAINS 
    121168   !------------------------------------------------------------------- 
    122169   !> @brief 
    123    !> This function copy attribute structure in another attribute 
    124    !> structure 
     170   !> This subroutine copy a array of attribute structure in another one 
    125171   !> @details  
    126    !> attribute value are copied in a temporary table, so input and output 
    127    !> attribute structure value do not point on the same "memory cell", and so 
    128    !> on are independant.  
    129    !> 
     172   !> see att__copy_unit 
     173   !> 
     174   !> @warning do not use on the output of a function who create or read an 
     175   !> attribute (ex: tl_att=att_copy(att_init()) is forbidden). 
     176   !> This will create memory leaks. 
    130177   !> @warning to avoid infinite loop, do not use any function inside  
    131178   !> this subroutine 
    132179   !> 
    133180   !> @author J.Paul 
    134    !> - Nov, 2013- Initial Version 
    135    ! 
    136    !> @param[out] td_att1  : attribute structure 
    137    !> @param[in] td_att2  : attribute structure 
    138    !------------------------------------------------------------------- 
    139    ! @code 
    140    SUBROUTINE att__copy_tab( td_att1, td_att2 ) 
    141       IMPLICIT NONE 
    142       ! Argument 
    143       TYPE(TATT), DIMENSION(:)               , INTENT(IN) :: td_att2 
    144       TYPE(TATT), DIMENSION(SIZE(td_att2(:))),INTENT(OUT) :: td_att1 
     181   !> @date November, 2013 - Initial Version 
     182   !> @date November, 2014 
     183   !>    - use function instead of overload assignment operator  
     184   !> (to avoid memory leak)  
     185   ! 
     186   !> @param[in] td_att   array of attribute structure 
     187   !> @return copy of input array of attribute structure 
     188   !------------------------------------------------------------------- 
     189   FUNCTION att__copy_arr( td_att ) 
     190      IMPLICIT NONE 
     191      ! Argument 
     192      TYPE(TATT), DIMENSION(:), INTENT(IN) :: td_att 
     193      ! function 
     194      TYPE(TATT), DIMENSION(SIZE(td_att(:))) :: att__copy_arr 
    145195 
    146196      ! local variable 
     
    149199      !---------------------------------------------------------------- 
    150200 
    151       DO ji=1,SIZE(td_att2(:)) 
    152          td_att1(ji)=td_att2(ji) 
     201      DO ji=1,SIZE(td_att(:)) 
     202         att__copy_arr(ji)=att_copy(td_att(ji)) 
    153203      ENDDO 
    154204 
    155    END SUBROUTINE att__copy_tab 
    156    ! @endcode 
     205   END FUNCTION att__copy_arr 
    157206   !------------------------------------------------------------------- 
    158207   !> @brief 
    159    !> This function copy attribute structure in another attribute 
    160    !> structure 
     208   !> This subroutine copy an attribute structure in another one. 
    161209   !> @details  
    162    !> attribute value are copied in a temporary table, so input and output 
     210   !> attribute value are copied in a temporary array, so input and output 
    163211   !> attribute structure value do not point on the same "memory cell", and so 
    164212   !> on are independant.  
    165213   !> 
     214   !> @warning do not use on the output of a function who create or read an 
     215   !> attribute (ex: tl_att=att_copy(att_init()) is forbidden). 
     216   !> This will create memory leaks. 
    166217   !> @warning to avoid infinite loop, do not use any function inside  
    167218   !> this subroutine 
    168219   !> 
    169220   !> @author J.Paul 
    170    !> - Nov, 2013- Initial Version 
    171    ! 
    172    !> @param[out] td_att1  : attribute structure 
    173    !> @param[in] td_att2  : attribute structure 
    174    !------------------------------------------------------------------- 
    175    ! @code 
    176    SUBROUTINE att__copy_unit( td_att1, td_att2 ) 
    177       IMPLICIT NONE 
    178       ! Argument 
    179       TYPE(TATT), INTENT(OUT) :: td_att1 
    180       TYPE(TATT), INTENT(IN)  :: td_att2 
     221   !> @date November, 2013 - Initial Version 
     222   !> @date November, 2014 
     223   !> - use function instead of overload assignment operator (to avoid memory leak)  
     224   !> 
     225   !> @param[in] td_att   attribute structure 
     226   !> @return copy of input attribute structure 
     227   !------------------------------------------------------------------- 
     228   FUNCTION att__copy_unit( td_att ) 
     229      IMPLICIT NONE 
     230      ! Argument 
     231      TYPE(TATT), INTENT(IN)  :: td_att 
     232      ! function 
     233      TYPE(TATT) :: att__copy_unit 
    181234 
    182235      ! local variable 
     
    184237      !---------------------------------------------------------------- 
    185238 
    186       CALL logger_trace("COPY: attribute "//TRIM(td_att2%c_name) ) 
    187  
    188239      ! copy attribute variable 
    189       td_att1%c_name  = TRIM(td_att2%c_name) 
    190       td_att1%i_id    = td_att2%i_id 
    191       td_att1%i_type  = td_att2%i_type 
    192       td_att1%i_len   = td_att2%i_len 
    193       td_att1%c_value = TRIM(td_att2%c_value) 
     240      att__copy_unit%c_name  = TRIM(td_att%c_name) 
     241      att__copy_unit%i_id    = td_att%i_id 
     242      att__copy_unit%i_type  = td_att%i_type 
     243      att__copy_unit%i_len   = td_att%i_len 
     244      att__copy_unit%c_value = TRIM(td_att%c_value) 
    194245 
    195246      ! copy attribute pointer in an independant variable 
    196       IF( ASSOCIATED(td_att1%d_value) ) DEALLOCATE(td_att1%d_value) 
    197       IF( ASSOCIATED(td_att2%d_value) )THEN 
    198          ALLOCATE( dl_value(td_att2%i_len) ) 
    199          dl_value(:) = td_att2%d_value(:) 
    200  
    201          ALLOCATE( td_att1%d_value(td_att1%i_len) ) 
    202          td_att1%d_value(:) = dl_value(:) 
     247      IF( ASSOCIATED(att__copy_unit%d_value) ) DEALLOCATE(att__copy_unit%d_value) 
     248      IF( ASSOCIATED(td_att%d_value) )THEN 
     249         ALLOCATE( dl_value(td_att%i_len) ) 
     250         dl_value(:) = td_att%d_value(:) 
     251 
     252         ALLOCATE( att__copy_unit%d_value(att__copy_unit%i_len) ) 
     253         att__copy_unit%d_value(:) = dl_value(:) 
    203254 
    204255         DEALLOCATE( dl_value ) 
    205256      ENDIF 
    206257 
    207    END SUBROUTINE att__copy_unit 
    208    ! @endcode 
    209    !------------------------------------------------------------------- 
    210    !> @brief This function get attribute id, in a table of attribute structure, 
    211    !> given attribute name 
    212    !> 
    213    !> @author J.Paul 
    214    !> - Nov, 2013- Initial Version 
    215    ! 
    216    !> @param[in] td_att  : attribute structure 
    217    !> @param[in] cd_name : attribute name 
    218    !> @return attribute id 
    219    !------------------------------------------------------------------- 
    220    ! @code 
    221    INTEGER(i4) FUNCTION att_get_id( td_att, cd_name ) 
     258   END FUNCTION att__copy_unit 
     259   !------------------------------------------------------------------- 
     260   !> @brief This function return attribute index, in a array of attribute structure, 
     261   !> given attribute name.<br/> 
     262   !> @details 
     263   !> if attribute name do not exist, return 0. 
     264   !> 
     265   !> @author J.Paul 
     266   !> @date Septempber, 2014 - Initial Version 
     267   ! 
     268   !> @param[in] td_att    array of attribute structure 
     269   !> @param[in] cd_name   attribute name 
     270   !> @return attribute index 
     271   !------------------------------------------------------------------- 
     272   INTEGER(i4) FUNCTION att_get_index( td_att, cd_name ) 
    222273      IMPLICIT NONE 
    223274      ! Argument 
     
    231282      INTEGER(i4) :: ji 
    232283      !---------------------------------------------------------------- 
    233       att_get_id=0 
     284      att_get_index=0 
    234285 
    235286      il_size=SIZE(td_att(:)) 
    236287      DO ji=1,il_size 
    237288         IF( TRIM(td_att(ji)%c_name) == TRIM(cd_name) )THEN 
    238             att_get_id=ji 
     289            att_get_index=ji 
    239290            EXIT 
    240291         ENDIF 
    241292      ENDDO 
    242293 
     294   END FUNCTION att_get_index 
     295   !------------------------------------------------------------------- 
     296   !> @brief This function return attribute id, read from a file.<br/> 
     297   !> @details 
     298   !> if attribute name do not exist, return 0. 
     299   !> 
     300   !> @author J.Paul 
     301   !> @date November, 2013 - Initial Version 
     302   !> @date September, 2014 - bug fix with use of id read from attribute structure 
     303   ! 
     304   !> @param[in] td_att    array of attribute structure 
     305   !> @param[in] cd_name   attribute name 
     306   !> @return attribute id 
     307   !------------------------------------------------------------------- 
     308   INTEGER(i4) FUNCTION att_get_id( td_att, cd_name ) 
     309      IMPLICIT NONE 
     310      ! Argument 
     311      TYPE(TATT),       DIMENSION(:), INTENT(IN) :: td_att 
     312      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
     313 
     314      ! local variable 
     315      INTEGER(i4) :: il_size 
     316 
     317      ! loop indices 
     318      INTEGER(i4) :: ji 
     319      !---------------------------------------------------------------- 
     320      att_get_id=0 
     321 
     322      il_size=SIZE(td_att(:)) 
     323      DO ji=1,il_size 
     324         IF( TRIM(td_att(ji)%c_name) == TRIM(cd_name) )THEN 
     325            att_get_id=td_att(ji)%i_id 
     326            EXIT 
     327         ENDIF 
     328      ENDDO 
     329 
    243330   END FUNCTION att_get_id 
    244    !> @endcode 
    245    !------------------------------------------------------------------- 
    246    !> @brief This function initialise an attribute structure with character 
    247    !> value  
    248    !> 
    249    !> @author J.Paul 
    250    !> - Nov, 2013- Initial Version 
    251    ! 
    252    !> @param[in] cd_name : attribute name 
    253    !> @param[in] cd_value: attribute value 
     331   !------------------------------------------------------------------- 
     332   !> @brief This function initialize an attribute structure with character 
     333   !> value.  
     334   !> 
     335   !> @author J.Paul 
     336   !> @date November, 2013 - Initial Version 
     337   ! 
     338   !> @param[in] cd_name   attribute name 
     339   !> @param[in] cd_value  attribute value 
    254340   !> @return attribute structure 
    255341   !------------------------------------------------------------------- 
    256    !> @code 
    257342   TYPE(TATT) FUNCTION att__init_c( cd_name, cd_value ) 
    258343      IMPLICIT NONE 
     
    265350      CALL att_clean(att__init_c) 
    266351 
    267       CALL logger_info( & 
     352      CALL logger_trace( & 
    268353      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    269354      &  " attribute value "//TRIM(ADJUSTL(cd_value)) ) 
     
    276361 
    277362   END FUNCTION att__init_c 
    278    !> @endcode 
    279    !------------------------------------------------------------------- 
    280    !> @brief This function initialise an attribute structure with table  
    281    !> of real(8) value 
    282    !> 
    283    !> @author J.Paul 
    284    !> - Nov, 2013- Initial Version 
    285    ! 
    286    !> @param[in] cd_name : attribute name 
    287    !> @param[in] dd_value: attribute value 
     363   !------------------------------------------------------------------- 
     364   !> @brief This function initialize an attribute structure with array  
     365   !> of real(8) value. 
     366   !> @details 
     367   !> Optionaly you could specify the type of the variable to be saved. 
     368   !> 
     369   !> @author J.Paul 
     370   !> @dtae November, 2013 - Initial Version 
     371   ! 
     372   !> @param[in] cd_name   attribute name 
     373   !> @param[in] dd_value  attribute value 
     374   !> @param[in] id_type   type of the variable to be saved 
    288375   !> @return attribute structure 
    289376   !------------------------------------------------------------------- 
    290    !> @code 
    291    TYPE(TATT) FUNCTION att__init_dp( cd_name, dd_value ) 
     377   TYPE(TATT) FUNCTION att__init_dp( cd_name, dd_value, id_type ) 
    292378      IMPLICIT NONE 
    293379 
     
    295381      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    296382      REAL(dp),         DIMENSION(:), INTENT(IN) :: dd_value 
     383      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    297384 
    298385      ! local value 
     
    307394      CALL att_clean(att__init_dp) 
    308395 
    309       ! table size 
     396      ! array size 
    310397      il_len=size(dd_value(:)) 
    311398 
     
    316403      cl_value=TRIM(cl_value)//TRIM(fct_str(dd_value(il_len)))//"/)" 
    317404 
    318       CALL logger_info( & 
     405      CALL logger_trace( & 
    319406      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    320407      &  " attribute value "//TRIM(ADJUSTL(cl_value)) ) 
     
    322409      att__init_dp%c_name=TRIM(ADJUSTL(cd_name)) 
    323410 
    324       att__init_dp%i_type=NF90_DOUBLE 
     411      IF( PRESENT(id_type) )THEN 
     412         att__init_dp%i_type=id_type 
     413      ELSE 
     414         att__init_dp%i_type=NF90_DOUBLE 
     415      ENDIF 
    325416 
    326417      IF( ASSOCIATED(att__init_dp%d_value) )THEN 
     
    333424 
    334425   END FUNCTION att__init_dp 
    335    !> @endcode 
    336    !------------------------------------------------------------------- 
    337    !> @brief This function initialise an attribute structure with  
     426   !------------------------------------------------------------------- 
     427   !> @brief This function initialize an attribute structure with  
    338428   !> real(8) value  
    339    !> 
    340    !> @author J.Paul 
    341    !> - Nov, 2013- Initial Version 
    342    ! 
    343    !> @param[in] cd_name : attribute name 
    344    !> @param[in] dd_value: attribute value 
     429   !> @details 
     430   !> Optionaly you could specify the type of the variable to be saved. 
     431   !> 
     432   !> @author J.Paul 
     433   !> @date November, 2013 - Initial Version 
     434   ! 
     435   !> @param[in] cd_name   attribute name 
     436   !> @param[in] dd_value  attribute value 
     437   !> @param[in] id_type   type of the variable to be saved 
    345438   !> @return attribute structure 
    346439   !------------------------------------------------------------------- 
    347    !> @code 
    348    TYPE(TATT) FUNCTION att__init_dp_0d( cd_name, dd_value ) 
     440   TYPE(TATT) FUNCTION att__init_dp_0d( cd_name, dd_value, id_type ) 
    349441      IMPLICIT NONE 
    350442      ! Argument 
    351443      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    352444      REAL(dp),         INTENT(IN) :: dd_value 
     445      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    353446 
    354447      ! local value 
     
    361454      cl_value="(/"//TRIM(fct_str(dd_value))//"/)" 
    362455 
    363       CALL logger_info( & 
     456      CALL logger_trace( & 
    364457      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    365458      &  " attribute value "//TRIM(ADJUSTL(cl_value)) ) 
     
    367460      att__init_dp_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    368461 
    369       att__init_dp_0d%i_type=NF90_DOUBLE 
     462      IF( PRESENT(id_type) )THEN 
     463         att__init_dp_0d%i_type=id_type 
     464      ELSE 
     465         att__init_dp_0d%i_type=NF90_DOUBLE 
     466      ENDIF 
    370467 
    371468      IF( ASSOCIATED(att__init_dp_0d%d_value) )THEN 
     
    378475 
    379476   END FUNCTION att__init_dp_0d 
    380    !> @endcode 
    381    !------------------------------------------------------------------- 
    382    !> @brief This function initialise an attribute structure with table  
    383    !> of real(4) value 
    384    !> 
    385    !> @author J.Paul 
    386    !> - Nov, 2013- Initial Version 
    387    ! 
    388    !> @param[in] cd_name : attribute name 
    389    !> @param[in] rd_value: attribute value 
     477   !------------------------------------------------------------------- 
     478   !> @brief This function initialize an attribute structure with array  
     479   !> of real(4) value. 
     480   !> @details 
     481   !> Optionaly you could specify the type of the variable to be saved. 
     482   !> 
     483   !> @author J.Paul 
     484   !> @date November, 2013 - Initial Version 
     485   ! 
     486   !> @param[in] cd_name   attribute name 
     487   !> @param[in] rd_value  attribute value 
     488   !> @param[in] id_type   type of the variable to be saved 
    390489   !> @return attribute structure 
    391490   !------------------------------------------------------------------- 
    392    !> @code 
    393    TYPE(TATT) FUNCTION att__init_sp( cd_name, rd_value ) 
     491   TYPE(TATT) FUNCTION att__init_sp( cd_name, rd_value, id_type ) 
    394492      IMPLICIT NONE 
    395493      ! Argument 
    396494      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    397495      REAL(sp),         DIMENSION(:), INTENT(IN) :: rd_value 
     496      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    398497 
    399498      ! local value 
     
    408507      CALL att_clean(att__init_sp) 
    409508       
    410       ! table size 
     509      ! array size 
    411510      il_len=size(rd_value(:)) 
    412511 
     
    417516      cl_value=TRIM(cl_value)//TRIM(fct_str(rd_value(il_len)))//"/)" 
    418517 
    419       CALL logger_info( & 
     518      CALL logger_trace( & 
    420519      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    421520      &  " attribute value "//TRIM(ADJUSTL(cl_value)) )       
     
    423522      att__init_sp%c_name=TRIM(ADJUSTL(cd_name)) 
    424523 
    425       att__init_sp%i_type=NF90_FLOAT 
     524      IF( PRESENT(id_type) )THEN 
     525         att__init_sp%i_type=id_type 
     526      ELSE 
     527         att__init_sp%i_type=NF90_FLOAT 
     528      ENDIF 
    426529 
    427530      IF( ASSOCIATED(att__init_sp%d_value) )THEN 
     
    434537 
    435538   END FUNCTION att__init_sp 
    436    !> @endcode 
    437    !------------------------------------------------------------------- 
    438    !> @brief This function initialise an attribute structure with  
    439    !> real(4) value  
    440    !> 
    441    !> @author J.Paul 
    442    !> - Nov, 2013- Initial Version 
    443    ! 
    444    !> @param[in] cd_name : attribute name 
    445    !> @param[in] rd_value: attribute value 
     539   !------------------------------------------------------------------- 
     540   !> @brief This function initialize an attribute structure with  
     541   !> real(4) value.  
     542   !> @details 
     543   !> Optionaly you could specify the type of the variable to be saved. 
     544   !> 
     545   !> @author J.Paul 
     546   !> @date November, 2013 - Initial Version 
     547   ! 
     548   !> @param[in] cd_name   attribute name 
     549   !> @param[in] rd_value  attribute value 
     550   !> @param[in] id_type   type of the variable to be saved 
    446551   !> @return attribute structure 
    447552   !------------------------------------------------------------------- 
    448    !> @code 
    449    TYPE(TATT) FUNCTION att__init_sp_0d( cd_name, rd_value ) 
     553   TYPE(TATT) FUNCTION att__init_sp_0d( cd_name, rd_value, id_type ) 
    450554      IMPLICIT NONE 
    451555      ! Argument 
    452556      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    453557      REAL(sp),         INTENT(IN) :: rd_value 
     558      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    454559 
    455560      ! local value 
     
    462567      cl_value="(/"//TRIM(fct_str(rd_value))//"/)" 
    463568 
    464       CALL logger_info( & 
     569      CALL logger_trace( & 
    465570      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    466571      &  " attribute value "//TRIM(ADJUSTL(cl_value)) )       
     
    468573      att__init_sp_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    469574 
    470       att__init_sp_0d%i_type=NF90_FLOAT 
     575      IF( PRESENT(id_type) )THEN 
     576         att__init_sp_0d%i_type=id_type 
     577      ELSE 
     578         att__init_sp_0d%i_type=NF90_FLOAT 
     579      ENDIF 
    471580 
    472581      IF( ASSOCIATED(att__init_sp_0d%d_value) )THEN 
     
    479588 
    480589   END FUNCTION att__init_sp_0d 
    481    !> @endcode 
    482    !------------------------------------------------------------------- 
    483    !> @brief This function initialise an attribute structure with table  
    484    !> of integer(1) value 
    485    !> 
    486    !> @author J.Paul 
    487    !> - Nov, 2013- Initial Version 
    488    ! 
    489    !> @param[in] cd_name : attribute name 
    490    !> @param[in] bd_value: attribute value 
     590   !------------------------------------------------------------------- 
     591   !> @brief This function initialize an attribute structure with array  
     592   !> of integer(1) value. 
     593   !> @details 
     594   !> Optionaly you could specify the type of the variable to be saved. 
     595   !> 
     596   !> @author J.Paul 
     597   !> @date November, 2013 - Initial Version 
     598   ! 
     599   !> @param[in] cd_name   attribute name 
     600   !> @param[in] bd_value  attribute value 
     601   !> @param[in] id_type   type of the variable to be saved 
    491602   !> @return attribute structure 
    492603   !------------------------------------------------------------------- 
    493    !> @code 
    494    TYPE(TATT) FUNCTION att__init_i1( cd_name, bd_value ) 
     604   TYPE(TATT) FUNCTION att__init_i1( cd_name, bd_value, id_type ) 
    495605      IMPLICIT NONE 
    496606      ! Argument 
    497607      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    498608      INTEGER(i1),      DIMENSION(:), INTENT(IN) :: bd_value 
     609      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    499610 
    500611      ! local value 
     
    509620      CALL att_clean(att__init_i1) 
    510621       
    511       ! table size 
     622      ! array size 
    512623      il_len=size(bd_value(:)) 
    513624 
     
    518629      cl_value=TRIM(cl_value)//TRIM(fct_str(bd_value(il_len)))//"/)" 
    519630 
    520       CALL logger_info( & 
     631      CALL logger_trace( & 
    521632      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    522633      &  " attribute value "//TRIM(ADJUSTL(cl_value)) )       
     
    524635      att__init_i1%c_name=TRIM(ADJUSTL(cd_name)) 
    525636 
    526       att__init_i1%i_type=NF90_BYTE 
     637      IF( PRESENT(id_type) )THEN 
     638         att__init_i1%i_type=id_type 
     639      ELSE 
     640         att__init_i1%i_type=NF90_BYTE 
     641      ENDIF 
    527642 
    528643      IF( ASSOCIATED(att__init_i1%d_value) )THEN 
     
    535650 
    536651   END FUNCTION att__init_i1 
    537    !> @endcode 
    538    !------------------------------------------------------------------- 
    539    !> @brief This function initialise an attribute structure with  
    540    !> integer(1) value  
    541    !> 
    542    !> @author J.Paul 
    543    !> - Nov, 2013- Initial Version 
    544    ! 
    545    !> @param[in] cd_name : attribute name 
    546    !> @param[in] bd_value: attribute value 
     652   !------------------------------------------------------------------- 
     653   !> @brief This function initialize an attribute structure with  
     654   !> integer(1) value.  
     655   !> @details 
     656   !> Optionaly you could specify the type of the variable to be saved. 
     657   !> 
     658   !> @author J.Paul 
     659   !> @date November, 2013 - Initial Version 
     660   ! 
     661   !> @param[in] cd_name   attribute name 
     662   !> @param[in] bd_value  attribute value 
     663   !> @param[in] id_type   type of the variable to be saved 
    547664   !> @return attribute structure 
    548665   !------------------------------------------------------------------- 
    549    !> @code 
    550    TYPE(TATT) FUNCTION att__init_i1_0d( cd_name, bd_value ) 
     666   TYPE(TATT) FUNCTION att__init_i1_0d( cd_name, bd_value, id_type ) 
    551667      IMPLICIT NONE 
    552668      ! Argument 
    553669      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    554670      INTEGER(i1),      INTENT(IN) :: bd_value 
     671      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    555672 
    556673      !local value 
     
    563680      cl_value="(/"//TRIM(fct_str(bd_value))//"/)" 
    564681 
    565       CALL logger_info( & 
     682      CALL logger_trace( & 
    566683      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    567684      &  " attibute value "//TRIM(ADJUSTL(cl_value)) )       
     
    569686      att__init_i1_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    570687 
    571       att__init_i1_0d%i_type=NF90_BYTE 
     688      IF( PRESENT(id_type) )THEN 
     689         att__init_i1_0d%i_type=id_type 
     690      ELSE 
     691         att__init_i1_0d%i_type=NF90_BYTE 
     692      ENDIF       
    572693 
    573694      IF( ASSOCIATED(att__init_i1_0d%d_value) )THEN 
     
    580701 
    581702   END FUNCTION att__init_i1_0d 
    582    !> @endcode 
    583    !------------------------------------------------------------------- 
    584    !> @brief This function initialise an attribute structure with table  
    585    !> of integer(2) value 
    586    !> 
    587    !> @author J.Paul 
    588    !> - Nov, 2013- Initial Version 
    589    ! 
    590    !> @param[in] cd_name : attribute name 
    591    !> @param[in] sd_value: attribute value 
     703   !------------------------------------------------------------------- 
     704   !> @brief This function initialize an attribute structure with array  
     705   !> of integer(2) value. 
     706   !> @details 
     707   !> Optionaly you could specify the type of the variable to be saved. 
     708   !> 
     709   !> @author J.Paul 
     710   !> @date November, 2013 - Initial Version 
     711   ! 
     712   !> @param[in] cd_name   attribute name 
     713   !> @param[in] sd_value  attribute value 
     714   !> @param[in] id_type   type of the variable to be saved 
    592715   !> @return attribute structure 
    593716   !------------------------------------------------------------------- 
    594    !> @code 
    595    TYPE(TATT) FUNCTION att__init_i2( cd_name, sd_value ) 
     717   TYPE(TATT) FUNCTION att__init_i2( cd_name, sd_value, id_type ) 
    596718      IMPLICIT NONE 
    597719      ! Argument 
    598720      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    599721      INTEGER(i2),      DIMENSION(:), INTENT(IN) :: sd_value 
     722      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    600723 
    601724      ! local value 
     
    610733      CALL att_clean(att__init_i2) 
    611734       
    612       ! table size 
     735      ! array size 
    613736      il_len=size(sd_value(:)) 
    614737 
     
    619742      cl_value=TRIM(cl_value)//TRIM(fct_str(sd_value(il_len)))//"/)" 
    620743 
    621       CALL logger_info( & 
     744      CALL logger_trace( & 
    622745      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    623746      &  " attribute value "//TRIM(ADJUSTL(cl_value)) )       
     
    625748      att__init_i2%c_name=TRIM(ADJUSTL(cd_name)) 
    626749 
    627       att__init_i2%i_type=NF90_SHORT 
     750      IF( PRESENT(id_type) )THEN 
     751         att__init_i2%i_type=id_type 
     752      ELSE 
     753         att__init_i2%i_type=NF90_SHORT 
     754      ENDIF 
    628755 
    629756      IF( ASSOCIATED(att__init_i2%d_value) )THEN 
     
    636763 
    637764   END FUNCTION att__init_i2 
    638    !> @endcode 
    639    !------------------------------------------------------------------- 
    640    !> @brief This function initialise an attribute structure with  
    641    !> integer(2) value  
    642    !> 
    643    !> @author J.Paul 
    644    !> - Nov, 2013- Initial Version 
    645    ! 
    646    !> @param[in] cd_name : attribute name 
    647    !> @param[in] sd_value: attribute value 
     765   !------------------------------------------------------------------- 
     766   !> @brief This function initialize an attribute structure with  
     767   !> integer(2) value.  
     768   !> @details 
     769   !> Optionaly you could specify the type of the variable to be saved. 
     770   !> 
     771   !> @author J.Paul 
     772   !> @date November, 2013 - Initial Version 
     773   ! 
     774   !> @param[in] cd_name   attribute name 
     775   !> @param[in] sd_value  attribute value 
     776   !> @param[in] id_type   type of the variable to be saved 
    648777   !> @return attribute structure 
    649778   !------------------------------------------------------------------- 
    650    !> @code 
    651    TYPE(TATT) FUNCTION att__init_i2_0d( cd_name, sd_value ) 
     779   TYPE(TATT) FUNCTION att__init_i2_0d( cd_name, sd_value, id_type ) 
    652780      IMPLICIT NONE 
    653781      ! Argument 
    654782      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    655783      INTEGER(i2),      INTENT(IN) :: sd_value 
     784      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    656785 
    657786      !local value 
     
    664793      cl_value="(/"//TRIM(fct_str(sd_value))//"/)" 
    665794 
    666       CALL logger_info( & 
     795      CALL logger_trace( & 
    667796      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    668797      &  " attibute value "//TRIM(ADJUSTL(cl_value)) )       
     
    670799      att__init_i2_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    671800 
    672       att__init_i2_0d%i_type=NF90_SHORT 
     801      IF( PRESENT(id_type) )THEN 
     802         att__init_i2_0d%i_type=id_type 
     803      ELSE 
     804         att__init_i2_0d%i_type=NF90_SHORT 
     805      ENDIF 
    673806 
    674807      IF( ASSOCIATED(att__init_i2_0d%d_value) )THEN 
     
    681814 
    682815   END FUNCTION att__init_i2_0d 
    683    !> @endcode 
    684    !------------------------------------------------------------------- 
    685    !> @brief This function initialise an attribute structure with table  
    686    !> of integer(4) value 
    687    !> 
    688    !> @author J.Paul 
    689    !> - Nov, 2013- Initial Version 
    690    ! 
    691    !> @param[in] cd_name : attribute name 
    692    !> @param[in] id_value: attribute value 
     816   !------------------------------------------------------------------- 
     817   !> @brief This function initialize an attribute structure with array  
     818   !> of integer(4) value. 
     819   !> @details 
     820   !> Optionaly you could specify the type of the variable to be saved. 
     821   !> 
     822   !> @author J.Paul 
     823   !> @date November, 2013 - Initial Version 
     824   ! 
     825   !> @param[in] cd_name   attribute name 
     826   !> @param[in] id_value  attribute value 
     827   !> @param[in] id_type   type of the variable to be saved 
    693828   !> @return attribute structure 
    694829   !------------------------------------------------------------------- 
    695    !> @code 
    696    TYPE(TATT) FUNCTION att__init_i4( cd_name, id_value ) 
     830   TYPE(TATT) FUNCTION att__init_i4( cd_name, id_value, id_type ) 
    697831      IMPLICIT NONE 
    698832      ! Argument 
    699833      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    700834      INTEGER(i4),      DIMENSION(:), INTENT(IN) :: id_value 
     835      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    701836 
    702837      ! local value 
     
    711846      CALL att_clean(att__init_i4) 
    712847       
    713       ! table size 
     848      ! array size 
    714849      il_len=size(id_value(:)) 
    715850 
     
    720855      cl_value=TRIM(cl_value)//TRIM(fct_str(id_value(il_len)))//"/)" 
    721856 
    722       CALL logger_info( & 
     857      CALL logger_trace( & 
    723858      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    724859      &  " attribute value "//TRIM(ADJUSTL(cl_value)) )       
     
    726861      att__init_i4%c_name=TRIM(ADJUSTL(cd_name)) 
    727862 
    728       att__init_i4%i_type=NF90_INT 
     863      IF( PRESENT(id_type) )THEN 
     864         att__init_i4%i_type=id_type 
     865      ELSE 
     866         att__init_i4%i_type=NF90_INT 
     867      ENDIF 
    729868 
    730869      IF( ASSOCIATED(att__init_i4%d_value) )THEN 
     
    737876 
    738877   END FUNCTION att__init_i4 
    739    !> @endcode 
    740    !------------------------------------------------------------------- 
    741    !> @brief This function initialise an attribute structure with  
    742    !> integer(4) value  
    743    !> 
    744    !> @author J.Paul 
    745    !> - Nov, 2013- Initial Version 
    746    ! 
    747    !> @param[in] cd_name : attribute name 
    748    !> @param[in] id_value: attribute value 
     878   !------------------------------------------------------------------- 
     879   !> @brief This function initialize an attribute structure with  
     880   !> integer(4) value.  
     881   !> @details 
     882   !> Optionaly you could specify the type of the variable to be saved. 
     883   !> 
     884   !> @author J.Paul 
     885   !> @date November, 2013 - Initial Version 
     886   !> 
     887   !> @param[in] cd_name   attribute name 
     888   !> @param[in] id_value  attribute value 
     889   !> @param[in] id_type   type of the variable to be saved 
    749890   !> @return attribute structure 
    750891   !------------------------------------------------------------------- 
    751    !> @code 
    752    TYPE(TATT) FUNCTION att__init_i4_0d( cd_name, id_value ) 
     892   TYPE(TATT) FUNCTION att__init_i4_0d( cd_name, id_value, id_type ) 
    753893      IMPLICIT NONE 
    754894      ! Argument 
    755895      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    756896      INTEGER(i4),      INTENT(IN) :: id_value 
     897      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    757898 
    758899      !local value 
     
    765906      cl_value="(/"//TRIM(fct_str(id_value))//"/)" 
    766907 
    767       CALL logger_info( & 
     908      CALL logger_trace( & 
    768909      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    769910      &  " attibute value "//TRIM(ADJUSTL(cl_value)) )       
     
    771912      att__init_i4_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    772913 
    773       att__init_i4_0d%i_type=NF90_INT 
     914      IF( PRESENT(id_type) )THEN 
     915         att__init_i4_0d%i_type=id_type 
     916      ELSE 
     917         att__init_i4_0d%i_type=NF90_INT 
     918      ENDIF 
    774919 
    775920      IF( ASSOCIATED(att__init_i4_0d%d_value) )THEN 
     
    782927 
    783928   END FUNCTION att__init_i4_0d 
    784    !> @endcode 
    785    !------------------------------------------------------------------- 
    786    !> @brief This function initialise an attribute structure with table  
    787    !> of integer(8) value 
    788    !> 
    789    !> @author J.Paul 
    790    !> - Nov, 2013- Initial Version 
    791    ! 
    792    !> @param[in] cd_name : attribute name 
    793    !> @param[in] kd_value: attribute value 
     929   !------------------------------------------------------------------- 
     930   !> @brief This function initialize an attribute structure with array  
     931   !> of integer(8) value. 
     932   !> @details 
     933   !> Optionaly you could specify the type of the variable to be saved. 
     934   !> 
     935   !> @author J.Paul 
     936   !> @date November, 2013 - Initial Version 
     937   ! 
     938   !> @param[in] cd_name   attribute name 
     939   !> @param[in] kd_value  attribute value 
     940   !> @param[in] id_type   type of the variable to be saved 
    794941   !> @return attribute structure 
    795942   !------------------------------------------------------------------- 
    796    !> @code 
    797    TYPE(TATT) FUNCTION att__init_i8( cd_name, kd_value ) 
     943   TYPE(TATT) FUNCTION att__init_i8( cd_name, kd_value, id_type ) 
    798944      IMPLICIT NONE 
    799945      ! Argument 
    800946      CHARACTER(LEN=*),               INTENT(IN) :: cd_name 
    801947      INTEGER(i8),      DIMENSION(:), INTENT(IN) :: kd_value 
     948      INTEGER(i4)                   , INTENT(IN), OPTIONAL :: id_type 
    802949 
    803950      ! local value 
     
    812959      CALL att_clean(att__init_i8) 
    813960       
    814       ! table size 
     961      ! array size 
    815962      il_len=size(kd_value(:)) 
    816963 
     
    821968      cl_value=TRIM(cl_value)//TRIM(fct_str(kd_value(il_len)))//"/)" 
    822969 
    823       CALL logger_info( & 
     970      CALL logger_trace( & 
    824971      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    825972      &  " attibute value "//TRIM(ADJUSTL(cl_value)) )       
     
    827974      att__init_i8%c_name=TRIM(ADJUSTL(cd_name)) 
    828975 
    829       att__init_i8%i_type=NF90_INT 
     976      IF( PRESENT(id_type) )THEN 
     977         att__init_i8%i_type=id_type 
     978      ELSE 
     979         att__init_i8%i_type=NF90_INT 
     980      ENDIF 
    830981 
    831982      IF( ASSOCIATED(att__init_i8%d_value) )THEN 
     
    838989 
    839990   END FUNCTION att__init_i8 
    840    !> @endcode 
    841    !------------------------------------------------------------------- 
    842    !> @brief This function initialise an attribute structure with  
    843    !> integer(8) value  
    844    !> 
    845    !> @author J.Paul 
    846    !> - Nov, 2013- Initial Version 
    847    ! 
    848    !> @param[in] cd_name : attribute name 
    849    !> @param[in] kd_value: attribute value 
     991   !------------------------------------------------------------------- 
     992   !> @brief This function initialize an attribute structure with  
     993   !> integer(8) value.  
     994   !> @details 
     995   !> Optionaly you could specify the type of the variable to be saved. 
     996   !> 
     997   !> @author J.Paul 
     998   !> @date November, 2013 - Initial Version 
     999   ! 
     1000   !> @param[in] cd_name   attribute name 
     1001   !> @param[in] kd_value  attribute value 
     1002   !> @param[in] id_type   type of the variable to be saved 
    8501003   !> @return attribute structure 
    8511004   !------------------------------------------------------------------- 
    852    !> @code 
    853    TYPE(TATT) FUNCTION att__init_i8_0d( cd_name, kd_value ) 
     1005   TYPE(TATT) FUNCTION att__init_i8_0d( cd_name, kd_value, id_type ) 
    8541006      IMPLICIT NONE 
    8551007      ! Argument 
    8561008      CHARACTER(LEN=*), INTENT(IN) :: cd_name 
    8571009      INTEGER(i8),      INTENT(IN) :: kd_value 
     1010      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_type 
    8581011 
    8591012      ! local value 
     
    8661019      cl_value="(/"//TRIM(fct_str(kd_value))//"/)" 
    8671020 
    868       CALL logger_info( & 
     1021      CALL logger_trace( & 
    8691022      &  " ATT INIT: attribute name: "//TRIM(ADJUSTL(cd_name))//& 
    8701023      &  " attibute value "//TRIM(ADJUSTL(cl_value)) )       
     
    8721025      att__init_i8_0d%c_name=TRIM(ADJUSTL(cd_name)) 
    8731026 
    874       att__init_i8_0d%i_type=NF90_INT 
     1027      IF( PRESENT(id_type) )THEN 
     1028         att__init_i8_0d%i_type=id_type 
     1029      ELSE 
     1030         att__init_i8_0d%i_type=NF90_INT 
     1031      ENDIF 
    8751032 
    8761033      IF( ASSOCIATED(att__init_i8_0d%d_value) )THEN 
     
    8831040 
    8841041   END FUNCTION att__init_i8_0d 
    885    !> @endcode    
    886    !------------------------------------------------------------------- 
    887    !> @brief This subroutine print attribute information 
    888    !> 
    889    !> @author J.Paul 
    890    !> - Nov, 2013- Initial Version 
    891    ! 
    892    !> @param[in] td_att : attribute structure 
    893    !------------------------------------------------------------------- 
    894    !> @code 
    895    SUBROUTINE att_print(td_att) 
     1042   !------------------------------------------------------------------- 
     1043   !> @brief This subroutine print informations of an array of attribute.  
     1044   !> 
     1045   !> @author J.Paul 
     1046   !> @date June, 2014 - Initial Version 
     1047   !> 
     1048   !> @param[in] td_att array of attribute structure 
     1049   !------------------------------------------------------------------- 
     1050   SUBROUTINE att__print_arr(td_att) 
     1051      IMPLICIT NONE 
     1052 
     1053      ! Argument       
     1054      TYPE(TATT), DIMENSION(:), INTENT(IN) :: td_att 
     1055 
     1056      ! loop indices 
     1057      INTEGER(i4) :: ji 
     1058      !---------------------------------------------------------------- 
     1059 
     1060      DO ji=1,SIZE(td_att(:)) 
     1061         CALL att_print(td_att(ji)) 
     1062      ENDDO 
     1063 
     1064   END SUBROUTINE att__print_arr 
     1065   !------------------------------------------------------------------- 
     1066   !> @brief This subroutine print attribute information. 
     1067   !> 
     1068   !> @author J.Paul 
     1069   !> @date November, 2013 - Initial Version 
     1070   !> @date September, 2014 - take into account type of attribute. 
     1071   ! 
     1072   !> @param[in] td_att attribute structure 
     1073   !------------------------------------------------------------------- 
     1074   SUBROUTINE att__print_unit(td_att) 
    8961075      IMPLICIT NONE 
    8971076 
     
    9021081      CHARACTER(LEN=lc) :: cl_type 
    9031082      CHARACTER(LEN=lc) :: cl_value 
    904       CHARACTER(LEN=lc) :: cl_tmp 
     1083 
     1084      INTEGER(i8)       :: kl_tmp 
     1085      INTEGER(i2)       :: sl_tmp 
     1086      INTEGER(i1)       :: bl_tmp 
     1087      REAL(sp)          :: rl_tmp 
     1088      REAL(dp)          :: dl_tmp 
    9051089 
    9061090      ! loop indices 
     
    9241108            CASE DEFAULT 
    9251109               cl_type='' 
    926                !cl_type='unknown' 
     1110 
    9271111         END SELECT 
    9281112 
     
    9321116               cl_value=td_att%c_value 
    9331117 
    934             CASE(NF90_BYTE, NF90_SHORT, NF90_INT, NF90_FLOAT, NF90_DOUBLE)    
     1118            CASE(NF90_BYTE)    
    9351119               IF( td_att%i_len > 1 )THEN 
    936  
    937                   cl_tmp=',' 
    9381120                  cl_value='(/' 
    9391121                  DO ji=1,td_att%i_len-1 
    940                      cl_value=TRIM(cl_value)//& 
    941                      &        TRIM(fct_str(td_att%d_value(ji)))//TRIM(cl_tmp) 
     1122                     bl_tmp=INT(td_att%d_value(ji),i1) 
     1123                     cl_value=TRIM(cl_value)//TRIM(fct_str(bl_tmp))//',' 
    9421124                  ENDDO 
    943                   cl_value=TRIM(cl_value)//& 
    944                   &        TRIM(fct_str(td_att%d_value(td_att%i_len)))//'/)' 
    945  
     1125                  bl_tmp=INT(td_att%d_value(td_att%i_len),i1) 
     1126                  cl_value=TRIM(cl_value)//TRIM(fct_str(bl_tmp))//'/)' 
    9461127               ELSE 
    947  
    9481128                  cl_value='(/'//TRIM(fct_str(td_att%d_value(1)))//'/)' 
    949  
    9501129               ENDIF 
     1130 
     1131            CASE(NF90_SHORT)    
     1132               IF( td_att%i_len > 1 )THEN 
     1133                  cl_value='(/' 
     1134                  DO ji=1,td_att%i_len-1 
     1135                     sl_tmp=INT(td_att%d_value(ji),i2) 
     1136                     cl_value=TRIM(cl_value)//TRIM(fct_str(sl_tmp))//',' 
     1137                  ENDDO 
     1138                  sl_tmp=INT(td_att%d_value(td_att%i_len),i2) 
     1139                  cl_value=TRIM(cl_value)//TRIM(fct_str(sl_tmp))//'/)' 
     1140               ELSE 
     1141                  cl_value='(/'//TRIM(fct_str(td_att%d_value(1)))//'/)' 
     1142               ENDIF 
     1143 
     1144            CASE(NF90_INT)    
     1145               IF( td_att%i_len > 1 )THEN 
     1146                  cl_value='(/' 
     1147                  DO ji=1,td_att%i_len-1 
     1148                     kl_tmp=INT(td_att%d_value(ji),i8) 
     1149                     cl_value=TRIM(cl_value)//TRIM(fct_str(kl_tmp))//',' 
     1150                  ENDDO 
     1151                  kl_tmp=INT(td_att%d_value(td_att%i_len),i8) 
     1152                  cl_value=TRIM(cl_value)//TRIM(fct_str(kl_tmp))//'/)' 
     1153               ELSE 
     1154                  cl_value='(/'//TRIM(fct_str(td_att%d_value(1)))//'/)' 
     1155               ENDIF 
     1156 
     1157            CASE(NF90_FLOAT)    
     1158               IF( td_att%i_len > 1 )THEN 
     1159                  cl_value='(/' 
     1160                  DO ji=1,td_att%i_len-1 
     1161                     rl_tmp=REAL(td_att%d_value(ji),sp) 
     1162                     cl_value=TRIM(cl_value)//TRIM(fct_str(rl_tmp))//',' 
     1163                  ENDDO 
     1164                  rl_tmp=REAL(td_att%d_value(td_att%i_len),sp) 
     1165                  cl_value=TRIM(cl_value)//TRIM(fct_str(rl_tmp))//'/)' 
     1166               ELSE 
     1167                  cl_value='(/'//TRIM(fct_str(td_att%d_value(1)))//'/)' 
     1168               ENDIF 
     1169 
     1170            CASE(NF90_DOUBLE)    
     1171               IF( td_att%i_len > 1 )THEN 
     1172                  cl_value='(/' 
     1173                  DO ji=1,td_att%i_len-1 
     1174                     dl_tmp=REAL(td_att%d_value(ji),dp) 
     1175                     cl_value=TRIM(cl_value)//TRIM(fct_str(dl_tmp))//',' 
     1176                  ENDDO 
     1177                  dl_tmp=REAL(td_att%d_value(td_att%i_len),dp) 
     1178                  cl_value=TRIM(cl_value)//TRIM(fct_str(dl_tmp))//'/)' 
     1179               ELSE 
     1180                  cl_value='(/'//TRIM(fct_str(td_att%d_value(1)))//'/)' 
     1181               ENDIF 
     1182 
    9511183            CASE DEFAULT 
    9521184               cl_value="none" 
     
    9601192         &        " value : ",TRIM(ADJUSTL(cl_value)) 
    9611193 
    962    END SUBROUTINE att_print 
    963    !> @endcode 
     1194   END SUBROUTINE att__print_unit 
    9641195   !------------------------------------------------------------------- 
    9651196   !> @brief  
     
    9671198   ! 
    9681199   !> @author J.Paul 
    969    !> @date Nov, 2013 
    970    ! 
    971    !> @param[inout] td_att : attribute strcuture 
    972    !------------------------------------------------------------------- 
    973    !> @code 
    974    SUBROUTINE att_clean( td_att ) 
     1200   !> @date November, 2013 - Initial Version 
     1201   ! 
     1202   !> @param[inout] td_att attribute strcuture 
     1203   !------------------------------------------------------------------- 
     1204   SUBROUTINE att__clean_unit( td_att ) 
    9751205      IMPLICIT NONE 
    9761206      ! Argument 
     
    9811211      !---------------------------------------------------------------- 
    9821212 
    983       CALL logger_info( & 
     1213      CALL logger_trace( & 
    9841214      &  " CLEAN: reset attribute "//TRIM(td_att%c_name) ) 
    9851215 
     
    9901220 
    9911221      ! replace by empty structure 
    992       td_att=tl_att 
    993  
    994    END SUBROUTINE att_clean 
    995    !> @endcode 
     1222      td_att=att_copy(tl_att) 
     1223 
     1224   END SUBROUTINE att__clean_unit 
     1225   !------------------------------------------------------------------- 
     1226   !> @brief  
     1227   !>  This subroutine clean array of attribute strcuture. 
     1228   ! 
     1229   !> @author J.Paul 
     1230   !> @date September, 2014 - Initial Version 
     1231   ! 
     1232   !> @param[inout] td_att attribute strcuture 
     1233   !------------------------------------------------------------------- 
     1234   SUBROUTINE att__clean_arr( td_att ) 
     1235      IMPLICIT NONE 
     1236      ! Argument 
     1237      TYPE(TATT), DIMENSION(:), INTENT(INOUT) :: td_att 
     1238 
     1239      ! local variable 
     1240      ! loop indices 
     1241      INTEGER(i4) :: ji 
     1242      !---------------------------------------------------------------- 
     1243 
     1244      DO ji=SIZE(td_att(:)),1,-1 
     1245         CALL att_clean(td_att(ji) ) 
     1246      ENDDO 
     1247 
     1248   END SUBROUTINE att__clean_arr 
    9961249END MODULE att 
    9971250 
  • branches/2014/dev_r4775_MO_configman/NEMOGCM/TOOLS/SIREN/src/boundary.f90

    r4213 r5036  
    88!> @brief 
    99!> This module manage boundary. 
    10 ! 
     10!> 
    1111!> @details 
     12!>    define type TBDY:<br/> 
     13!> @code 
     14!>    TYPE(TBDY) :: tl_bdy<br/> 
     15!> @endcode 
    1216!> 
     17!>    to initialise boundary structure:<br/> 
     18!> @code 
     19!>    tl_bdy=boundary_init(td_var, [ld_north,] [ld_south,] [ld_east,] [ld_west,] 
     20!>    [cd_north,] [cd_south,] [cd_east,] [cd_west,] [ld_oneseg]) 
     21!> @endcode 
     22!>       - td_var is variable structure 
     23!>       - ld_north is logical to force used of north boundary [optional] 
     24!>       - ld_south is logical to force used of north boundary [optional] 
     25!>       - ld_east  is logical to force used of north boundary [optional] 
     26!>       - ld_west  is logical to force used of north boundary [optional] 
     27!>       - cd_north is string character description of north boundary [optional] 
     28!>       - cd_south is string character description of north boundary [optional] 
     29!>       - cd_east  is string character description of north boundary [optional] 
     30!>       - cd_west  is string character description of north boundary [optional] 
     31!>       - ld_oneseg is logical to force to use only one segment for each boundary [optional] 
    1332!> 
     33!>    to get boundary cardinal:<br/> 
     34!>    - tl_bdy\%c_card 
    1435!> 
     36!>    to know if boundary is use:<br/> 
     37!>    - tl_bdy\%l_use 
    1538!> 
     39!>    to get the number of segment in boundary:<br/> 
     40!>    - tl_bdy\%i_nseg 
    1641!> 
    17 !> @author 
    18 !> J.Paul 
     42!>    to get array of segment in boundary:<br/> 
     43!>    - tl_bdy\%t_seg(:) 
     44!> 
     45!>    to get orthogonal segment index of north boundary:<br/> 
     46!>    - tl_bdy\%t_seg(jp_north)%\i_index 
     47!> 
     48!>    to get segment width of south boundary:<br/> 
     49!>    - tl_bdy\%t_seg(jp_south)%\i_width 
     50!> 
     51!>    to get segment first indice of east boundary:<br/> 
     52!>    - tl_bdy\%t_seg(jp_east)%\i_first 
     53!> 
     54!>    to get segment last indice of west boundary:<br/> 
     55!>    - tl_bdy\%t_seg(jp_west)%\i_last 
     56!> 
     57!>    to print information about boundary:<br/> 
     58!> @code 
     59!>    CALL boundary_print(td_bdy) 
     60!> @endcode 
     61!>       - td_bdy is boundary structure or a array of boundary structure 
     62!> 
     63!>    to clean boundary structure:<br/> 
     64!> @code 
     65!>    CALL boundary_clean(td_bdy) 
     66!> @endcode 
     67!> 
     68!>    to get indices of each semgent for each boundary:<br/> 
     69!> @code 
     70!>    CALL boundary_get_indices( td_bdy, td_var, ld_oneseg) 
     71!> @endcode 
     72!>       - td_bdy is boundary structure 
     73!>       - td_var is variable structure 
     74!>       - ld_oneseg is logical to force to use only one segment for each boundary [optional] 
     75!> 
     76!>    to check boundary indices and corner:<br/> 
     77!> @code 
     78!>    CALL boundary_check(td_bdy, td_var) 
     79!> @endcode 
     80!>       - td_bdy is boundary structure 
     81!>       - td_var is variable structure 
     82!> 
     83!>    to check boundary corner:<br/> 
     84!> @code 
     85!>    CALL boundary_check_corner(td_bdy, td_var) 
     86!> @endcode 
     87!>       - td_bdy is boundary structure 
     88!>       - td_var is variable structure 
     89!> 
     90!>    to create filename with cardinal name inside:<br/> 
     91!> @code 
     92!>    cl_filename=boundary_set_filename(cd_file, cd_card) 
     93!> @endcode 
     94!>       - cd_file = original file name 
     95!>       - cd_card = cardinal name 
     96!> 
     97!>    to swap array for east and north boundary:<br/> 
     98!> @code 
     99!>    CALL boundary_swap( td_var, td_bdy ) 
     100!> @endcode 
     101!>       - td_var is variable strucutre 
     102!>       - td_bdy is boundary strucutre 
     103!> 
     104!> @author J.Paul 
    19105! REVISION HISTORY: 
    20 !> @date Nov, 2013 - Initial Version 
    21 !> @todo 
    22 !> - add description generique de l'objet boundary 
     106!> @date November, 2013 - Initial Version 
     107!> @date September, 2014 - add boundary description 
     108!> @date November, 2014 - Fix memory leaks bug 
     109!>  
     110!> @todo add schematic to boundary structure description 
    23111!>  
    24112!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    29117   USE phycst                          ! physical constant 
    30118   USE kind                            ! F90 kind parameter 
    31    USE logger                             ! log file manager 
     119   USE logger                          ! log file manager 
    32120   USE fct                             ! basic useful function 
    33 !   USE date                            ! date manager 
    34 !   USE att                             ! attribute manager 
    35 !   USE dim                             ! dimension manager 
    36121   USE var                             ! variable manager 
    37 !   USE file                            ! file manager 
    38 !   USE iom                             ! I/O manager 
    39 !   USE dom                             ! domain  manager 
    40 !   USE grid                            ! grid manager 
    41 !   USE extrap                          ! extrapolation manager 
    42 !   USE interp                          ! interpolation manager 
    43 !   USE filter                          ! filter manager 
    44 !   USE mpp                             ! MPP manager 
    45 !   USE iom_mpp                         ! MPP I/O manager 
    46122 
    47123   IMPLICIT NONE 
    48    PRIVATE 
    49124   ! NOTE_avoid_public_variables_if_possible 
    50125 
    51126   ! type and variable 
    52    PUBLIC :: ip_ncard !< number of cardinal point 
    53    PUBLIC :: ip_card  !< table of cardinal point 
    54127   PUBLIC :: TBDY     !< boundary structure 
    55128   PUBLIC :: TSEG     !< segment structure 
    56129 
     130   PRIVATE :: im_width !< boundary width 
     131 
    57132   ! function and subroutine 
     133   PUBLIC :: boundary_copy         !< copy boundary structure 
    58134   PUBLIC :: boundary_init         !< initialise boundary structure 
    59135   PUBLIC :: boundary_print        !< print information about boundary 
     
    63139   PUBLIC :: boundary_check_corner !< check boundary corner 
    64140   PUBLIC :: boundary_set_filename !< set boundary filename 
    65    PUBLIC :: boundary_clean_interp !< clean interpolated boundary 
    66141   PUBLIC :: boundary_swap         !< swap array for north and east boundary 
    67142 
    68    PRIVATE :: boundary__init_wrapper    !< initialise a boundary structure 
    69    PRIVATE :: boundary__init            !< initialise basically a boundary structure 
    70 !   PRIVATE :: boundary__copy            !< copy boundary structure in another 
    71    PRIVATE :: boundary__copy_unit       !< copy boundary structure in another 
    72    PRIVATE :: boundary__copy_tab        !< copy boundary structure in another 
    73    PRIVATE :: boundary__add_seg         !< add one segment structure to a boundary  
    74    PRIVATE :: boundary__del_seg         !< remove all segments of a boundary 
    75    PRIVATE :: boundary__get_info        !< get boundary information from boundary description string character. 
    76    PRIVATE :: boundary__get_seg_number  !< compute the number of sea segment for one boundary 
    77    PRIVATE :: boundary__get_seg_indices !< get segment indices for one boundary  
    78    PRIVATE :: boundary__print_unit      !< print information about one boundary 
    79    PRIVATE :: boundary__print_tab       !< print information about a table of boundary 
     143   PRIVATE :: boundary__clean_unit      ! clean boundary structure  
     144   PRIVATE :: boundary__clean_arr       ! clean array of boundary structure  
     145   PRIVATE :: boundary__init_wrapper    ! initialise a boundary structure 
     146   PRIVATE :: boundary__init            ! initialise basically a boundary structure 
     147   PRIVATE :: boundary__copy_unit       ! copy boundary structure in another 
     148   PRIVATE :: boundary__copy_arr        ! copy boundary structure in another 
     149   PRIVATE :: boundary__add_seg         ! add one segment structure to a boundary  
     150   PRIVATE :: boundary__del_seg         ! remove all segments of a boundary 
     151   PRIVATE :: boundary__get_info        ! get boundary information from boundary description string character. 
     152   PRIVATE :: boundary__get_seg_number  ! compute the number of sea segment for one boundary 
     153   PRIVATE :: boundary__get_seg_indices ! get segment indices for one boundary  
     154   PRIVATE :: boundary__print_unit      ! print information about one boundary 
     155   PRIVATE :: boundary__print_arr       ! print information about a array of boundary 
    80156    
    81    PRIVATE :: seg__init    !< initialise segment structure 
    82    PRIVATE :: seg__clean   !< clean segment structure 
    83    PRIVATE :: seg__copy    !< copy segment structure in another 
    84  
    85    !> @struct 
    86    TYPE TSEG    
     157   PRIVATE :: seg__init       ! initialise segment structure 
     158   PRIVATE :: seg__clean      ! clean segment structure 
     159   PRIVATE :: seg__clean_unit ! clean segment structure 
     160   PRIVATE :: seg__clean_arr  ! clean array of segment structure 
     161   PRIVATE :: seg__copy       ! copy segment structure in another 
     162   PRIVATE :: seg__copy_unit  ! copy segment structure in another 
     163   PRIVATE :: seg__copy_arr   ! copy array of segment structure in another 
     164 
     165   TYPE TSEG   !< segment structure 
    87166      INTEGER(i4) :: i_index = 0 !< segment index 
    88167      INTEGER(i4) :: i_width = 0 !< segment width 
     
    91170   END TYPE TSEG 
    92171 
    93    !> @struct 
    94    TYPE TBDY 
    95       CHARACTER(LEN=lc) :: c_card = '' 
    96       LOGICAL           :: l_use  = .FALSE. 
    97       INTEGER(i4)       :: i_nseg = 0 
    98       TYPE(TSEG), DIMENSION(:), POINTER :: t_seg => NULL() 
     172   TYPE TBDY !< boundary structure 
     173      CHARACTER(LEN=lc) :: c_card = ''          !< boundary cardinal 
     174      LOGICAL           :: l_use  = .FALSE.     !< boundary use or not  
     175      INTEGER(i4)       :: i_nseg = 0           !< number of segment in boundary 
     176      TYPE(TSEG), DIMENSION(:), POINTER :: t_seg => NULL() !<  array of segment structure 
    99177   END TYPE TBDY 
    100  
    101    INTEGER(i4), PARAMETER :: ip_ncard=4 
    102    CHARACTER(LEN=lc), DIMENSION(ip_ncard), PARAMETER :: ip_card = & 
    103    &  (/ 'north', & 
    104    &     'south', & 
    105    &     'east ', & 
    106    &     'west ' /) 
    107  
    108    INTEGER(i4), PARAMETER :: jp_north=1 
    109    INTEGER(i4), PARAMETER :: jp_south=2 
    110    INTEGER(i4), PARAMETER :: jp_east =3 
    111    INTEGER(i4), PARAMETER :: jp_west =4 
    112178 
    113179   INTEGER(i4), PARAMETER :: im_width=10 
     
    119185   INTERFACE boundary_print 
    120186      MODULE PROCEDURE boundary__print_unit  
    121       MODULE PROCEDURE boundary__print_tab  
     187      MODULE PROCEDURE boundary__print_arr  
    122188   END INTERFACE boundary_print 
    123189 
    124    INTERFACE ASSIGNMENT(=) 
     190   INTERFACE boundary_clean 
     191      MODULE PROCEDURE boundary__clean_unit    
     192      MODULE PROCEDURE boundary__clean_arr     
     193   END INTERFACE 
     194 
     195   INTERFACE seg__clean 
     196      MODULE PROCEDURE seg__clean_unit    
     197      MODULE PROCEDURE seg__clean_arr     
     198   END INTERFACE 
     199 
     200   INTERFACE boundary_copy 
    125201      MODULE PROCEDURE boundary__copy_unit  
    126       MODULE PROCEDURE boundary__copy_tab  
    127       MODULE PROCEDURE seg__copy   ! copy segment structure 
     202      MODULE PROCEDURE boundary__copy_arr  
     203   END INTERFACE    
     204 
     205   INTERFACE seg__copy 
     206      MODULE PROCEDURE seg__copy_unit   ! copy segment structure 
     207      MODULE PROCEDURE seg__copy_arr    ! copy array of segment structure 
    128208   END INTERFACE    
    129209 
     
    131211   !------------------------------------------------------------------- 
    132212   !> @brief 
    133    !> This subroutine copy boundary structure in another boundary 
    134    !> structure 
     213   !> This subroutine copy a array of boundary structure in another one 
    135214   !> @details  
    136215   !> 
     216   !> @warning do not use on the output of a function who create or read an 
     217   !> attribute (ex: tl_bdy=boundary_copy(boundary_init()) is forbidden). 
     218   !> This will create memory leaks. 
    137219   !> @warning to avoid infinite loop, do not use any function inside  
    138220   !> this subroutine 
    139221   !> 
    140222   !> @author J.Paul 
    141    !> - Nov, 2013- Initial Version 
     223   !> @date November, 2013 - Initial Version 
     224   !> @date November, 2014 
     225   !>    - use function instead of overload assignment operator  
     226   !> (to avoid memory leak) 
    142227   ! 
    143    !> @param[out] td_bdy1  : boundary structure 
    144    !> @param[in] td_bdy2  : boundary structure 
     228   !> @param[in] td_bdy   array of boundary structure 
     229   !> @return copy of input array of boundary structure  
    145230   !------------------------------------------------------------------- 
    146    !> @code 
    147    SUBROUTINE boundary__copy_tab( td_bdy1, td_bdy2 ) 
     231   FUNCTION boundary__copy_arr( td_bdy ) 
    148232      IMPLICIT NONE 
    149233      ! Argument 
    150       TYPE(TBDY), DIMENSION(:), INTENT(OUT) :: td_bdy1 
    151       TYPE(TBDY), DIMENSION(:), INTENT(IN)  :: td_bdy2 
     234      TYPE(TBDY), DIMENSION(:), INTENT(IN)  :: td_bdy 
     235      ! function 
     236      TYPE(TBDY), DIMENSION(SIZE(td_bdy(:))) :: boundary__copy_arr 
    152237 
    153238      ! local variable 
     
    156241      !---------------------------------------------------------------- 
    157242 
    158       IF( SIZE(td_bdy1(:)) /= SIZE(td_bdy2(:)) )THEN 
    159          CALL logger_error("BOUNDARY COPY: dimension of table of boundary differ") 
    160       ELSE 
    161          DO jk=1,SIZE(td_bdy1(:)) 
    162             td_bdy1(jk)=td_bdy2(jk) 
    163          ENDDO 
    164       ENDIF 
    165    END SUBROUTINE boundary__copy_tab 
    166    !> @endcode 
     243      DO jk=1,SIZE(td_bdy(:)) 
     244         boundary__copy_arr(jk)=boundary_copy(td_bdy(jk)) 
     245      ENDDO 
     246 
     247   END FUNCTION boundary__copy_arr 
    167248   !------------------------------------------------------------------- 
    168249   !> @brief 
    169    !> This subroutine copy boundary structure in another boundary 
    170    !> structure 
     250   !> This subroutine copy boundary structure in another one 
    171251   !> @details  
    172252   !> 
     253   !> @warning do not use on the output of a function who create or read an 
     254   !> attribute (ex: tl_bdy=boundary_copy(boundary_init()) is forbidden). 
     255   !> This will create memory leaks. 
    173256   !> @warning to avoid infinite loop, do not use any function inside  
    174257   !> this subroutine 
    175258   !> 
    176259   !> @author J.Paul 
    177    !> - Nov, 2013- Initial Version 
     260   !> @date November, 2013 - Initial Version 
     261   !> @date November, 2014 
     262   !>    - use function instead of overload assignment operator  
     263   !> (to avoid memory leak) 
    178264   ! 
    179    !> @param[out] td_bdy1  : boundary structure 
    180    !> @param[in] td_bdy2  : boundary structure 
     265   !> @param[in] td_bdy  boundary structure 
     266   !> @return copy of input boundary structure 
    181267   !------------------------------------------------------------------- 
    182    !> @code 
    183    SUBROUTINE boundary__copy_unit( td_bdy1, td_bdy2 ) 
     268   FUNCTION boundary__copy_unit( td_bdy ) 
    184269      IMPLICIT NONE 
    185270      ! Argument 
    186       TYPE(TBDY), INTENT(OUT) :: td_bdy1 
    187       TYPE(TBDY), INTENT(IN)  :: td_bdy2 
     271      TYPE(TBDY), INTENT(IN)  :: td_bdy 
     272      ! function 
     273      TYPE(TBDY) :: boundary__copy_unit 
    188274 
    189275      ! local variable 
     
    193279 
    194280      ! copy variable name, id, .. 
    195       td_bdy1%c_card     = TRIM(td_bdy2%c_card) 
    196       td_bdy1%i_nseg     = td_bdy2%i_nseg 
    197       td_bdy1%l_use      = td_bdy2%l_use 
     281      boundary__copy_unit%c_card     = TRIM(td_bdy%c_card) 
     282      boundary__copy_unit%i_nseg     = td_bdy%i_nseg 
     283      boundary__copy_unit%l_use      = td_bdy%l_use 
    198284 
    199285      ! copy segment 
    200       IF( ASSOCIATED(td_bdy1%t_seg) ) DEALLOCATE(td_bdy1%t_seg) 
    201       IF( ASSOCIATED(td_bdy2%t_seg) .AND. td_bdy1%i_nseg > 0 )THEN 
    202          ALLOCATE( td_bdy1%t_seg(td_bdy1%i_nseg) ) 
    203          DO ji=1,td_bdy1%i_nseg 
    204             td_bdy1%t_seg(ji)=td_bdy2%t_seg(ji) 
     286      IF( ASSOCIATED(boundary__copy_unit%t_seg) )THEN 
     287         CALL seg__clean(boundary__copy_unit%t_seg(:)) 
     288         DEALLOCATE(boundary__copy_unit%t_seg) 
     289      ENDIF 
     290      IF( ASSOCIATED(td_bdy%t_seg) .AND. boundary__copy_unit%i_nseg > 0 )THEN 
     291         ALLOCATE( boundary__copy_unit%t_seg(boundary__copy_unit%i_nseg) ) 
     292         DO ji=1,boundary__copy_unit%i_nseg 
     293            boundary__copy_unit%t_seg(ji)=td_bdy%t_seg(ji) 
    205294         ENDDO 
    206295      ENDIF 
    207296 
    208    END SUBROUTINE boundary__copy_unit 
    209    !> @endcode 
     297   END FUNCTION boundary__copy_unit 
    210298   !------------------------------------------------------------------- 
    211299   !> @brief This subroutine clean boundary structure 
    212300   ! 
    213301   !> @author J.Paul 
    214    !> - Nov, 2013- Initial Version 
     302   !> @date November, 2013 - Initial Version 
    215303   ! 
    216    !> @param[inout] td_bdy : boundary strucutre 
     304   !> @param[inout] td_bdy boundary strucutre 
    217305   !------------------------------------------------------------------- 
    218    !> @code 
    219    SUBROUTINE boundary_clean( td_bdy ) 
     306   SUBROUTINE boundary__clean_unit( td_bdy ) 
    220307      IMPLICIT NONE 
    221308      ! Argument 
     
    226313 
    227314      ! loop indices 
     315      !---------------------------------------------------------------- 
     316 
     317      CALL logger_info( & 
     318      &  " CLEAN: reset boundary "//TRIM(td_bdy%c_card) ) 
     319 
     320      ! del segment 
     321      IF( ASSOCIATED(td_bdy%t_seg) )THEN 
     322         ! clean each segment 
     323         CALL seg__clean(td_bdy%t_seg(:) ) 
     324         DEALLOCATE( td_bdy%t_seg ) 
     325      ENDIF 
     326 
     327      ! replace by empty structure 
     328      td_bdy=boundary_copy(tl_bdy) 
     329 
     330   END SUBROUTINE boundary__clean_unit 
     331   !------------------------------------------------------------------- 
     332   !> @brief This subroutine clean array of boundary structure 
     333   ! 
     334   !> @author J.Paul 
     335   !> @date September, 2014 - Initial Version 
     336   ! 
     337   !> @param[inout] td_bdy boundary strucutre 
     338   !------------------------------------------------------------------- 
     339   SUBROUTINE boundary__clean_arr( td_bdy ) 
     340      IMPLICIT NONE 
     341      ! Argument 
     342      TYPE(TBDY), DIMENSION(:), INTENT(INOUT) :: td_bdy 
     343 
     344      ! local variable 
     345      ! loop indices 
    228346      INTEGER(i4) :: ji 
    229347      !---------------------------------------------------------------- 
    230348 
    231       CALL logger_info( & 
    232       &  " CLEAN: reset boundary "//TRIM(td_bdy%c_card) ) 
    233  
    234       ! del segment 
    235       IF( ASSOCIATED(td_bdy%t_seg) )THEN 
    236          ! clean each attribute 
    237          DO ji=td_bdy%i_nseg,1,-1 
    238             CALL seg__clean(td_bdy%t_seg(ji) ) 
    239          ENDDO 
    240          DEALLOCATE( td_bdy%t_seg ) 
    241       ENDIF 
    242  
    243       ! replace by empty structure 
    244       td_bdy=tl_bdy 
    245  
    246    END SUBROUTINE boundary_clean 
    247    !> @endcode 
    248    !-------------------------------------------------------------------  
    249    !> @brief This function put cardinal name inside file name   
     349      DO ji=SIZE(td_bdy(:)),1,-1 
     350         CALL boundary_clean( td_bdy(ji) ) 
     351      ENDDO 
     352 
     353   END SUBROUTINE boundary__clean_arr 
     354   !-------------------------------------------------------------------  
     355   !> @brief This function put cardinal name inside file name. 
    250356   !  
    251357   !> @details  
    252358   !  
    253359   !> @author J.Paul  
    254    !> - Nov, 2013- Initial Version  
    255    !  
    256    !> @param[in] cd_file : file name  
    257    !> @param[in] cd_card : cardinal name  
     360   !> @date November, 2013 - Initial Version  
     361   !  
     362   !> @param[in] cd_file   file name  
     363   !> @param[in] cd_card   cardinal name  
     364   !> @param[in] id_seg    segment number  
     365   !> @param[in] cd_date   file date (format: y????m??d??)  
    258366   !> @return file name with cardinal name inside 
    259367   !-------------------------------------------------------------------  
    260    !> @code  
    261    FUNCTION boundary_set_filename(cd_file, cd_card)  
     368   FUNCTION boundary_set_filename(cd_file, cd_card, id_seg, cd_date)  
    262369      IMPLICIT NONE  
    263370      ! Argument 
    264371      CHARACTER(LEN=*), INTENT(IN) :: cd_file 
    265372      CHARACTER(LEN=*), INTENT(IN) :: cd_card 
     373      INTEGER(i4)     , INTENT(IN), OPTIONAL :: id_seg 
     374      CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_date 
    266375 
    267376      ! function  
     
    273382      CHARACTER(LEN=lc) :: cl_base 
    274383      CHARACTER(LEN=lc) :: cl_suffix 
     384      CHARACTER(LEN=lc) :: cl_segnum 
     385      CHARACTER(LEN=lc) :: cl_date 
    275386      CHARACTER(LEN=lc) :: cl_name 
    276387      ! loop indices  
     
    288399         cl_base  =fct_split(TRIM(cl_basename),1,'.') 
    289400         cl_suffix=fct_split(TRIM(cl_basename),2,'.') 
    290  
    291          cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//"."//TRIM(cl_suffix) 
     401          
     402         IF( PRESENT(id_seg) )THEN 
     403            cl_segnum="_"//TRIM(fct_str(id_seg))//"_" 
     404         ELSE 
     405            cl_segnum="" 
     406         ENDIF 
     407 
     408         IF( PRESENT(cd_date) )THEN 
     409            cl_date=TRIM(ADJUSTL(cd_date)) 
     410         ELSE 
     411            cl_date="" 
     412         ENDIF 
     413 
     414         cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//TRIM(cl_segnum)//& 
     415         &        TRIM(cl_date)//"."//TRIM(cl_suffix) 
    292416 
    293417         boundary_set_filename=TRIM(cl_dirname)//"/"//TRIM(cl_name) 
     
    298422  
    299423   END FUNCTION boundary_set_filename  
    300    !> @endcode 
    301    !-------------------------------------------------------------------  
    302    !> @brief This function initialise a boundary structure  
     424   !-------------------------------------------------------------------  
     425   !> @brief This function initialise a boundary structure. 
    303426   !  
    304427   !> @details  
     
    318441   !> specify it for each segment. 
    319442   !> ex : cn_north='index1,first1,last1(width)|index2,first2,last2' 
    320    !  
     443   !> 
     444   !> @note boundaries are compute on T point. change will be done to get data 
     445   !> on other point when need be.  
     446   !> 
    321447   !> @author J.Paul  
    322    !> - Nov, 2013- Initial Version  
    323    !  
    324    !> @param[in] td_var : variable structure  
    325    !> @param[in] ld_north : use north boundary or not  
    326    !> @param[in] ld_south : use south boundary or not  
    327    !> @param[in] ld_east  : use east  boundary or not  
    328    !> @param[in] ld_west  : use west  boundary or not  
    329    !> @param[in] cd_north : north boundary description  
    330    !> @param[in] cd_south : south boundary description  
    331    !> @param[in] cd_east  : east  boundary description  
    332    !> @param[in] cd_west  : west  boundary description  
     448   !> @date November, 2013 - Initial Version  
     449   !> @date September, 2014 
     450   !> - add boolean to use only one segment for each boundary 
     451   !> - check boundary width 
     452   !  
     453   !> @param[in] td_var    variable structure  
     454   !> @param[in] ld_north  use north boundary or not  
     455   !> @param[in] ld_south  use south boundary or not  
     456   !> @param[in] ld_east   use east  boundary or not  
     457   !> @param[in] ld_west   use west  boundary or not  
     458   !> @param[in] cd_north  north boundary description  
     459   !> @param[in] cd_south  south boundary description  
     460   !> @param[in] cd_east   east  boundary description  
     461   !> @param[in] cd_west   west  boundary description  
     462   !> @param[in] ld_oneseg force to use only one segment for each boundary  
    333463   !> @return boundary structure 
    334    !> @todo use bondary_get_indices !!!! 
    335    !-------------------------------------------------------------------  
    336    !> @code  
     464   !-------------------------------------------------------------------  
    337465   FUNCTION boundary__init_wrapper(td_var, & 
    338466   &                               ld_north, ld_south, ld_east, ld_west, & 
     
    356484 
    357485      ! local variable  
     486      INTEGER(i4)                            :: il_width 
     487      INTEGER(i4)      , DIMENSION(ip_ncard) :: il_max_width 
    358488      INTEGER(i4)      , DIMENSION(ip_ncard) :: il_index 
    359489      INTEGER(i4)      , DIMENSION(ip_ncard) :: il_min 
     
    390520         tl_bdy(jp_west )=boundary__init('west ',ld_west ) 
    391521 
    392          ! if EW cyclic no east west boundary 
     522         ! if EW cyclic no east west boundary and force to use one segment 
    393523         IF( td_var%i_ew >= 0 )THEN 
    394             CALL logger_debug("BOUNDARY INIT: cyclic no East West boundary") 
     524            CALL logger_info("BOUNDARY INIT: cyclic domain, "//& 
     525            &  "no East West boundary") 
    395526            tl_bdy(jp_east )%l_use=.FALSE. 
    396527            tl_bdy(jp_west )%l_use=.FALSE. 
     528 
     529            CALL logger_info("BOUNDARY INIT: force to use one segment due"//& 
     530            &  " to EW cyclic domain") 
     531            ll_oneseg=.TRUE. 
    397532         ENDIF 
    398533 
    399          ! attention cas U /= T ??? 
    400          il_index(jp_north)=td_var%t_dim(2)%i_len-ig_ghost 
    401          il_index(jp_south)=1+ig_ghost 
    402          il_index(jp_east )=td_var%t_dim(1)%i_len-ig_ghost 
    403          il_index(jp_west )=1+ig_ghost 
     534         il_index(jp_north)=td_var%t_dim(2)%i_len-ip_ghost 
     535         il_index(jp_south)=1+ip_ghost 
     536         il_index(jp_east )=td_var%t_dim(1)%i_len-ip_ghost 
     537         il_index(jp_west )=1+ip_ghost 
    404538 
    405539         il_min(jp_north)=1 
     
    419553         IF( PRESENT(cd_west ) ) cl_card(jp_west )=TRIM(cd_west ) 
    420554 
     555         il_max_width(jp_north)=INT(0.5*(td_var%t_dim(2)%i_len-2*ip_ghost)) 
     556         il_max_width(jp_south)=INT(0.5*(td_var%t_dim(2)%i_len-2*ip_ghost)) 
     557         il_max_width(jp_east )=INT(0.5*(td_var%t_dim(1)%i_len-2*ip_ghost)) 
     558         il_max_width(jp_west )=INT(0.5*(td_var%t_dim(1)%i_len-2*ip_ghost)) 
     559 
    421560         DO jk=1,ip_ncard 
    422561 
     562            ! check boundary width 
     563            IF( il_max_width(jk) <= im_width )THEN 
     564               IF( il_max_width(jk) <= 0 )THEN 
     565                  CALL logger_fatal("BOUNDARY INIT: domain too small to define"//& 
     566                  &                " boundaries.") 
     567               ELSE 
     568                  CALL logger_warn("BOUNDARY INIT: default boundary width too "//& 
     569                  &                "large for boundaries. force to use boundary"//& 
     570                  &                " on one point") 
     571                  il_width=1 
     572               ENDIF 
     573            ELSE 
     574               il_width=im_width 
     575            ENDIF 
     576 
    423577            ! define default segment 
    424             tl_seg=seg__init(il_index(jk),im_width,il_min(jk),il_max(jk)) 
     578            tl_seg=seg__init(il_index(jk),il_width,il_min(jk),il_max(jk)) 
    425579 
    426580            IF( tl_bdy(jk)%l_use )THEN 
     
    453607 
    454608            ENDIF 
     609            ! clean 
     610            CALL seg__clean(tl_seg) 
    455611 
    456612         ENDDO 
     
    460616         CALL boundary_check(tl_bdy, td_var) 
    461617 
    462          boundary__init_wrapper(:)=tl_bdy(:) 
     618         boundary__init_wrapper(:)=boundary_copy(tl_bdy(:)) 
    463619 
    464620         ! clean 
     
    470626  
    471627   END FUNCTION boundary__init_wrapper  
    472    !> @endcode  
    473628   !-------------------------------------------------------------------  
    474629   !> @brief This function initialise basically a boundary structure with 
     
    480635   !  
    481636   !> @author J.Paul  
    482    !> - Nov, 2013- Initial Version  
    483    !  
    484    !> @param[in]  cd_card : cardinal name 
    485    !> @param[in]  ld_use  : boundary use or not 
    486    !> @param[in]  td_seg  : segment structure 
     637   !> @date November, 2013 - Initial Version  
     638   !  
     639   !> @param[in]  cd_card cardinal name 
     640   !> @param[in]  ld_use  boundary use or not 
     641   !> @param[in]  td_seg  segment structure 
    487642   !> @return boundary structure 
    488643   !-------------------------------------------------------------------  
    489    !> @code  
    490644   FUNCTION boundary__init( cd_card, ld_use, td_seg )  
    491645      IMPLICIT NONE  
     
    520674 
    521675   END FUNCTION boundary__init 
    522    !> @endcode 
    523676   !-------------------------------------------------------------------  
    524677   !> @brief This subroutine add one segment structure to a boundary structure