Changeset 1138
- Timestamp:
- 05/18/17 17:40:03 (8 years ago)
- Location:
- XIOS/dev/branch_yushan_merged
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_yushan_merged/Doxyfile
r502 r1138 1 # Doxyfile 1. 7.41 # Doxyfile 1.8.10 2 2 3 3 # 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. 7 10 # The format is: 8 # 9 # For lists items can also be appended using:10 # 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 (\" \"). 12 15 13 16 #--------------------------------------------------------------------------- … … 15 18 #--------------------------------------------------------------------------- 16 19 17 # 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. 20 # This tag specifies the encoding used for all characters in the config file 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. 22 26 23 27 DOXYFILE_ENCODING = UTF-8 24 28 25 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 26 # by quotes) that should identify the project. 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. 27 34 28 35 PROJECT_NAME = XIOS 29 36 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 or32 # if some versioncontrol system is used.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. 33 40 34 41 PROJECT_NUMBER = 1.0 35 42 36 # Using the PROJECT_BRIEF tag one can provide an optional one line description 37 # for a project that appears at the top of each page and should give viewer 38 # aquick idea about the purpose of the project. Keep the description short.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. 39 46 40 47 PROJECT_BRIEF = "Xml I/O Server" 41 48 42 # With the PROJECT_LOGO tag one can specify a n logo or icon that is43 # in cluded in the documentation. The maximum height of the logo should not44 # exceed 55 pixels and the maximum width should not exceed 200 pixels.45 # Doxygen will copythe logo to the output directory.46 47 PROJECT_LOGO = 48 49 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 50 # base path where the generated documentation will be put.51 # If a relative path is entered, it will be relative to the location52 # where doxygen was started. Ifleft blank the current directory will be used.49 # With the PROJECT_LOGO tag one can specify a logo or an icon that is included 50 # in the documentation. The maximum height of the logo should not exceed 55 51 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy 52 # the logo to the output directory. 53 54 PROJECT_LOGO = 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. 53 60 54 61 OUTPUT_DIRECTORY = ./doc 55 62 56 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 57 # 4096 sub-directories (in 2 levels) under the output directory of each output 58 # format and will distribute the generated files over these directories. 59 # Enabling this option can be useful when feeding doxygen a huge amount of 60 # source files, where putting all generated files in the same directory would 61 # otherwise cause performance problems for the file system. 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. 62 70 63 71 CREATE_SUBDIRS = NO 64 72 65 # The OUTPUT_LANGUAGE tag is used to specify the language in which all 66 # documentation generated by doxygen is written. Doxygen will use this 67 # information to generate all constant output in the proper language. 68 # The default language is English, other supported languages are: 69 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 70 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 71 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 72 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 73 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 74 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. 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 79 ALLOW_UNICODE_NAMES = NO 80 81 # The OUTPUT_LANGUAGE tag is used to specify the language in which all 82 # documentation generated by doxygen is written. Doxygen will use this 83 # information to generate all constant output in the proper language. 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. 75 93 76 94 OUTPUT_LANGUAGE = French 77 95 78 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will79 # include brief member descriptions after the members that are listed in80 # the file and class documentation (similar to JavaDoc).81 # 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. 82 100 83 101 BRIEF_MEMBER_DESC = YES 84 102 85 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 86 # the brief description of a member or function before the detailed description. 87 # 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 88 107 # brief descriptions will be completely suppressed. 108 # The default value is: YES. 89 109 90 110 REPEAT_BRIEF = YES 91 111 92 # This tag implements a quasi-intelligent brief description abbreviator 93 # that is used to form the text in various listings. Each string 94 # in this list, if found as the leading text of the brief description, will be 95 # stripped from the text and the result after processing the whole list, is 96 # used as the annotated text. Otherwise, the brief description is used as-is. 97 # If left blank, the following values are used ("$name" is automatically 98 # replaced with the name of the entity): "The $name class" "The $name widget" 99 # "The $name file" "is" "provides" "specifies" "contains" 100 # "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. 101 120 102 121 ABBREVIATE_BRIEF = "The $name class" \ … … 112 131 the 113 132 114 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 115 # Doxygen will generate a detailed section even if there is only a brief133 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 134 # doxygen will generate a detailed section even if there is only a brief 116 135 # description. 136 # The default value is: NO. 117 137 118 138 ALWAYS_DETAILED_SEC = NO 119 139 120 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 121 # inherited members of a class in the documentation of that class as if those 122 # members were ordinary class members. Constructors, destructors and assignment 140 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 141 # inherited members of a class in the documentation of that class as if those 142 # members were ordinary class members. Constructors, destructors and assignment 123 143 # operators of the base classes will not be shown. 144 # The default value is: NO. 124 145 125 146 INLINE_INHERITED_MEMB = NO 126 147 127 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 128 # path before files name in the file list and in the header files. If set 129 # to NO the shortest path that makes the file name unique will be used. 148 # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path 149 # before files name in the file list and in the header files. If set to NO the 150 # shortest path that makes the file name unique will be used 151 # The default value is: YES. 130 152 131 153 FULL_PATH_NAMES = YES 132 154 133 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 134 # can be used to strip a user-defined part of the path. Stripping is 135 # only done if one of the specified strings matches the left-hand part of 136 # the path. The tag can be used to show relative paths in the file list. 137 # If left blank the directory from which doxygen is run is used as the 138 # path to strip. 139 140 STRIP_FROM_PATH = 141 142 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 143 # the path mentioned in the documentation of a class, which tells 144 # the reader which header file to include in order to use a class. 145 # If left blank only the name of the header file containing the class 146 # definition is used. Otherwise one should specify the include paths that 147 # are normally passed to the compiler using the -I flag. 148 149 STRIP_FROM_INC_PATH = 150 151 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 152 # (but less readable) file names. This can be useful if your file system 153 # doesn't support long names like on DOS, Mac, or CD-ROM. 155 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. 156 # Stripping is only done if one of the specified strings matches the left-hand 157 # part of the path. The tag can be used to show relative paths in the file list. 158 # If left blank the directory from which doxygen is run is used as the path to 159 # strip. 160 # 161 # Note that you can specify absolute paths here, but also relative paths, which 162 # will be relative from the directory where doxygen is started. 163 # This tag requires that the tag FULL_PATH_NAMES is set to YES. 164 165 STRIP_FROM_PATH = 166 167 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the 168 # path mentioned in the documentation of a class, which tells the reader which 169 # header file to include in order to use a class. If left blank only the name of 170 # the header file containing the class definition is used. Otherwise one should 171 # specify the list of include paths that are normally passed to the compiler 172 # using the -I flag. 173 174 STRIP_FROM_INC_PATH = 175 176 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but 177 # less readable) file names. This can be useful is your file systems doesn't 178 # support long names like on DOS, Mac, or CD-ROM. 179 # The default value is: NO. 154 180 155 181 SHORT_NAMES = NO 156 182 157 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 158 # will interpret the first line (until the first dot) of a JavaDoc-style 159 # comment as the brief description. If set to NO, the JavaDoc 160 # comments will behave just like regular Qt-style comments 161 # (thus requiring an explicit @brief command for a brief description.) 183 # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the 184 # first line (until the first dot) of a Javadoc-style comment as the brief 185 # description. If set to NO, the Javadoc-style will behave just like regular Qt- 186 # style comments (thus requiring an explicit @brief command for a brief 187 # description.) 188 # The default value is: NO. 162 189 163 190 JAVADOC_AUTOBRIEF = NO 164 191 165 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will166 # interpret the first line (until the first dot) of a Qt-style167 # comment as the brief description. If set to NO, the comments168 # will behave just like regular Qt-style comments (thus requiring169 # an explicit \brief command for a brief description.)192 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first 193 # line (until the first dot) of a Qt-style comment as the brief description. If 194 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus 195 # requiring an explicit \brief command for a brief description.) 196 # The default value is: NO. 170 197 171 198 QT_AUTOBRIEF = YES 172 199 173 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 174 # treat a multi-line C++ special comment block (i.e. a block of //! or /// 175 # comments) as a brief description. This used to be the default behaviour. 176 # The new default is to treat a multi-line C++ comment block as a detailed 177 # description. Set this tag to YES if you prefer the old behaviour instead. 200 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a 201 # multi-line C++ special comment block (i.e. a block of //! or /// comments) as 202 # a brief description. This used to be the default behavior. The new default is 203 # to treat a multi-line C++ comment block as a detailed description. Set this 204 # tag to YES if you prefer the old behavior instead. 205 # 206 # Note that setting this tag to YES also means that rational rose comments are 207 # not recognized any more. 208 # The default value is: NO. 178 209 179 210 MULTILINE_CPP_IS_BRIEF = NO 180 211 181 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented182 # member inherits the documentation from any documented member that it183 # re-implements.212 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the 213 # documentation from any documented member that it re-implements. 214 # The default value is: YES. 184 215 185 216 INHERIT_DOCS = YES 186 217 187 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 188 # a new page for each member. If set to NO, the documentation of a member will 189 # be part of the file/class/namespace that contains it. 218 # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new 219 # page for each member. If set to NO, the documentation of a member will be part 220 # of the file/class/namespace that contains it. 221 # The default value is: NO. 190 222 191 223 SEPARATE_MEMBER_PAGES = NO 192 224 193 # The TAB_SIZE tag can be used to set the number of spaces in a tab. 194 # Doxygen uses this value to replace tabs by spaces in code fragments. 225 # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen 226 # uses this value to replace tabs by spaces in code fragments. 227 # Minimum value: 1, maximum value: 16, default value: 4. 195 228 196 229 TAB_SIZE = 8 197 230 198 # This tag can be used to specify a number of aliases that acts 199 # as commands in the documentation. An alias has the form "name=value". 200 # For example adding "sideeffect=\par Side Effects:\n" will allow you to 201 # put the command \sideeffect (or @sideeffect) in the documentation, which 202 # will result in a user-defined paragraph with heading "Side Effects:". 203 # You can put \n's in the value part of an alias to insert newlines. 204 205 ALIASES = 206 207 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 208 # sources only. Doxygen will then generate output that is more tailored for C. 209 # For instance, some of the names that are used will be different. The list 210 # of all members will be omitted, etc. 231 # This tag can be used to specify a number of aliases that act as commands in 232 # the documentation. An alias has the form: 233 # name=value 234 # For example adding 235 # "sideeffect=@par Side Effects:\n" 236 # will allow you to put the command \sideeffect (or @sideeffect) in the 237 # documentation, which will result in a user-defined paragraph with heading 238 # "Side Effects:". You can put \n's in the value part of an alias to insert 239 # newlines. 240 241 ALIASES = 242 243 # This tag can be used to specify a number of word-keyword mappings (TCL only). 244 # A mapping has the form "name=value". For example adding "class=itcl::class" 245 # will allow you to use the command class in the itcl::class meaning. 246 247 TCL_SUBST = 248 249 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 250 # only. Doxygen will then generate output that is more tailored for C. For 251 # instance, some of the names that are used will be different. The list of all 252 # members will be omitted, etc. 253 # The default value is: NO. 211 254 212 255 OPTIMIZE_OUTPUT_FOR_C = NO 213 256 214 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 215 # sources only. Doxygen will then generate output that is more tailored for 216 # Java. For instance, namespaces will be presented as packages, qualified 217 # scopes will look different, etc. 257 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or 258 # Python sources only. Doxygen will then generate output that is more tailored 259 # for that language. For instance, namespaces will be presented as packages, 260 # qualified scopes will look different, etc. 261 # The default value is: NO. 218 262 219 263 OPTIMIZE_OUTPUT_JAVA = NO 220 264 221 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 222 # sources only. Doxygen will then generate output that is more tailored for223 # Fortran.265 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 266 # sources. Doxygen will then generate output that is tailored for Fortran. 267 # The default value is: NO. 224 268 225 269 OPTIMIZE_FOR_FORTRAN = NO 226 270 227 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 228 # sources. Doxygen will then generate output that is tailored for 229 # VHDL.271 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 272 # sources. Doxygen will then generate output that is tailored for VHDL. 273 # The default value is: NO. 230 274 231 275 OPTIMIZE_OUTPUT_VHDL = NO 232 276 233 # Doxygen selects the parser to use depending on the extension of the files it 234 # parses. With this tag you can assign which parser to use for a given extension. 235 # Doxygen has a built-in mapping, but you can override or extend it using this 236 # tag. The format is ext=language, where ext is a file extension, and language 237 # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 238 # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 239 # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 240 # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 241 # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. 242 243 EXTENSION_MAPPING = 244 245 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 246 # to include (a tag file for) the STL sources as input, then you should 247 # set this tag to YES in order to let doxygen match functions declarations and 248 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 249 # func(std::string) {}). This also makes the inheritance and collaboration 277 # Doxygen selects the parser to use depending on the extension of the files it 278 # parses. With this tag you can assign which parser to use for a given 279 # extension. Doxygen has a built-in mapping, but you can override or extend it 280 # using this tag. The format is ext=language, where ext is a file extension, and 281 # language is one of the parsers supported by doxygen: IDL, Java, Javascript, 282 # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: 283 # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: 284 # Fortran. In the later case the parser tries to guess whether the code is fixed 285 # or free formatted code, this is the default for Fortran type files), VHDL. For 286 # instance to make doxygen treat .inc files as Fortran files (default is PHP), 287 # and .f files as C (default is Fortran), use: inc=Fortran f=C. 288 # 289 # Note: For files without extension you can use no_extension as a placeholder. 290 # 291 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise 292 # the files are not read by doxygen. 293 294 EXTENSION_MAPPING = 295 296 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments 297 # according to the Markdown format, which allows for more readable 298 # documentation. See http://daringfireball.net/projects/markdown/ for details. 299 # The output of markdown processing is further processed by doxygen, so you can 300 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in 301 # case of backward compatibilities issues. 302 # The default value is: YES. 303 304 MARKDOWN_SUPPORT = YES 305 306 # When enabled doxygen tries to link words that correspond to documented 307 # classes, or namespaces to their corresponding documentation. Such a link can 308 # be prevented in individual cases by putting a % sign in front of the word or 309 # globally by setting AUTOLINK_SUPPORT to NO. 310 # The default value is: YES. 311 312 AUTOLINK_SUPPORT = YES 313 314 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 315 # to include (a tag file for) the STL sources as input, then you should set this 316 # tag to YES in order to let doxygen match functions declarations and 317 # definitions whose arguments contain STL classes (e.g. func(std::string); 318 # versus func(std::string) {}). This also make the inheritance and collaboration 250 319 # diagrams that involve STL classes more complete and accurate. 320 # The default value is: NO. 251 321 252 322 BUILTIN_STL_SUPPORT = YES 253 323 254 # If you use Microsoft's C++/CLI language, you should set this option to YES to 324 # If you use Microsoft's C++/CLI language, you should set this option to YES to 255 325 # enable parsing support. 326 # The default value is: NO. 256 327 257 328 CPP_CLI_SUPPORT = NO 258 329 259 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 260 # Doxygen will parse them like normal C++ but will assume all classes use public 261 # instead of private inheritance when no explicit protection keyword is present. 330 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: 331 # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen 332 # will parse them like normal C++ but will assume all classes use public instead 333 # of private inheritance when no explicit protection keyword is present. 334 # The default value is: NO. 262 335 263 336 SIP_SUPPORT = NO 264 337 265 # For Microsoft's IDL there are propget and propput attributes to indicate getter 266 # and setter methods for a property. Setting this option to YES (the default) 267 # will make doxygen replace the get and set methods by a property in the 268 # documentation. This will only work if the methods are indeed getting or 269 # setting a simple type. If this is not the case, or you want to show the 270 # methods anyway, you should set this option to NO. 338 # For Microsoft's IDL there are propget and propput attributes to indicate 339 # getter and setter methods for a property. Setting this option to YES will make 340 # doxygen to replace the get and set methods by a property in the documentation. 341 # This will only work if the methods are indeed getting or setting a simple 342 # type. If this is not the case, or you want to show the methods anyway, you 343 # should set this option to NO. 344 # The default value is: YES. 271 345 272 346 IDL_PROPERTY_SUPPORT = YES 273 347 274 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 275 # tag is set to YES , then doxygen will reuse the documentation of the first276 # member in the group (if any) for the other members of the group. By default 348 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 349 # tag is set to YES then doxygen will reuse the documentation of the first 350 # member in the group (if any) for the other members of the group. By default 277 351 # all members of a group must be documented explicitly. 352 # The default value is: NO. 278 353 279 354 DISTRIBUTE_GROUP_DOC = NO 280 355 281 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of 282 # the same type (for instance a group of public functions) to be put as a 283 # subgroup of that type (e.g. under the Public Functions section). Set it to 284 # NO to prevent subgrouping. Alternatively, this can be done per class using 285 # the \nosubgrouping command. 356 # If one adds a struct or class to a group and this option is enabled, then also 357 # any nested class or struct is added to the same group. By default this option 358 # is disabled and one has to add nested compounds explicitly via \ingroup. 359 # The default value is: NO. 360 361 GROUP_NESTED_COMPOUNDS = NO 362 363 # Set the SUBGROUPING tag to YES to allow class member groups of the same type 364 # (for instance a group of public functions) to be put as a subgroup of that 365 # type (e.g. under the Public Functions section). Set it to NO to prevent 366 # subgrouping. Alternatively, this can be done per class using the 367 # \nosubgrouping command. 368 # The default value is: YES. 286 369 287 370 SUBGROUPING = YES 288 371 289 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 290 # unions are shown inside the group in which they are included (e.g. using 291 # @ingroup) instead of on a separate page (for HTML and Man pages) or 292 # section (for LaTeX and RTF). 372 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions 373 # are shown inside the group in which they are included (e.g. using \ingroup) 374 # instead of on a separate page (for HTML and Man pages) or section (for LaTeX 375 # and RTF). 376 # 377 # Note that this feature does not work in combination with 378 # SEPARATE_MEMBER_PAGES. 379 # The default value is: NO. 293 380 294 381 INLINE_GROUPED_CLASSES = NO 295 382 296 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 297 # is documented as struct, union, or enum with the name of the typedef. So 298 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct 299 # with name TypeT. When disabled the typedef will appear as a member of a file, 300 # namespace, or class. And the struct will be named TypeS. This can typically 301 # be useful for C code in case the coding convention dictates that all compound 383 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions 384 # with only public data fields or simple typedef fields will be shown inline in 385 # the documentation of the scope in which they are defined (i.e. file, 386 # namespace, or group documentation), provided this scope is documented. If set 387 # to NO, structs, classes, and unions are shown on a separate page (for HTML and 388 # Man pages) or section (for LaTeX and RTF). 389 # The default value is: NO. 390 391 INLINE_SIMPLE_STRUCTS = NO 392 393 # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or 394 # enum is documented as struct, union, or enum with the name of the typedef. So 395 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct 396 # with name TypeT. When disabled the typedef will appear as a member of a file, 397 # namespace, or class. And the struct will be named TypeS. This can typically be 398 # useful for C code in case the coding convention dictates that all compound 302 399 # types are typedef'ed and only the typedef is referenced, never the tag name. 400 # The default value is: NO. 303 401 304 402 TYPEDEF_HIDES_STRUCT = NO 305 403 306 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 307 # determine which symbols to keep in memory and which to flush to disk. 308 # When the cache is full, less often used symbols will be written to disk. 309 # For small to medium size projects (<1000 input files) the default value is 310 # probably good enough. For larger projects a too small cache size can cause 311 # doxygen to be busy swapping symbols to and from disk most of the time 312 # causing a significant performance penalty. 313 # If the system has enough physical memory increasing the cache will improve the 314 # performance by keeping more symbols in memory. Note that the value works on 315 # a logarithmic scale so increasing the size by one will roughly double the 316 # memory usage. The cache size is given by this formula: 317 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 318 # corresponding to a cache size of 2^16 = 65536 symbols 319 320 SYMBOL_CACHE_SIZE = 0 404 # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This 405 # cache is used to resolve symbols given their name and scope. Since this can be 406 # an expensive process and often the same symbol appears multiple times in the 407 # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small 408 # doxygen will become slower. If the cache is too large, memory is wasted. The 409 # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range 410 # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 411 # symbols. At the end of a run doxygen will report the cache usage and suggest 412 # the optimal cache size from a speed point of view. 413 # Minimum value: 0, maximum value: 9, default value: 0. 414 415 LOOKUP_CACHE_SIZE = 0 321 416 322 417 #--------------------------------------------------------------------------- … … 324 419 #--------------------------------------------------------------------------- 325 420 326 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 327 # documentation are documented, even if no documentation was available. 328 # Private class members and static file members will be hidden unless 329 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 421 # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in 422 # documentation are documented, even if no documentation was available. Private 423 # class members and static file members will be hidden unless the 424 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. 425 # Note: This will also disable the warnings about undocumented members that are 426 # normally produced when WARNINGS is set to YES. 427 # The default value is: NO. 330 428 331 429 EXTRACT_ALL = YES 332 430 333 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 334 # will be included in the documentation. 431 # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will 432 # be included in the documentation. 433 # The default value is: NO. 335 434 336 435 EXTRACT_PRIVATE = YES 337 436 338 # If the EXTRACT_STATIC tag is set to YES all static members of a file 339 # will be included in the documentation. 437 # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal 438 # scope will be included in the documentation. 439 # The default value is: NO. 440 441 EXTRACT_PACKAGE = NO 442 443 # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be 444 # included in the documentation. 445 # The default value is: NO. 340 446 341 447 EXTRACT_STATIC = YES 342 448 343 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 344 # defined locally in source files will be included in the documentation. 345 # If set to NO only classes defined in header files are included. 449 # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined 450 # locally in source files will be included in the documentation. If set to NO, 451 # only classes defined in header files are included. Does not have any effect 452 # for Java sources. 453 # The default value is: YES. 346 454 347 455 EXTRACT_LOCAL_CLASSES = YES 348 456 349 # This flag is only useful for Objective-C code. When set to YES local 350 # methods, which are defined in the implementation section but not in 351 # the interface are included in the documentation. 352 # If set to NO (the default) only methods in the interface are included. 457 # This flag is only useful for Objective-C code. If set to YES, local methods, 458 # which are defined in the implementation section but not in the interface are 459 # included in the documentation. If set to NO, only methods in the interface are 460 # included. 461 # The default value is: NO. 353 462 354 463 EXTRACT_LOCAL_METHODS = YES 355 464 356 # If this flag is set to YES, the members of anonymous namespaces will be 357 # extracted and appear in the documentation as a namespace called 358 # 'anonymous_namespace{file}', where file will be replaced with the base 359 # name of the file that contains the anonymous namespace. By default 360 # anonymous namespaces are hidden. 465 # If this flag is set to YES, the members of anonymous namespaces will be 466 # extracted and appear in the documentation as a namespace called 467 # 'anonymous_namespace{file}', where file will be replaced with the base name of 468 # the file that contains the anonymous namespace. By default anonymous namespace 469 # are hidden. 470 # The default value is: NO. 361 471 362 472 EXTRACT_ANON_NSPACES = NO 363 473 364 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all365 # undocumented members of documented classes, files or namespaces.366 # If set to NO (the default) these members will be included in the367 # various overviews, but no documentation section is generated.368 # Th is option has no effect if EXTRACT_ALL is enabled.474 # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all 475 # undocumented members inside documented classes or files. If set to NO these 476 # members will be included in the various overviews, but no documentation 477 # section is generated. This option has no effect if EXTRACT_ALL is enabled. 478 # The default value is: NO. 369 479 370 480 HIDE_UNDOC_MEMBERS = NO 371 481 372 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 373 # undocumented classes that are normally visible in the class hierarchy. 374 # If set to NO (the default) these classes will be included in the various 375 # overviews. This option has no effect if EXTRACT_ALL is enabled. 482 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all 483 # undocumented classes that are normally visible in the class hierarchy. If set 484 # to NO, these classes will be included in the various overviews. This option 485 # has no effect if EXTRACT_ALL is enabled. 486 # The default value is: NO. 376 487 377 488 HIDE_UNDOC_CLASSES = NO 378 489 379 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all380 # friend (class|struct|union) declarations.381 # If set to NO (the default) these declarations will be included in the382 # documentation.490 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend 491 # (class|struct|union) declarations. If set to NO, these declarations will be 492 # included in the documentation. 493 # The default value is: NO. 383 494 384 495 HIDE_FRIEND_COMPOUNDS = NO 385 496 386 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any387 # documentation blocks found inside the body of a function. 388 # If set to NO (the default) these blocks will be appended to the389 # function's detailed documentation block.497 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any 498 # documentation blocks found inside the body of a function. If set to NO, these 499 # blocks will be appended to the function's detailed documentation block. 500 # The default value is: NO. 390 501 391 502 HIDE_IN_BODY_DOCS = NO 392 503 393 # The INTERNAL_DOCS tag determines if documentation 394 # that is typed after a \internal command is included. If the tag is set395 # to NO (the default) then the documentation will be excluded.396 # Set it to YES to include the internal documentation.504 # The INTERNAL_DOCS tag determines if documentation that is typed after a 505 # \internal command is included. If the tag is set to NO then the documentation 506 # will be excluded. Set it to YES to include the internal documentation. 507 # The default value is: NO. 397 508 398 509 INTERNAL_DOCS = NO 399 510 400 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate401 # file names in lower-case letters. If set to YES upper-case letters are also402 # allowed. This is useful if you have classes or files whose names only differ 403 # in case and if your file system supports case sensitive file names. Windows 511 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file 512 # names in lower-case letters. If set to YES, upper-case letters are also 513 # allowed. This is useful if you have classes or files whose names only differ 514 # in case and if your file system supports case sensitive file names. Windows 404 515 # and Mac users are advised to set this option to NO. 516 # The default value is: system dependent. 405 517 406 518 CASE_SENSE_NAMES = NO 407 519 408 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 409 # will show members with their full class and namespace scopes in the 410 # documentation. If set to YES the scope will be hidden. 520 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with 521 # their full class and namespace scopes in the documentation. If set to YES, the 522 # scope will be hidden. 523 # The default value is: NO. 411 524 412 525 HIDE_SCOPE_NAMES = NO 413 526 414 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 415 # will put a list of the files that are included by a file in the documentation 416 # of that file. 527 # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will 528 # append additional text to a page's title, such as Class Reference. If set to 529 # YES the compound reference will be hidden. 530 # The default value is: NO. 531 532 HIDE_COMPOUND_REFERENCE= NO 533 534 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of 535 # the files that are included by a file in the documentation of that file. 536 # The default value is: YES. 417 537 418 538 SHOW_INCLUDE_FILES = YES 419 539 420 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 421 # will list include files with double quotes in the documentation 422 # rather than with sharp brackets. 540 # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each 541 # grouped member an include statement to the documentation, telling the reader 542 # which file to include in order to use the member. 543 # The default value is: NO. 544 545 SHOW_GROUPED_MEMB_INC = NO 546 547 # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include 548 # files with double quotes in the documentation rather than with sharp brackets. 549 # The default value is: NO. 423 550 424 551 FORCE_LOCAL_INCLUDES = NO 425 552 426 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 427 # is inserted in the documentation for inline members. 553 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the 554 # documentation for inline members. 555 # The default value is: YES. 428 556 429 557 INLINE_INFO = YES 430 558 431 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen432 # will sort the (detailed) documentation of file and class members433 # alphabetically by member name. If set to NO the members will appear in434 # declaration order.559 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the 560 # (detailed) documentation of file and class members alphabetically by member 561 # name. If set to NO, the members will appear in declaration order. 562 # The default value is: YES. 435 563 436 564 SORT_MEMBER_DOCS = YES 437 565 438 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 439 # brief documentation of file, namespace and class members alphabetically 440 # by member name. If set to NO (the default) the members will appear in 441 # declaration order. 566 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief 567 # descriptions of file, namespace and class members alphabetically by member 568 # name. If set to NO, the members will appear in declaration order. Note that 569 # this will also influence the order of the classes in the class list. 570 # The default value is: NO. 442 571 443 572 SORT_BRIEF_DOCS = NO 444 573 445 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 446 # will sort the (brief and detailed) documentation of class members so that 447 # constructors and destructors are listed first. If set to NO (the default) 448 # the constructors will appear in the respective orders defined by 449 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 450 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 451 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. 574 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the 575 # (brief and detailed) documentation of class members so that constructors and 576 # destructors are listed first. If set to NO the constructors will appear in the 577 # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. 578 # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief 579 # member documentation. 580 # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting 581 # detailed member documentation. 582 # The default value is: NO. 452 583 453 584 SORT_MEMBERS_CTORS_1ST = NO 454 585 455 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 456 # hierarchy of group names into alphabetical order. If set to NO (the default) 457 # the group names will appear in their defined order. 586 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy 587 # of group names into alphabetical order. If set to NO the group names will 588 # appear in their defined order. 589 # The default value is: NO. 458 590 459 591 SORT_GROUP_NAMES = NO 460 592 461 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 462 # sorted by fully-qualified names, including namespaces. If set to463 # NO (the default), the class list will be sorted only by class name,464 # not including the namespace part.465 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.466 # Note: This option applies only to the class list, not to the467 # alphabetical list.593 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by 594 # fully-qualified names, including namespaces. If set to NO, the class list will 595 # be sorted only by class name, not including the namespace part. 596 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 597 # Note: This option applies only to the class list, not to the alphabetical 598 # list. 599 # The default value is: NO. 468 600 469 601 SORT_BY_SCOPE_NAME = NO 470 602 471 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 472 # do proper type resolution of all parameters of a function it will reject a 473 # match between the prototype and the implementation of a member function even 474 # if there is only one candidate or it is obvious which candidate to choose 475 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 476 # will still accept a match between prototype and implementation in such cases. 603 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper 604 # type resolution of all parameters of a function it will reject a match between 605 # the prototype and the implementation of a member function even if there is 606 # only one candidate or it is obvious which candidate to choose by doing a 607 # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still 608 # accept a match between prototype and implementation in such cases. 609 # The default value is: NO. 477 610 478 611 STRICT_PROTO_MATCHING = NO 479 612 480 # The GENERATE_TODOLIST tag can be used to enable (YES) or 481 # disable (NO) the todo list. This list is created by putting \todo482 # commands in the documentation.613 # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo 614 # list. This list is created by putting \todo commands in the documentation. 615 # The default value is: YES. 483 616 484 617 GENERATE_TODOLIST = YES 485 618 486 # The GENERATE_TESTLIST tag can be used to enable (YES) or 487 # disable (NO) the test list. This list is created by putting \test488 # commands in the documentation.619 # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test 620 # list. This list is created by putting \test commands in the documentation. 621 # The default value is: YES. 489 622 490 623 GENERATE_TESTLIST = YES 491 624 492 # The GENERATE_BUGLIST tag can be used to enable (YES) or 493 # disable (NO) the bug list. This list is created by putting \bug494 # commands in the documentation.625 # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug 626 # list. This list is created by putting \bug commands in the documentation. 627 # The default value is: YES. 495 628 496 629 GENERATE_BUGLIST = YES 497 630 498 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 499 # disable (NO) the deprecated list. This list is created by putting 500 # \deprecated commands in the documentation. 631 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) 632 # the deprecated list. This list is created by putting \deprecated commands in 633 # the documentation. 634 # The default value is: YES. 501 635 502 636 GENERATE_DEPRECATEDLIST= YES 503 637 504 # The ENABLED_SECTIONS tag can be used to enable conditional 505 # documentation sections, marked by \if sectionname ... \endif. 506 507 ENABLED_SECTIONS = 508 509 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 510 # the initial value of a variable or macro consists of for it to appear in 511 # the documentation. If the initializer consists of more lines than specified 512 # here it will be hidden. Use a value of 0 to hide initializers completely. 513 # The appearance of the initializer of individual variables and macros in the 514 # documentation can be controlled using \showinitializer or \hideinitializer 515 # command in the documentation regardless of this setting. 638 # The ENABLED_SECTIONS tag can be used to enable conditional documentation 639 # sections, marked by \if <section_label> ... \endif and \cond <section_label> 640 # ... \endcond blocks. 641 642 ENABLED_SECTIONS = 643 644 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the 645 # initial value of a variable or macro / define can have for it to appear in the 646 # documentation. If the initializer consists of more lines than specified here 647 # it will be hidden. Use a value of 0 to hide initializers completely. The 648 # appearance of the value of individual variables and macros / defines can be 649 # controlled using \showinitializer or \hideinitializer command in the 650 # documentation regardless of this setting. 651 # Minimum value: 0, maximum value: 10000, default value: 30. 516 652 517 653 MAX_INITIALIZER_LINES = 30 518 654 519 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 520 # at the bottom of the documentation of classes and structs. If set to YES the655 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at 656 # the bottom of the documentation of classes and structs. If set to YES, the 521 657 # list will mention the files that were used to generate the documentation. 658 # The default value is: YES. 522 659 523 660 SHOW_USED_FILES = YES 524 661 525 # If the sources in your project are distributed over multiple directories 526 # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 527 # in the documentation. The default is NO. 528 529 SHOW_DIRECTORIES = YES 530 531 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. 532 # This will remove the Files entry from the Quick Index and from the 533 # Folder Tree View (if specified). The default is YES. 662 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This 663 # will remove the Files entry from the Quick Index and from the Folder Tree View 664 # (if specified). 665 # The default value is: YES. 534 666 535 667 SHOW_FILES = YES 536 668 537 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the 538 # Namespaces page. This will remove the Namespaces entry from the Quick Index 539 # and from the Folder Tree View (if specified). The default is YES. 669 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces 670 # page. This will remove the Namespaces entry from the Quick Index and from the 671 # Folder Tree View (if specified). 672 # The default value is: YES. 540 673 541 674 SHOW_NAMESPACES = YES 542 675 543 # The FILE_VERSION_FILTER tag can be used to specify a program or script that 544 # doxygen should invoke to get the current version for each file (typically from 545 # the version control system). Doxygen will invoke the program by executing (via 546 # popen()) the command <command> <input-file>, where <command> is the value of 547 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 548 # provided by doxygen. Whatever the program writes to standard output 549 # is used as the file version. See the manual for examples. 550 551 FILE_VERSION_FILTER = 552 553 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 554 # by doxygen. The layout file controls the global structure of the generated 555 # output files in an output format independent way. The create the layout file 556 # that represents doxygen's defaults, run doxygen with the -l option. 557 # You can optionally specify a file name after the option, if omitted 558 # DoxygenLayout.xml will be used as the name of the layout file. 559 560 LAYOUT_FILE = 561 562 #--------------------------------------------------------------------------- 563 # configuration options related to warning and progress messages 564 #--------------------------------------------------------------------------- 565 566 # The QUIET tag can be used to turn on/off the messages that are generated 567 # by doxygen. Possible values are YES and NO. If left blank NO is used. 676 # The FILE_VERSION_FILTER tag can be used to specify a program or script that 677 # doxygen should invoke to get the current version for each file (typically from 678 # the version control system). Doxygen will invoke the program by executing (via 679 # popen()) the command command input-file, where command is the value of the 680 # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided 681 # by doxygen. Whatever the program writes to standard output is used as the file 682 # version. For an example see the documentation. 683 684 FILE_VERSION_FILTER = 685 686 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 687 # by doxygen. The layout file controls the global structure of the generated 688 # output files in an output format independent way. To create the layout file 689 # that represents doxygen's defaults, run doxygen with the -l option. You can 690 # optionally specify a file name after the option, if omitted DoxygenLayout.xml 691 # will be used as the name of the layout file. 692 # 693 # Note that if you run doxygen from a directory containing a file called 694 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE 695 # tag is left empty. 696 697 LAYOUT_FILE = 698 699 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing 700 # the reference definitions. This must be a list of .bib files. The .bib 701 # extension is automatically appended if omitted. This requires the bibtex tool 702 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. 703 # For LaTeX the style of the bibliography can be controlled using 704 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the 705 # search path. See also \cite for info how to create references. 706 707 CITE_BIB_FILES = 708 709 #--------------------------------------------------------------------------- 710 # Configuration options related to warning and progress messages 711 #--------------------------------------------------------------------------- 712 713 # The QUIET tag can be used to turn on/off the messages that are generated to 714 # standard output by doxygen. If QUIET is set to YES this implies that the 715 # messages are off. 716 # The default value is: NO. 568 717 569 718 QUIET = NO 570 719 571 # The WARNINGS tag can be used to turn on/off the warning messages that are 572 # generated by doxygen. Possible values are YES and NO. If left blank 573 # NO is used. 720 # The WARNINGS tag can be used to turn on/off the warning messages that are 721 # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES 722 # this implies that the warnings are on. 723 # 724 # Tip: Turn warnings on while writing the documentation. 725 # The default value is: YES. 574 726 575 727 WARNINGS = YES 576 728 577 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 578 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 579 # automatically be disabled. 729 # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate 730 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag 731 # will automatically be disabled. 732 # The default value is: YES. 580 733 581 734 WARN_IF_UNDOCUMENTED = YES 582 735 583 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 584 # potential errors in the documentation, such as not documenting some 585 # parameters in a documented function, or documenting parameters that 586 # don't exist or using markup commands wrongly. 736 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for 737 # potential errors in the documentation, such as not documenting some parameters 738 # in a documented function, or documenting parameters that don't exist or using 739 # markup commands wrongly. 740 # The default value is: YES. 587 741 588 742 WARN_IF_DOC_ERROR = YES 589 743 590 # Th e WARN_NO_PARAMDOC option can be enabled to get warnings for591 # functions that are documented, but have no documentation for their parameters592 # or return value. If set to NO (the default) doxygen will only warn about593 # wrong or incomplete parameter documentation, but not about the absence of594 # documentation.744 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that 745 # are documented, but have no documentation for their parameters or return 746 # value. If set to NO, doxygen will only warn about wrong or incomplete 747 # parameter documentation, but not about the absence of documentation. 748 # The default value is: NO. 595 749 596 750 WARN_NO_PARAMDOC = YES 597 751 598 # The WARN_FORMAT tag determines the format of the warning messages that 599 # doxygen can produce. The string should contain the $file, $line, and $text 600 # tags, which will be replaced by the file and line number from which the 601 # warning originated and the warning text. Optionally the format may contain 602 # $version, which will be replaced by the version of the file (if it could 603 # be obtained via FILE_VERSION_FILTER) 752 # The WARN_FORMAT tag determines the format of the warning messages that doxygen 753 # can produce. The string should contain the $file, $line, and $text tags, which 754 # will be replaced by the file and line number from which the warning originated 755 # and the warning text. Optionally the format may contain $version, which will 756 # be replaced by the version of the file (if it could be obtained via 757 # FILE_VERSION_FILTER) 758 # The default value is: $file:$line: $text. 604 759 605 760 WARN_FORMAT = "$file:$line: $text" 606 761 607 # The WARN_LOGFILE tag can be used to specify a file to which warning 608 # and error messages should be written. If left blank the output is written 609 # to stderr. 610 611 WARN_LOGFILE = 612 613 #--------------------------------------------------------------------------- 614 # configuration options related to the input files 615 #--------------------------------------------------------------------------- 616 617 # The INPUT tag can be used to specify the files and/or directories that contain 618 # documented source files. You may enter file names like "myfile.cpp" or 619 # directories like "/usr/src/myproject". Separate the files or directories 620 # with spaces. 762 # The WARN_LOGFILE tag can be used to specify a file to which warning and error 763 # messages should be written. If left blank the output is written to standard 764 # error (stderr). 765 766 WARN_LOGFILE = 767 768 #--------------------------------------------------------------------------- 769 # Configuration options related to the input files 770 #--------------------------------------------------------------------------- 771 772 # The INPUT tag is used to specify the files and/or directories that contain 773 # documented source files. You may enter file names like myfile.cpp or 774 # directories like /usr/src/myproject. Separate the files or directories with 775 # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING 776 # Note: If this tag is empty the current directory is searched. 621 777 622 778 INPUT = src 623 779 624 # This tag can be used to specify the character encoding of the source files 625 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 626 # also the default input encoding. Doxygen uses libiconv (or the iconv built 627 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 628 # the list of possible encodings. 780 # This tag can be used to specify the character encoding of the source files 781 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses 782 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv 783 # documentation (see: http://www.gnu.org/software/libiconv) for the list of 784 # possible encodings. 785 # The default value is: UTF-8. 629 786 630 787 INPUT_ENCODING = UTF-8 631 788 632 # If the value of the INPUT tag contains directories, you can use the 633 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 634 # and *.h) to filter out the source-files in the directories. If left 635 # blank the following patterns are tested: 636 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 637 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 638 # *.f90 *.f *.for *.vhd *.vhdl 789 # If the value of the INPUT tag contains directories, you can use the 790 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and 791 # *.h) to filter out the source-files in the directories. 792 # 793 # Note that for custom extensions or not directly supported extensions you also 794 # need to set EXTENSION_MAPPING for the extension otherwise the files are not 795 # read by doxygen. 796 # 797 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, 798 # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, 799 # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, 800 # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, 801 # *.vhdl, *.ucf, *.qsf, *.as and *.js. 639 802 640 803 FILE_PATTERNS = *.cpp \ … … 642 805 *.conf 643 806 644 # The RECURSIVE tag can be used to turn specify whether or not subdirectories645 # should be searched for input files as well. Possible values are YES and NO.646 # If left blank NO is used.807 # The RECURSIVE tag can be used to specify whether or not subdirectories should 808 # be searched for input files as well. 809 # The default value is: NO. 647 810 648 811 RECURSIVE = YES 649 812 650 # The EXCLUDE tag can be used to specify files and/or directories that should 651 # excluded from the INPUT source files. This way you can easily exclude a 813 # The EXCLUDE tag can be used to specify files and/or directories that should be 814 # excluded from the INPUT source files. This way you can easily exclude a 652 815 # subdirectory from a directory tree whose root is specified with the INPUT tag. 653 654 EXCLUDE = 655 656 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or 657 # directories that are symbolic links (a Unix file system feature) are excluded 816 # 817 # Note that relative paths are relative to the directory from which doxygen is 818 # run. 819 820 EXCLUDE = 821 822 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 823 # directories that are symbolic links (a Unix file system feature) are excluded 658 824 # from the input. 825 # The default value is: NO. 659 826 660 827 EXCLUDE_SYMLINKS = NO 661 828 662 # If the value of the INPUT tag contains directories, you can use the 663 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 664 # certain files from those directories. Note that the wildcards are matched 665 # against the file with absolute path, so to exclude all test directories 666 # for example use the pattern */test/* 667 668 EXCLUDE_PATTERNS = 669 670 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 671 # (namespaces, classes, functions, etc.) that should be excluded from the 672 # output. The symbol name can be a fully qualified name, a word, or if the 673 # wildcard * is used, a substring. Examples: ANamespace, AClass, 829 # If the value of the INPUT tag contains directories, you can use the 830 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 831 # certain files from those directories. 832 # 833 # Note that the wildcards are matched against the file with absolute path, so to 834 # exclude all test directories for example use the pattern */test/* 835 836 EXCLUDE_PATTERNS = 837 838 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 839 # (namespaces, classes, functions, etc.) that should be excluded from the 840 # output. The symbol name can be a fully qualified name, a word, or if the 841 # wildcard * is used, a substring. Examples: ANamespace, AClass, 674 842 # AClass::ANamespace, ANamespace::*Test 675 676 EXCLUDE_SYMBOLS = 677 678 # The EXAMPLE_PATH tag can be used to specify one or more files or 679 # directories that contain example code fragments that are included (see 680 # the \include command). 681 682 EXAMPLE_PATH = 683 684 # If the value of the EXAMPLE_PATH tag contains directories, you can use the 685 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 686 # and *.h) to filter out the source-files in the directories. If left 687 # blank all files are included. 843 # 844 # Note that the wildcards are matched against the file with absolute path, so to 845 # exclude all test directories use the pattern */test/* 846 847 EXCLUDE_SYMBOLS = 848 849 # The EXAMPLE_PATH tag can be used to specify one or more files or directories 850 # that contain example code fragments that are included (see the \include 851 # command). 852 853 EXAMPLE_PATH = 854 855 # If the value of the EXAMPLE_PATH tag contains directories, you can use the 856 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and 857 # *.h) to filter out the source-files in the directories. If left blank all 858 # files are included. 688 859 689 860 EXAMPLE_PATTERNS = * 690 861 691 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 692 # searched for input files to be used with the \include or \dontinclude 693 # commands irrespective of the value of the RECURSIVE tag.694 # Possible values are YES and NO. If left blank NO is used.862 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 863 # searched for input files to be used with the \include or \dontinclude commands 864 # irrespective of the value of the RECURSIVE tag. 865 # The default value is: NO. 695 866 696 867 EXAMPLE_RECURSIVE = NO 697 868 698 # The IMAGE_PATH tag can be used to specify one or more files or 699 # directories that contain image that are included in the documentation (see 700 # the \image command). 701 702 IMAGE_PATH = 703 704 # The INPUT_FILTER tag can be used to specify a program that doxygen should 705 # invoke to filter for each input file. Doxygen will invoke the filter program 706 # by executing (via popen()) the command <filter> <input-file>, where <filter> 707 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an 708 # input file. Doxygen will then use the output that the filter program writes 709 # to standard output. If FILTER_PATTERNS is specified, this tag will be 710 # ignored. 711 712 INPUT_FILTER = 713 714 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 715 # basis. Doxygen will compare the file name with each pattern and apply the 716 # filter if there is a match. The filters are a list of the form: 717 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 718 # info on how filters are used. If FILTER_PATTERNS is empty or if 719 # non of the patterns match the file name, INPUT_FILTER is applied. 720 721 FILTER_PATTERNS = 722 723 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 724 # INPUT_FILTER) will be used to filter the input files when producing source 725 # files to browse (i.e. when SOURCE_BROWSER is set to YES). 869 # The IMAGE_PATH tag can be used to specify one or more files or directories 870 # that contain images that are to be included in the documentation (see the 871 # \image command). 872 873 IMAGE_PATH = 874 875 # The INPUT_FILTER tag can be used to specify a program that doxygen should 876 # invoke to filter for each input file. Doxygen will invoke the filter program 877 # by executing (via popen()) the command: 878 # 879 # <filter> <input-file> 880 # 881 # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the 882 # name of an input file. Doxygen will then use the output that the filter 883 # program writes to standard output. If FILTER_PATTERNS is specified, this tag 884 # will be ignored. 885 # 886 # Note that the filter must not add or remove lines; it is applied before the 887 # code is scanned, but not when the output code is generated. If lines are added 888 # or removed, the anchors will not be placed correctly. 889 890 INPUT_FILTER = 891 892 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 893 # basis. Doxygen will compare the file name with each pattern and apply the 894 # filter if there is a match. The filters are a list of the form: pattern=filter 895 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how 896 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the 897 # patterns match the file name, INPUT_FILTER is applied. 898 899 FILTER_PATTERNS = 900 901 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 902 # INPUT_FILTER) will also be used to filter the input files that are used for 903 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). 904 # The default value is: NO. 726 905 727 906 FILTER_SOURCE_FILES = NO 728 907 729 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 730 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) 731 # and it is also possible to disable source filtering for a specific pattern 732 # using *.ext= (so without naming a filter). This option only has effect when 733 # FILTER_SOURCE_FILES is enabled. 734 735 FILTER_SOURCE_PATTERNS = 736 737 #--------------------------------------------------------------------------- 738 # configuration options related to source browsing 739 #--------------------------------------------------------------------------- 740 741 # If the SOURCE_BROWSER tag is set to YES then a list of source files will 742 # be generated. Documented entities will be cross-referenced with these sources. 743 # Note: To get rid of all source code in the generated output, make sure also 744 # VERBATIM_HEADERS is set to NO. 908 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 909 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and 910 # it is also possible to disable source filtering for a specific pattern using 911 # *.ext= (so without naming a filter). 912 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. 913 914 FILTER_SOURCE_PATTERNS = 915 916 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that 917 # is part of the input, its contents will be placed on the main page 918 # (index.html). This can be useful if you have a project on for instance GitHub 919 # and want to reuse the introduction page also for the doxygen output. 920 921 USE_MDFILE_AS_MAINPAGE = 922 923 #--------------------------------------------------------------------------- 924 # Configuration options related to source browsing 925 #--------------------------------------------------------------------------- 926 927 # If the SOURCE_BROWSER tag is set to YES then a list of source files will be 928 # generated. Documented entities will be cross-referenced with these sources. 929 # 930 # Note: To get rid of all source code in the generated output, make sure that 931 # also VERBATIM_HEADERS is set to NO. 932 # The default value is: NO. 745 933 746 934 SOURCE_BROWSER = YES 747 935 748 # Setting the INLINE_SOURCES tag to YES will include the body 749 # of functions and classes directly in the documentation. 936 # Setting the INLINE_SOURCES tag to YES will include the body of functions, 937 # classes and enums directly into the documentation. 938 # The default value is: NO. 750 939 751 940 INLINE_SOURCES = NO 752 941 753 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 754 # doxygen to hide any special comment blocks from generated source code 755 # fragments. Normal C and C++ comments will always remain visible. 942 # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any 943 # special comment blocks from generated source code fragments. Normal C, C++ and 944 # Fortran comments will always remain visible. 945 # The default value is: YES. 756 946 757 947 STRIP_CODE_COMMENTS = YES 758 948 759 # If the REFERENCED_BY_RELATION tag is set to YES 760 # then for each documented function all documented761 # functions referencing it will be listed.949 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented 950 # function all documented functions referencing it will be listed. 951 # The default value is: NO. 762 952 763 953 REFERENCED_BY_RELATION = YES 764 954 765 # If the REFERENCES_RELATION tag is set to YES 766 # then for each documented function all documented entities767 # called/used by that function will be listed.955 # If the REFERENCES_RELATION tag is set to YES then for each documented function 956 # all documented entities called/used by that function will be listed. 957 # The default value is: NO. 768 958 769 959 REFERENCES_RELATION = YES 770 960 771 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 772 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 773 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 774 # link to the source code. Otherwise they will link to the documentation. 961 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set 962 # to YES then the hyperlinks from functions in REFERENCES_RELATION and 963 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will 964 # link to the documentation. 965 # The default value is: YES. 775 966 776 967 REFERENCES_LINK_SOURCE = YES 777 968 778 # If the USE_HTAGS tag is set to YES then the references to source code 779 # will point to the HTML generated by the htags(1) tool instead of doxygen 780 # built-in source browser. The htags tool is part of GNU's global source 781 # tagging system (see http://www.gnu.org/software/global/global.html). You 782 # will need version 4.8.6 or higher. 969 # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the 970 # source code will show a tooltip with additional information such as prototype, 971 # brief description and links to the definition and documentation. Since this 972 # will make the HTML file larger and loading of large files a bit slower, you 973 # can opt to disable this feature. 974 # The default value is: YES. 975 # This tag requires that the tag SOURCE_BROWSER is set to YES. 976 977 SOURCE_TOOLTIPS = YES 978 979 # If the USE_HTAGS tag is set to YES then the references to source code will 980 # point to the HTML generated by the htags(1) tool instead of doxygen built-in 981 # source browser. The htags tool is part of GNU's global source tagging system 982 # (see http://www.gnu.org/software/global/global.html). You will need version 983 # 4.8.6 or higher. 984 # 985 # To use it do the following: 986 # - Install the latest version of global 987 # - Enable SOURCE_BROWSER and USE_HTAGS in the config file 988 # - Make sure the INPUT points to the root of the source tree 989 # - Run doxygen as normal 990 # 991 # Doxygen will invoke htags (and that will in turn invoke gtags), so these 992 # tools must be available from the command line (i.e. in the search path). 993 # 994 # The result: instead of the source browser generated by doxygen, the links to 995 # source code will now point to the output of htags. 996 # The default value is: NO. 997 # This tag requires that the tag SOURCE_BROWSER is set to YES. 783 998 784 999 USE_HTAGS = NO 785 1000 786 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 787 # will generate a verbatim copy of the header file for each class for 788 # which an include is specified. Set to NO to disable this. 1001 # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a 1002 # verbatim copy of the header file for each class for which an include is 1003 # specified. Set to NO to disable this. 1004 # See also: Section \class. 1005 # The default value is: YES. 789 1006 790 1007 VERBATIM_HEADERS = YES 791 1008 792 1009 #--------------------------------------------------------------------------- 793 # configuration options related to the alphabetical class index 794 #--------------------------------------------------------------------------- 795 796 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 797 # of all compounds will be generated. Enable this if the project 798 # contains a lot of classes, structs, unions or interfaces. 1010 # Configuration options related to the alphabetical class index 1011 #--------------------------------------------------------------------------- 1012 1013 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all 1014 # compounds will be generated. Enable this if the project contains a lot of 1015 # classes, structs, unions or interfaces. 1016 # The default value is: YES. 799 1017 800 1018 ALPHABETICAL_INDEX = YES 801 1019 802 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 803 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 804 # in which this list will be split (can be a number in the range [1..20]) 1020 # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in 1021 # which the alphabetical index list will be split. 1022 # Minimum value: 1, maximum value: 20, default value: 5. 1023 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 805 1024 806 1025 COLS_IN_ALPHA_INDEX = 5 807 1026 808 # In case all classes in a project start with a common prefix, all 809 # classes will be put under the same header in the alphabetical index. 810 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 811 # should be ignored while generating the index headers. 812 813 IGNORE_PREFIX = 814 815 #--------------------------------------------------------------------------- 816 # configuration options related to the HTML output 817 #--------------------------------------------------------------------------- 818 819 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 820 # generate HTML output. 1027 # In case all classes in a project start with a common prefix, all classes will 1028 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag 1029 # can be used to specify a prefix (or a list of prefixes) that should be ignored 1030 # while generating the index headers. 1031 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 1032 1033 IGNORE_PREFIX = 1034 1035 #--------------------------------------------------------------------------- 1036 # Configuration options related to the HTML output 1037 #--------------------------------------------------------------------------- 1038 1039 # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output 1040 # The default value is: YES. 821 1041 822 1042 GENERATE_HTML = YES 823 1043 824 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 825 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 826 # put in front of it. If left blank `html' will be used as the default path. 1044 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a 1045 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 1046 # it. 1047 # The default directory is: html. 1048 # This tag requires that the tag GENERATE_HTML is set to YES. 827 1049 828 1050 HTML_OUTPUT = html 829 1051 830 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for 831 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank 832 # doxygen will generate files with .html extension. 1052 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each 1053 # generated HTML page (for example: .htm, .php, .asp). 1054 # The default value is: .html. 1055 # This tag requires that the tag GENERATE_HTML is set to YES. 833 1056 834 1057 HTML_FILE_EXTENSION = .html 835 1058 836 # The HTML_HEADER tag can be used to specify a personal HTML header for 837 # each generated HTML page. If it is left blank doxygen will generate a 838 # standard header. Note that when using a custom header you are responsible 839 # for the proper inclusion of any scripts and style sheets that doxygen 840 # needs, which is dependent on the configuration options used. 841 # It is adviced to generate a default header using "doxygen -w html 842 # header.html footer.html stylesheet.css YourConfigFile" and then modify 843 # that header. Note that the header is subject to change so you typically 844 # have to redo this when upgrading to a newer version of doxygen or when 845 # changing the value of configuration settings such as GENERATE_TREEVIEW! 846 847 HTML_HEADER = 848 849 # The HTML_FOOTER tag can be used to specify a personal HTML footer for 850 # each generated HTML page. If it is left blank doxygen will generate a 851 # standard footer. 852 853 HTML_FOOTER = 854 855 # If the HTML_TIMESTAMP tag is set to YES then the generated HTML 856 # documentation will contain the timesstamp. 1059 # The HTML_HEADER tag can be used to specify a user-defined HTML header file for 1060 # each generated HTML page. If the tag is left blank doxygen will generate a 1061 # standard header. 1062 # 1063 # To get valid HTML the header file that includes any scripts and style sheets 1064 # that doxygen needs, which is dependent on the configuration options used (e.g. 1065 # the setting GENERATE_TREEVIEW). It is highly recommended to start with a 1066 # default header using 1067 # doxygen -w html new_header.html new_footer.html new_stylesheet.css 1068 # YourConfigFile 1069 # and then modify the file new_header.html. See also section "Doxygen usage" 1070 # for information on how to generate the default header that doxygen normally 1071 # uses. 1072 # Note: The header is subject to change so you typically have to regenerate the 1073 # default header when upgrading to a newer version of doxygen. For a description 1074 # of the possible markers and block names see the documentation. 1075 # This tag requires that the tag GENERATE_HTML is set to YES. 1076 1077 HTML_HEADER = 1078 1079 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each 1080 # generated HTML page. If the tag is left blank doxygen will generate a standard 1081 # footer. See HTML_HEADER for more information on how to generate a default 1082 # footer and what special commands can be used inside the footer. See also 1083 # section "Doxygen usage" for information on how to generate the default footer 1084 # that doxygen normally uses. 1085 # This tag requires that the tag GENERATE_HTML is set to YES. 1086 1087 HTML_FOOTER = 1088 1089 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style 1090 # sheet that is used by each HTML page. It can be used to fine-tune the look of 1091 # the HTML output. If left blank doxygen will generate a default style sheet. 1092 # See also section "Doxygen usage" for information on how to generate the style 1093 # sheet that doxygen normally uses. 1094 # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as 1095 # it is more robust and this tag (HTML_STYLESHEET) will in the future become 1096 # obsolete. 1097 # This tag requires that the tag GENERATE_HTML is set to YES. 1098 1099 HTML_STYLESHEET = 1100 1101 # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined 1102 # cascading style sheets that are included after the standard style sheets 1103 # created by doxygen. Using this option one can overrule certain style aspects. 1104 # This is preferred over using HTML_STYLESHEET since it does not replace the 1105 # standard style sheet and is therefore more robust against future updates. 1106 # Doxygen will copy the style sheet files to the output directory. 1107 # Note: The order of the extra style sheet files is of importance (e.g. the last 1108 # style sheet in the list overrules the setting of the previous ones in the 1109 # list). For an example see the documentation. 1110 # This tag requires that the tag GENERATE_HTML is set to YES. 1111 1112 HTML_EXTRA_STYLESHEET = 1113 1114 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 1115 # other source files which should be copied to the HTML output directory. Note 1116 # that these files will be copied to the base HTML output directory. Use the 1117 # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 1118 # files. In the HTML_STYLESHEET file, use the file name only. Also note that the 1119 # files will be copied as-is; there are no commands or markers available. 1120 # This tag requires that the tag GENERATE_HTML is set to YES. 1121 1122 HTML_EXTRA_FILES = 1123 1124 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen 1125 # will adjust the colors in the style sheet and background images according to 1126 # this color. Hue is specified as an angle on a colorwheel, see 1127 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value 1128 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 1129 # purple, and 360 is red again. 1130 # Minimum value: 0, maximum value: 359, default value: 220. 1131 # This tag requires that the tag GENERATE_HTML is set to YES. 1132 1133 HTML_COLORSTYLE_HUE = 224 1134 1135 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors 1136 # in the HTML output. For a value of 0 the output will use grayscales only. A 1137 # value of 255 will produce the most vivid colors. 1138 # Minimum value: 0, maximum value: 255, default value: 100. 1139 # This tag requires that the tag GENERATE_HTML is set to YES. 1140 1141 HTML_COLORSTYLE_SAT = 63 1142 1143 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the 1144 # luminance component of the colors in the HTML output. Values below 100 1145 # gradually make the output lighter, whereas values above 100 make the output 1146 # darker. The value divided by 100 is the actual gamma applied, so 80 represents 1147 # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not 1148 # change the gamma. 1149 # Minimum value: 40, maximum value: 240, default value: 80. 1150 # This tag requires that the tag GENERATE_HTML is set to YES. 1151 1152 HTML_COLORSTYLE_GAMMA = 152 1153 1154 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 1155 # page will contain the date and time when the page was generated. Setting this 1156 # to YES can help to show when doxygen was last run and thus if the 1157 # documentation is up to date. 1158 # The default value is: NO. 1159 # This tag requires that the tag GENERATE_HTML is set to YES. 857 1160 858 1161 HTML_TIMESTAMP = YES 859 1162 860 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading 861 # style sheet that is used by each HTML page. It can be used to 862 # fine-tune the look of the HTML output. If the tag is left blank doxygen 863 # will generate a default style sheet. Note that doxygen will try to copy 864 # the style sheet file to the HTML output directory, so don't put your own 865 # stylesheet in the HTML output directory as well, or it will be erased! 866 867 HTML_STYLESHEET = 868 869 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 870 # other source files which should be copied to the HTML output directory. Note 871 # that these files will be copied to the base HTML output directory. Use the 872 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 873 # files. In the HTML_STYLESHEET file, use the file name only. Also note that 874 # the files will be copied as-is; there are no commands or markers available. 875 876 HTML_EXTRA_FILES = 877 878 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 879 # Doxygen will adjust the colors in the stylesheet and background images 880 # according to this color. Hue is specified as an angle on a colorwheel, 881 # see http://en.wikipedia.org/wiki/Hue for more information. 882 # For instance the value 0 represents red, 60 is yellow, 120 is green, 883 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 884 # The allowed range is 0 to 359. 885 886 HTML_COLORSTYLE_HUE = 224 887 888 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 889 # the colors in the HTML output. For a value of 0 the output will use 890 # grayscales only. A value of 255 will produce the most vivid colors. 891 892 HTML_COLORSTYLE_SAT = 63 893 894 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 895 # the luminance component of the colors in the HTML output. Values below 896 # 100 gradually make the output lighter, whereas values above 100 make 897 # the output darker. The value divided by 100 is the actual gamma applied, 898 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 899 # and 100 does not change the gamma. 900 901 HTML_COLORSTYLE_GAMMA = 152 902 903 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 904 # page will contain the date and time when the page was generated. Setting 905 # this to NO can help when comparing the output of multiple runs. 906 907 HTML_TIMESTAMP = YES 908 909 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 910 # files or namespaces will be aligned in HTML using tables. If set to 911 # NO a bullet list will be used. 912 913 HTML_ALIGN_MEMBERS = YES 914 915 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 916 # documentation will contain sections that can be hidden and shown after the 917 # page has loaded. For this to work a browser that supports 918 # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 919 # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). 1163 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 1164 # documentation will contain sections that can be hidden and shown after the 1165 # page has loaded. 1166 # The default value is: NO. 1167 # This tag requires that the tag GENERATE_HTML is set to YES. 920 1168 921 1169 HTML_DYNAMIC_SECTIONS = YES 922 1170 923 # If the GENERATE_DOCSET tag is set to YES, additional index files 924 # will be generated that can be used as input for Apple's Xcode 3 925 # integrated development environment, introduced with OSX 10.5 (Leopard). 926 # To create a documentation set, doxygen will generate a Makefile in the 927 # HTML output directory. Running make will produce the docset in that 928 # directory and running "make install" will install the docset in 929 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 930 # it at startup. 931 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 1171 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries 1172 # shown in the various tree structured indices initially; the user can expand 1173 # and collapse entries dynamically later on. Doxygen will expand the tree to 1174 # such a level that at most the specified number of entries are visible (unless 1175 # a fully collapsed tree already exceeds this amount). So setting the number of 1176 # entries 1 will produce a full collapsed tree by default. 0 is a special value 1177 # representing an infinite number of entries and will result in a full expanded 1178 # tree by default. 1179 # Minimum value: 0, maximum value: 9999, default value: 100. 1180 # This tag requires that the tag GENERATE_HTML is set to YES. 1181 1182 HTML_INDEX_NUM_ENTRIES = 100 1183 1184 # If the GENERATE_DOCSET tag is set to YES, additional index files will be 1185 # generated that can be used as input for Apple's Xcode 3 integrated development 1186 # environment (see: http://developer.apple.com/tools/xcode/), introduced with 1187 # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a 1188 # Makefile in the HTML output directory. Running make will produce the docset in 1189 # that directory and running make install will install the docset in 1190 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at 1191 # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 932 1192 # for more information. 1193 # The default value is: NO. 1194 # This tag requires that the tag GENERATE_HTML is set to YES. 933 1195 934 1196 GENERATE_DOCSET = NO 935 1197 936 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 937 # feed. A documentation feed provides an umbrella under which multiple 938 # documentation sets from a single provider (such as a company or product suite) 939 # can be grouped. 1198 # This tag determines the name of the docset feed. A documentation feed provides 1199 # an umbrella under which multiple documentation sets from a single provider 1200 # (such as a company or product suite) can be grouped. 1201 # The default value is: Doxygen generated docs. 1202 # This tag requires that the tag GENERATE_DOCSET is set to YES. 940 1203 941 1204 DOCSET_FEEDNAME = "Doxygen generated docs" 942 1205 943 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 944 # should uniquely identify the documentation set bundle. This should be a 945 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 946 # will append .docset to the name. 1206 # This tag specifies a string that should uniquely identify the documentation 1207 # set bundle. This should be a reverse domain-name style string, e.g. 1208 # com.mycompany.MyDocSet. Doxygen will append .docset to the name. 1209 # The default value is: org.doxygen.Project. 1210 # This tag requires that the tag GENERATE_DOCSET is set to YES. 947 1211 948 1212 DOCSET_BUNDLE_ID = org.doxygen.Project 949 1213 950 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify951 # the documentation publisher. This should be a reverse domain-name style 1214 # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify 1215 # the documentation publisher. This should be a reverse domain-name style 952 1216 # string, e.g. com.mycompany.MyDocSet.documentation. 1217 # The default value is: org.doxygen.Publisher. 1218 # This tag requires that the tag GENERATE_DOCSET is set to YES. 953 1219 954 1220 DOCSET_PUBLISHER_ID = org.doxygen.Publisher 955 1221 956 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. 1222 # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. 1223 # The default value is: Publisher. 1224 # This tag requires that the tag GENERATE_DOCSET is set to YES. 957 1225 958 1226 DOCSET_PUBLISHER_NAME = Publisher 959 1227 960 # If the GENERATE_HTMLHELP tag is set to YES, additional index files 961 # will be generated that can be used as input for tools like the 962 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 963 # of the generated HTML documentation. 1228 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three 1229 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The 1230 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop 1231 # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on 1232 # Windows. 1233 # 1234 # The HTML Help Workshop contains a compiler that can convert all HTML output 1235 # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML 1236 # files are now used as the Windows 98 help format, and will replace the old 1237 # Windows help format (.hlp) on all Windows platforms in the future. Compressed 1238 # HTML files also contain an index, a table of contents, and you can search for 1239 # words in the documentation. The HTML workshop also contains a viewer for 1240 # compressed HTML files. 1241 # The default value is: NO. 1242 # This tag requires that the tag GENERATE_HTML is set to YES. 964 1243 965 1244 GENERATE_HTMLHELP = NO 966 1245 967 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 968 # be used to specify the file name of the resulting .chm file. You 969 # can add a path in front of the file if the result should not be 1246 # The CHM_FILE tag can be used to specify the file name of the resulting .chm 1247 # file. You can add a path in front of the file if the result should not be 970 1248 # written to the html output directory. 971 972 CHM_FILE = 973 974 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 975 # be used to specify the location (absolute path including file name) of 976 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 977 # the HTML help compiler on the generated index.hhp. 978 979 HHC_LOCATION = 980 981 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 982 # controls if a separate .chi index file is generated (YES) or that 983 # it should be included in the master .chm file (NO). 1249 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 1250 1251 CHM_FILE = 1252 1253 # The HHC_LOCATION tag can be used to specify the location (absolute path 1254 # including file name) of the HTML help compiler (hhc.exe). If non-empty, 1255 # doxygen will try to run the HTML help compiler on the generated index.hhp. 1256 # The file has to be specified with full path. 1257 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 1258 1259 HHC_LOCATION = 1260 1261 # The GENERATE_CHI flag controls if a separate .chi index file is generated 1262 # (YES) or that it should be included in the master .chm file (NO). 1263 # The default value is: NO. 1264 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 984 1265 985 1266 GENERATE_CHI = NO 986 1267 987 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 988 # is used to encode HtmlHelp index (hhk), content (hhc) and project file 989 # content. 990 991 CHM_INDEX_ENCODING = 992 993 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 994 # controls whether a binary table of contents is generated (YES) or a 995 # normal table of contents (NO) in the .chm file. 1268 # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) 1269 # and project file content. 1270 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 1271 1272 CHM_INDEX_ENCODING = 1273 1274 # The BINARY_TOC flag controls whether a binary table of contents is generated 1275 # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it 1276 # enables the Previous and Next buttons. 1277 # The default value is: NO. 1278 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 996 1279 997 1280 BINARY_TOC = NO 998 1281 999 # The TOC_EXPAND flag can be set to YES to add extra items for group members 1000 # to the contents of the HTML help documentation and to the tree view. 1282 # The TOC_EXPAND flag can be set to YES to add extra items for group members to 1283 # the table of contents of the HTML help documentation and to the tree view. 1284 # The default value is: NO. 1285 # This tag requires that the tag GENERATE_HTMLHELP is set to YES. 1001 1286 1002 1287 TOC_EXPAND = NO 1003 1288 1004 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 1005 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 1006 # that can be used as input for Qt's qhelpgenerator to generate a 1007 # Qt Compressed Help (.qch) of the generated HTML documentation. 1289 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 1290 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that 1291 # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help 1292 # (.qch) of the generated HTML documentation. 1293 # The default value is: NO. 1294 # This tag requires that the tag GENERATE_HTML is set to YES. 1008 1295 1009 1296 GENERATE_QHP = NO 1010 1297 1011 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can 1012 # be used to specify the file name of the resulting .qch file. 1013 # The path specified is relative to the HTML output folder. 1014 1015 QCH_FILE = 1016 1017 # The QHP_NAMESPACE tag specifies the namespace to use when generating 1018 # Qt Help Project output. For more information please see 1019 # http://doc.trolltech.com/qthelpproject.html#namespace 1298 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify 1299 # the file name of the resulting .qch file. The path specified is relative to 1300 # the HTML output folder. 1301 # This tag requires that the tag GENERATE_QHP is set to YES. 1302 1303 QCH_FILE = 1304 1305 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help 1306 # Project output. For more information please see Qt Help Project / Namespace 1307 # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). 1308 # The default value is: org.doxygen.Project. 1309 # This tag requires that the tag GENERATE_QHP is set to YES. 1020 1310 1021 1311 QHP_NAMESPACE = org.doxygen.Project 1022 1312 1023 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 1024 # Qt Help Project output. For more information please see 1025 # http://doc.trolltech.com/qthelpproject.html#virtual-folders 1313 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt 1314 # Help Project output. For more information please see Qt Help Project / Virtual 1315 # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- 1316 # folders). 1317 # The default value is: doc. 1318 # This tag requires that the tag GENERATE_QHP is set to YES. 1026 1319 1027 1320 QHP_VIRTUAL_FOLDER = doc 1028 1321 1029 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 1030 # add. For more information please see 1031 # http://doc.trolltech.com/qthelpproject.html#custom-filters 1032 1033 QHP_CUST_FILTER_NAME = 1034 1035 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 1036 # custom filter to add. For more information please see 1037 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 1038 # Qt Help Project / Custom Filters</a>. 1039 1040 QHP_CUST_FILTER_ATTRS = 1041 1042 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 1043 # project's 1044 # filter section matches. 1045 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 1046 # Qt Help Project / Filter Attributes</a>. 1047 1048 QHP_SECT_FILTER_ATTRS = 1049 1050 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 1051 # be used to specify the location of Qt's qhelpgenerator. 1052 # If non-empty doxygen will try to run qhelpgenerator on the generated 1053 # .qhp file. 1054 1055 QHG_LOCATION = 1056 1057 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files 1058 # will be generated, which together with the HTML files, form an Eclipse help 1059 # plugin. To install this plugin and make it available under the help contents 1060 # menu in Eclipse, the contents of the directory containing the HTML and XML 1061 # files needs to be copied into the plugins directory of eclipse. The name of 1062 # the directory within the plugins directory should be the same as 1063 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 1064 # the help appears. 1322 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom 1323 # filter to add. For more information please see Qt Help Project / Custom 1324 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 1325 # filters). 1326 # This tag requires that the tag GENERATE_QHP is set to YES. 1327 1328 QHP_CUST_FILTER_NAME = 1329 1330 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the 1331 # custom filter to add. For more information please see Qt Help Project / Custom 1332 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 1333 # filters). 1334 # This tag requires that the tag GENERATE_QHP is set to YES. 1335 1336 QHP_CUST_FILTER_ATTRS = 1337 1338 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 1339 # project's filter section matches. Qt Help Project / Filter Attributes (see: 1340 # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). 1341 # This tag requires that the tag GENERATE_QHP is set to YES. 1342 1343 QHP_SECT_FILTER_ATTRS = 1344 1345 # The QHG_LOCATION tag can be used to specify the location of Qt's 1346 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the 1347 # generated .qhp file. 1348 # This tag requires that the tag GENERATE_QHP is set to YES. 1349 1350 QHG_LOCATION = 1351 1352 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be 1353 # generated, together with the HTML files, they form an Eclipse help plugin. To 1354 # install this plugin and make it available under the help contents menu in 1355 # Eclipse, the contents of the directory containing the HTML and XML files needs 1356 # to be copied into the plugins directory of eclipse. The name of the directory 1357 # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. 1358 # After copying Eclipse needs to be restarted before the help appears. 1359 # The default value is: NO. 1360 # This tag requires that the tag GENERATE_HTML is set to YES. 1065 1361 1066 1362 GENERATE_ECLIPSEHELP = NO 1067 1363 1068 # A unique identifier for the eclipse help plugin. When installing the plugin 1069 # the directory name containing the HTML and XML files should also have 1070 # this name. 1364 # A unique identifier for the Eclipse help plugin. When installing the plugin 1365 # the directory name containing the HTML and XML files should also have this 1366 # name. Each documentation set should have its own identifier. 1367 # The default value is: org.doxygen.Project. 1368 # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. 1071 1369 1072 1370 ECLIPSE_DOC_ID = org.doxygen.Project 1073 1371 1074 # The DISABLE_INDEX tag can be used to turn on/off the condensed index at 1075 # top of each HTML page. The value NO (the default) enables the index and 1076 # the value YES disables it. 1372 # If you want full control over the layout of the generated HTML pages it might 1373 # be necessary to disable the index and replace it with your own. The 1374 # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top 1375 # of each HTML page. A value of NO enables the index and the value YES disables 1376 # it. Since the tabs in the index contain the same information as the navigation 1377 # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. 1378 # The default value is: NO. 1379 # This tag requires that the tag GENERATE_HTML is set to YES. 1077 1380 1078 1381 DISABLE_INDEX = NO 1079 1382 1080 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 1081 # (range [0,1..20]) that doxygen will group on one line in the generated HTML 1082 # documentation. Note that a value of 0 will completely suppress the enum 1083 # values from appearing in the overview section. 1383 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 1384 # structure should be generated to display hierarchical information. If the tag 1385 # value is set to YES, a side panel will be generated containing a tree-like 1386 # index structure (just like the one that is generated for HTML Help). For this 1387 # to work a browser that supports JavaScript, DHTML, CSS and frames is required 1388 # (i.e. any modern browser). Windows users are probably better off using the 1389 # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can 1390 # further fine-tune the look of the index. As an example, the default style 1391 # sheet generated by doxygen has an example that shows how to put an image at 1392 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has 1393 # the same information as the tab index, you could consider setting 1394 # DISABLE_INDEX to YES when enabling this option. 1395 # The default value is: NO. 1396 # This tag requires that the tag GENERATE_HTML is set to YES. 1397 1398 GENERATE_TREEVIEW = YES 1399 1400 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that 1401 # doxygen will group on one line in the generated HTML documentation. 1402 # 1403 # Note that a value of 0 will completely suppress the enum values from appearing 1404 # in the overview section. 1405 # Minimum value: 0, maximum value: 20, default value: 4. 1406 # This tag requires that the tag GENERATE_HTML is set to YES. 1084 1407 1085 1408 ENUM_VALUES_PER_LINE = 4 1086 1409 1087 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 1088 # structure should be generated to display hierarchical information. 1089 # If the tag value is set to YES, a side panel will be generated 1090 # containing a tree-like index structure (just like the one that 1091 # is generated for HTML Help). For this to work a browser that supports 1092 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 1093 # Windows users are probably better off using the HTML help feature. 1094 1095 GENERATE_TREEVIEW = YES 1096 1097 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 1098 # and Class Hierarchy pages using a tree view instead of an ordered list. 1099 1100 USE_INLINE_TREES = YES 1101 1102 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 1103 # used to set the initial width (in pixels) of the frame in which the tree 1104 # is shown. 1410 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used 1411 # to set the initial width (in pixels) of the frame in which the tree is shown. 1412 # Minimum value: 0, maximum value: 1500, default value: 250. 1413 # This tag requires that the tag GENERATE_HTML is set to YES. 1105 1414 1106 1415 TREEVIEW_WIDTH = 250 1107 1416 1108 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 1109 # links to external symbols imported via tag files in a separate window. 1417 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to 1418 # external symbols imported via tag files in a separate window. 1419 # The default value is: NO. 1420 # This tag requires that the tag GENERATE_HTML is set to YES. 1110 1421 1111 1422 EXT_LINKS_IN_WINDOW = NO 1112 1423 1113 # Use this tag to change the font size of Latex formulas included 1114 # as images in the HTML documentation. The default is 10. Note that 1115 # when you change the font size after a successful doxygen run you need 1116 # to manually remove any form_*.png images from the HTML output directory 1117 # to force them to be regenerated. 1424 # Use this tag to change the font size of LaTeX formulas included as images in 1425 # the HTML documentation. When you change the font size after a successful 1426 # doxygen run you need to manually remove any form_*.png images from the HTML 1427 # output directory to force them to be regenerated. 1428 # Minimum value: 8, maximum value: 50, default value: 10. 1429 # This tag requires that the tag GENERATE_HTML is set to YES. 1118 1430 1119 1431 FORMULA_FONTSIZE = 10 1120 1432 1121 # Use the FORMULA_TRANPARENT tag to determine whether or not the images 1122 # generated for formulas are transparent PNGs. Transparent PNGs are 1123 # not supported properly for IE 6.0, but are supported on all modern browsers. 1124 # Note that when changing this option you need to delete any form_*.png files 1125 # in the HTML output before the changes have effect. 1433 # Use the FORMULA_TRANPARENT tag to determine whether or not the images 1434 # generated for formulas are transparent PNGs. Transparent PNGs are not 1435 # supported properly for IE 6.0, but are supported on all modern browsers. 1436 # 1437 # Note that when changing this option you need to delete any form_*.png files in 1438 # the HTML output directory before the changes have effect. 1439 # The default value is: YES. 1440 # This tag requires that the tag GENERATE_HTML is set to YES. 1126 1441 1127 1442 FORMULA_TRANSPARENT = YES 1128 1443 1129 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 1130 # (see http://www.mathjax.org) which uses client side Javascript for the 1131 # rendering instead of using prerendered bitmaps. Use this if you do not 1132 # have LaTeX installed or if you want to formulas look prettier in the HTML 1133 # output. When enabled you also need to install MathJax separately and 1134 # configure the path to it using the MATHJAX_RELPATH option. 1444 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see 1445 # http://www.mathjax.org) which uses client side Javascript for the rendering 1446 # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX 1447 # installed or if you want to formulas look prettier in the HTML output. When 1448 # enabled you may also need to install MathJax separately and configure the path 1449 # to it using the MATHJAX_RELPATH option. 1450 # The default value is: NO. 1451 # This tag requires that the tag GENERATE_HTML is set to YES. 1135 1452 1136 1453 USE_MATHJAX = NO 1137 1454 1138 # When MathJax is enabled you need to specify the location relative to the 1139 # HTML output directory using the MATHJAX_RELPATH option. The destination 1140 # directory should contain the MathJax.js script. For instance, if the mathjax 1141 # directory is located at the same level as the HTML output directory, then 1142 # MATHJAX_RELPATH should be ../mathjax. The default value points to the 1143 # mathjax.org site, so you can quickly see the result without installing 1144 # MathJax, but it is strongly recommended to install a local copy of MathJax 1145 # before deployment. 1455 # When MathJax is enabled you can set the default output format to be used for 1456 # the MathJax output. See the MathJax site (see: 1457 # http://docs.mathjax.org/en/latest/output.html) for more details. 1458 # Possible values are: HTML-CSS (which is slower, but has the best 1459 # compatibility), NativeMML (i.e. MathML) and SVG. 1460 # The default value is: HTML-CSS. 1461 # This tag requires that the tag USE_MATHJAX is set to YES. 1462 1463 MATHJAX_FORMAT = HTML-CSS 1464 1465 # When MathJax is enabled you need to specify the location relative to the HTML 1466 # output directory using the MATHJAX_RELPATH option. The destination directory 1467 # should contain the MathJax.js script. For instance, if the mathjax directory 1468 # is located at the same level as the HTML output directory, then 1469 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax 1470 # Content Delivery Network so you can quickly see the result without installing 1471 # MathJax. However, it is strongly recommended to install a local copy of 1472 # MathJax from http://www.mathjax.org before deployment. 1473 # The default value is: http://cdn.mathjax.org/mathjax/latest. 1474 # This tag requires that the tag USE_MATHJAX is set to YES. 1146 1475 1147 1476 MATHJAX_RELPATH = http://www.mathjax.org/mathjax 1148 1477 1149 # When the SEARCHENGINE tag is enabled doxygen will generate a search box 1150 # for the HTML output. The underlying search engine uses javascript 1151 # and DHTML and should work on any modern browser. Note that when using 1152 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 1153 # (GENERATE_DOCSET) there is already a search function so this one should 1154 # typically be disabled. For large projects the javascript based search engine 1155 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. 1478 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax 1479 # extension names that should be enabled during MathJax rendering. For example 1480 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols 1481 # This tag requires that the tag USE_MATHJAX is set to YES. 1482 1483 MATHJAX_EXTENSIONS = 1484 1485 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces 1486 # of code that will be used on startup of the MathJax code. See the MathJax site 1487 # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an 1488 # example see the documentation. 1489 # This tag requires that the tag USE_MATHJAX is set to YES. 1490 1491 MATHJAX_CODEFILE = 1492 1493 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for 1494 # the HTML output. The underlying search engine uses javascript and DHTML and 1495 # should work on any modern browser. Note that when using HTML help 1496 # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) 1497 # there is already a search function so this one should typically be disabled. 1498 # For large projects the javascript based search engine can be slow, then 1499 # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to 1500 # search using the keyboard; to jump to the search box use <access key> + S 1501 # (what the <access key> is depends on the OS and browser, but it is typically 1502 # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down 1503 # key> to jump into the search results window, the results can be navigated 1504 # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel 1505 # the search. The filter options can be selected when the cursor is inside the 1506 # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> 1507 # to select a filter and <Enter> or <escape> to activate or cancel the filter 1508 # option. 1509 # The default value is: YES. 1510 # This tag requires that the tag GENERATE_HTML is set to YES. 1156 1511 1157 1512 SEARCHENGINE = YES 1158 1513 1159 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be 1160 # implemented using a PHP enabled web server instead of at the web client 1161 # using Javascript. Doxygen will generate the search PHP script and index 1162 # file to put on the web server. The advantage of the server 1163 # based approach is that it scales better to large projects and allows 1164 # full text search. The disadvantages are that it is more difficult to setup 1165 # and does not have live searching capabilities. 1514 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be 1515 # implemented using a web server instead of a web client using Javascript. There 1516 # are two flavors of web server based searching depending on the EXTERNAL_SEARCH 1517 # setting. When disabled, doxygen will generate a PHP script for searching and 1518 # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing 1519 # and searching needs to be provided by external tools. See the section 1520 # "External Indexing and Searching" for details. 1521 # The default value is: NO. 1522 # This tag requires that the tag SEARCHENGINE is set to YES. 1166 1523 1167 1524 SERVER_BASED_SEARCH = NO 1168 1525 1169 #--------------------------------------------------------------------------- 1170 # configuration options related to the LaTeX output 1171 #--------------------------------------------------------------------------- 1172 1173 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 1174 # generate Latex output. 1526 # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP 1527 # script for searching. Instead the search results are written to an XML file 1528 # which needs to be processed by an external indexer. Doxygen will invoke an 1529 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the 1530 # search results. 1531 # 1532 # Doxygen ships with an example indexer (doxyindexer) and search engine 1533 # (doxysearch.cgi) which are based on the open source search engine library 1534 # Xapian (see: http://xapian.org/). 1535 # 1536 # See the section "External Indexing and Searching" for details. 1537 # The default value is: NO. 1538 # This tag requires that the tag SEARCHENGINE is set to YES. 1539 1540 EXTERNAL_SEARCH = NO 1541 1542 # The SEARCHENGINE_URL should point to a search engine hosted by a web server 1543 # which will return the search results when EXTERNAL_SEARCH is enabled. 1544 # 1545 # Doxygen ships with an example indexer (doxyindexer) and search engine 1546 # (doxysearch.cgi) which are based on the open source search engine library 1547 # Xapian (see: http://xapian.org/). See the section "External Indexing and 1548 # Searching" for details. 1549 # This tag requires that the tag SEARCHENGINE is set to YES. 1550 1551 SEARCHENGINE_URL = 1552 1553 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed 1554 # search data is written to a file for indexing by an external tool. With the 1555 # SEARCHDATA_FILE tag the name of this file can be specified. 1556 # The default file is: searchdata.xml. 1557 # This tag requires that the tag SEARCHENGINE is set to YES. 1558 1559 SEARCHDATA_FILE = searchdata.xml 1560 1561 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the 1562 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is 1563 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple 1564 # projects and redirect the results back to the right project. 1565 # This tag requires that the tag SEARCHENGINE is set to YES. 1566 1567 EXTERNAL_SEARCH_ID = 1568 1569 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen 1570 # projects other than the one defined by this configuration file, but that are 1571 # all added to the same external search index. Each project needs to have a 1572 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of 1573 # to a relative location where the documentation can be found. The format is: 1574 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... 1575 # This tag requires that the tag SEARCHENGINE is set to YES. 1576 1577 EXTRA_SEARCH_MAPPINGS = 1578 1579 #--------------------------------------------------------------------------- 1580 # Configuration options related to the LaTeX output 1581 #--------------------------------------------------------------------------- 1582 1583 # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. 1584 # The default value is: YES. 1175 1585 1176 1586 GENERATE_LATEX = NO 1177 1587 1178 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 1179 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1180 # put in front of it. If left blank `latex' will be used as the default path. 1588 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a 1589 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 1590 # it. 1591 # The default directory is: latex. 1592 # This tag requires that the tag GENERATE_LATEX is set to YES. 1181 1593 1182 1594 LATEX_OUTPUT = latex 1183 1595 1184 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 1185 # invoked. If left blank `latex' will be used as the default command name. 1186 # Note that when enabling USE_PDFLATEX this option is only used for 1187 # generating bitmaps for formulas in the HTML output, but not in the 1188 # Makefile that is written to the output directory. 1596 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 1597 # invoked. 1598 # 1599 # Note that when enabling USE_PDFLATEX this option is only used for generating 1600 # bitmaps for formulas in the HTML output, but not in the Makefile that is 1601 # written to the output directory. 1602 # The default file is: latex. 1603 # This tag requires that the tag GENERATE_LATEX is set to YES. 1189 1604 1190 1605 LATEX_CMD_NAME = latex 1191 1606 1192 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 1193 # generate index for LaTeX. If left blank `makeindex' will be used as the 1194 # default command name. 1607 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate 1608 # index for LaTeX. 1609 # The default file is: makeindex. 1610 # This tag requires that the tag GENERATE_LATEX is set to YES. 1195 1611 1196 1612 MAKEINDEX_CMD_NAME = makeindex 1197 1613 1198 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 1199 # LaTeX documents. This may be useful for small projects and may help to 1200 # save some trees in general. 1614 # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX 1615 # documents. This may be useful for small projects and may help to save some 1616 # trees in general. 1617 # The default value is: NO. 1618 # This tag requires that the tag GENERATE_LATEX is set to YES. 1201 1619 1202 1620 COMPACT_LATEX = NO 1203 1621 1204 # The PAPER_TYPE tag can be used to set the paper type that is used 1205 # by the printer. Possible values are: a4, letter, legal and 1206 # executive. If left blank a4wide will be used. 1622 # The PAPER_TYPE tag can be used to set the paper type that is used by the 1623 # printer. 1624 # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x 1625 # 14 inches) and executive (7.25 x 10.5 inches). 1626 # The default value is: a4. 1627 # This tag requires that the tag GENERATE_LATEX is set to YES. 1207 1628 1208 1629 PAPER_TYPE = a4 1209 1630 1210 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 1211 # packages that should be included in the LaTeX output. 1212 1213 EXTRA_PACKAGES = 1214 1215 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 1216 # the generated latex document. The header should contain everything until 1217 # the first chapter. If it is left blank doxygen will generate a 1218 # standard header. Notice: only use this tag if you know what you are doing! 1219 1220 LATEX_HEADER = 1221 1222 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 1223 # the generated latex document. The footer should contain everything after 1224 # the last chapter. If it is left blank doxygen will generate a 1225 # standard footer. Notice: only use this tag if you know what you are doing! 1226 1227 LATEX_FOOTER = 1228 1229 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 1230 # is prepared for conversion to pdf (using ps2pdf). The pdf file will 1231 # contain links (just like the HTML output) instead of page references 1232 # This makes the output suitable for online browsing using a pdf viewer. 1631 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names 1632 # that should be included in the LaTeX output. The package can be specified just 1633 # by its name or with the correct syntax as to be used with the LaTeX 1634 # \usepackage command. To get the times font for instance you can specify : 1635 # EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} 1636 # To use the option intlimits with the amsmath package you can specify: 1637 # EXTRA_PACKAGES=[intlimits]{amsmath} 1638 # If left blank no extra packages will be included. 1639 # This tag requires that the tag GENERATE_LATEX is set to YES. 1640 1641 EXTRA_PACKAGES = 1642 1643 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the 1644 # generated LaTeX document. The header should contain everything until the first 1645 # chapter. If it is left blank doxygen will generate a standard header. See 1646 # section "Doxygen usage" for information on how to let doxygen write the 1647 # default header to a separate file. 1648 # 1649 # Note: Only use a user-defined header if you know what you are doing! The 1650 # following commands have a special meaning inside the header: $title, 1651 # $datetime, $date, $doxygenversion, $projectname, $projectnumber, 1652 # $projectbrief, $projectlogo. Doxygen will replace $title with the empty 1653 # string, for the replacement values of the other commands the user is referred 1654 # to HTML_HEADER. 1655 # This tag requires that the tag GENERATE_LATEX is set to YES. 1656 1657 LATEX_HEADER = 1658 1659 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the 1660 # generated LaTeX document. The footer should contain everything after the last 1661 # chapter. If it is left blank doxygen will generate a standard footer. See 1662 # LATEX_HEADER for more information on how to generate a default footer and what 1663 # special commands can be used inside the footer. 1664 # 1665 # Note: Only use a user-defined footer if you know what you are doing! 1666 # This tag requires that the tag GENERATE_LATEX is set to YES. 1667 1668 LATEX_FOOTER = 1669 1670 # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined 1671 # LaTeX style sheets that are included after the standard style sheets created 1672 # by doxygen. Using this option one can overrule certain style aspects. Doxygen 1673 # will copy the style sheet files to the output directory. 1674 # Note: The order of the extra style sheet files is of importance (e.g. the last 1675 # style sheet in the list overrules the setting of the previous ones in the 1676 # list). 1677 # This tag requires that the tag GENERATE_LATEX is set to YES. 1678 1679 LATEX_EXTRA_STYLESHEET = 1680 1681 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or 1682 # other source files which should be copied to the LATEX_OUTPUT output 1683 # directory. Note that the files will be copied as-is; there are no commands or 1684 # markers available. 1685 # This tag requires that the tag GENERATE_LATEX is set to YES. 1686 1687 LATEX_EXTRA_FILES = 1688 1689 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is 1690 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will 1691 # contain links (just like the HTML output) instead of page references. This 1692 # makes the output suitable for online browsing using a PDF viewer. 1693 # The default value is: YES. 1694 # This tag requires that the tag GENERATE_LATEX is set to YES. 1233 1695 1234 1696 PDF_HYPERLINKS = YES 1235 1697 1236 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of1237 # plain latex in the generated Makefile. Set this option to YES to get a1698 # If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate 1699 # the PDF file directly from the LaTeX files. Set this option to YES, to get a 1238 1700 # higher quality PDF documentation. 1701 # The default value is: YES. 1702 # This tag requires that the tag GENERATE_LATEX is set to YES. 1239 1703 1240 1704 USE_PDFLATEX = YES 1241 1705 1242 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 1243 # command to the generated LaTeX files. This will instruct LaTeX to keep 1244 # running if errors occur, instead of asking the user for help. 1245 # This option is also used when generating formulas in HTML. 1706 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode 1707 # command to the generated LaTeX files. This will instruct LaTeX to keep running 1708 # if errors occur, instead of asking the user for help. This option is also used 1709 # when generating formulas in HTML. 1710 # The default value is: NO. 1711 # This tag requires that the tag GENERATE_LATEX is set to YES. 1246 1712 1247 1713 LATEX_BATCHMODE = NO 1248 1714 1249 # If LATEX_HIDE_INDICES is set to YES then doxygen will not 1250 # include the index chapters (such as File Index, Compound Index, etc.) 1251 # in the output. 1715 # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the 1716 # index chapters (such as File Index, Compound Index, etc.) in the output. 1717 # The default value is: NO. 1718 # This tag requires that the tag GENERATE_LATEX is set to YES. 1252 1719 1253 1720 LATEX_HIDE_INDICES = NO 1254 1721 1255 # If LATEX_SOURCE_CODE is set to YES then doxygen will include 1256 # source code with syntax highlighting in the LaTeX output. 1257 # Note that which sources are shown also depends on other settings 1258 # such as SOURCE_BROWSER. 1722 # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source 1723 # code with syntax highlighting in the LaTeX output. 1724 # 1725 # Note that which sources are shown also depends on other settings such as 1726 # SOURCE_BROWSER. 1727 # The default value is: NO. 1728 # This tag requires that the tag GENERATE_LATEX is set to YES. 1259 1729 1260 1730 LATEX_SOURCE_CODE = NO 1261 1731 1262 #--------------------------------------------------------------------------- 1263 # configuration options related to the RTF output 1264 #--------------------------------------------------------------------------- 1265 1266 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 1267 # The RTF output is optimized for Word 97 and may not look very pretty with 1268 # other RTF readers or editors. 1732 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the 1733 # bibliography, e.g. plainnat, or ieeetr. See 1734 # http://en.wikipedia.org/wiki/BibTeX and \cite for more info. 1735 # The default value is: plain. 1736 # This tag requires that the tag GENERATE_LATEX is set to YES. 1737 1738 LATEX_BIB_STYLE = plain 1739 1740 #--------------------------------------------------------------------------- 1741 # Configuration options related to the RTF output 1742 #--------------------------------------------------------------------------- 1743 1744 # If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The 1745 # RTF output is optimized for Word 97 and may not look too pretty with other RTF 1746 # readers/editors. 1747 # The default value is: NO. 1269 1748 1270 1749 GENERATE_RTF = NO 1271 1750 1272 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 1273 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1274 # put in front of it. If left blank `rtf' will be used as the default path. 1751 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a 1752 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 1753 # it. 1754 # The default directory is: rtf. 1755 # This tag requires that the tag GENERATE_RTF is set to YES. 1275 1756 1276 1757 RTF_OUTPUT = rtf 1277 1758 1278 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 1279 # RTF documents. This may be useful for small projects and may help to 1280 # save some trees in general. 1759 # If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF 1760 # documents. This may be useful for small projects and may help to save some 1761 # trees in general. 1762 # The default value is: NO. 1763 # This tag requires that the tag GENERATE_RTF is set to YES. 1281 1764 1282 1765 COMPACT_RTF = NO 1283 1766 1284 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 1285 # will contain hyperlink fields. The RTF file will 1286 # contain links (just like the HTML output) instead of page references. 1287 # This makes the output suitable for online browsing using WORD or other 1288 # programs which support those fields. 1289 # Note: wordpad (write) and others do not support links. 1767 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will 1768 # contain hyperlink fields. The RTF file will contain links (just like the HTML 1769 # output) instead of page references. This makes the output suitable for online 1770 # browsing using Word or some other Word compatible readers that support those 1771 # fields. 1772 # 1773 # Note: WordPad (write) and others do not support links. 1774 # The default value is: NO. 1775 # This tag requires that the tag GENERATE_RTF is set to YES. 1290 1776 1291 1777 RTF_HYPERLINKS = NO 1292 1778 1293 # Load stylesheet definitions from file. Syntax is similar to doxygen's 1294 # config file, i.e. a series of assignments. You only have to provide 1295 # replacements, missing definitions are set to their default value. 1296 1297 RTF_STYLESHEET_FILE = 1298 1299 # Set optional variables used in the generation of an rtf document. 1300 # Syntax is similar to doxygen's config file. 1301 1302 RTF_EXTENSIONS_FILE = 1303 1304 #--------------------------------------------------------------------------- 1305 # configuration options related to the man page output 1306 #--------------------------------------------------------------------------- 1307 1308 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 1309 # generate man pages 1779 # Load stylesheet definitions from file. Syntax is similar to doxygen's config 1780 # file, i.e. a series of assignments. You only have to provide replacements, 1781 # missing definitions are set to their default value. 1782 # 1783 # See also section "Doxygen usage" for information on how to generate the 1784 # default style sheet that doxygen normally uses. 1785 # This tag requires that the tag GENERATE_RTF is set to YES. 1786 1787 RTF_STYLESHEET_FILE = 1788 1789 # Set optional variables used in the generation of an RTF document. Syntax is 1790 # similar to doxygen's config file. A template extensions file can be generated 1791 # using doxygen -e rtf extensionFile. 1792 # This tag requires that the tag GENERATE_RTF is set to YES. 1793 1794 RTF_EXTENSIONS_FILE = 1795 1796 # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code 1797 # with syntax highlighting in the RTF output. 1798 # 1799 # Note that which sources are shown also depends on other settings such as 1800 # SOURCE_BROWSER. 1801 # The default value is: NO. 1802 # This tag requires that the tag GENERATE_RTF is set to YES. 1803 1804 RTF_SOURCE_CODE = NO 1805 1806 #--------------------------------------------------------------------------- 1807 # Configuration options related to the man page output 1808 #--------------------------------------------------------------------------- 1809 1810 # If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for 1811 # classes and files. 1812 # The default value is: NO. 1310 1813 1311 1814 GENERATE_MAN = NO 1312 1815 1313 # The MAN_OUTPUT tag is used to specify where the man pages will be put. 1314 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1315 # put in front of it. If left blank `man' will be used as the default path. 1816 # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a 1817 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 1818 # it. A directory man3 will be created inside the directory specified by 1819 # MAN_OUTPUT. 1820 # The default directory is: man. 1821 # This tag requires that the tag GENERATE_MAN is set to YES. 1316 1822 1317 1823 MAN_OUTPUT = man 1318 1824 1319 # The MAN_EXTENSION tag determines the extension that is added to 1320 # the generated man pages (default is the subroutine's section .3) 1825 # The MAN_EXTENSION tag determines the extension that is added to the generated 1826 # man pages. In case the manual section does not start with a number, the number 1827 # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is 1828 # optional. 1829 # The default value is: .3. 1830 # This tag requires that the tag GENERATE_MAN is set to YES. 1321 1831 1322 1832 MAN_EXTENSION = .3 1323 1833 1324 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 1325 # then it will generate one additional man file for each entity 1326 # documented in the real man page(s). These additional files 1327 # only source the real man page, but without them the man command 1328 # would be unable to find the correct page. The default is NO. 1834 # The MAN_SUBDIR tag determines the name of the directory created within 1835 # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by 1836 # MAN_EXTENSION with the initial . removed. 1837 # This tag requires that the tag GENERATE_MAN is set to YES. 1838 1839 MAN_SUBDIR = 1840 1841 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it 1842 # will generate one additional man file for each entity documented in the real 1843 # man page(s). These additional files only source the real man page, but without 1844 # them the man command would be unable to find the correct page. 1845 # The default value is: NO. 1846 # This tag requires that the tag GENERATE_MAN is set to YES. 1329 1847 1330 1848 MAN_LINKS = NO 1331 1849 1332 1850 #--------------------------------------------------------------------------- 1333 # configuration options related to the XML output1334 #--------------------------------------------------------------------------- 1335 1336 # If the GENERATE_XML tag is set to YES Doxygen will1337 # generate an XML file that captures the structure of1338 # the code including all documentation.1851 # Configuration options related to the XML output 1852 #--------------------------------------------------------------------------- 1853 1854 # If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that 1855 # captures the structure of the code including all documentation. 1856 # The default value is: NO. 1339 1857 1340 1858 GENERATE_XML = NO 1341 1859 1342 # The XML_OUTPUT tag is used to specify where the XML pages will be put. 1343 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1344 # put in front of it. If left blank `xml' will be used as the default path. 1860 # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a 1861 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 1862 # it. 1863 # The default directory is: xml. 1864 # This tag requires that the tag GENERATE_XML is set to YES. 1345 1865 1346 1866 XML_OUTPUT = xml 1347 1867 1348 # The XML_SCHEMA tag can be used to specify an XML schema, 1349 # which can be used by a validating XML parser to check the 1350 # syntax of the XML files. 1351 1352 XML_SCHEMA = 1353 1354 # The XML_DTD tag can be used to specify an XML DTD, 1355 # which can be used by a validating XML parser to check the 1356 # syntax of the XML files. 1357 1358 XML_DTD = 1359 1360 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will 1361 # dump the program listings (including syntax highlighting 1362 # and cross-referencing information) to the XML output. Note that 1363 # enabling this will significantly increase the size of the XML output. 1868 # If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program 1869 # listings (including syntax highlighting and cross-referencing information) to 1870 # the XML output. Note that enabling this will significantly increase the size 1871 # of the XML output. 1872 # The default value is: YES. 1873 # This tag requires that the tag GENERATE_XML is set to YES. 1364 1874 1365 1875 XML_PROGRAMLISTING = YES 1366 1876 1367 1877 #--------------------------------------------------------------------------- 1368 # configuration options for the AutoGen Definitions output 1369 #--------------------------------------------------------------------------- 1370 1371 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 1372 # generate an AutoGen Definitions (see autogen.sf.net) file 1373 # that captures the structure of the code including all 1374 # documentation. Note that this feature is still experimental 1375 # and incomplete at the moment. 1878 # Configuration options related to the DOCBOOK output 1879 #--------------------------------------------------------------------------- 1880 1881 # If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files 1882 # that can be used to generate PDF. 1883 # The default value is: NO. 1884 1885 GENERATE_DOCBOOK = NO 1886 1887 # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. 1888 # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in 1889 # front of it. 1890 # The default directory is: docbook. 1891 # This tag requires that the tag GENERATE_DOCBOOK is set to YES. 1892 1893 DOCBOOK_OUTPUT = docbook 1894 1895 # If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the 1896 # program listings (including syntax highlighting and cross-referencing 1897 # information) to the DOCBOOK output. Note that enabling this will significantly 1898 # increase the size of the DOCBOOK output. 1899 # The default value is: NO. 1900 # This tag requires that the tag GENERATE_DOCBOOK is set to YES. 1901 1902 DOCBOOK_PROGRAMLISTING = NO 1903 1904 #--------------------------------------------------------------------------- 1905 # Configuration options for the AutoGen Definitions output 1906 #--------------------------------------------------------------------------- 1907 1908 # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an 1909 # AutoGen Definitions (see http://autogen.sf.net) file that captures the 1910 # structure of the code including all documentation. Note that this feature is 1911 # still experimental and incomplete at the moment. 1912 # The default value is: NO. 1376 1913 1377 1914 GENERATE_AUTOGEN_DEF = NO 1378 1915 1379 1916 #--------------------------------------------------------------------------- 1380 # configuration options related to the Perl module output1381 #--------------------------------------------------------------------------- 1382 1383 # If the GENERATE_PERLMOD tag is set to YES Doxygen will1384 # generate a Perl module file that captures the structure of1385 # the code including all documentation. Note that this1386 # feature is still experimental and incomplete at the1387 # moment.1917 # Configuration options related to the Perl module output 1918 #--------------------------------------------------------------------------- 1919 1920 # If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module 1921 # file that captures the structure of the code including all documentation. 1922 # 1923 # Note that this feature is still experimental and incomplete at the moment. 1924 # The default value is: NO. 1388 1925 1389 1926 GENERATE_PERLMOD = NO 1390 1927 1391 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate 1392 # the necessary Makefile rules, Perl scripts and LaTeX code to be able 1393 # to generate PDF and DVI output from the Perl module output. 1928 # If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary 1929 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI 1930 # output from the Perl module output. 1931 # The default value is: NO. 1932 # This tag requires that the tag GENERATE_PERLMOD is set to YES. 1394 1933 1395 1934 PERLMOD_LATEX = NO 1396 1935 1397 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 1398 # nicely formatted so it can be parsed by a human reader. This is useful 1399 # if you want to understand what is going on. On the other hand, if this 1400 # tag is set to NO the size of the Perl module output will be much smaller 1401 # and Perl will parse it just the same. 1936 # If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely 1937 # formatted so it can be parsed by a human reader. This is useful if you want to 1938 # understand what is going on. On the other hand, if this tag is set to NO, the 1939 # size of the Perl module output will be much smaller and Perl will parse it 1940 # just the same. 1941 # The default value is: YES. 1942 # This tag requires that the tag GENERATE_PERLMOD is set to YES. 1402 1943 1403 1944 PERLMOD_PRETTY = YES 1404 1945 1405 # The names of the make variables in the generated doxyrules.make file 1406 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 1407 # This is useful so different doxyrules.make files included by the same 1408 # Makefile don't overwrite each other's variables. 1409 1410 PERLMOD_MAKEVAR_PREFIX = 1946 # The names of the make variables in the generated doxyrules.make file are 1947 # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful 1948 # so different doxyrules.make files included by the same Makefile don't 1949 # overwrite each other's variables. 1950 # This tag requires that the tag GENERATE_PERLMOD is set to YES. 1951 1952 PERLMOD_MAKEVAR_PREFIX = 1411 1953 1412 1954 #--------------------------------------------------------------------------- … … 1414 1956 #--------------------------------------------------------------------------- 1415 1957 1416 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 1417 # evaluate all C-preprocessor directives found in the sources and include 1958 # If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all 1959 # C-preprocessor directives found in the sources and include files. 1960 # The default value is: YES. 1961 1962 ENABLE_PREPROCESSING = YES 1963 1964 # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names 1965 # in the source code. If set to NO, only conditional compilation will be 1966 # performed. Macro expansion can be done in a controlled way by setting 1967 # EXPAND_ONLY_PREDEF to YES. 1968 # The default value is: NO. 1969 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 1970 1971 MACRO_EXPANSION = YES 1972 1973 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then 1974 # the macro expansion is limited to the macros specified with the PREDEFINED and 1975 # EXPAND_AS_DEFINED tags. 1976 # The default value is: NO. 1977 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 1978 1979 EXPAND_ONLY_PREDEF = NO 1980 1981 # If the SEARCH_INCLUDES tag is set to YES, the include files in the 1982 # INCLUDE_PATH will be searched if a #include is found. 1983 # The default value is: YES. 1984 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 1985 1986 SEARCH_INCLUDES = YES 1987 1988 # The INCLUDE_PATH tag can be used to specify one or more directories that 1989 # contain include files that are not input files but should be processed by the 1990 # preprocessor. 1991 # This tag requires that the tag SEARCH_INCLUDES is set to YES. 1992 1993 INCLUDE_PATH = 1994 1995 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 1996 # patterns (like *.h and *.hpp) to filter out the header-files in the 1997 # directories. If left blank, the patterns specified with FILE_PATTERNS will be 1998 # used. 1999 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 2000 2001 INCLUDE_FILE_PATTERNS = 2002 2003 # The PREDEFINED tag can be used to specify one or more macro names that are 2004 # defined before the preprocessor is started (similar to the -D option of e.g. 2005 # gcc). The argument of the tag is a list of macros of the form: name or 2006 # name=definition (no spaces). If the definition and the "=" are omitted, "=1" 2007 # is assumed. To prevent a macro definition from being undefined via #undef or 2008 # recursively expanded use the := operator instead of the = operator. 2009 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 2010 2011 PREDEFINED = 2012 2013 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this 2014 # tag can be used to specify a list of macro names that should be expanded. The 2015 # macro definition that is found in the sources will be used. Use the PREDEFINED 2016 # tag if you want to use a different macro definition that overrules the 2017 # definition found in the source code. 2018 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 2019 2020 EXPAND_AS_DEFINED = 2021 2022 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will 2023 # remove all references to function-like macros that are alone on a line, have 2024 # an all uppercase name, and do not end with a semicolon. Such function macros 2025 # are typically used for boiler-plate code, and will confuse the parser if not 2026 # removed. 2027 # The default value is: YES. 2028 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 2029 2030 SKIP_FUNCTION_MACROS = YES 2031 2032 #--------------------------------------------------------------------------- 2033 # Configuration options related to external references 2034 #--------------------------------------------------------------------------- 2035 2036 # The TAGFILES tag can be used to specify one or more tag files. For each tag 2037 # file the location of the external documentation should be added. The format of 2038 # a tag file without this location is as follows: 2039 # TAGFILES = file1 file2 ... 2040 # Adding location for the tag files is done as follows: 2041 # TAGFILES = file1=loc1 "file2 = loc2" ... 2042 # where loc1 and loc2 can be relative or absolute paths or URLs. See the 2043 # section "Linking to external documentation" for more information about the use 2044 # of tag files. 2045 # Note: Each tag file must have a unique name (where the name does NOT include 2046 # the path). If a tag file is not located in the directory in which doxygen is 2047 # run, you must also specify the path to the tagfile here. 2048 2049 TAGFILES = 2050 2051 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a 2052 # tag file that is based on the input files it reads. See section "Linking to 2053 # external documentation" for more information about the usage of tag files. 2054 2055 GENERATE_TAGFILE = 2056 2057 # If the ALLEXTERNALS tag is set to YES, all external class will be listed in 2058 # the class index. If set to NO, only the inherited external classes will be 2059 # listed. 2060 # The default value is: NO. 2061 2062 ALLEXTERNALS = NO 2063 2064 # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed 2065 # in the modules index. If set to NO, only the current project's groups will be 2066 # listed. 2067 # The default value is: YES. 2068 2069 EXTERNAL_GROUPS = YES 2070 2071 # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in 2072 # the related pages index. If set to NO, only the current project's pages will 2073 # be listed. 2074 # The default value is: YES. 2075 2076 EXTERNAL_PAGES = YES 2077 2078 # The PERL_PATH should be the absolute path and name of the perl script 2079 # interpreter (i.e. the result of 'which perl'). 2080 # The default file (with absolute path) is: /usr/bin/perl. 2081 2082 PERL_PATH = /usr/bin/perl 2083 2084 #--------------------------------------------------------------------------- 2085 # Configuration options related to the dot tool 2086 #--------------------------------------------------------------------------- 2087 2088 # If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram 2089 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to 2090 # NO turns the diagrams off. Note that this option also works with HAVE_DOT 2091 # disabled, but it is recommended to install and use dot, since it yields more 2092 # powerful graphs. 2093 # The default value is: YES. 2094 2095 CLASS_DIAGRAMS = YES 2096 2097 # You can define message sequence charts within doxygen comments using the \msc 2098 # command. Doxygen will then run the mscgen tool (see: 2099 # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the 2100 # documentation. The MSCGEN_PATH tag allows you to specify the directory where 2101 # the mscgen tool resides. If left empty the tool is assumed to be found in the 2102 # default search path. 2103 2104 MSCGEN_PATH = 2105 2106 # You can include diagrams made with dia in doxygen documentation. Doxygen will 2107 # then run dia to produce the diagram and insert it in the documentation. The 2108 # DIA_PATH tag allows you to specify the directory where the dia binary resides. 2109 # If left empty dia is assumed to be found in the default search path. 2110 2111 DIA_PATH = 2112 2113 # If set to YES the inheritance and collaboration graphs will hide inheritance 2114 # and usage relations if the target is undocumented or is not a class. 2115 # The default value is: YES. 2116 2117 HIDE_UNDOC_RELATIONS = YES 2118 2119 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 2120 # available from the path. This tool is part of Graphviz (see: 2121 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent 2122 # Bell Labs. The other options in this section have no effect if this option is 2123 # set to NO 2124 # The default value is: NO. 2125 2126 HAVE_DOT = YES 2127 2128 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed 2129 # to run in parallel. When set to 0 doxygen will base this on the number of 2130 # processors available in the system. You can set it explicitly to a value 2131 # larger than 0 to get control over the balance between CPU load and processing 2132 # speed. 2133 # Minimum value: 0, maximum value: 32, default value: 0. 2134 # This tag requires that the tag HAVE_DOT is set to YES. 2135 2136 DOT_NUM_THREADS = 0 2137 2138 # When you want a differently looking font in the dot files that doxygen 2139 # generates you can specify the font name using DOT_FONTNAME. You need to make 2140 # sure dot is able to find the font, which can be done by putting it in a 2141 # standard location or by setting the DOTFONTPATH environment variable or by 2142 # setting DOT_FONTPATH to the directory containing the font. 2143 # The default value is: Helvetica. 2144 # This tag requires that the tag HAVE_DOT is set to YES. 2145 2146 DOT_FONTNAME = Helvetica 2147 2148 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of 2149 # dot graphs. 2150 # Minimum value: 4, maximum value: 24, default value: 10. 2151 # This tag requires that the tag HAVE_DOT is set to YES. 2152 2153 DOT_FONTSIZE = 10 2154 2155 # By default doxygen will tell dot to use the default font as specified with 2156 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set 2157 # the path where dot can find it using this tag. 2158 # This tag requires that the tag HAVE_DOT is set to YES. 2159 2160 DOT_FONTPATH = 2161 2162 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for 2163 # each documented class showing the direct and indirect inheritance relations. 2164 # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. 2165 # The default value is: YES. 2166 # This tag requires that the tag HAVE_DOT is set to YES. 2167 2168 CLASS_GRAPH = YES 2169 2170 # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a 2171 # graph for each documented class showing the direct and indirect implementation 2172 # dependencies (inheritance, containment, and class references variables) of the 2173 # class with other documented classes. 2174 # The default value is: YES. 2175 # This tag requires that the tag HAVE_DOT is set to YES. 2176 2177 COLLABORATION_GRAPH = YES 2178 2179 # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for 2180 # groups, showing the direct groups dependencies. 2181 # The default value is: YES. 2182 # This tag requires that the tag HAVE_DOT is set to YES. 2183 2184 GROUP_GRAPHS = YES 2185 2186 # If the UML_LOOK tag is set to YES, doxygen will generate inheritance and 2187 # collaboration diagrams in a style similar to the OMG's Unified Modeling 2188 # Language. 2189 # The default value is: NO. 2190 # This tag requires that the tag HAVE_DOT is set to YES. 2191 2192 UML_LOOK = YES 2193 2194 # If the UML_LOOK tag is enabled, the fields and methods are shown inside the 2195 # class node. If there are many fields or methods and many nodes the graph may 2196 # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the 2197 # number of items for each type to make the size more manageable. Set this to 0 2198 # for no limit. Note that the threshold may be exceeded by 50% before the limit 2199 # is enforced. So when you set the threshold to 10, up to 15 fields may appear, 2200 # but if the number exceeds 15, the total amount of fields shown is limited to 2201 # 10. 2202 # Minimum value: 0, maximum value: 100, default value: 10. 2203 # This tag requires that the tag HAVE_DOT is set to YES. 2204 2205 UML_LIMIT_NUM_FIELDS = 10 2206 2207 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and 2208 # collaboration graphs will show the relations between templates and their 2209 # instances. 2210 # The default value is: NO. 2211 # This tag requires that the tag HAVE_DOT is set to YES. 2212 2213 TEMPLATE_RELATIONS = YES 2214 2215 # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to 2216 # YES then doxygen will generate a graph for each documented file showing the 2217 # direct and indirect include dependencies of the file with other documented 1418 2218 # files. 1419 1420 ENABLE_PREPROCESSING = YES 1421 1422 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 1423 # names in the source code. If set to NO (the default) only conditional 1424 # compilation will be performed. Macro expansion can be done in a controlled 1425 # way by setting EXPAND_ONLY_PREDEF to YES. 1426 1427 MACRO_EXPANSION = YES 1428 1429 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 1430 # then the macro expansion is limited to the macros specified with the 1431 # PREDEFINED and EXPAND_AS_DEFINED tags. 1432 1433 EXPAND_ONLY_PREDEF = NO 1434 1435 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 1436 # pointed to by INCLUDE_PATH will be searched when a #include is found. 1437 1438 SEARCH_INCLUDES = YES 1439 1440 # The INCLUDE_PATH tag can be used to specify one or more directories that 1441 # contain include files that are not input files but should be processed by 1442 # the preprocessor. 1443 1444 INCLUDE_PATH = 1445 1446 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 1447 # patterns (like *.h and *.hpp) to filter out the header-files in the 1448 # directories. If left blank, the patterns specified with FILE_PATTERNS will 1449 # be used. 1450 1451 INCLUDE_FILE_PATTERNS = 1452 1453 # The PREDEFINED tag can be used to specify one or more macro names that 1454 # are defined before the preprocessor is started (similar to the -D option of 1455 # gcc). The argument of the tag is a list of macros of the form: name 1456 # or name=definition (no spaces). If the definition and the = are 1457 # omitted =1 is assumed. To prevent a macro definition from being 1458 # undefined via #undef or recursively expanded use the := operator 1459 # instead of the = operator. 1460 1461 PREDEFINED = 1462 1463 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 1464 # this tag can be used to specify a list of macro names that should be expanded. 1465 # The macro definition that is found in the sources will be used. 1466 # Use the PREDEFINED tag if you want to use a different macro definition that 1467 # overrules the definition found in the source code. 1468 1469 EXPAND_AS_DEFINED = 1470 1471 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 1472 # doxygen's preprocessor will remove all references to function-like macros 1473 # that are alone on a line, have an all uppercase name, and do not end with a 1474 # semicolon, because these will confuse the parser if not removed. 1475 1476 SKIP_FUNCTION_MACROS = YES 1477 1478 #--------------------------------------------------------------------------- 1479 # Configuration::additions related to external references 1480 #--------------------------------------------------------------------------- 1481 1482 # The TAGFILES option can be used to specify one or more tagfiles. 1483 # Optionally an initial location of the external documentation 1484 # can be added for each tagfile. The format of a tag file without 1485 # this location is as follows: 1486 # TAGFILES = file1 file2 ... 1487 # Adding location for the tag files is done as follows: 1488 # TAGFILES = file1=loc1 "file2 = loc2" ... 1489 # where "loc1" and "loc2" can be relative or absolute paths or 1490 # URLs. If a location is present for each tag, the installdox tool 1491 # does not have to be run to correct the links. 1492 # Note that each tag file must have a unique name 1493 # (where the name does NOT include the path) 1494 # If a tag file is not located in the directory in which doxygen 1495 # is run, you must also specify the path to the tagfile here. 1496 1497 TAGFILES = 1498 1499 # When a file name is specified after GENERATE_TAGFILE, doxygen will create 1500 # a tag file that is based on the input files it reads. 1501 1502 GENERATE_TAGFILE = 1503 1504 # If the ALLEXTERNALS tag is set to YES all external classes will be listed 1505 # in the class index. If set to NO only the inherited external classes 1506 # will be listed. 1507 1508 ALLEXTERNALS = NO 1509 1510 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 1511 # in the modules index. If set to NO, only the current project's groups will 1512 # be listed. 1513 1514 EXTERNAL_GROUPS = YES 1515 1516 # The PERL_PATH should be the absolute path and name of the perl script 1517 # interpreter (i.e. the result of `which perl'). 1518 1519 PERL_PATH = /usr/bin/perl 1520 1521 #--------------------------------------------------------------------------- 1522 # Configuration options related to the dot tool 1523 #--------------------------------------------------------------------------- 1524 1525 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 1526 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 1527 # or super classes. Setting the tag to NO turns the diagrams off. Note that 1528 # this option also works with HAVE_DOT disabled, but it is recommended to 1529 # install and use dot, since it yields more powerful graphs. 1530 1531 CLASS_DIAGRAMS = YES 1532 1533 # You can define message sequence charts within doxygen comments using the \msc 1534 # command. Doxygen will then run the mscgen tool (see 1535 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 1536 # documentation. The MSCGEN_PATH tag allows you to specify the directory where 1537 # the mscgen tool resides. If left empty the tool is assumed to be found in the 1538 # default search path. 1539 1540 MSCGEN_PATH = 1541 1542 # If set to YES, the inheritance and collaboration graphs will hide 1543 # inheritance and usage relations if the target is undocumented 1544 # or is not a class. 1545 1546 HIDE_UNDOC_RELATIONS = YES 1547 1548 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 1549 # available from the path. This tool is part of Graphviz, a graph visualization 1550 # toolkit from AT&T and Lucent Bell Labs. The other options in this section 1551 # have no effect if this option is set to NO (the default) 1552 1553 HAVE_DOT = YES 1554 1555 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 1556 # allowed to run in parallel. When set to 0 (the default) doxygen will 1557 # base this on the number of processors available in the system. You can set it 1558 # explicitly to a value larger than 0 to get control over the balance 1559 # between CPU load and processing speed. 1560 1561 DOT_NUM_THREADS = 0 1562 1563 # By default doxygen will write a font called Helvetica to the output 1564 # directory and reference it in all dot files that doxygen generates. 1565 # When you want a differently looking font you can specify the font name 1566 # using DOT_FONTNAME. You need to make sure dot is able to find the font, 1567 # which can be done by putting it in a standard location or by setting the 1568 # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 1569 # containing the font. 1570 1571 DOT_FONTNAME = Helvetica 1572 1573 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 1574 # The default size is 10pt. 1575 1576 DOT_FONTSIZE = 10 1577 1578 # By default doxygen will tell dot to use the output directory to look for the 1579 # FreeSans.ttf font (which doxygen will put there itself). If you specify a 1580 # different font using DOT_FONTNAME you can set the path where dot 1581 # can find it using this tag. 1582 1583 DOT_FONTPATH = 1584 1585 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 1586 # will generate a graph for each documented class showing the direct and 1587 # indirect inheritance relations. Setting this tag to YES will force the 1588 # the CLASS_DIAGRAMS tag to NO. 1589 1590 CLASS_GRAPH = YES 1591 1592 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 1593 # will generate a graph for each documented class showing the direct and 1594 # indirect implementation dependencies (inheritance, containment, and 1595 # class references variables) of the class with other documented classes. 1596 1597 COLLABORATION_GRAPH = YES 1598 1599 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 1600 # will generate a graph for groups, showing the direct groups dependencies 1601 1602 GROUP_GRAPHS = YES 1603 1604 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and 1605 # collaboration diagrams in a style similar to the OMG's Unified Modeling 1606 # Language. 1607 1608 UML_LOOK = YES 1609 1610 # If set to YES, the inheritance and collaboration graphs will show the 1611 # relations between templates and their instances. 1612 1613 TEMPLATE_RELATIONS = YES 1614 1615 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 1616 # tags are set to YES then doxygen will generate a graph for each documented 1617 # file showing the direct and indirect include dependencies of the file with 1618 # other documented files. 2219 # The default value is: YES. 2220 # This tag requires that the tag HAVE_DOT is set to YES. 1619 2221 1620 2222 INCLUDE_GRAPH = YES 1621 2223 1622 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 1623 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each 1624 # documented header file showing the documented files that directly or 1625 # indirectly include this file. 2224 # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are 2225 # set to YES then doxygen will generate a graph for each documented file showing 2226 # the direct and indirect include dependencies of the file with other documented 2227 # files. 2228 # The default value is: YES. 2229 # This tag requires that the tag HAVE_DOT is set to YES. 1626 2230 1627 2231 INCLUDED_BY_GRAPH = YES 1628 2232 1629 # If the CALL_GRAPH and HAVE_DOT options are set to YES then 1630 # doxygen will generate a call dependency graph for every global function 1631 # or class method. Note that enabling this option will significantly increase 1632 # the time of a run. So in most cases it will be better to enable call graphs 1633 # for selected functions only using the \callgraph command. 2233 # If the CALL_GRAPH tag is set to YES then doxygen will generate a call 2234 # dependency graph for every global function or class method. 2235 # 2236 # Note that enabling this option will significantly increase the time of a run. 2237 # So in most cases it will be better to enable call graphs for selected 2238 # functions only using the \callgraph command. Disabling a call graph can be 2239 # accomplished by means of the command \hidecallgraph. 2240 # The default value is: NO. 2241 # This tag requires that the tag HAVE_DOT is set to YES. 1634 2242 1635 2243 CALL_GRAPH = YES 1636 2244 1637 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 1638 # doxygen will generate a caller dependency graph for every global function 1639 # or class method. Note that enabling this option will significantly increase 1640 # the time of a run. So in most cases it will be better to enable caller 1641 # graphs for selected functions only using the \callergraph command. 2245 # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller 2246 # dependency graph for every global function or class method. 2247 # 2248 # Note that enabling this option will significantly increase the time of a run. 2249 # So in most cases it will be better to enable caller graphs for selected 2250 # functions only using the \callergraph command. Disabling a caller graph can be 2251 # accomplished by means of the command \hidecallergraph. 2252 # The default value is: NO. 2253 # This tag requires that the tag HAVE_DOT is set to YES. 1642 2254 1643 2255 CALLER_GRAPH = YES 1644 2256 1645 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 1646 # will generate a graphical hierarchy of all classes instead of a textual one. 2257 # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical 2258 # hierarchy of all classes instead of a textual one. 2259 # The default value is: YES. 2260 # This tag requires that the tag HAVE_DOT is set to YES. 1647 2261 1648 2262 GRAPHICAL_HIERARCHY = YES 1649 2263 1650 # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 1651 # then doxygen will show the dependencies a directory has on other directories 1652 # in a graphical way. The dependency relations are determined by the #include 1653 # relations between the files in the directories. 2264 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the 2265 # dependencies a directory has on other directories in a graphical way. The 2266 # dependency relations are determined by the #include relations between the 2267 # files in the directories. 2268 # The default value is: YES. 2269 # This tag requires that the tag HAVE_DOT is set to YES. 1654 2270 1655 2271 DIRECTORY_GRAPH = YES 1656 2272 1657 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 1658 # generated by dot. Possible values are svg, png, jpg, or gif. 1659 # If left blank png will be used. 2273 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 2274 # generated by dot. For an explanation of the image formats see the section 2275 # output formats in the documentation of the dot tool (Graphviz (see: 2276 # http://www.graphviz.org/)). 2277 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order 2278 # to make the SVG files visible in IE 9+ (other browsers do not have this 2279 # requirement). 2280 # Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, 2281 # png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and 2282 # png:gdiplus:gdiplus. 2283 # The default value is: png. 2284 # This tag requires that the tag HAVE_DOT is set to YES. 1660 2285 1661 2286 DOT_IMAGE_FORMAT = png 1662 2287 1663 # The tag DOT_PATH can be used to specify the path where the dot tool can be 2288 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 2289 # enable generation of interactive SVG images that allow zooming and panning. 2290 # 2291 # Note that this requires a modern browser other than Internet Explorer. Tested 2292 # and working are Firefox, Chrome, Safari, and Opera. 2293 # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make 2294 # the SVG files visible. Older versions of IE do not have SVG support. 2295 # The default value is: NO. 2296 # This tag requires that the tag HAVE_DOT is set to YES. 2297 2298 INTERACTIVE_SVG = NO 2299 2300 # The DOT_PATH tag can be used to specify the path where the dot tool can be 1664 2301 # found. If left blank, it is assumed the dot tool can be found in the path. 1665 1666 DOT_PATH = 1667 1668 # The DOTFILE_DIRS tag can be used to specify one or more directories that 1669 # contain dot files that are included in the documentation (see the 1670 # \dotfile command). 1671 1672 DOTFILE_DIRS = 1673 1674 # The MSCFILE_DIRS tag can be used to specify one or more directories that 1675 # contain msc files that are included in the documentation (see the 1676 # \mscfile command). 1677 1678 MSCFILE_DIRS = 1679 1680 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 1681 # nodes that will be shown in the graph. If the number of nodes in a graph 1682 # becomes larger than this value, doxygen will truncate the graph, which is 1683 # visualized by representing a node as a red box. Note that doxygen if the 1684 # number of direct children of the root node in a graph is already larger than 1685 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 1686 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 2302 # This tag requires that the tag HAVE_DOT is set to YES. 2303 2304 DOT_PATH = 2305 2306 # The DOTFILE_DIRS tag can be used to specify one or more directories that 2307 # contain dot files that are included in the documentation (see the \dotfile 2308 # command). 2309 # This tag requires that the tag HAVE_DOT is set to YES. 2310 2311 DOTFILE_DIRS = 2312 2313 # The MSCFILE_DIRS tag can be used to specify one or more directories that 2314 # contain msc files that are included in the documentation (see the \mscfile 2315 # command). 2316 2317 MSCFILE_DIRS = 2318 2319 # The DIAFILE_DIRS tag can be used to specify one or more directories that 2320 # contain dia files that are included in the documentation (see the \diafile 2321 # command). 2322 2323 DIAFILE_DIRS = 2324 2325 # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the 2326 # path where java can find the plantuml.jar file. If left blank, it is assumed 2327 # PlantUML is not used or called during a preprocessing step. Doxygen will 2328 # generate a warning when it encounters a \startuml command in this case and 2329 # will not generate output for the diagram. 2330 2331 PLANTUML_JAR_PATH = 2332 2333 # When using plantuml, the specified paths are searched for files specified by 2334 # the !include statement in a plantuml block. 2335 2336 PLANTUML_INCLUDE_PATH = 2337 2338 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes 2339 # that will be shown in the graph. If the number of nodes in a graph becomes 2340 # larger than this value, doxygen will truncate the graph, which is visualized 2341 # by representing a node as a red box. Note that doxygen if the number of direct 2342 # children of the root node in a graph is already larger than 2343 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that 2344 # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 2345 # Minimum value: 0, maximum value: 10000, default value: 50. 2346 # This tag requires that the tag HAVE_DOT is set to YES. 1687 2347 1688 2348 DOT_GRAPH_MAX_NODES = 50 1689 2349 1690 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 1691 # g raphs generated by dot. A depth value of 3 means that only nodes reachable1692 # from the root by following a path via at most 3 edges will be shown. Nodes1693 # that lay further from the root node will be omitted. Note that setting this1694 # o ption to 1 or 2 may greatly reduce the computation time needed for large1695 # code bases. Also note that the size of a graph can be further restricted by2350 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs 2351 # generated by dot. A depth value of 3 means that only nodes reachable from the 2352 # root by following a path via at most 3 edges will be shown. Nodes that lay 2353 # further from the root node will be omitted. Note that setting this option to 1 2354 # or 2 may greatly reduce the computation time needed for large code bases. Also 2355 # note that the size of a graph can be further restricted by 1696 2356 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. 2357 # Minimum value: 0, maximum value: 1000, default value: 0. 2358 # This tag requires that the tag HAVE_DOT is set to YES. 1697 2359 1698 2360 MAX_DOT_GRAPH_DEPTH = 0 1699 2361 1700 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 1701 # background. This is disabled by default, because dot on Windows does not 1702 # seem to support this out of the box. Warning: Depending on the platform used, 1703 # enabling this option may lead to badly anti-aliased labels on the edges of 1704 # a graph (i.e. they become hard to read). 2362 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 2363 # background. This is disabled by default, because dot on Windows does not seem 2364 # to support this out of the box. 2365 # 2366 # Warning: Depending on the platform used, enabling this option may lead to 2367 # badly anti-aliased labels on the edges of a graph (i.e. they become hard to 2368 # read). 2369 # The default value is: NO. 2370 # This tag requires that the tag HAVE_DOT is set to YES. 1705 2371 1706 2372 DOT_TRANSPARENT = NO 1707 2373 1708 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 1709 # files in one run (i.e. multiple -o and -T options on the command line). This 1710 # makes dot run faster, but since only newer versions of dot (>1.8.10) 1711 # support this, this feature is disabled by default. 2374 # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output 2375 # files in one run (i.e. multiple -o and -T options on the command line). This 2376 # makes dot run faster, but since only newer versions of dot (>1.8.10) support 2377 # this, this feature is disabled by default. 2378 # The default value is: NO. 2379 # This tag requires that the tag HAVE_DOT is set to YES. 1712 2380 1713 2381 DOT_MULTI_TARGETS = NO 1714 2382 1715 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 1716 # generate a legend page explaining the meaning of the various boxes and 1717 # arrows in the dot generated graphs. 2383 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page 2384 # explaining the meaning of the various boxes and arrows in the dot generated 2385 # graphs. 2386 # The default value is: YES. 2387 # This tag requires that the tag HAVE_DOT is set to YES. 1718 2388 1719 2389 GENERATE_LEGEND = YES 1720 2390 1721 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 1722 # remove the intermediate dot files that are used to generate 1723 # the various graphs. 2391 # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot 2392 # files that are used to generate the various graphs. 2393 # The default value is: YES. 2394 # This tag requires that the tag HAVE_DOT is set to YES. 1724 2395 1725 2396 DOT_CLEANUP = YES -
XIOS/dev/branch_yushan_merged/bld.cfg
r1134 r1138 33 33 #bld::target libxios.a 34 34 #bld::target generate_fortran_interface.exe 35 #bld::target xios_server.exe36 #bld::target test_remap.exe35 bld::target xios_server.exe 36 bld::target test_remap.exe 37 37 #bld::target test_regular.exe 38 38 #bld::target test_expand_domain.exe 39 39 #bld::target test_new_features.exe test_unstruct_complete.exe 40 40 bld::target test_omp.exe test_complete_omp.exe 41 bld::target test_client.exe test_complete.exe test_xios2_cmip6.exe41 bld::target test_client.exe test_complete.exe #test_xios2_cmip6.exe 42 42 #bld::target test_connectivity_expand.exe 43 43 #bld::target toy_cmip6.exe -
XIOS/dev/branch_yushan_merged/extern/remap/src/mapper.cpp
r1134 r1138 65 65 void Mapper::setTargetMesh(const double* boundsLon, const double* boundsLat, int nVertex, int nbCells, const double* pole, const long int* globalId) 66 66 { 67 tgtGrid.pole = Coord(pole[0], pole[1], pole[2]);68 69 70 71 72 73 74 75 76 targetGlobalId.resize(nbCells) ;77 if (globalId==NULL)78 {79 long int offset ;80 long int nb=nbCells ;81 MPI_Scan(&nb,&offset,1,MPI_LONG,MPI_SUM,communicator) ;82 offset=offset-nb ;83 for(int i=0;i<nbCells;i++) targetGlobalId[i]=offset+i ;84 }85 else targetGlobalId.assign(globalId,globalId+nbCells);86 87 88 89 90 91 92 93 94 67 tgtGrid.pole = Coord(pole[0], pole[1], pole[2]); 68 69 int mpiRank, mpiSize; 70 MPI_Comm_rank(communicator, &mpiRank); 71 MPI_Comm_size(communicator, &mpiSize); 72 73 targetElements.reserve(nbCells); 74 targetMesh.reserve(nbCells); 75 76 targetGlobalId.resize(nbCells) ; 77 if (globalId==NULL) 78 { 79 long int offset ; 80 long int nb=nbCells ; 81 MPI_Scan(&nb,&offset,1,MPI_LONG,MPI_SUM,communicator) ; 82 offset=offset-nb ; 83 for(int i=0;i<nbCells;i++) targetGlobalId[i]=offset+i ; 84 } 85 else targetGlobalId.assign(globalId,globalId+nbCells); 86 87 for (int i = 0; i < nbCells; i++) 88 { 89 int offs = i*nVertex; 90 Elt elt(boundsLon + offs, boundsLat + offs, nVertex); 91 targetElements.push_back(elt); 92 targetMesh.push_back(Node(elt.x, cptRadius(elt), &sourceElements.back())); 93 cptEltGeom(targetElements[i], Coord(pole[0], pole[1], pole[2])); 94 } 95 95 96 96 … … 99 99 void Mapper::setSourceValue(const double* val) 100 100 { 101 int size=sourceElements.size() ;102 for(int i=0;i<size;++i) sourceElements[i].val=val[i] ;101 int size=sourceElements.size() ; 102 for(int i=0;i<size;++i) sourceElements[i].val=val[i] ; 103 103 } 104 104 105 105 void Mapper::getTargetValue(double* val) 106 106 { 107 int size=targetElements.size() ;108 for(int i=0;i<size;++i) val[i]=targetElements[i].val ;107 int size=targetElements.size() ; 108 for(int i=0;i<size;++i) val[i]=targetElements[i].val ; 109 109 } 110 110 111 111 vector<double> Mapper::computeWeights(int interpOrder, bool renormalize, bool quantity) 112 112 { 113 114 115 116 117 118 this->buildSSTree(sourceMesh, targetMesh);119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 sourceWeightId =new long[nIntersections*NMAX];149 targetWeightId =new long[nIntersections*NMAX];150 151 152 153 154 155 156 157 for (int i = 0; i < targetElements.size(); i++) targetElements[i].delete_intersections();158 159 113 vector<double> timings; 114 int mpiSize, mpiRank; 115 MPI_Comm_size(communicator, &mpiSize); 116 MPI_Comm_rank(communicator, &mpiRank); 117 118 this->buildSSTree(sourceMesh, targetMesh); 119 120 if (mpiRank == 0 && verbose) cout << "Computing intersections ..." << endl; 121 double tic = cputime(); 122 computeIntersection(&targetElements[0], targetElements.size()); 123 timings.push_back(cputime() - tic); 124 125 tic = cputime(); 126 if (interpOrder == 2) { 127 if (mpiRank == 0 && verbose) cout << "Computing grads ..." << endl; 128 buildMeshTopology(); 129 computeGrads(); 130 } 131 timings.push_back(cputime() - tic); 132 133 /* Prepare computation of weights */ 134 /* compute number of intersections which for the first order case 135 corresponds to the number of edges in the remap matrix */ 136 int nIntersections = 0; 137 for (int j = 0; j < targetElements.size(); j++) 138 { 139 Elt &elt = targetElements[j]; 140 for (list<Polyg*>::iterator it = elt.is.begin(); it != elt.is.end(); it++) 141 nIntersections++; 142 } 143 /* overallocate for NMAX neighbours for each elements */ 144 remapMatrix = new double[nIntersections*NMAX]; 145 srcAddress = new int[nIntersections*NMAX]; 146 srcRank = new int[nIntersections*NMAX]; 147 dstAddress = new int[nIntersections*NMAX]; 148 sourceWeightId =new long[nIntersections*NMAX]; 149 targetWeightId =new long[nIntersections*NMAX]; 150 151 152 if (mpiRank == 0 && verbose) cout << "Remapping..." << endl; 153 tic = cputime(); 154 nWeights = remap(&targetElements[0], targetElements.size(), interpOrder, renormalize, quantity); 155 timings.push_back(cputime() - tic); 156 157 for (int i = 0; i < targetElements.size(); i++) targetElements[i].delete_intersections(); 158 159 return timings; 160 160 } 161 161 162 162 /** 163 164 165 166 167 */163 @param elements are cells of the target grid that are distributed over CPUs 164 indepentently of the distribution of the SS-tree. 165 @param nbElements is the size of the elements array. 166 @param order is the order of interpolaton (must be 1 or 2). 167 */ 168 168 int Mapper::remap(Elt *elements, int nbElements, int order, bool renormalize, bool quantity) 169 169 { 170 int mpiSize, mpiRank; 171 MPI_Comm_size(communicator, &mpiSize); 172 MPI_Comm_rank(communicator, &mpiRank); 173 174 /* create list of intersections (super mesh elements) for each rank */ 175 multimap<int, Polyg *> *elementList = new multimap<int, Polyg *>[mpiSize]; 176 for (int j = 0; j < nbElements; j++) 177 { 178 Elt& e = elements[j]; 179 for (list<Polyg *>::iterator it = e.is.begin(); it != e.is.end(); it++) 180 elementList[(*it)->id.rank].insert(pair<int, Polyg *>((*it)->id.ind, *it)); 181 } 182 183 int *nbSendElement = new int[mpiSize]; 184 int **sendElement = new int*[mpiSize]; /* indices of elements required from other rank */ 185 double **recvValue = new double*[mpiSize]; 186 double **recvArea = new double*[mpiSize]; 187 Coord **recvGrad = new Coord*[mpiSize]; 188 GloId **recvNeighIds = new GloId*[mpiSize]; /* ids of the of the source neighbours which also contribute through gradient */ 189 for (int rank = 0; rank < mpiSize; rank++) 190 { 191 /* get size for allocation */ 192 int last = -1; /* compares unequal to any index */ 193 int index = -1; /* increased to starting index 0 in first iteration */ 194 for (multimap<int, Polyg *>::iterator it = elementList[rank].begin(); it != elementList[rank].end(); ++it) 195 { 196 if (last != it->first) 197 index++; 198 (it->second)->id.ind = index; 199 last = it->first; 200 } 201 nbSendElement[rank] = index + 1; 202 203 /* if size is non-zero allocate and collect indices of elements on other ranks that we intersect */ 204 if (nbSendElement[rank] > 0) 205 { 206 sendElement[rank] = new int[nbSendElement[rank]]; 207 recvValue[rank] = new double[nbSendElement[rank]]; 208 recvArea[rank] = new double[nbSendElement[rank]]; 209 if (order == 2) 210 { 211 recvNeighIds[rank] = new GloId[nbSendElement[rank]*(NMAX+1)]; 212 recvGrad[rank] = new Coord[nbSendElement[rank]*(NMAX+1)]; 213 } 214 else 215 recvNeighIds[rank] = new GloId[nbSendElement[rank]]; 216 217 last = -1; 218 index = -1; 219 for (multimap<int, Polyg *>::iterator it = elementList[rank].begin(); it != elementList[rank].end(); ++it) 220 { 221 if (last != it->first) 222 index++; 223 sendElement[rank][index] = it->first; 224 last = it->first; 225 } 226 } 227 } 228 229 /* communicate sizes of source elements to be sent (index lists and later values and gradients) */ 230 int *nbRecvElement = new int[mpiSize]; 231 MPI_Alltoall(nbSendElement, 1, MPI_INT, nbRecvElement, 1, MPI_INT, communicator); 232 233 /* communicate indices of source elements on other ranks whoes value and gradient we need (since intersection) */ 234 int nbSendRequest = 0; 235 int nbRecvRequest = 0; 236 int **recvElement = new int*[mpiSize]; 237 double **sendValue = new double*[mpiSize]; 238 double **sendArea = new double*[mpiSize]; 239 Coord **sendGrad = new Coord*[mpiSize]; 240 GloId **sendNeighIds = new GloId*[mpiSize]; 241 MPI_Request *sendRequest = new MPI_Request[3*mpiSize]; 242 MPI_Request *recvRequest = new MPI_Request[3*mpiSize]; 243 for (int rank = 0; rank < mpiSize; rank++) 244 { 245 if (nbSendElement[rank] > 0) 246 { 247 MPI_Issend(sendElement[rank], nbSendElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 248 nbSendRequest++; 249 } 250 251 if (nbRecvElement[rank] > 0) 252 { 253 recvElement[rank] = new int[nbRecvElement[rank]]; 254 sendValue[rank] = new double[nbRecvElement[rank]]; 255 sendArea[rank] = new double[nbRecvElement[rank]]; 256 if (order == 2) 257 { 258 sendNeighIds[rank] = new GloId[nbRecvElement[rank]*(NMAX+1)]; 259 sendGrad[rank] = new Coord[nbRecvElement[rank]*(NMAX+1)]; 260 } 261 else 262 { 263 sendNeighIds[rank] = new GloId[nbRecvElement[rank]]; 264 } 265 MPI_Irecv(recvElement[rank], nbRecvElement[rank], MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 266 nbRecvRequest++; 267 } 268 } 269 MPI_Status *status = new MPI_Status[3*mpiSize]; 270 MPI_Waitall(nbRecvRequest, recvRequest, status); 271 MPI_Waitall(nbSendRequest, sendRequest, status); 272 273 /* for all indices that have been received from requesting ranks: pack values and gradients, then send */ 274 nbSendRequest = 0; 275 nbRecvRequest = 0; 276 for (int rank = 0; rank < mpiSize; rank++) 277 { 278 if (nbRecvElement[rank] > 0) 279 { 280 int jj = 0; // jj == j if no weight writing 281 for (int j = 0; j < nbRecvElement[rank]; j++) 282 { 283 sendValue[rank][j] = sstree.localElements[recvElement[rank][j]].val; 284 sendArea[rank][j] = sstree.localElements[recvElement[rank][j]].area; 285 if (order == 2) 286 { 287 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].grad; 288 // cout<<"grad "<<jj<<" "<<recvElement[rank][j]<<" "<<sendGrad[rank][jj]<<" "<<sstree.localElements[recvElement[rank][j]].grad<<endl ; 289 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].src_id; 290 jj++; 291 for (int i = 0; i < NMAX; i++) 292 { 293 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].gradNeigh[i]; 294 // cout<<"grad "<<jj<<" "<<sendGrad[rank][jj]<<" "<<sstree.localElements[recvElement[rank][j]].grad<<endl ; 295 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].neighId[i]; 296 jj++; 297 } 298 } 299 else 300 sendNeighIds[rank][j] = sstree.localElements[recvElement[rank][j]].src_id; 301 } 302 MPI_Issend(sendValue[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 303 nbSendRequest++; 304 MPI_Issend(sendArea[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 305 nbSendRequest++; 306 if (order == 2) 307 { 308 MPI_Issend(sendGrad[rank], 3*nbRecvElement[rank]*(NMAX+1), 309 MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 310 nbSendRequest++; 311 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 312 //ym --> attention taille GloId 313 nbSendRequest++; 314 } 315 else 316 { 317 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 318 //ym --> attention taille GloId 319 nbSendRequest++; 320 } 321 } 322 if (nbSendElement[rank] > 0) 323 { 324 MPI_Irecv(recvValue[rank], nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 325 nbRecvRequest++; 326 MPI_Irecv(recvArea[rank], nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 327 nbRecvRequest++; 328 if (order == 2) 329 { 330 MPI_Irecv(recvGrad[rank], 3*nbSendElement[rank]*(NMAX+1), 331 MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 332 nbRecvRequest++; 333 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 334 //ym --> attention taille GloId 335 nbRecvRequest++; 336 } 337 else 338 { 339 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank], MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 340 //ym --> attention taille GloId 341 nbRecvRequest++; 342 } 343 } 344 } 345 MPI_Waitall(nbRecvRequest, recvRequest, status); 346 MPI_Waitall(nbSendRequest, sendRequest, status); 347 348 /* now that all values and gradients are available use them to computed interpolated values on target 349 and also to compute weights */ 350 int i = 0; 351 for (int j = 0; j < nbElements; j++) 352 { 353 Elt& e = elements[j]; 354 355 /* since for the 2nd order case source grid elements can contribute to a destination grid element over several "paths" 356 (step1: gradient is computed using neighbours on same grid, step2: intersection uses several elements on other grid) 357 accumulate them so that there is only one final weight between two elements */ 358 map<GloId,double> wgt_map; 359 360 /* for destination element `e` loop over all intersetions/the corresponding source elements */ 361 for (list<Polyg *>::iterator it = e.is.begin(); it != e.is.end(); it++) 362 { 363 /* it is the intersection element, so it->x and it->area are barycentre and area of intersection element (super mesh) 364 but it->id is id of the source element that it intersects */ 365 int n1 = (*it)->id.ind; 366 int rank = (*it)->id.rank; 367 double fk = recvValue[rank][n1]; 368 double srcArea = recvArea[rank][n1]; 369 double w = (*it)->area; 370 if (quantity) w/=srcArea ; 371 372 /* first order: src value times weight (weight = supermesh area), later divide by target area */ 373 int kk = (order == 2) ? n1 * (NMAX + 1) : n1; 374 GloId neighID = recvNeighIds[rank][kk]; 375 wgt_map[neighID] += w; 376 377 if (order == 2) 378 { 379 for (int k = 0; k < NMAX+1; k++) 380 { 381 int kk = n1 * (NMAX + 1) + k; 382 GloId neighID = recvNeighIds[rank][kk]; 383 if (neighID.ind != -1) wgt_map[neighID] += w * scalarprod(recvGrad[rank][kk], (*it)->x); 384 } 385 386 } 387 } 388 389 double renorm=0; 390 if (renormalize) 391 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) renorm+=it->second / e.area; 392 else renorm=1. ; 393 394 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) 395 { 396 if (quantity) this->remapMatrix[i] = (it->second ) / renorm; 397 else this->remapMatrix[i] = (it->second / e.area) / renorm; 398 this->srcAddress[i] = it->first.ind; 399 this->srcRank[i] = it->first.rank; 400 this->dstAddress[i] = j; 401 this->sourceWeightId[i]= it->first.globalId ; 402 this->targetWeightId[i]= targetGlobalId[j] ; 403 i++; 404 } 405 } 406 407 /* free all memory allocated in this function */ 408 for (int rank = 0; rank < mpiSize; rank++) 409 { 410 if (nbSendElement[rank] > 0) 411 { 412 delete[] sendElement[rank]; 413 delete[] recvValue[rank]; 414 delete[] recvArea[rank]; 415 if (order == 2) 416 { 417 delete[] recvGrad[rank]; 418 } 419 delete[] recvNeighIds[rank]; 420 } 421 if (nbRecvElement[rank] > 0) 422 { 423 delete[] recvElement[rank]; 424 delete[] sendValue[rank]; 425 delete[] sendArea[rank]; 426 if (order == 2) 427 delete[] sendGrad[rank]; 428 delete[] sendNeighIds[rank]; 429 } 430 } 431 delete[] status; 432 delete[] sendRequest; 433 delete[] recvRequest; 434 delete[] elementList; 435 delete[] nbSendElement; 436 delete[] nbRecvElement; 437 delete[] sendElement; 438 delete[] recvElement; 439 delete[] sendValue; 440 delete[] recvValue; 441 delete[] sendGrad; 442 delete[] recvGrad; 443 delete[] sendNeighIds; 444 delete[] recvNeighIds; 445 return i; 170 int mpiSize, mpiRank; 171 MPI_Comm_size(communicator, &mpiSize); 172 MPI_Comm_rank(communicator, &mpiRank); 173 174 /* create list of intersections (super mesh elements) for each rank */ 175 multimap<int, Polyg *> *elementList = new multimap<int, Polyg *>[mpiSize]; 176 for (int j = 0; j < nbElements; j++) 177 { 178 Elt& e = elements[j]; 179 for (list<Polyg *>::iterator it = e.is.begin(); it != e.is.end(); it++) 180 elementList[(*it)->id.rank].insert(pair<int, Polyg *>((*it)->id.ind, *it)); 181 } 182 183 int *nbSendElement = new int[mpiSize]; 184 int **sendElement = new int*[mpiSize]; /* indices of elements required from other rank */ 185 double **recvValue = new double*[mpiSize]; 186 double **recvArea = new double*[mpiSize]; 187 Coord **recvGrad = new Coord*[mpiSize]; 188 GloId **recvNeighIds = new GloId*[mpiSize]; /* ids of the of the source neighbours which also contribute through gradient */ 189 for (int rank = 0; rank < mpiSize; rank++) 190 { 191 /* get size for allocation */ 192 int last = -1; /* compares unequal to any index */ 193 int index = -1; /* increased to starting index 0 in first iteration */ 194 for (multimap<int, Polyg *>::iterator it = elementList[rank].begin(); it != elementList[rank].end(); ++it) 195 { 196 if (last != it->first) 197 index++; 198 (it->second)->id.ind = index; 199 last = it->first; 200 } 201 nbSendElement[rank] = index + 1; 202 203 /* if size is non-zero allocate and collect indices of elements on other ranks that we intersect */ 204 if (nbSendElement[rank] > 0) 205 { 206 sendElement[rank] = new int[nbSendElement[rank]]; 207 recvValue[rank] = new double[nbSendElement[rank]]; 208 recvArea[rank] = new double[nbSendElement[rank]]; 209 if (order == 2) 210 { 211 recvNeighIds[rank] = new GloId[nbSendElement[rank]*(NMAX+1)]; 212 recvGrad[rank] = new Coord[nbSendElement[rank]*(NMAX+1)]; 213 } 214 else 215 recvNeighIds[rank] = new GloId[nbSendElement[rank]]; 216 217 last = -1; 218 index = -1; 219 for (multimap<int, Polyg *>::iterator it = elementList[rank].begin(); it != elementList[rank].end(); ++it) 220 { 221 if (last != it->first) 222 index++; 223 sendElement[rank][index] = it->first; 224 last = it->first; 225 } 226 } 227 } 228 229 /* communicate sizes of source elements to be sent (index lists and later values and gradients) */ 230 int *nbRecvElement = new int[mpiSize]; 231 MPI_Alltoall(nbSendElement, 1, MPI_INT, nbRecvElement, 1, MPI_INT, communicator); 232 233 /* communicate indices of source elements on other ranks whoes value and gradient we need (since intersection) */ 234 int nbSendRequest = 0; 235 int nbRecvRequest = 0; 236 int **recvElement = new int*[mpiSize]; 237 double **sendValue = new double*[mpiSize]; 238 double **sendArea = new double*[mpiSize]; 239 Coord **sendGrad = new Coord*[mpiSize]; 240 GloId **sendNeighIds = new GloId*[mpiSize]; 241 MPI_Request *sendRequest = new MPI_Request[4*mpiSize]; 242 MPI_Request *recvRequest = new MPI_Request[4*mpiSize]; 243 for (int rank = 0; rank < mpiSize; rank++) 244 { 245 if (nbSendElement[rank] > 0) 246 { 247 MPI_Issend(sendElement[rank], nbSendElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 248 nbSendRequest++; 249 } 250 251 if (nbRecvElement[rank] > 0) 252 { 253 recvElement[rank] = new int[nbRecvElement[rank]]; 254 sendValue[rank] = new double[nbRecvElement[rank]]; 255 sendArea[rank] = new double[nbRecvElement[rank]]; 256 if (order == 2) 257 { 258 sendNeighIds[rank] = new GloId[nbRecvElement[rank]*(NMAX+1)]; 259 sendGrad[rank] = new Coord[nbRecvElement[rank]*(NMAX+1)]; 260 } 261 else 262 { 263 sendNeighIds[rank] = new GloId[nbRecvElement[rank]]; 264 } 265 MPI_Irecv(recvElement[rank], nbRecvElement[rank], MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 266 nbRecvRequest++; 267 } 268 } 269 270 MPI_Status *status = new MPI_Status[4*mpiSize]; 271 272 MPI_Waitall(nbSendRequest, sendRequest, status); 273 MPI_Waitall(nbRecvRequest, recvRequest, status); 274 275 /* for all indices that have been received from requesting ranks: pack values and gradients, then send */ 276 nbSendRequest = 0; 277 nbRecvRequest = 0; 278 for (int rank = 0; rank < mpiSize; rank++) 279 { 280 if (nbRecvElement[rank] > 0) 281 { 282 int jj = 0; // jj == j if no weight writing 283 for (int j = 0; j < nbRecvElement[rank]; j++) 284 { 285 sendValue[rank][j] = sstree.localElements[recvElement[rank][j]].val; 286 sendArea[rank][j] = sstree.localElements[recvElement[rank][j]].area; 287 if (order == 2) 288 { 289 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].grad; 290 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].src_id; 291 jj++; 292 for (int i = 0; i < NMAX; i++) 293 { 294 sendGrad[rank][jj] = sstree.localElements[recvElement[rank][j]].gradNeigh[i]; 295 sendNeighIds[rank][jj] = sstree.localElements[recvElement[rank][j]].neighId[i]; 296 jj++; 297 } 298 } 299 else 300 sendNeighIds[rank][j] = sstree.localElements[recvElement[rank][j]].src_id; 301 } 302 MPI_Issend(sendValue[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 303 nbSendRequest++; 304 MPI_Issend(sendArea[rank], nbRecvElement[rank], MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 305 nbSendRequest++; 306 if (order == 2) 307 { 308 MPI_Issend(sendGrad[rank], 3*nbRecvElement[rank]*(NMAX+1), 309 MPI_DOUBLE, rank, 0, communicator, &sendRequest[nbSendRequest]); 310 nbSendRequest++; 311 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 312 //ym --> attention taille GloId 313 nbSendRequest++; 314 } 315 else 316 { 317 MPI_Issend(sendNeighIds[rank], 4*nbRecvElement[rank], MPI_INT, rank, 0, communicator, &sendRequest[nbSendRequest]); 318 //ym --> attention taille GloId 319 nbSendRequest++; 320 321 } 322 } 323 if (nbSendElement[rank] > 0) 324 { 325 MPI_Irecv(recvValue[rank], nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 326 nbRecvRequest++; 327 MPI_Irecv(recvArea[rank], nbSendElement[rank], MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 328 nbRecvRequest++; 329 if (order == 2) 330 { 331 MPI_Irecv(recvGrad[rank], 3*nbSendElement[rank]*(NMAX+1), 332 MPI_DOUBLE, rank, 0, communicator, &recvRequest[nbRecvRequest]); 333 nbRecvRequest++; 334 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank]*(NMAX+1), MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 335 //ym --> attention taille GloId 336 nbRecvRequest++; 337 } 338 else 339 { 340 MPI_Irecv(recvNeighIds[rank], 4*nbSendElement[rank], MPI_INT, rank, 0, communicator, &recvRequest[nbRecvRequest]); 341 //ym --> attention taille GloId 342 nbRecvRequest++; 343 } 344 } 345 } 346 347 MPI_Waitall(nbSendRequest, sendRequest, status); 348 MPI_Waitall(nbRecvRequest, recvRequest, status); 349 350 /* now that all values and gradients are available use them to computed interpolated values on target 351 and also to compute weights */ 352 int i = 0; 353 for (int j = 0; j < nbElements; j++) 354 { 355 Elt& e = elements[j]; 356 357 /* since for the 2nd order case source grid elements can contribute to a destination grid element over several "paths" 358 (step1: gradient is computed using neighbours on same grid, step2: intersection uses several elements on other grid) 359 accumulate them so that there is only one final weight between two elements */ 360 map<GloId,double> wgt_map; 361 362 /* for destination element `e` loop over all intersetions/the corresponding source elements */ 363 for (list<Polyg *>::iterator it = e.is.begin(); it != e.is.end(); it++) 364 { 365 /* it is the intersection element, so it->x and it->area are barycentre and area of intersection element (super mesh) 366 but it->id is id of the source element that it intersects */ 367 int n1 = (*it)->id.ind; 368 int rank = (*it)->id.rank; 369 double fk = recvValue[rank][n1]; 370 double srcArea = recvArea[rank][n1]; 371 double w = (*it)->area; 372 if (quantity) w/=srcArea ; 373 374 /* first order: src value times weight (weight = supermesh area), later divide by target area */ 375 int kk = (order == 2) ? n1 * (NMAX + 1) : n1; 376 GloId neighID = recvNeighIds[rank][kk]; 377 wgt_map[neighID] += w; 378 379 if (order == 2) 380 { 381 for (int k = 0; k < NMAX+1; k++) 382 { 383 int kk = n1 * (NMAX + 1) + k; 384 GloId neighID = recvNeighIds[rank][kk]; 385 if (neighID.ind != -1) wgt_map[neighID] += w * scalarprod(recvGrad[rank][kk], (*it)->x); 386 } 387 388 } 389 } 390 391 double renorm=0; 392 if (renormalize) 393 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) renorm+=it->second / e.area; 394 else renorm=1. ; 395 396 for (map<GloId,double>::iterator it = wgt_map.begin(); it != wgt_map.end(); it++) 397 { 398 if (quantity) this->remapMatrix[i] = (it->second ) / renorm; 399 else this->remapMatrix[i] = (it->second / e.area) / renorm; 400 this->srcAddress[i] = it->first.ind; 401 this->srcRank[i] = it->first.rank; 402 this->dstAddress[i] = j; 403 this->sourceWeightId[i]= it->first.globalId ; 404 this->targetWeightId[i]= targetGlobalId[j] ; 405 i++; 406 } 407 } 408 409 /* free all memory allocated in this function */ 410 for (int rank = 0; rank < mpiSize; rank++) 411 { 412 if (nbSendElement[rank] > 0) 413 { 414 delete[] sendElement[rank]; 415 delete[] recvValue[rank]; 416 delete[] recvArea[rank]; 417 if (order == 2) 418 { 419 delete[] recvGrad[rank]; 420 } 421 delete[] recvNeighIds[rank]; 422 } 423 if (nbRecvElement[rank] > 0) 424 { 425 delete[] recvElement[rank]; 426 delete[] sendValue[rank]; 427 delete[] sendArea[rank]; 428 if (order == 2) 429 delete[] sendGrad[rank]; 430 delete[] sendNeighIds[rank]; 431 } 432 } 433 delete[] status; 434 delete[] sendRequest; 435 delete[] recvRequest; 436 delete[] elementList; 437 delete[] nbSendElement; 438 delete[] nbRecvElement; 439 delete[] sendElement; 440 delete[] recvElement; 441 delete[] sendValue; 442 delete[] recvValue; 443 delete[] sendGrad; 444 delete[] recvGrad; 445 delete[] sendNeighIds; 446 delete[] recvNeighIds; 447 return i; 446 448 } 447 449 448 450 void Mapper::computeGrads() 449 451 { 450 451 452 453 454 455 456 457 458 459 452 /* array of pointers to collect local elements and elements received from other cpu */ 453 vector<Elt*> globalElements(sstree.nbLocalElements + nbNeighbourElements); 454 int index = 0; 455 for (int i = 0; i < sstree.nbLocalElements; i++, index++) 456 globalElements[index] = &(sstree.localElements[i]); 457 for (int i = 0; i < nbNeighbourElements; i++, index++) 458 globalElements[index] = &neighbourElements[i]; 459 460 update_baryc(sstree.localElements, sstree.nbLocalElements); 461 computeGradients(&globalElements[0], sstree.nbLocalElements); 460 462 } 461 463 462 464 /** for each element of the source grid, finds all the neighbouring elements that share an edge 463 465 (filling array neighbourElements). This is used later to compute gradients */ 464 466 void Mapper::buildMeshTopology() 465 467 { 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 // cout << mpiRank << " NRECV " << nRecv << "(" << routes.size() << ")"<< endl;485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 /*692 693 694 695 696 697 */698 468 int mpiSize, mpiRank; 469 MPI_Comm_size(communicator, &mpiSize); 470 MPI_Comm_rank(communicator, &mpiRank); 471 472 vector<Node> *routingList = new vector<Node>[mpiSize]; 473 vector<vector<int> > routes(sstree.localTree.leafs.size()); 474 475 sstree.routeIntersections(routes, sstree.localTree.leafs); 476 477 for (int i = 0; i < routes.size(); ++i) 478 for (int k = 0; k < routes[i].size(); ++k) 479 routingList[routes[i][k]].push_back(sstree.localTree.leafs[i]); 480 routingList[mpiRank].clear(); 481 482 483 CMPIRouting mpiRoute(communicator); 484 mpiRoute.init(routes); 485 int nRecv = mpiRoute.getTotalSourceElement(); 486 // cout << mpiRank << " NRECV " << nRecv << "(" << routes.size() << ")"<< endl; 487 488 int *nbSendNode = new int[mpiSize]; 489 int *nbRecvNode = new int[mpiSize]; 490 int *sendMessageSize = new int[mpiSize]; 491 int *recvMessageSize = new int[mpiSize]; 492 493 for (int rank = 0; rank < mpiSize; rank++) 494 { 495 nbSendNode[rank] = routingList[rank].size(); 496 sendMessageSize[rank] = 0; 497 for (size_t j = 0; j < routingList[rank].size(); j++) 498 { 499 Elt *elt = (Elt *) (routingList[rank][j].data); 500 sendMessageSize[rank] += packedPolygonSize(*elt); 501 } 502 } 503 504 MPI_Alltoall(nbSendNode, 1, MPI_INT, nbRecvNode, 1, MPI_INT, communicator); 505 MPI_Alltoall(sendMessageSize, 1, MPI_INT, recvMessageSize, 1, MPI_INT, communicator); 506 507 char **sendBuffer = new char*[mpiSize]; 508 char **recvBuffer = new char*[mpiSize]; 509 int *pos = new int[mpiSize]; 510 511 for (int rank = 0; rank < mpiSize; rank++) 512 { 513 if (nbSendNode[rank] > 0) sendBuffer[rank] = new char[sendMessageSize[rank]]; 514 if (nbRecvNode[rank] > 0) recvBuffer[rank] = new char[recvMessageSize[rank]]; 515 } 516 517 for (int rank = 0; rank < mpiSize; rank++) 518 { 519 pos[rank] = 0; 520 for (size_t j = 0; j < routingList[rank].size(); j++) 521 { 522 Elt *elt = (Elt *) (routingList[rank][j].data); 523 packPolygon(*elt, sendBuffer[rank], pos[rank]); 524 } 525 } 526 delete [] routingList; 527 528 529 int nbSendRequest = 0; 530 int nbRecvRequest = 0; 531 MPI_Request *sendRequest = new MPI_Request[mpiSize]; 532 MPI_Request *recvRequest = new MPI_Request[mpiSize]; 533 MPI_Status *status = new MPI_Status[mpiSize]; 534 535 for (int rank = 0; rank < mpiSize; rank++) 536 { 537 if (nbSendNode[rank] > 0) 538 { 539 MPI_Issend(sendBuffer[rank], sendMessageSize[rank], MPI_CHAR, rank, 0, communicator, &sendRequest[nbSendRequest]); 540 nbSendRequest++; 541 } 542 if (nbRecvNode[rank] > 0) 543 { 544 MPI_Irecv(recvBuffer[rank], recvMessageSize[rank], MPI_CHAR, rank, 0, communicator, &recvRequest[nbRecvRequest]); 545 nbRecvRequest++; 546 } 547 } 548 549 MPI_Waitall(nbRecvRequest, recvRequest, status); 550 MPI_Waitall(nbSendRequest, sendRequest, status); 551 552 for (int rank = 0; rank < mpiSize; rank++) 553 if (nbSendNode[rank] > 0) delete [] sendBuffer[rank]; 554 delete [] sendBuffer; 555 556 char **sendBuffer2 = new char*[mpiSize]; 557 char **recvBuffer2 = new char*[mpiSize]; 558 559 for (int rank = 0; rank < mpiSize; rank++) 560 { 561 nbSendNode[rank] = 0; 562 sendMessageSize[rank] = 0; 563 564 if (nbRecvNode[rank] > 0) 565 { 566 set<NodePtr> neighbourList; 567 pos[rank] = 0; 568 for (int j = 0; j < nbRecvNode[rank]; j++) 569 { 570 Elt elt; 571 unpackPolygon(elt, recvBuffer[rank], pos[rank]); 572 Node node(elt.x, cptRadius(elt), &elt); 573 findNeighbour(sstree.localTree.root, &node, neighbourList); 574 } 575 nbSendNode[rank] = neighbourList.size(); 576 for (set<NodePtr>::iterator it = neighbourList.begin(); it != neighbourList.end(); it++) 577 { 578 Elt *elt = (Elt *) ((*it)->data); 579 sendMessageSize[rank] += packedPolygonSize(*elt); 580 } 581 582 sendBuffer2[rank] = new char[sendMessageSize[rank]]; 583 pos[rank] = 0; 584 585 for (set<NodePtr>::iterator it = neighbourList.begin(); it != neighbourList.end(); it++) 586 { 587 Elt *elt = (Elt *) ((*it)->data); 588 packPolygon(*elt, sendBuffer2[rank], pos[rank]); 589 } 590 } 591 } 592 for (int rank = 0; rank < mpiSize; rank++) 593 if (nbRecvNode[rank] > 0) delete [] recvBuffer[rank]; 594 delete [] recvBuffer; 595 596 597 MPI_Barrier(communicator); 598 MPI_Alltoall(nbSendNode, 1, MPI_INT, nbRecvNode, 1, MPI_INT, communicator); 599 MPI_Alltoall(sendMessageSize, 1, MPI_INT, recvMessageSize, 1, MPI_INT, communicator); 600 601 for (int rank = 0; rank < mpiSize; rank++) 602 if (nbRecvNode[rank] > 0) recvBuffer2[rank] = new char[recvMessageSize[rank]]; 603 604 nbSendRequest = 0; 605 nbRecvRequest = 0; 606 607 for (int rank = 0; rank < mpiSize; rank++) 608 { 609 if (nbSendNode[rank] > 0) 610 { 611 MPI_Issend(sendBuffer2[rank], sendMessageSize[rank], MPI_CHAR, rank, 0, communicator, &sendRequest[nbSendRequest]); 612 nbSendRequest++; 613 } 614 if (nbRecvNode[rank] > 0) 615 { 616 MPI_Irecv(recvBuffer2[rank], recvMessageSize[rank], MPI_CHAR, rank, 0, communicator, &recvRequest[nbRecvRequest]); 617 nbRecvRequest++; 618 } 619 } 620 621 MPI_Waitall(nbRecvRequest, recvRequest, status); 622 MPI_Waitall(nbSendRequest, sendRequest, status); 623 624 int nbNeighbourNodes = 0; 625 for (int rank = 0; rank < mpiSize; rank++) 626 nbNeighbourNodes += nbRecvNode[rank]; 627 628 neighbourElements = new Elt[nbNeighbourNodes]; 629 nbNeighbourElements = nbNeighbourNodes; 630 631 int index = 0; 632 for (int rank = 0; rank < mpiSize; rank++) 633 { 634 pos[rank] = 0; 635 for (int j = 0; j < nbRecvNode[rank]; j++) 636 { 637 unpackPolygon(neighbourElements[index], recvBuffer2[rank], pos[rank]); 638 neighbourElements[index].id.ind = sstree.localTree.leafs.size() + index; 639 index++; 640 } 641 } 642 for (int rank = 0; rank < mpiSize; rank++) 643 { 644 if (nbRecvNode[rank] > 0) delete [] recvBuffer2[rank]; 645 if (nbSendNode[rank] > 0) delete [] sendBuffer2[rank]; 646 } 647 delete [] recvBuffer2; 648 delete [] sendBuffer2; 649 delete [] sendMessageSize; 650 delete [] recvMessageSize; 651 delete [] nbSendNode; 652 delete [] nbRecvNode; 653 delete [] sendRequest; 654 delete [] recvRequest; 655 delete [] status; 656 delete [] pos; 657 658 /* re-compute on received elements to avoid having to send this information */ 659 neighbourNodes.resize(nbNeighbourNodes); 660 setCirclesAndLinks(neighbourElements, neighbourNodes); 661 cptAllEltsGeom(neighbourElements, nbNeighbourNodes, srcGrid.pole); 662 663 /* the local SS tree must include nodes from other cpus if they are potential 664 intersector of a local node */ 665 sstree.localTree.insertNodes(neighbourNodes); 666 667 /* for every local element, 668 use the SS-tree to find all elements (including neighbourElements) 669 who are potential neighbours because their circles intersect, 670 then check all canditates for common edges to build up connectivity information 671 */ 672 for (int j = 0; j < sstree.localTree.leafs.size(); j++) 673 { 674 Node& node = sstree.localTree.leafs[j]; 675 676 /* find all leafs whoes circles that intersect node's circle and save into node->intersectors */ 677 node.search(sstree.localTree.root); 678 679 Elt *elt = (Elt *)(node.data); 680 681 for (int i = 0; i < elt->n; i++) elt->neighbour[i] = NOT_FOUND; 682 683 /* for element `elt` loop through all nodes in the SS-tree 684 whoes circles intersect with the circle around `elt` (the SS intersectors) 685 and check if they are neighbours in the sense that the two elements share an edge. 686 If they do, save this information for elt */ 687 for (list<NodePtr>::iterator it = (node.intersectors).begin(); it != (node.intersectors).end(); ++it) 688 { 689 Elt *elt2 = (Elt *)((*it)->data); 690 set_neighbour(*elt, *elt2); 691 } 692 693 /* 694 for (int i = 0; i < elt->n; i++) 695 { 696 if (elt->neighbour[i] == NOT_FOUND) 697 error_exit("neighbour not found"); 698 } 699 */ 700 } 699 701 } 700 702 … … 702 704 void Mapper::computeIntersection(Elt *elements, int nbElements) 703 705 { 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 // intersect(&recvElt[j], elt2);829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 706 int mpiSize, mpiRank; 707 MPI_Comm_size(communicator, &mpiSize); 708 MPI_Comm_rank(communicator, &mpiRank); 709 710 MPI_Barrier(communicator); 711 712 vector<Node> *routingList = new vector<Node>[mpiSize]; 713 714 vector<Node> routeNodes; routeNodes.reserve(nbElements); 715 for (int j = 0; j < nbElements; j++) 716 { 717 elements[j].id.ind = j; 718 elements[j].id.rank = mpiRank; 719 routeNodes.push_back(Node(elements[j].x, cptRadius(elements[j]), &elements[j])); 720 } 721 722 vector<vector<int> > routes(routeNodes.size()); 723 sstree.routeIntersections(routes, routeNodes); 724 for (int i = 0; i < routes.size(); ++i) 725 for (int k = 0; k < routes[i].size(); ++k) 726 routingList[routes[i][k]].push_back(routeNodes[i]); 727 728 if (verbose >= 2) 729 { 730 cout << " --> rank " << mpiRank << " nbElements " << nbElements << " : "; 731 for (int rank = 0; rank < mpiSize; rank++) 732 cout << routingList[rank].size() << " "; 733 cout << endl; 734 } 735 MPI_Barrier(communicator); 736 737 int *nbSendNode = new int[mpiSize]; 738 int *nbRecvNode = new int[mpiSize]; 739 int *sentMessageSize = new int[mpiSize]; 740 int *recvMessageSize = new int[mpiSize]; 741 742 for (int rank = 0; rank < mpiSize; rank++) 743 { 744 nbSendNode[rank] = routingList[rank].size(); 745 sentMessageSize[rank] = 0; 746 for (size_t j = 0; j < routingList[rank].size(); j++) 747 { 748 Elt *elt = (Elt *) (routingList[rank][j].data); 749 sentMessageSize[rank] += packedPolygonSize(*elt); 750 } 751 } 752 753 MPI_Alltoall(nbSendNode, 1, MPI_INT, nbRecvNode, 1, MPI_INT, communicator); 754 MPI_Alltoall(sentMessageSize, 1, MPI_INT, recvMessageSize, 1, MPI_INT, communicator); 755 756 int total = 0; 757 758 for (int rank = 0; rank < mpiSize; rank++) 759 { 760 total = total + nbRecvNode[rank]; 761 } 762 763 if (verbose >= 2) cout << "---> rank " << mpiRank << " : compute intersection : total received nodes " << total << endl; 764 char **sendBuffer = new char*[mpiSize]; 765 char **recvBuffer = new char*[mpiSize]; 766 int *pos = new int[mpiSize]; 767 768 for (int rank = 0; rank < mpiSize; rank++) 769 { 770 if (nbSendNode[rank] > 0) sendBuffer[rank] = new char[sentMessageSize[rank]]; 771 if (nbRecvNode[rank] > 0) recvBuffer[rank] = new char[recvMessageSize[rank]]; 772 } 773 774 for (int rank = 0; rank < mpiSize; rank++) 775 { 776 pos[rank] = 0; 777 for (size_t j = 0; j < routingList[rank].size(); j++) 778 { 779 Elt* elt = (Elt *) (routingList[rank][j].data); 780 packPolygon(*elt, sendBuffer[rank], pos[rank]); 781 } 782 } 783 delete [] routingList; 784 785 int nbSendRequest = 0; 786 int nbRecvRequest = 0; 787 MPI_Request *sendRequest = new MPI_Request[mpiSize]; 788 MPI_Request *recvRequest = new MPI_Request[mpiSize]; 789 MPI_Status *status = new MPI_Status[mpiSize]; 790 791 for (int rank = 0; rank < mpiSize; rank++) 792 { 793 if (nbSendNode[rank] > 0) 794 { 795 MPI_Issend(sendBuffer[rank], sentMessageSize[rank], MPI_CHAR, rank, 0, communicator, &sendRequest[nbSendRequest]); 796 nbSendRequest++; 797 } 798 if (nbRecvNode[rank] > 0) 799 { 800 MPI_Irecv(recvBuffer[rank], recvMessageSize[rank], MPI_CHAR, rank, 0, communicator, &recvRequest[nbRecvRequest]); 801 nbRecvRequest++; 802 } 803 } 804 805 MPI_Waitall(nbRecvRequest, recvRequest, status); 806 MPI_Waitall(nbSendRequest, sendRequest, status); 807 char **sendBuffer2 = new char*[mpiSize]; 808 char **recvBuffer2 = new char*[mpiSize]; 809 810 double tic = cputime(); 811 for (int rank = 0; rank < mpiSize; rank++) 812 { 813 sentMessageSize[rank] = 0; 814 815 if (nbRecvNode[rank] > 0) 816 { 817 Elt *recvElt = new Elt[nbRecvNode[rank]]; 818 pos[rank] = 0; 819 for (int j = 0; j < nbRecvNode[rank]; j++) 820 { 821 unpackPolygon(recvElt[j], recvBuffer[rank], pos[rank]); 822 cptEltGeom(recvElt[j], tgtGrid.pole); 823 Node recvNode(recvElt[j].x, cptRadius(recvElt[j]), &recvElt[j]); 824 recvNode.search(sstree.localTree.root); 825 /* for a node holding an element of the target, loop throught candidates for intersecting source */ 826 for (list<NodePtr>::iterator it = (recvNode.intersectors).begin(); it != (recvNode.intersectors).end(); ++it) 827 { 828 Elt *elt2 = (Elt *) ((*it)->data); 829 /* recvElt is target, elt2 is source */ 830 // intersect(&recvElt[j], elt2); 831 intersect_ym(&recvElt[j], elt2); 832 } 833 834 if (recvElt[j].is.size() > 0) sentMessageSize[rank] += packIntersectionSize(recvElt[j]); 835 836 // here recvNode goes out of scope 837 } 838 839 if (sentMessageSize[rank] > 0) 840 { 841 sentMessageSize[rank] += sizeof(int); 842 sendBuffer2[rank] = new char[sentMessageSize[rank]]; 843 *((int *) sendBuffer2[rank]) = 0; 844 pos[rank] = sizeof(int); 845 for (int j = 0; j < nbRecvNode[rank]; j++) 846 { 847 packIntersection(recvElt[j], sendBuffer2[rank], pos[rank]); 848 //FIXME should be deleted: recvElt[j].delete_intersections(); // intersection areas have been packed to buffer and won't be used any more 849 } 850 } 851 delete [] recvElt; 852 853 } 854 } 855 delete [] pos; 856 857 for (int rank = 0; rank < mpiSize; rank++) 858 { 859 if (nbSendNode[rank] > 0) delete [] sendBuffer[rank]; 860 if (nbRecvNode[rank] > 0) delete [] recvBuffer[rank]; 861 nbSendNode[rank] = 0; 862 } 863 864 if (verbose >= 2) cout << "Rank " << mpiRank << " Compute (internal) intersection " << cputime() - tic << " s" << endl; 865 MPI_Alltoall(sentMessageSize, 1, MPI_INT, recvMessageSize, 1, MPI_INT, communicator); 866 867 for (int rank = 0; rank < mpiSize; rank++) 868 if (recvMessageSize[rank] > 0) 869 recvBuffer2[rank] = new char[recvMessageSize[rank]]; 870 871 nbSendRequest = 0; 872 nbRecvRequest = 0; 873 874 for (int rank = 0; rank < mpiSize; rank++) 875 { 876 if (sentMessageSize[rank] > 0) 877 { 878 MPI_Issend(sendBuffer2[rank], sentMessageSize[rank], MPI_CHAR, rank, 0, communicator, &sendRequest[nbSendRequest]); 879 nbSendRequest++; 880 } 881 if (recvMessageSize[rank] > 0) 882 { 883 MPI_Irecv(recvBuffer2[rank], recvMessageSize[rank], MPI_CHAR, rank, 0, communicator, &recvRequest[nbRecvRequest]); 884 nbRecvRequest++; 885 } 886 } 887 888 MPI_Waitall(nbRecvRequest, recvRequest, status); 889 MPI_Waitall(nbSendRequest, sendRequest, status); 890 891 delete [] sendRequest; 892 delete [] recvRequest; 893 delete [] status; 894 for (int rank = 0; rank < mpiSize; rank++) 895 { 896 if (nbRecvNode[rank] > 0) 897 { 898 if (sentMessageSize[rank] > 0) 899 delete [] sendBuffer2[rank]; 900 } 901 902 if (recvMessageSize[rank] > 0) 903 { 904 unpackIntersection(elements, recvBuffer2[rank]); 905 delete [] recvBuffer2[rank]; 906 } 907 } 908 delete [] sendBuffer2; 909 delete [] recvBuffer2; 910 delete [] sendBuffer; 911 delete [] recvBuffer; 912 913 delete [] nbSendNode; 914 delete [] nbRecvNode; 915 delete [] sentMessageSize; 916 delete [] recvMessageSize; 915 917 } 916 918 917 919 Mapper::~Mapper() 918 920 { 919 920 921 922 923 924 } 925 926 } 921 delete [] remapMatrix; 922 delete [] srcAddress; 923 delete [] srcRank; 924 delete [] dstAddress; 925 if (neighbourElements) delete [] neighbourElements; 926 } 927 928 } -
XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_gatherv.cpp
r1134 r1138 484 484 mpi_size = comm.ep_comm_ptr->size_rank_info[2].second; 485 485 486 487 assert(accumulate(recvcounts, recvcounts+ep_size-1, 0) == displs[ep_size-1]); // Only for continuous gather. 486 if(ep_size == mpi_size) 487 return ::MPI_Allgatherv(sendbuf, sendcount, static_cast< ::MPI_Datatype>(datatype), recvbuf, recvcounts, displs, 488 static_cast< ::MPI_Datatype>(datatype), static_cast< ::MPI_Comm>(comm.mpi_comm)); 489 490 491 assert(accumulate(recvcounts, recvcounts+ep_size-1, 0) >= displs[ep_size-1]); // Only for continuous gather. 488 492 489 493 -
XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_memory.cpp
r1134 r1138 10 10 int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) 11 11 { 12 ::MPI_Alloc_mem(size.mpi_aint, static_cast< ::MPI_Info>(info.mpi_info), baseptr); 12 //::MPI_Alloc_mem(size.mpi_aint, static_cast< ::MPI_Info>(info.mpi_info), baseptr); 13 ::MPI_Alloc_mem(size.mpi_aint, MPI_INFO_NULL_STD, baseptr); 13 14 return 0; 14 15 } … … 16 17 int MPI_Alloc_mem(unsigned long size, MPI_Info info, void *baseptr) 17 18 { 18 ::MPI_Alloc_mem(size, static_cast< ::MPI_Info>(info.mpi_info), baseptr); 19 //::MPI_Alloc_mem(size, static_cast< ::MPI_Info>(info.mpi_info), baseptr); 20 ::MPI_Alloc_mem(size, MPI_INFO_NULL_STD, baseptr); 19 21 return 0; 20 22 } -
XIOS/dev/branch_yushan_merged/extern/src_ep_dev/ep_wait.cpp
r1134 r1138 1 1 /*! 2 3 2 \file ep_wait.cpp 3 \since 2 may 2016 4 4 5 6 */5 \brief Definitions of MPI wait function: MPI_Wait, MPI_Waitall, MPI_Waitsome, MPI_Waitany 6 */ 7 7 8 8 #include "ep_lib.hpp" … … 16 16 namespace ep_lib { 17 17 18 19 18 int MPI_Wait(MPI_Request *request, MPI_Status *status) 19 { 20 20 21 if(request->type == 1) 22 { 23 ::MPI_Request mpi_request = static_cast< ::MPI_Request >(request->mpi_request); 24 ::MPI_Status mpi_status; 25 ::MPI_Wait(&mpi_request, &mpi_status); 26 27 28 29 status->mpi_status = &mpi_status; 30 status->ep_src = request->ep_src; 31 status->ep_tag = request->ep_tag; 32 status->ep_datatype = request->ep_datatype; 33 34 return 0; 35 } 36 37 if(request->type == 2) 38 { 39 int flag = false; 40 MPI_Message message; 41 42 while(!flag) 43 { 44 Message_Check(request->comm); 45 #pragma omp flush 46 MPI_Improbe(request->ep_src, request->ep_tag, request->comm, &flag, &message, status); 47 } 48 49 int count; 50 MPI_Get_count(status, request->ep_datatype, &count); 51 MPI_Mrecv(request->buf, count, request->ep_datatype, &message, status); 52 status->ep_datatype = request->ep_datatype; 53 54 //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 55 56 return 0; 57 } 58 59 if(request->type == 3) 60 { 61 ::MPI_Request mpi_request = static_cast< ::MPI_Request >(request->mpi_request); 62 ::MPI_Status mpi_status; 63 ::MPI_Wait(&mpi_request, &mpi_status); 64 65 status->mpi_status = new ::MPI_Status(mpi_status); 66 status->ep_src = request->ep_src; 67 status->ep_tag = request->ep_tag; 68 status->ep_datatype = request->ep_datatype; 69 70 //int count; 71 //MPI_Get_count(status, request->ep_datatype, &count); 72 //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 73 } 74 return MPI_SUCCESS; 75 } 21 if(request->type == 1) 22 { 23 ::MPI_Request mpi_request = static_cast< ::MPI_Request >(request->mpi_request); 24 ::MPI_Status mpi_status; 25 ::MPI_Wait(&mpi_request, &mpi_status); 76 26 77 27 78 28 79 29 status->mpi_status = &mpi_status; 30 status->ep_src = request->ep_src; 31 status->ep_tag = request->ep_tag; 32 status->ep_datatype = request->ep_datatype; 33 34 return 0; 35 } 36 37 if(request->type == 2) 38 { 39 int flag = false; 40 MPI_Message message; 41 42 while(!flag) 43 { 44 Message_Check(request->comm); 45 #pragma omp flush 46 MPI_Improbe(request->ep_src, request->ep_tag, request->comm, &flag, &message, status); 47 } 48 49 int count; 50 MPI_Get_count(status, request->ep_datatype, &count); 51 MPI_Mrecv(request->buf, count, request->ep_datatype, &message, status); 52 status->ep_datatype = request->ep_datatype; 53 54 //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 55 56 return 0; 57 } 58 59 if(request->type == 3) 60 { 61 ::MPI_Request mpi_request = static_cast< ::MPI_Request >(request->mpi_request); 62 ::MPI_Status mpi_status; 63 ::MPI_Wait(&mpi_request, &mpi_status); 64 65 status->mpi_status = new ::MPI_Status(mpi_status); 66 status->ep_src = request->ep_src; 67 status->ep_tag = request->ep_tag; 68 status->ep_datatype = request->ep_datatype; 69 70 //int count; 71 //MPI_Get_count(status, request->ep_datatype, &count); 72 //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 73 } 74 return MPI_SUCCESS; 75 } 80 76 81 77 82 int MPI_Waitall(int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses)83 {84 int dest_rank;85 MPI_Comm_rank(MPI_COMM_WORLD, &dest_rank);86 87 int finished = 0;88 bool finished_index[count];89 78 90 for(int i=0; i<count; i++) 79 80 81 82 int MPI_Waitall(int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses) 91 83 { 92 finished_index[i] = false; 84 int dest_rank; 85 MPI_Comm_rank(MPI_COMM_WORLD, &dest_rank); 86 87 int finished = 0; 88 bool finished_index[count]; 89 90 for(int i=0; i<count; i++) 91 { 92 finished_index[i] = false; 93 } 94 95 while(finished < count) 96 { 97 for(int i=0; i<count; i++) 98 { 99 if(finished_index[i] == false) // this request has not been tested. 100 { 101 if(array_of_requests[i].type != 2) // isend or imrecv 102 { 103 MPI_Wait(&array_of_requests[i], &array_of_statuses[i]); 104 if(array_of_requests[i].type == 3) 105 { 106 //int check_count; 107 //MPI_Get_count(&array_of_statuses[i], array_of_requests[i].ep_datatype, &check_count); 108 //check_sum_recv(array_of_requests[i].buf, count, array_of_requests[i].ep_datatype, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, 2); 109 } 110 finished++; 111 finished_index[i] = true; 112 } 113 else // irecv 114 { 115 int flag = false; 116 MPI_Message message; 117 118 MPI_Improbe(array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, &flag, &message, &array_of_statuses[i]); 119 120 if(flag) 121 { 122 //printf("dest_rank = %d, Waiting one message with src = %d, tag = %d, buf = %p\n", dest_rank, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].buf); 123 int recv_count; 124 MPI_Get_count(&array_of_statuses[i], array_of_requests[i].ep_datatype, &recv_count); 125 MPI_Mrecv(array_of_requests[i].buf, recv_count, array_of_requests[i].ep_datatype, &message, &array_of_statuses[i]); 126 //check_sum_recv(array_of_requests[i].buf, recv_count, array_of_requests[i].ep_datatype, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, 2); 127 128 finished++; 129 finished_index[i] = true; 130 } 131 } 132 } 133 } 134 } 135 return MPI_SUCCESS; 93 136 } 94 95 while(finished < count)96 {97 for(int i=0; i<count; i++)98 {99 if(finished_index[i] == false) // this request has not been tested.100 {101 if(array_of_requests[i].type != 2) // isend or imrecv102 {103 MPI_Wait(&array_of_requests[i], &array_of_statuses[i]);104 if(array_of_requests[i].type == 3)105 {106 //int check_count;107 //MPI_Get_count(&array_of_statuses[i], array_of_requests[i].ep_datatype, &check_count);108 //check_sum_recv(array_of_requests[i].buf, count, array_of_requests[i].ep_datatype, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, 2);109 }110 finished++;111 finished_index[i] = true;112 }113 else // irecv114 {115 int flag = false;116 MPI_Message message;117 118 MPI_Improbe(array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, &flag, &message, &array_of_statuses[i]);119 120 if(flag)121 {122 //printf("dest_rank = %d, Waiting one message with src = %d, tag = %d, buf = %p\n", dest_rank, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].buf);123 int recv_count;124 MPI_Get_count(&array_of_statuses[i], array_of_requests[i].ep_datatype, &recv_count);125 MPI_Mrecv(array_of_requests[i].buf, recv_count, array_of_requests[i].ep_datatype, &message, &array_of_statuses[i]);126 //check_sum_recv(array_of_requests[i].buf, recv_count, array_of_requests[i].ep_datatype, array_of_requests[i].ep_src, array_of_requests[i].ep_tag, array_of_requests[i].comm, 2);127 128 finished++;129 finished_index[i] = true;130 }131 }132 }133 }134 }135 return MPI_SUCCESS;136 }137 137 138 138 -
XIOS/dev/branch_yushan_merged/src/io/inetcdf4.cpp
r1134 r1138 4 4 5 5 #include <boost/algorithm/string.hpp> 6 // mpi_std.hpp 7 #ifdef _usingEP 8 #include "ep_declaration.hpp" 9 #endif 6 10 7 11 namespace xios … … 18 22 } 19 23 mpi = comm && !multifile; 20 MPI_Info m_info ;24 MPI_Info m_info = MPI_INFO_NULL_STD; 21 25 22 26 // The file format will be detected automatically by NetCDF, it is safe to always set NC_MPIIO -
XIOS/dev/branch_yushan_merged/src/io/inetcdf4.hpp
r1134 r1138 13 13 #define UNLIMITED_DIM (size_t)(-1) 14 14 #endif // UNLIMITED_DIM 15 15 16 16 17 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/inetcdf4_decl.cpp
r782 r1138 1 1 #include "inetcdf4_impl.hpp" 2 // mpi_std.hpp 2 3 3 4 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/inetcdf4_impl.hpp
r782 r1138 4 4 #include "inetcdf4.hpp" 5 5 #include "netCdfInterface.hpp" 6 // mpi_std.hpp 6 7 7 8 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/nc4_data_input.cpp
r1064 r1138 8 8 #include "scalar.hpp" 9 9 10 // mpi.hpp 11 10 12 namespace xios 11 13 { 12 CNc4DataInput::CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/, const StdString& timeCounterName /*= "time_counter"*/)14 CNc4DataInput::CNc4DataInput(const StdString& filename, ::MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/, const StdString& timeCounterName /*= "time_counter"*/) 13 15 : SuperClass() 14 16 , SuperClassWriter(filename, &comm_file, multifile, timeCounterName) -
XIOS/dev/branch_yushan_merged/src/io/nc4_data_input.hpp
r967 r1138 6 6 #include "data_input.hpp" 7 7 #include "inetcdf4.hpp" 8 // mpi_std.hpp 8 9 9 10 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/nc4_data_output.cpp
r1134 r1138 12 12 #include "exception.hpp" 13 13 #include "uuid.hpp" 14 // mpi.hpp 14 15 15 16 namespace xios … … 28 29 CNc4DataOutput::CNc4DataOutput 29 30 (CFile* file, const StdString & filename, bool exist, bool useClassicFormat, bool useCFConvention, 30 ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective, const StdString& timeCounterName)31 ::MPI_Comm comm_file, bool multifile, bool isCollective, const StdString& timeCounterName) 31 32 : SuperClass() 32 33 , SuperClassWriter(filename, exist, useClassicFormat, useCFConvention, &comm_file, multifile, timeCounterName) … … 463 464 StdString domainName = domain->name; 464 465 domain->assignMesh(domainName, domain->nvertex); 465 domain->mesh->createMeshEpsilon(static_cast< MPI_Comm>(server->intraComm.mpi_comm), domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv);466 domain->mesh->createMeshEpsilon(static_cast< ::MPI_Comm >(server->intraComm.mpi_comm), domain->lonvalue_srv, domain->latvalue_srv, domain->bounds_lon_srv, domain->bounds_lat_srv); 466 467 467 468 StdString node_x = domainName + "_node_x"; -
XIOS/dev/branch_yushan_merged/src/io/nc4_data_output.hpp
r1134 r1138 6 6 #include "onetcdf4.hpp" 7 7 #include "data_output.hpp" 8 // mpi_std.hpp 8 9 9 10 namespace xios … … 26 27 CNc4DataOutput 27 28 (CFile* file, const StdString & filename, bool exist, bool useClassicFormat, 28 bool useCFConvention, 29 ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective = true, 30 const StdString& timeCounterName = "time_counter"); 29 bool useCFConvention, MPI_Comm comm_file, bool multifile, 30 bool isCollective = true, const StdString& timeCounterName = "time_counter"); 31 31 32 32 CNc4DataOutput(const CNc4DataOutput & dataoutput); // Not implemented. … … 116 116 117 117 /// Propriétés privées /// 118 ep_lib::MPI_Comm comm_file;118 MPI_Comm comm_file; 119 119 const StdString filename; 120 120 std::map<Time, StdSize> timeToRecordCache; -
XIOS/dev/branch_yushan_merged/src/io/netCdfInterface.cpp
r1050 r1138 10 10 #include "netCdfInterface.hpp" 11 11 #include "netCdfException.hpp" 12 // mpi_std.hpp 12 13 13 14 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/netCdfInterface_decl.cpp
r1050 r1138 9 9 10 10 #include "netCdfInterface_impl.hpp" 11 // mpi_std.hpp 11 12 12 13 namespace xios -
XIOS/dev/branch_yushan_merged/src/io/netCdfInterface_impl.hpp