diff --git a/readme.md b/readme.md index f5809227f141687b4af7e3fc74053f6b1ed9a7c2..121b3850a3e953de0151f4ce0b5c437a64fbe6f4 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ # NEMO 5 playground -Contains a plyground to run NEMO5 (ver. ) with XIOS TRUNK (ver. ). +Contains a plyground to run NEMO5 (ver. ) with XIOS TRUNK (ver. 2311). ## Structure diff --git a/xios_2311_src/.void_file b/xios_2311_src/.void_file new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/xios_2311_src/.void_file @@ -0,0 +1 @@ + diff --git a/xios_2311_src/Doxyfile b/xios_2311_src/Doxyfile new file mode 100644 index 0000000000000000000000000000000000000000..dca7b3804930d5b672599ee6339c08b664a760a1 --- /dev/null +++ b/xios_2311_src/Doxyfile @@ -0,0 +1,1725 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = XIOS + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Xml I/O Server" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = French + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.cpp \ + *.hpp \ + *.conf + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# If the HTML_TIMESTAMP tag is set to YES then the generated HTML +# documentation will contain the timesstamp. + +HTML_TIMESTAMP = YES + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 224 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 63 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 152 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = YES + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/xios_2311_src/Licence.txt b/xios_2311_src/Licence.txt new file mode 100644 index 0000000000000000000000000000000000000000..36b9a110bad136a99c5642da37d7fddf18136bb8 --- /dev/null +++ b/xios_2311_src/Licence.txt @@ -0,0 +1,1428 @@ + + + ------------------ XIOS Licence --------------- + + + +XIOS is under CeCILL_V2 licence. See "Licence_CeCILL_V2-en.txt" file for an english +version of the licence and "Licence_CeCILL_V2-fr.txt" for a french version. + +All files in the src directory are submitted to the Cecill Licence. + + + +XIOS use internally some other packages that are submitted to other free licence : + + +- boost C++ library : http://www.boost.org + ---> Boost software licence : http://www.boost.org/users/license.html + + +- blitz++ : http://blitz.sourceforge.net/ + ---> GNU LESSER GENERAL PUBLIC LICENSE V3 : https://www.gnu.org/licenses/lgpl.html + + +- RapidXML : http://rapidxml.sourceforge.net/ + ---> Boost software licence : http://www.boost.org/users/license.html + + + - FCM : http://www.metoffice.gov.uk/research/collaboration/fcm + ---> GNU GENERAL PUBLIC LICENSE V3 : https://www.gnu.org/licenses/lgpl.html + + + +--------------------------------------------------------------------------- + + Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +---------------------------------------------------------------------------- + + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + + + + + +------------------------------------------------------------------------ + + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + + +----------------------------------------------------------------------------- + + + + +CeCILL FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial research establishment, having its principal place of +business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange, 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of these rights is conditional upon certain obligations +for users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +suitability of the software as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows future Licensees unhindered access to +the full Source Code of the Software by indicating how to access it, it +being understood that the additional cost of acquiring the Source Code +shall not exceed the cost of transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the resulting Modified Software +become subject to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +source code or object code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the object code of the Modified +Software is redistributed, the Licensee allows future Licensees +unhindered access to the full source code of the Modified Software by +indicating how to access it, it being understood that the additional +cost of acquiring the source code shall not exceed the cost of +transferring the data. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH THE GNU GPL + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL in the Modified or unmodified Software, +and distribute that entire code under the terms of the same version of +the GNU GPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +and distribute that entire code under the terms of the same version of +the GNU GPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by this Agreement, for the duration set forth in Article 4.2. + + + 6.2 OVER THE CONTRIBUTIONS + +The Licensee who develops a Contribution is the owner of the +intellectual property rights over this Contribution as defined by +applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +The Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the suitability of the product for its requirements, its good working +order, and for ensuring that it shall not cause damage to either persons +or properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 2.0 dated 2006-09-05. + + + + + diff --git a/xios_2311_src/Licence_CeCILL_V2-en.txt b/xios_2311_src/Licence_CeCILL_V2-en.txt new file mode 100644 index 0000000000000000000000000000000000000000..fcc8df26b07f09b1d12fc9c8e8b161423ae45bdf --- /dev/null +++ b/xios_2311_src/Licence_CeCILL_V2-en.txt @@ -0,0 +1,506 @@ + +CeCILL FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial research establishment, having its principal place of +business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange, 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of these rights is conditional upon certain obligations +for users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +suitability of the software as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows future Licensees unhindered access to +the full Source Code of the Software by indicating how to access it, it +being understood that the additional cost of acquiring the Source Code +shall not exceed the cost of transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the resulting Modified Software +become subject to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +source code or object code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the object code of the Modified +Software is redistributed, the Licensee allows future Licensees +unhindered access to the full source code of the Modified Software by +indicating how to access it, it being understood that the additional +cost of acquiring the source code shall not exceed the cost of +transferring the data. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH THE GNU GPL + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL in the Modified or unmodified Software, +and distribute that entire code under the terms of the same version of +the GNU GPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +and distribute that entire code under the terms of the same version of +the GNU GPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by this Agreement, for the duration set forth in Article 4.2. + + + 6.2 OVER THE CONTRIBUTIONS + +The Licensee who develops a Contribution is the owner of the +intellectual property rights over this Contribution as defined by +applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +The Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the suitability of the product for its requirements, its good working +order, and for ensuring that it shall not cause damage to either persons +or properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 2.0 dated 2006-09-05. diff --git a/xios_2311_src/Licence_CeCILL_V2-fr.txt b/xios_2311_src/Licence_CeCILL_V2-fr.txt new file mode 100644 index 0000000000000000000000000000000000000000..1613fca5b606496691e6b5b6520afdf1772866de --- /dev/null +++ b/xios_2311_src/Licence_CeCILL_V2-fr.txt @@ -0,0 +1,512 @@ + +CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL + + + Avertissement + +Ce contrat est une licence de logiciel libre issue d'une concertation +entre ses auteurs afin que le respect de deux grands principes préside à +sa rédaction: + + * d'une part, le respect des principes de diffusion des logiciels + libres: accès au code source, droits étendus conférés aux + utilisateurs, + * d'autre part, la désignation d'un droit applicable, le droit + français, auquel elle est conforme, tant au regard du droit de la + responsabilité civile que du droit de la propriété intellectuelle + et de la protection qu'il offre aux auteurs et titulaires des + droits patrimoniaux sur un logiciel. + +Les auteurs de la licence CeCILL (pour Ce[a] C[nrs] I[nria] L[ogiciel] +L[ibre]) sont: + +Commissariat à l'Energie Atomique - CEA, établissement public de +recherche à caractère scientifique, technique et industriel, dont le +siège est situé 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris. + +Centre National de la Recherche Scientifique - CNRS, établissement +public à caractère scientifique et technologique, dont le siège est +situé 3 rue Michel-Ange, 75794 Paris cedex 16. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, établissement public à caractère scientifique et technologique, +dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153 +Le Chesnay cedex. + + + Préambule + +Ce contrat est une licence de logiciel libre dont l'objectif est de +conférer aux utilisateurs la liberté de modification et de +redistribution du logiciel régi par cette licence dans le cadre d'un +modèle de diffusion en logiciel libre. + +L'exercice de ces libertés est assorti de certains devoirs à la charge +des utilisateurs afin de préserver ce statut au cours des +redistributions ultérieures. + +L'accessibilité au code source et les droits de copie, de modification +et de redistribution qui en découlent ont pour contrepartie de n'offrir +aux utilisateurs qu'une garantie limitée et de ne faire peser sur +l'auteur du logiciel, le titulaire des droits patrimoniaux et les +concédants successifs qu'une responsabilité restreinte. + +A cet égard l'attention de l'utilisateur est attirée sur les risques +associés au chargement, à l'utilisation, à la modification et/ou au +développement et à la reproduction du logiciel par l'utilisateur étant +donné sa spécificité de logiciel libre, qui peut le rendre complexe à +manipuler et qui le réserve donc à des développeurs ou des +professionnels avertis possédant des connaissances informatiques +approfondies. Les utilisateurs sont donc invités à charger et tester +l'adéquation du logiciel à leurs besoins dans des conditions permettant +d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus +généralement, à l'utiliser et l'exploiter dans les mêmes conditions de +sécurité. Ce contrat peut être reproduit et diffusé librement, sous +réserve de le conserver en l'état, sans ajout ni suppression de clauses. + +Ce contrat est susceptible de s'appliquer à tout logiciel dont le +titulaire des droits patrimoniaux décide de soumettre l'exploitation aux +dispositions qu'il contient. + + + Article 1 - DEFINITIONS + +Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une +lettre capitale, auront la signification suivante: + +Contrat: désigne le présent contrat de licence, ses éventuelles versions +postérieures et annexes. + +Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code +Source et le cas échéant sa documentation, dans leur état au moment de +l'acceptation du Contrat par le Licencié. + +Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et +éventuellement de Code Objet et le cas échéant sa documentation, dans +leur état au moment de leur première diffusion sous les termes du Contrat. + +Logiciel Modifié: désigne le Logiciel modifié par au moins une +Contribution. + +Code Source: désigne l'ensemble des instructions et des lignes de +programme du Logiciel et auquel l'accès est nécessaire en vue de +modifier le Logiciel. + +Code Objet: désigne les fichiers binaires issus de la compilation du +Code Source. + +Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur +sur le Logiciel Initial. + +Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le +Contrat. + +Contributeur: désigne le Licencié auteur d'au moins une Contribution. + +Concédant: désigne le Titulaire ou toute personne physique ou morale +distribuant le Logiciel sous le Contrat. + +Contribution: désigne l'ensemble des modifications, corrections, +traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans +le Logiciel par tout Contributeur, ainsi que tout Module Interne. + +Module: désigne un ensemble de fichiers sources y compris leur +documentation qui permet de réaliser des fonctionnalités ou services +supplémentaires à ceux fournis par le Logiciel. + +Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce +Module et le Logiciel s'exécutent dans des espaces d'adressage +différents, l'un appelant l'autre au moment de leur exécution. + +Module Interne: désigne tout Module lié au Logiciel de telle sorte +qu'ils s'exécutent dans le même espace d'adressage. + +GNU GPL: désigne la GNU General Public License dans sa version 2 ou +toute version ultérieure, telle que publiée par Free Software Foundation +Inc. + +Parties: désigne collectivement le Licencié et le Concédant. + +Ces termes s'entendent au singulier comme au pluriel. + + + Article 2 - OBJET + +Le Contrat a pour objet la concession par le Concédant au Licencié d'une +licence non exclusive, cessible et mondiale du Logiciel telle que +définie ci-après à l'article 5 pour toute la durée de protection des droits +portant sur ce Logiciel. + + + Article 3 - ACCEPTATION + +3.1 L'acceptation par le Licencié des termes du Contrat est réputée +acquise du fait du premier des faits suivants: + + * (i) le chargement du Logiciel par tout moyen notamment par + téléchargement à partir d'un serveur distant ou par chargement à + partir d'un support physique; + * (ii) le premier exercice par le Licencié de l'un quelconque des + droits concédés par le Contrat. + +3.2 Un exemplaire du Contrat, contenant notamment un avertissement +relatif aux spécificités du Logiciel, à la restriction de garantie et à +la limitation à un usage par des utilisateurs expérimentés a été mis à +disposition du Licencié préalablement à son acceptation telle que +définie à l'article 3.1 ci dessus et le Licencié reconnaît en avoir pris +connaissance. + + + Article 4 - ENTREE EN VIGUEUR ET DUREE + + + 4.1 ENTREE EN VIGUEUR + +Le Contrat entre en vigueur à la date de son acceptation par le Licencié +telle que définie en 3.1. + + + 4.2 DUREE + +Le Contrat produira ses effets pendant toute la durée légale de +protection des droits patrimoniaux portant sur le Logiciel. + + + Article 5 - ETENDUE DES DROITS CONCEDES + +Le Concédant concède au Licencié, qui accepte, les droits suivants sur +le Logiciel pour toutes destinations et pour la durée du Contrat dans +les conditions ci-après détaillées. + +Par ailleurs, si le Concédant détient ou venait à détenir un ou +plusieurs brevets d'invention protégeant tout ou partie des +fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas +opposer les éventuels droits conférés par ces brevets aux Licenciés +successifs qui utiliseraient, exploiteraient ou modifieraient le +Logiciel. En cas de cession de ces brevets, le Concédant s'engage à +faire reprendre les obligations du présent alinéa aux cessionnaires. + + + 5.1 DROIT D'UTILISATION + +Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant +aux domaines d'application, étant ci-après précisé que cela comporte: + + 1. la reproduction permanente ou provisoire du Logiciel en tout ou + partie par tout moyen et sous toute forme. + + 2. le chargement, l'affichage, l'exécution, ou le stockage du + Logiciel sur tout support. + + 3. la possibilité d'en observer, d'en étudier, ou d'en tester le + fonctionnement afin de déterminer les idées et principes qui sont + à la base de n'importe quel élément de ce Logiciel; et ceci, + lorsque le Licencié effectue toute opération de chargement, + d'affichage, d'exécution, de transmission ou de stockage du + Logiciel qu'il est en droit d'effectuer en vertu du Contrat. + + + 5.2 DROIT D'APPORTER DES CONTRIBUTIONS + +Le droit d'apporter des Contributions comporte le droit de traduire, +d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel +et le droit de reproduire le logiciel en résultant. + +Le Licencié est autorisé à apporter toute Contribution au Logiciel sous +réserve de mentionner, de façon explicite, son nom en tant qu'auteur de +cette Contribution et la date de création de celle-ci. + + + 5.3 DROIT DE DISTRIBUTION + +Le droit de distribution comporte notamment le droit de diffuser, de +transmettre et de communiquer le Logiciel au public sur tout support et +par tout moyen ainsi que le droit de mettre sur le marché à titre +onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé. + +Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou +non, à des tiers dans les conditions ci-après détaillées. + + + 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION + +Le Licencié est autorisé à distribuer des copies conformes du Logiciel, +sous forme de Code Source ou de Code Objet, à condition que cette +distribution respecte les dispositions du Contrat dans leur totalité et +soit accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le Code Objet du Logiciel est redistribué, +le Licencié permette aux futurs Licenciés d'accéder facilement au Code +Source complet du Logiciel en indiquant les modalités d'accès, étant +entendu que le coût additionnel d'acquisition du Code Source ne devra +pas excéder le simple coût de transfert des données. + + + 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE + +Lorsque le Licencié apporte une Contribution au Logiciel, les conditions +de distribution du Logiciel Modifié en résultant sont alors soumises à +l'intégralité des dispositions du Contrat. + +Le Licencié est autorisé à distribuer le Logiciel Modifié, sous forme de +code source ou de code objet, à condition que cette distribution +respecte les dispositions du Contrat dans leur totalité et soit +accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le code objet du Logiciel Modifié est +redistribué, le Licencié permette aux futurs Licenciés d'accéder +facilement au code source complet du Logiciel Modifié en indiquant les +modalités d'accès, étant entendu que le coût additionnel d'acquisition +du code source ne devra pas excéder le simple coût de transfert des données. + + + 5.3.3 DISTRIBUTION DES MODULES EXTERNES + +Lorsque le Licencié a développé un Module Externe les conditions du +Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué +sous un contrat de licence différent. + + + 5.3.4 COMPATIBILITE AVEC LA LICENCE GNU GPL + +Le Licencié peut inclure un code soumis aux dispositions d'une des +versions de la licence GNU GPL dans le Logiciel modifié ou non et +distribuer l'ensemble sous les conditions de la même version de la +licence GNU GPL. + +Le Licencié peut inclure le Logiciel modifié ou non dans un code soumis +aux dispositions d'une des versions de la licence GNU GPL et distribuer +l'ensemble sous les conditions de la même version de la licence GNU GPL. + + + Article 6 - PROPRIETE INTELLECTUELLE + + + 6.1 SUR LE LOGICIEL INITIAL + +Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel +Initial. Toute utilisation du Logiciel Initial est soumise au respect +des conditions dans lesquelles le Titulaire a choisi de diffuser son +oeuvre et nul autre n'a la faculté de modifier les conditions de +diffusion de ce Logiciel Initial. + +Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi +par le Contrat et ce, pour la durée visée à l'article 4.2. + + + 6.2 SUR LES CONTRIBUTIONS + +Le Licencié qui a développé une Contribution est titulaire sur celle-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable. + + + 6.3 SUR LES MODULES EXTERNES + +Le Licencié qui a développé un Module Externe est titulaire sur celui-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable et reste libre du choix du contrat régissant +sa diffusion. + + + 6.4 DISPOSITIONS COMMUNES + +Le Licencié s'engage expressément: + + 1. à ne pas supprimer ou modifier de quelque manière que ce soit les + mentions de propriété intellectuelle apposées sur le Logiciel; + + 2. à reproduire à l'identique lesdites mentions de propriété + intellectuelle sur les copies du Logiciel modifié ou non. + +Le Licencié s'engage à ne pas porter atteinte, directement ou +indirectement, aux droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs sur le Logiciel et à prendre, le cas échéant, à +l'égard de son personnel toutes les mesures nécessaires pour assurer le +respect des dits droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs. + + + Article 7 - SERVICES ASSOCIES + +7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de +prestations d'assistance technique ou de maintenance du Logiciel. + +Cependant le Concédant reste libre de proposer ce type de services. Les +termes et conditions d'une telle assistance technique et/ou d'une telle +maintenance seront alors déterminés dans un acte séparé. Ces actes de +maintenance et/ou assistance technique n'engageront que la seule +responsabilité du Concédant qui les propose. + +7.2 De même, tout Concédant est libre de proposer, sous sa seule +responsabilité, à ses licenciés une garantie, qui n'engagera que lui, +lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce, +dans les conditions qu'il souhaite. Cette garantie et les modalités +financières de son application feront l'objet d'un acte séparé entre le +Concédant et le Licencié. + + + Article 8 - RESPONSABILITE + +8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la +faculté, sous réserve de prouver la faute du Concédant concerné, de +solliciter la réparation du préjudice direct qu'il subirait du fait du +Logiciel et dont il apportera la preuve. + +8.2 La responsabilité du Concédant est limitée aux engagements pris en +application du Contrat et ne saurait être engagée en raison notamment: +(i) des dommages dus à l'inexécution, totale ou partielle, de ses +obligations par le Licencié, (ii) des dommages directs ou indirects +découlant de l'utilisation ou des performances du Logiciel subis par le +Licencié et (iii) plus généralement d'un quelconque dommage indirect. En +particulier, les Parties conviennent expressément que tout préjudice +financier ou commercial (par exemple perte de données, perte de +bénéfices, perte d'exploitation, perte de clientèle ou de commandes, +manque à gagner, trouble commercial quelconque) ou toute action dirigée +contre le Licencié par un tiers, constitue un dommage indirect et +n'ouvre pas droit à réparation par le Concédant. + + + Article 9 - GARANTIE + +9.1 Le Licencié reconnaît que l'état actuel des connaissances +scientifiques et techniques au moment de la mise en circulation du +Logiciel ne permet pas d'en tester et d'en vérifier toutes les +utilisations ni de détecter l'existence d'éventuels défauts. L'attention +du Licencié a été attirée sur ce point sur les risques associés au +chargement, à l'utilisation, la modification et/ou au développement et à +la reproduction du Logiciel qui sont réservés à des utilisateurs avertis. + +Il relève de la responsabilité du Licencié de contrôler, par tous +moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et +de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens. + +9.2 Le Concédant déclare de bonne foi être en droit de concéder +l'ensemble des droits attachés au Logiciel (comprenant notamment les +droits visés à l'article 5). + +9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le +Concédant sans autre garantie, expresse ou tacite, que celle prévue à +l'article 9.2 et notamment sans aucune garantie sur sa valeur commerciale, +son caractère sécurisé, innovant ou pertinent. + +En particulier, le Concédant ne garantit pas que le Logiciel est exempt +d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible +avec l'équipement du Licencié et sa configuration logicielle ni qu'il +remplira les besoins du Licencié. + +9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le +Logiciel ne porte pas atteinte à un quelconque droit de propriété +intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout +autre droit de propriété. Ainsi, le Concédant exclut toute garantie au +profit du Licencié contre les actions en contrefaçon qui pourraient être +diligentées au titre de l'utilisation, de la modification, et de la +redistribution du Logiciel. Néanmoins, si de telles actions sont +exercées contre le Licencié, le Concédant lui apportera son aide +technique et juridique pour sa défense. Cette aide technique et +juridique est déterminée au cas par cas entre le Concédant concerné et +le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage +toute responsabilité quant à l'utilisation de la dénomination du +Logiciel par le Licencié. Aucune garantie n'est apportée quant à +l'existence de droits antérieurs sur le nom du Logiciel et sur +l'existence d'une marque. + + + Article 10 - RESILIATION + +10.1 En cas de manquement par le Licencié aux obligations mises à sa +charge par le Contrat, le Concédant pourra résilier de plein droit le +Contrat trente (30) jours après notification adressée au Licencié et +restée sans effet. + +10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à +utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les +licences qu'il aura concédées antérieurement à la résiliation du Contrat +resteront valides sous réserve qu'elles aient été effectuées en +conformité avec le Contrat. + + + Article 11 - DISPOSITIONS DIVERSES + + + 11.1 CAUSE EXTERIEURE + +Aucune des Parties ne sera responsable d'un retard ou d'une défaillance +d'exécution du Contrat qui serait dû à un cas de force majeure, un cas +fortuit ou une cause extérieure, telle que, notamment, le mauvais +fonctionnement ou les interruptions du réseau électrique ou de +télécommunication, la paralysie du réseau liée à une attaque +informatique, l'intervention des autorités gouvernementales, les +catastrophes naturelles, les dégâts des eaux, les tremblements de terre, +le feu, les explosions, les grèves et les conflits sociaux, l'état de +guerre... + +11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou +plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du +Contrat, ne pourra en aucun cas impliquer renonciation par la Partie +intéressée à s'en prévaloir ultérieurement. + +11.3 Le Contrat annule et remplace toute convention antérieure, écrite +ou orale, entre les Parties sur le même objet et constitue l'accord +entier entre les Parties sur cet objet. Aucune addition ou modification +aux termes du Contrat n'aura d'effet à l'égard des Parties à moins +d'être faite par écrit et signée par leurs représentants dûment habilités. + +11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat +s'avèrerait contraire à une loi ou à un texte applicable, existants ou +futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les +amendements nécessaires pour se conformer à cette loi ou à ce texte. +Toutes les autres dispositions resteront en vigueur. De même, la +nullité, pour quelque raison que ce soit, d'une des dispositions du +Contrat ne saurait entraîner la nullité de l'ensemble du Contrat. + + + 11.5 LANGUE + +Le Contrat est rédigé en langue française et en langue anglaise, ces +deux versions faisant également foi. + + + Article 12 - NOUVELLES VERSIONS DU CONTRAT + +12.1 Toute personne est autorisée à copier et distribuer des copies de +ce Contrat. + +12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé +et ne peut être modifié que par les auteurs de la licence, lesquels se +réservent le droit de publier périodiquement des mises à jour ou de +nouvelles versions du Contrat, qui posséderont chacune un numéro +distinct. Ces versions ultérieures seront susceptibles de prendre en +compte de nouvelles problématiques rencontrées par les logiciels libres. + +12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra +faire l'objet d'une diffusion ultérieure que sous la même version du +Contrat ou une version postérieure, sous réserve des dispositions de +l'article 5.3.4. + + + Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE + +13.1 Le Contrat est régi par la loi française. Les Parties conviennent +de tenter de régler à l'amiable les différends ou litiges qui +viendraient à se produire par suite ou à l'occasion du Contrat. + +13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter +de leur survenance et sauf situation relevant d'une procédure d'urgence, +les différends ou litiges seront portés par la Partie la plus diligente +devant les Tribunaux compétents de Paris. + + +Version 2.0 du 2006-09-05. diff --git a/xios_2311_src/arch/arch-BG_FERMI.env b/xios_2311_src/arch/arch-BG_FERMI.env new file mode 100644 index 0000000000000000000000000000000000000000..8d5c78498963a7add7f3056bfe64996e8a4e9354 --- /dev/null +++ b/xios_2311_src/arch/arch-BG_FERMI.env @@ -0,0 +1,8 @@ +module purge +module load profile/advanced +module load bgq-xl/1.0 +module load netcdf/4.1.3_par--bgq-xl--1.0 +module load hdf5/1.8.9_par--bgq-xl--1.0 +module load szip/2.1--bgq-xl--1.0 +module load zlib/1.2.7--bgq-gnu--4.4.6 +module load mass diff --git a/xios_2311_src/arch/arch-BG_FERMI.fcm b/xios_2311_src/arch/arch-BG_FERMI.fcm new file mode 100644 index 0000000000000000000000000000000000000000..7ff5e4194ab0ea89f291d88eee4be728ce93b38b --- /dev/null +++ b/xios_2311_src/arch/arch-BG_FERMI.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpixlc_r +%FCOMPILER mpixlf90_r +%LINKER mpixlf90_r + +%BASE_CFLAGS +%PROD_CFLAGS -O3 -qarch=qp -qtune=qp +%DEV_CFLAGS +%DEBUG_CFLAGS + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 -qarch=qp -qtune=qp +%DEV_FFLAGS +%DEBUG_FFLAGS + +%BASE_INC -D__NONE__ +%BASE_LD -L/opt/ibmcmp/vacpp/bg/12.1/bglib64 -libmc++ + +%CPP mpixlc -EP +%FPP cpp -P +%MAKE make diff --git a/xios_2311_src/arch/arch-BG_FERMI.path b/xios_2311_src/arch/arch-BG_FERMI.path new file mode 100644 index 0000000000000000000000000000000000000000..97f9f8370d8b3b21db83000c0456e7bacd338a27 --- /dev/null +++ b/xios_2311_src/arch/arch-BG_FERMI.path @@ -0,0 +1,19 @@ +NETCDF_INCDIR="-I $NETCDF_INC" +NETCDF_LIBDIR="-L $NETCDF_LIB" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INC" +HDF5_LIBDIR="-L$HDF5_LIB -L$SZIP_LIB -L$ZLIB_LIB" +HDF5_LIB="-lhdf5_hl -lhdf5 -lsz -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-BG_TURING.env b/xios_2311_src/arch/arch-BG_TURING.env new file mode 100644 index 0000000000000000000000000000000000000000..cbf37e844524229e005496ca4948b4f98d32b395 --- /dev/null +++ b/xios_2311_src/arch/arch-BG_TURING.env @@ -0,0 +1,10 @@ +module load compilerwrappers/no +module load netcdf/mpi/4.2.1 +module load hdf5/mpi/1.8.9 + +export NETCDF_INC=/bglocal/cn/pub/NetCDF/4.2.1/mpi/include +export NETCDF_LIB=/bglocal/cn/pub/NetCDF/4.2.1/mpi/lib + +export HDF5_INC=/bglocal/cn/pub/HDF5/1.8.9/par/include +export HDF5_LIB=/bglocal/cn/pub/HDF5/1.8.9/par/lib +export ZLIB=/bglocal/cn/pub/zlib/1.2.8/lib diff --git a/xios_2311_src/arch/arch-BG_TURING.fcm b/xios_2311_src/arch/arch-BG_TURING.fcm new file mode 100644 index 0000000000000000000000000000000000000000..7ff5e4194ab0ea89f291d88eee4be728ce93b38b --- /dev/null +++ b/xios_2311_src/arch/arch-BG_TURING.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpixlc_r +%FCOMPILER mpixlf90_r +%LINKER mpixlf90_r + +%BASE_CFLAGS +%PROD_CFLAGS -O3 -qarch=qp -qtune=qp +%DEV_CFLAGS +%DEBUG_CFLAGS + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 -qarch=qp -qtune=qp +%DEV_FFLAGS +%DEBUG_FFLAGS + +%BASE_INC -D__NONE__ +%BASE_LD -L/opt/ibmcmp/vacpp/bg/12.1/bglib64 -libmc++ + +%CPP mpixlc -EP +%FPP cpp -P +%MAKE make diff --git a/xios_2311_src/arch/arch-BG_TURING.path b/xios_2311_src/arch/arch-BG_TURING.path new file mode 100644 index 0000000000000000000000000000000000000000..21535e21bbdaa9e364711c839f205267cf570f36 --- /dev/null +++ b/xios_2311_src/arch/arch-BG_TURING.path @@ -0,0 +1,19 @@ +NETCDF_INCDIR="-I $NETCDF_INC" +NETCDF_LIBDIR="-L $NETCDF_LIB" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INC" +HDF5_LIBDIR="-L$HDF5_LIB -L$ZLIB" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-GCC_LINUX.env b/xios_2311_src/arch/arch-GCC_LINUX.env new file mode 100644 index 0000000000000000000000000000000000000000..c2a63962060018fdcb2a56244b94f38c12bfb70e --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_LINUX.env @@ -0,0 +1,10 @@ +export HDF5_INC_DIR=$HOME/hdf5/hdf5/include +export HDF5_LIB_DIR=$HOME/hdf5/hdf5/lib + +export NETCDF_INC_DIR=$HOME/netcdf4/include +export NETCDF_LIB_DIR=$HOME/netcdf4/lib + +export BOOST_INC_DIR=$HOME/boost +export BOOST_LIB_DIR=$HOME/boost + + diff --git a/xios_2311_src/arch/arch-GCC_LINUX.fcm b/xios_2311_src/arch/arch-GCC_LINUX.fcm new file mode 100644 index 0000000000000000000000000000000000000000..93069308e97b95426b0d6c9d7402ffc96713afd7 --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_LINUX.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 + +%BASE_CFLAGS -w -std=c++11 -D__XIOS_EXCEPTION +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-GCC_LINUX.path b/xios_2311_src/arch/arch-GCC_LINUX.path new file mode 100644 index 0000000000000000000000000000000000000000..c16402f2498f0aadd8afc33649be2e5d79932851 --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_LINUX.path @@ -0,0 +1,19 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="-lcurl" + +HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +BOOST_INCDIR="-I $BOOST_INC_DIR" +BOOST_LIBDIR="-L $BOOST_LIB_DIR" +BOOST_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-GCC_MACOSX.env b/xios_2311_src/arch/arch-GCC_MACOSX.env new file mode 100644 index 0000000000000000000000000000000000000000..a5aba075bd02e14b672a5f566a0bd0d36a98a82b --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_MACOSX.env @@ -0,0 +1,14 @@ +# Environment to compile XIOS on Mac OS X +# +# Tested successfully with : +# Mac OS X 10.7.4 +# Prerequisite softwares installed with MacPorts : +# gfortran : 4.6.0 +# openmpi : 1.6.3_0 variant +gcc45 +# netcdf : 4.2.1 variant : +dap+netcdf4+openmpi (includes hdf5) +# +# Olivier Marti - olivier.marti(ad)lsce.ipsl.fr +# +export NETCDF_DIR=/opt/local +export NETCDF_INC_DIR=${NETCDF_DIR}/include +export NETCDF_LIB_DIR=${NETCDF_DIR}/lib diff --git a/xios_2311_src/arch/arch-GCC_MACOSX.fcm b/xios_2311_src/arch/arch-GCC_MACOSX.fcm new file mode 100644 index 0000000000000000000000000000000000000000..2dc30e2311e69844987d27df0021376c60f07e19 --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_MACOSX.fcm @@ -0,0 +1,25 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpiCC +%FCOMPILER mpif90 +%LINKER mpif90 + +%BASE_CFLAGS -w +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g +%DEBUG_CFLAGS -g -O2 + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP /opt/local/bin/cpp-mp-4.5 +%FPP /opt/local/bin/cpp-mp-4.5 -P +%MAKE gmake + diff --git a/xios_2311_src/arch/arch-GCC_MACOSX.path b/xios_2311_src/arch/arch-GCC_MACOSX.path new file mode 100644 index 0000000000000000000000000000000000000000..c873de8fabdaaa8c5bb300bfeadb0b751ba612b3 --- /dev/null +++ b/xios_2311_src/arch/arch-GCC_MACOSX.path @@ -0,0 +1,11 @@ +NETCDF_INCDIR="-I${NETCDF_INC_DIR}" +NETCDF_LIBDIR="-L${NETCDF_LIB_DIR}" +NETCDF_LIB="-lnetcdff -lnetcdf" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-PW6_VARGAS.env b/xios_2311_src/arch/arch-PW6_VARGAS.env new file mode 100644 index 0000000000000000000000000000000000000000..513f1dbf186a7dc614b3b5a267783fb4d1a75a2b --- /dev/null +++ b/xios_2311_src/arch/arch-PW6_VARGAS.env @@ -0,0 +1,7 @@ +module unload netcdf +module unload hdf5 +module unload phdf5 +module load phdf5/1.8.7 +module load netcdf/4.1.3-par +module unload c++ +module load c++/12.1.0.0 diff --git a/xios_2311_src/arch/arch-PW6_VARGAS.fcm b/xios_2311_src/arch/arch-PW6_VARGAS.fcm new file mode 100644 index 0000000000000000000000000000000000000000..ef049c8a687a43272f3d8c4b6c8f2aa9a5dd7601 --- /dev/null +++ b/xios_2311_src/arch/arch-PW6_VARGAS.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpCC_r +%FCOMPILER mpxlf2003_r +%LINKER mpCC_r + +%BASE_CFLAGS -qmkshrobj -qrtti +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g +%DEBUG_CFLAGS -g -O0 -qfullpath + +%BASE_FFLAGS -qmkshrobj +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -O0 -qfullpath + +%BASE_INC -D__NONE__ +%BASE_LD -lxlf90 + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-PW6_VARGAS.path b/xios_2311_src/arch/arch-PW6_VARGAS.path new file mode 100644 index 0000000000000000000000000000000000000000..45676423cf3654da8c92604e827114fc44e6331f --- /dev/null +++ b/xios_2311_src/arch/arch-PW6_VARGAS.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="" +NETCDF_LIBDIR="" +NETCDF_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_ADA.env b/xios_2311_src/arch/arch-X64_ADA.env new file mode 100644 index 0000000000000000000000000000000000000000..86bfeba156ec72cdb3e301e27d493197d67d7eba --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ADA.env @@ -0,0 +1,6 @@ +module load gcc/6.4.0 +module load intel/2018.2 +module unload netcdf +module unload hdf5 +#module load netcdf/mpi/4.1.3 +#module load hdf5/mpi/1.8.9 diff --git a/xios_2311_src/arch/arch-X64_ADA.fcm b/xios_2311_src/arch/arch-X64_ADA.fcm new file mode 100644 index 0000000000000000000000000000000000000000..d30908152c72cfc3cb95ffddb18a4db3951bee4f --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ADA.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpiicc +%FCOMPILER mpiifort +%LINKER mpiifort -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 -D__XIOS_EXCEPTION +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ -Wl,-rpath=/smplocal/pub/NetCDF/4.1.3/mpi/lib:/smplocal/pub/HDF5/1.8.9/par/lib + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_ADA.path b/xios_2311_src/arch/arch-X64_ADA.path new file mode 100644 index 0000000000000000000000000000000000000000..636878ddb0e39039f0ec9f52d287907d128aed1d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ADA.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I/smplocal/pub/NetCDF/4.1.3/mpi/include" +NETCDF_LIBDIR="-L/smplocal/pub/NetCDF/4.1.3/mpi/lib" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I/smplocal/pub/HDF5/1.8.9/par/include" +HDF5_LIBDIR="-L/smplocal/pub/HDF5/1.8.9/par/lib" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_ATHENA.env b/xios_2311_src/arch/arch-X64_ATHENA.env new file mode 100644 index 0000000000000000000000000000000000000000..0fe35c7c171ec290dd651ec84229e448ae032dfa --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ATHENA.env @@ -0,0 +1,15 @@ +# Environment to compile XIOS on Athena +# +# Prerequisite softwares installed with +# +module load INTEL/intel_xe_2013 +module load HDF5/hdf5-1.8.11_parallel +module load NETCDF/netcdf-4.3_parallel +module load NETCDF/parallel-netcdf-1.3.1 + +#export NETCDF_DIR=${NETCDF} +#export PNETCDF_DIR=${PNETCDF} +export NETCDF_DIR=/users/home/opt/netcdf/netcdf-4.3_parallel +export PNETCDF_DIR=/users/home/opt/netcdf/parallel-netcdf-1.3.1 +export HDF5_DIR=/users/home/opt/hdf5/hdf5-1.8.11_parallel + diff --git a/xios_2311_src/arch/arch-X64_ATHENA.fcm b/xios_2311_src/arch/arch-X64_ATHENA.fcm new file mode 100644 index 0000000000000000000000000000000000000000..c504605f20bdf52a18fd2720fee8b5a872f40a85 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ATHENA.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpiicc +%FCOMPILER mpiifort +%LINKER mpiifort -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ -lz -lcurl -Wl -lgpfs + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake + + diff --git a/xios_2311_src/arch/arch-X64_ATHENA.path b/xios_2311_src/arch/arch-X64_ATHENA.path new file mode 100644 index 0000000000000000000000000000000000000000..e5816d93ec25b87105047cfdcc0fa059d1a969f1 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ATHENA.path @@ -0,0 +1,12 @@ +NETCDF_INCDIR="-I${NETCDF_DIR}/include -I${PNETCDF_DIR}/include" +NETCDF_LIBDIR="-L${NETCDF_DIR}/lib -L${PNETCDF_DIR}/lib" +NETCDF_LIB="-L${NETCDF_DIR}/lib -lnetcdff -L${NETCDF_DIR}/lib -lnetcdf -L${PNETCDF_DIR}/lib -lpnetcdf" + +HDF5_INCDIR="-I${HDF5_DIR}/include" +HDF5_LIBDIR="-L${HDF5_DIR}/lib" +HDF5_LIB="-L${HDF5_DIR}/lib -lhdf5_hl -L${HDF5_DIR}/lib -lhdf5" + +OASIS_INCDIR="" +OASIS_LIBDIR="" +OASIS_LIB="" + diff --git a/xios_2311_src/arch/arch-X64_CURIE.env b/xios_2311_src/arch/arch-X64_CURIE.env new file mode 100644 index 0000000000000000000000000000000000000000..df64528f6322a99556f7866753c9a74d39836248 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE.env @@ -0,0 +1,6 @@ +module unload netcdf +module unload hdf5 +module unload boost +module load netcdf/4.3.3.1_hdf5_parallel +module load boost +module load blitz diff --git a/xios_2311_src/arch/arch-X64_CURIE.fcm b/xios_2311_src/arch/arch-X64_CURIE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..fa2bdd19bb1595aedb97ec10f618c2d2cf46b05a --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +#%DEV_CFLAGS -g -traceback +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +#%DEV_FFLAGS -g -traceback +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_CURIE.path b/xios_2311_src/arch/arch-X64_CURIE.path new file mode 100644 index 0000000000000000000000000000000000000000..3c0526f06a1093befe666bddb6b714338dd5c6d1 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE.path @@ -0,0 +1,27 @@ +NETCDF_INCDIR="-I $NETCDF_INCDIR" +NETCDF_LIBDIR="-L $NETCDF_LIBDIR" +NETCDF_LIB="-lnetcdf -lnetcdff" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_CURIE_GCC.env b/xios_2311_src/arch/arch-X64_CURIE_GCC.env new file mode 100644 index 0000000000000000000000000000000000000000..af605fc6a1d6aff423b9763ebca5d54f83e24a41 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_GCC.env @@ -0,0 +1,12 @@ +module unload netcdf +module unload hdf5 +module unload boost +module unload blitz +module load netcdf/4.3.3.1_hdf5_parallel +module load gnu/4.9.1 +module load boost +module load blitz +export OMPI_CC=gcc +export OMPI_CXX=g++ +export OMPI_F77=gfortran +export OMPI_FC=gfortran diff --git a/xios_2311_src/arch/arch-X64_CURIE_GCC.fcm b/xios_2311_src/arch/arch-X64_CURIE_GCC.fcm new file mode 100644 index 0000000000000000000000000000000000000000..c1e083d15679ff644c202984f1ad7dcd4ca39565 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_GCC.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 + +%BASE_CFLAGS -std=c++11 -w +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -D__NONE__ -ffree-line-length-none +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_CURIE_GCC.path b/xios_2311_src/arch/arch-X64_CURIE_GCC.path new file mode 100644 index 0000000000000000000000000000000000000000..231f366fa847b0d27b62bef302ce00114549daae --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_GCC.path @@ -0,0 +1,23 @@ +NETCDF_INCDIR="-I $NETCDF_INCDIR" +NETCDF_LIBDIR="-L $NETCDF_LIBDIR" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_CURIE_PGI.env b/xios_2311_src/arch/arch-X64_CURIE_PGI.env new file mode 100644 index 0000000000000000000000000000000000000000..aae297119bcaf96c465b3235f0f8ff5ab6f7e07a --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_PGI.env @@ -0,0 +1,16 @@ +module load netcdf/4.3.3.1_hdf5_parallel +#module unload intel +module unload pgi +module unload gnu +module unload boost +module unload blitz +module load pgi/14.10 +module load boost +module load blitz + + + +export OMPI_CC=pgcc +export OMPI_CXX=pgcpp +export OMPI_F77=pgf77 +export OMPI_FC=pgf95 diff --git a/xios_2311_src/arch/arch-X64_CURIE_PGI.fcm b/xios_2311_src/arch/arch-X64_CURIE_PGI.fcm new file mode 100644 index 0000000000000000000000000000000000000000..46c11fe7595c3761b3d106872da1fb3a7f2719f3 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_PGI.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicxx -noswitcherror +%FCOMPILER mpif90 -noswitcherror +%LINKER mpif90 -noswitcherror + +%BASE_CFLAGS c++11 -D__NONE__ +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -pgcpplibs + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_CURIE_PGI.path b/xios_2311_src/arch/arch-X64_CURIE_PGI.path new file mode 100644 index 0000000000000000000000000000000000000000..231f366fa847b0d27b62bef302ce00114549daae --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_PGI.path @@ -0,0 +1,23 @@ +NETCDF_INCDIR="-I $NETCDF_INCDIR" +NETCDF_LIBDIR="-L $NETCDF_LIBDIR" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.env b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.env new file mode 100644 index 0000000000000000000000000000000000000000..9d06affa8bc8955aa6786a684df5bfee81e97284 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.env @@ -0,0 +1,5 @@ +module unload netcdf +module unload hdf5 +module unload vampir +module load vampir/8.2.1 +module load netcdf/4.3.3.1_hdf5_parallel diff --git a/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.fcm b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.fcm new file mode 100644 index 0000000000000000000000000000000000000000..db7a1efa4025d012f13ea090eb28afb0561622ed --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.fcm @@ -0,0 +1,23 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER vtcc -vt:cc mpicc -vt:inst manual -DVTRACE +%FCOMPILER vtf90 -vt:f90 mpif90 -vt:inst manual -DVTRACE +%LINKER vtf90 -vt:f90 mpif90 -vt:inst manual -nofor-main -DVTRACE +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.path b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.path new file mode 100644 index 0000000000000000000000000000000000000000..3b3f6914c0158e99c1fac02575b7343758bd1e91 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_CURIE_VAMPIR.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INCDIR" +NETCDF_LIBDIR="-L$NETCDF_LIBDIR" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_HORUS.env b/xios_2311_src/arch/arch-X64_HORUS.env new file mode 100644 index 0000000000000000000000000000000000000000..a065dbf6bd2d0f42a8543f1e66646eb31a7b57e8 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_HORUS.env @@ -0,0 +1,6 @@ +export HDF5_INC_DIR=$HOME/hdf5/include +export HDF5_LIB_DIR=$HOME/hdf5/lib + +export NETCDF_INC_DIR=$HOME/netcdf4/include +export NETCDF_LIB_DIR=$HOME/netcdf4/lib + diff --git a/xios_2311_src/arch/arch-X64_HORUS.fcm b/xios_2311_src/arch/arch-X64_HORUS.fcm new file mode 100644 index 0000000000000000000000000000000000000000..bef8b8db3b7b6b873fe3a5e3d72a875910096edd --- /dev/null +++ b/xios_2311_src/arch/arch-X64_HORUS.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 + +%BASE_CFLAGS -w +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_HORUS.path b/xios_2311_src/arch/arch-X64_HORUS.path new file mode 100644 index 0000000000000000000000000000000000000000..65c11769c3e0a3cf65a95e93d68d013c8022c118 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_HORUS.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_IRENE-ITAC.env b/xios_2311_src/arch/arch-X64_IRENE-ITAC.env new file mode 100644 index 0000000000000000000000000000000000000000..97d80d8d002228d6bd9435acd6012407b3107bdd --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-ITAC.env @@ -0,0 +1,11 @@ +module purge +module load itac/2019.0.018 +module load gnu +module load feature/bridge/heterogenous_mpmd +export NETCDFC_INCDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/include +export NETCDFFORTRAN_INCDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/include +export HDF5_INCDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/include +export NETCDFC_LIBDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/lib +export NETCDFFORTRAN_LIBDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/lib +export HDF5_LIBDIR=$WORKDIR/NETCDF4_HDF5/HDF5_1.10.5_INTEL/lib +source itacvars.sh diff --git a/xios_2311_src/arch/arch-X64_IRENE-ITAC.fcm b/xios_2311_src/arch/arch-X64_IRENE-ITAC.fcm new file mode 100644 index 0000000000000000000000000000000000000000..76b43ac25d30264037784a6cded6561df5ba19ac --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-ITAC.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc -trace -DITAC -I$ITAC_INCDIR +%FCOMPILER mpif90 -trace +%LINKER mpif90 -trace -nofor-main -L$ITAC_LIBDIR + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -g -Ofast -xHost -D BOOST_DISABLE_ASSERTS +#%DEV_CFLAGS -g -traceback +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 -g -traceback +#%DEV_FFLAGS -g -traceback +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_IRENE-ITAC.path b/xios_2311_src/arch/arch-X64_IRENE-ITAC.path new file mode 100644 index 0000000000000000000000000000000000000000..4e9e3a2b99cccdbe51bd62d0e35b21965afd482d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-ITAC.path @@ -0,0 +1,28 @@ +NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR" +NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR" +NETCDF_LIB="-lnetcdf -lnetcdff" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INCDIR" +HDF5_LIBDIR="-L$HDF5_LIBDIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_IRENE-SCOREP.env b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.env new file mode 100644 index 0000000000000000000000000000000000000000..ce1e550f0ef0ef2ac691bf9bac43518ae3e3d5a8 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.env @@ -0,0 +1,15 @@ +module purge +module load intel/19.0.2.187 +module load gnu +module load mpi/openmpi/2.0.4 +module load flavor/hdf5/parallel +module load hdf5/1.8.20 +module load netcdf-c/4.6.0 +module load netcdf-fortran/4.4.4 +module load feature/bridge/heterogenous_mpmd +module load scorep/4.1 +module load vampir +export SCOREP_ENABLE_TRACING=true +export SCOREP_ENABLE_PROFILING=false + + diff --git a/xios_2311_src/arch/arch-X64_IRENE-SCOREP.fcm b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.fcm new file mode 100644 index 0000000000000000000000000000000000000000..0787cc19f73c3f6801aae7a3213beb26328c64c4 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER scorep --nocompiler --nomemory --mpp=mpi --user mpicc -DSCOREP +%FCOMPILER scorep --nocompiler --nomemory --mpp=mpi --user mpif90 -DSCOREP +%LINKER scorep --nocompiler --nomemory --mpp=mpi --user mpif90 -DSCOREP -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -Ofast -xHost -D BOOST_DISABLE_ASSERTS +#%DEV_CFLAGS -g -traceback +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 -g -traceback +#%DEV_FFLAGS -g -traceback +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_IRENE-SCOREP.path b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.path new file mode 100644 index 0000000000000000000000000000000000000000..4e9e3a2b99cccdbe51bd62d0e35b21965afd482d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE-SCOREP.path @@ -0,0 +1,28 @@ +NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR" +NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR" +NETCDF_LIB="-lnetcdf -lnetcdff" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INCDIR" +HDF5_LIBDIR="-L$HDF5_LIBDIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_IRENE.env b/xios_2311_src/arch/arch-X64_IRENE.env new file mode 100644 index 0000000000000000000000000000000000000000..f461b930c6814fa40c3b63c43812d3a10fc935ff --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE.env @@ -0,0 +1,11 @@ +module purge +module load flavor/buildcompiler/intel/20 +module load mpi/openmpi/4.0.2 + +module load flavor/hdf5/parallel +module load netcdf-fortran/4.4.4 +module load hdf5/1.8.20 +module load gnu/7.3.0 + +module load totalview +module load perl/5.30.2 diff --git a/xios_2311_src/arch/arch-X64_IRENE.fcm b/xios_2311_src/arch/arch-X64_IRENE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..063a902508a463dc74da816a952e4e2967415167 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 -D__XIOS_EXCEPTION +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +#%DEV_CFLAGS -g -traceback +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +#%DEV_FFLAGS -g -traceback +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_IRENE.path b/xios_2311_src/arch/arch-X64_IRENE.path new file mode 100644 index 0000000000000000000000000000000000000000..4e9e3a2b99cccdbe51bd62d0e35b21965afd482d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE.path @@ -0,0 +1,28 @@ +NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR" +NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR" +NETCDF_LIB="-lnetcdf -lnetcdff" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INCDIR" +HDF5_LIBDIR="-L$HDF5_LIBDIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.env b/xios_2311_src/arch/arch-X64_IRENE_GNU.env new file mode 100644 index 0000000000000000000000000000000000000000..816db1486b180bb23c71112e75e426d7b9f6806a --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE_GNU.env @@ -0,0 +1,11 @@ +module purge +module load flavor/buildcompiler/gcc/8 +module load mpi/openmpi/4.0.2 + +module load flavor/hdf5/parallel +module load netcdf-fortran/4.4.4 +module load hdf5/1.8.20 +module load gnu/8.3.0 + +module load totalview +module load perl/5.30.2 diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm b/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm new file mode 100644 index 0000000000000000000000000000000000000000..baf5542204442c3db14c048a4c92bed135e37ab7 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE_GNU.fcm @@ -0,0 +1,26 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 + +%BASE_CFLAGS -std=c++11 -w -fpermissive -D__XIOS_EXCEPTION +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +#%DEV_CFLAGS -g -fbacktrace +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -fbacktrace -fno-inline + +%BASE_FFLAGS -D__NONE__ --free-form -ffree-line-length-0 +%PROD_FFLAGS -O3 +#%DEV_FFLAGS -g -fbacktrace +%DEV_FFLAGS -g +%DEBUG_FFLAGS -g -fbacktrace + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_IRENE_GNU.path b/xios_2311_src/arch/arch-X64_IRENE_GNU.path new file mode 100644 index 0000000000000000000000000000000000000000..4e9e3a2b99cccdbe51bd62d0e35b21965afd482d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_IRENE_GNU.path @@ -0,0 +1,28 @@ +NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR" +NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR" +NETCDF_LIB="-lnetcdf -lnetcdff" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INCDIR" +HDF5_LIBDIR="-L$HDF5_LIBDIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +BOOST_INCDIR="-I $BOOST_INCDIR" +BOOST_LIBDIR="-L $BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I $BLITZ_INCDIR" +BLITZ_LIBDIR="-L $BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" + + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB" +ADDR2LINE_LIB="-laddr2line" diff --git a/xios_2311_src/arch/arch-X64_JADE.env b/xios_2311_src/arch/arch-X64_JADE.env new file mode 100644 index 0000000000000000000000000000000000000000..06c9557ac6c8841c61b95d360fe19e14ffa92151 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JADE.env @@ -0,0 +1,12 @@ +module unload hdf5 +module unload zlib +module unload pnetcdf +module unload netcdf + +module load hdf5/1.8.9 +module load pnetcdf/1.3.0 +module load zlib/1.2.5 +module load netcdf_C/4.2.1.1 + +export NETCDF_INC_DIR="/opt/software/SGI/netcdf/C/4.2.1.1/include" +export NETCDF_LIB_DIR="/opt/software/SGI/netcdf/C/4.2.1.1/lib" diff --git a/xios_2311_src/arch/arch-X64_JADE.fcm b/xios_2311_src/arch/arch-X64_JADE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..6e08ca3fabc7f12ae13860a8451e14cb54de889c --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JADE.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER icc +%FCOMPILER ifort +%LINKER ifort + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ -lifcore -lintlc -lmpi + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_JADE.path b/xios_2311_src/arch/arch-X64_JADE.path new file mode 100644 index 0000000000000000000000000000000000000000..26ec954f126570590259749d7b430cadbc143508 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JADE.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="" +NETCDF_LIB="-lnetcdf -lpnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_JEANZAY.env b/xios_2311_src/arch/arch-X64_JEANZAY.env new file mode 100644 index 0000000000000000000000000000000000000000..52cc2b31c2c0fbddf40f357468f9f2caa183b7bd --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY.env @@ -0,0 +1,7 @@ +module purge +module load intel-all/2020.4 +module load hdf5/1.12.0-mpi +module load netcdf-c/4.7.4-mpi +module load netcdf-fortran/4.5.3-mpi +source $I_MPI_ROOT/intel64/bin/mpivars.sh release_mt + diff --git a/xios_2311_src/arch/arch-X64_JEANZAY.fcm b/xios_2311_src/arch/arch-X64_JEANZAY.fcm new file mode 100644 index 0000000000000000000000000000000000000000..2f7eda5b751af2d0addba58ad9f4e6a27bdaa603 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY.fcm @@ -0,0 +1,25 @@ +################################################################################ +#################### Projet XIOS ################### +################################################################################# + + +%CCOMPILER mpiicc +%FCOMPILER mpiifort +%LINKER mpiifort -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 -std=c++11 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_JEANZAY.path b/xios_2311_src/arch/arch-X64_JEANZAY.path new file mode 100644 index 0000000000000000000000000000000000000000..03839412b76f227643daaccc95d63aefc42929fd --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="" +NETCDF_LIBDIR="" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env new file mode 100644 index 0000000000000000000000000000000000000000..85fa447dc4c01df146b5928a522a7dcf7e86015a --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.env @@ -0,0 +1,7 @@ +module purge +module load openmpi/4.1.1 +module load intel-all/2020.4 +module load hdf5/1.12.0-mpi +module load netcdf-c/4.7.4-mpi +module load netcdf-fortran/4.5.3-mpi + diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm new file mode 100644 index 0000000000000000000000000000000000000000..7fc70bbf4f3ac88f82bdd27777001b546b99def1 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.fcm @@ -0,0 +1,25 @@ +################################################################################ +#################### Projet XIOS ################### +################################################################################# + + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 -std=c++11 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path new file mode 100644 index 0000000000000000000000000000000000000000..03839412b76f227643daaccc95d63aefc42929fd --- /dev/null +++ b/xios_2311_src/arch/arch-X64_JEANZAY_OPENMPI.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="" +NETCDF_LIBDIR="" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_OCCIGEN.env b/xios_2311_src/arch/arch-X64_OCCIGEN.env new file mode 100644 index 0000000000000000000000000000000000000000..adb7e54069dd983e163b5097de93f512caf3640b --- /dev/null +++ b/xios_2311_src/arch/arch-X64_OCCIGEN.env @@ -0,0 +1,10 @@ +#!/bin/bash +module unload netcdf hdf5 intel bullxmpi + +module load intel +module load bullxmpi +module load hdf5 +module load netcdf + +export HDF5_INC_DIR=$HDF5HOME/include +export HDF5_LIB_DIR=$HDF5HOME/lib diff --git a/xios_2311_src/arch/arch-X64_OCCIGEN.fcm b/xios_2311_src/arch/arch-X64_OCCIGEN.fcm new file mode 100644 index 0000000000000000000000000000000000000000..21041e3d1cfc5a0424e65864a95dcb41a232c251 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_OCCIGEN.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet xios - xmlioserver ##################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_OCCIGEN.path b/xios_2311_src/arch/arch-X64_OCCIGEN.path new file mode 100644 index 0000000000000000000000000000000000000000..67a9fbf009633a3f083e1d9d91b9eb1ba6e91cd7 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_OCCIGEN.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I$NETCDFF_INCDIR -I$NETCDF_INC_DIR" +NETCDF_LIBDIR="-L$NETCDFF_LIBDIR -L$NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I$HDF5_INC_DIR" +HDF5_LIBDIR="-L$HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_POINCARE.env b/xios_2311_src/arch/arch-X64_POINCARE.env new file mode 100644 index 0000000000000000000000000000000000000000..cbcf954fe629c441764212e996ab0619e4eb4f96 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_POINCARE.env @@ -0,0 +1,3 @@ +module unload hdf5 netcdf4 +module load intel/15.0.0 openmpi/1.6.3_intel15.0.0 hdf5/1.8.16_intel_openmpi netcdf4/4.3.3.1_intel_openmpi + diff --git a/xios_2311_src/arch/arch-X64_POINCARE.fcm b/xios_2311_src/arch/arch-X64_POINCARE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..df1814cacbf65f70a5ff059f7f0222dbd335b257 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_POINCARE.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -std=c++11 -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_POINCARE.path b/xios_2311_src/arch/arch-X64_POINCARE.path new file mode 100644 index 0000000000000000000000000000000000000000..b1fab107ee65583436cea11945bfeb96526e2f8d --- /dev/null +++ b/xios_2311_src/arch/arch-X64_POINCARE.path @@ -0,0 +1,19 @@ +NETCDF_INCDIR="-I $NETCDF4_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF4_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz" + +OASIS_INCDIR="" +OASIS_LIBDIR="" +OASIS_LIB="" + +#only for MEMTRACK debuging : developper only +ADDR2LINE_LIBDIR="" +ADDR2LINE_LIB="" diff --git a/xios_2311_src/arch/arch-X64_TITANE.env b/xios_2311_src/arch/arch-X64_TITANE.env new file mode 100644 index 0000000000000000000000000000000000000000..260ce7ee5e5412e5f85f0dd3425769b9565dc152 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE.env @@ -0,0 +1,4 @@ +module unload netcdf +module unload hdf5 +module load netcdf/4.2 +module load hdf5/1.8.8 diff --git a/xios_2311_src/arch/arch-X64_TITANE.fcm b/xios_2311_src/arch/arch-X64_TITANE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..4117fac068d282e859eccd6edd28c3d0279d5c66 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D __NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_TITANE.path b/xios_2311_src/arch/arch-X64_TITANE.path new file mode 100644 index 0000000000000000000000000000000000000000..fc522ecd64f0d47b08210b4c0ff1962f1896a24b --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.env b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.env new file mode 100644 index 0000000000000000000000000000000000000000..260ce7ee5e5412e5f85f0dd3425769b9565dc152 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.env @@ -0,0 +1,4 @@ +module unload netcdf +module unload hdf5 +module load netcdf/4.2 +module load hdf5/1.8.8 diff --git a/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.fcm b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.fcm new file mode 100644 index 0000000000000000000000000000000000000000..a4b92b7bc4892dd823dfe882dcbcd28912d7f071 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.fcm @@ -0,0 +1,23 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER vtcc -vt:cc mpicc -vt:inst manual -DVTRACE +%FCOMPILER vtf90 -vt:f90 mpif90 -vt:inst manual -DVTRACE +%LINKER vtf90 -vt:f90 mpif90 -vt:inst manual -nofor-main -DVTRACE +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.path b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.path new file mode 100644 index 0000000000000000000000000000000000000000..fc522ecd64f0d47b08210b4c0ff1962f1896a24b --- /dev/null +++ b/xios_2311_src/arch/arch-X64_TITANE_VAMPIR.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_YELLOWSTONE.env b/xios_2311_src/arch/arch-X64_YELLOWSTONE.env new file mode 100644 index 0000000000000000000000000000000000000000..2765b1917a12added1d89cdd07526666c9387141 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_YELLOWSTONE.env @@ -0,0 +1,4 @@ +module unload netcdf +module unload intel +module load intel/16.0.2 +module load netcdf-mpi/4.4.0 diff --git a/xios_2311_src/arch/arch-X64_YELLOWSTONE.fcm b/xios_2311_src/arch/arch-X64_YELLOWSTONE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..83d1cf0447143f32145764b3959e0fd594de5c0a --- /dev/null +++ b/xios_2311_src/arch/arch-X64_YELLOWSTONE.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpiicc +%FCOMPILER mpiifort +%LINKER mpiifort -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-X64_YELLOWSTONE.path b/xios_2311_src/arch/arch-X64_YELLOWSTONE.path new file mode 100644 index 0000000000000000000000000000000000000000..fa7198190d8f4f9aeac743ccdd9506f94bb1e2e3 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_YELLOWSTONE.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I/$NETCDF/include" +NETCDF_LIBDIR="-L/$NETCDF/lib" +NETCDF_LIB="-lnetcdff -lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-X64_ZEUS.env b/xios_2311_src/arch/arch-X64_ZEUS.env new file mode 100644 index 0000000000000000000000000000000000000000..1ef7b107da4ef22b1faef6776b0313a79f2ba5da --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ZEUS.env @@ -0,0 +1,15 @@ +# Environment to compile XIOS on ZEUS cluster at CMCC + +module load intel20.1/szip/2.1.1 +module load cmake +module load gcc_9.1.0/9.1.0 +module load intel20.1/20.1.217 +module load impi20.1/19.7.217 +module load impi20.1/hdf5-threadsafe/1.12.0 +module load impi20.1/netcdf-threadsafe/C_4.7.4-F_4.5.3_CXX_4.3.1 +module load impi20.1/parallel-netcdf/1.12.1 + +export HDF5_DIR=$HDF5 +export NETCDF_DIR=$NETCDF +export PNETCDF_DIR=$PNETCDF + diff --git a/xios_2311_src/arch/arch-X64_ZEUS.fcm b/xios_2311_src/arch/arch-X64_ZEUS.fcm new file mode 100644 index 0000000000000000000000000000000000000000..363b1ea4daad10d5109040f274a3a6426e80f46e --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ZEUS.fcm @@ -0,0 +1,23 @@ +# Environment to compile XIOS on ZEUS cluster at CMCC + +%CCOMPILER mpiicc +%FCOMPILER mpiifort +%LINKER mpiifort -nofor-main + +%BASE_CFLAGS -diag-disable 1125 -diag-disable 279 -std=c++11 +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 -r8 -fp-model source -xSKYLAKE-AVX512 -qopt-zmm-usage=low -no-fma +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ -lgpfs + +%CPP mpiicc -EP +%FPP cpp -P +%MAKE gmake + diff --git a/xios_2311_src/arch/arch-X64_ZEUS.path b/xios_2311_src/arch/arch-X64_ZEUS.path new file mode 100644 index 0000000000000000000000000000000000000000..592c0688f907763479d175b3a21d881789193b77 --- /dev/null +++ b/xios_2311_src/arch/arch-X64_ZEUS.path @@ -0,0 +1,15 @@ +# Environment to compile XIOS on ZEUS cluster at CMCC + +NETCDF_INCDIR="-I${NETCDF_DIR}/include -I${PNETCDF_DIR}/include" +NETCDF_LIBDIR="-L${NETCDF_DIR}/lib -L${PNETCDF_DIR}/lib" +NETCDF_LIB="-L${NETCDF_DIR}/lib -lnetcdff -L${NETCDF_DIR}/lib -lnetcdf -L${PNETCDF_DIR}/lib -lpnetcdf" + +HDF5_INCDIR="-I${HDF5_DIR}/include" +HDF5_LIBDIR="-L${HDF5_DIR}/lib" +HDF5_LIB="-L${HDF5_DIR}/lib -lhdf5_hl -L${HDF5_DIR}/lib -lhdf5" + +OASIS_INCDIR="" +OASIS_LIBDIR="" +OASIS_LIB="" + + diff --git a/xios_2311_src/arch/arch-XC30_Cray.env b/xios_2311_src/arch/arch-XC30_Cray.env new file mode 100644 index 0000000000000000000000000000000000000000..e66c049cd96c4558f0b3304d6bb0c8fd602a53eb --- /dev/null +++ b/xios_2311_src/arch/arch-XC30_Cray.env @@ -0,0 +1,11 @@ +export HDF5_INC_DIR="" +export HDF5_LIB_DIR="" + +export NETCDF_INC_DIR="" +export NETCDF_LIB_DIR="" + +export BOOST_INC_DIR="" +export BOOST_LIB_DIR="" + +export BLITZ_INC_DIR="" +export BLITZ_LIB_DIR="" diff --git a/xios_2311_src/arch/arch-XC30_Cray.fcm b/xios_2311_src/arch/arch-XC30_Cray.fcm new file mode 100644 index 0000000000000000000000000000000000000000..a3829d7425557a9c6469d1f02a3eac9ec7c566f8 --- /dev/null +++ b/xios_2311_src/arch/arch-XC30_Cray.fcm @@ -0,0 +1,42 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +# Cray XC build instructions for XIOS/xios-1.0 +# These files have been tested on +# Archer (XC30), ECMWF (XC30), and the Met Office (XC40) using the Cray PrgEnv. +# One must also: +# module load cray-netcdf-hdf5parallel/4.3.2 +# There is a bug in the CC compiler prior to cce/8.3.7 using -O3 or -O2 +# The workarounds are not ideal: +# Use -Gfast and put up with VERY large executables +# Use -O1 and possibly suffer a significant performance loss. +# +# Mike Rezny Met Office 23/03/2015 + +%CCOMPILER CC +%FCOMPILER ftn +%LINKER CC + +%BASE_CFLAGS -hstd=c++11 -DMPICH_SKIP_MPICXX -h msglevel_4 -h zero -h gnu + +## Only use -O3 if you can load module cce/8.3.7 or later +#%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS + +## Otherwise take your pick of these, refer to information above. +%PROD_CFLAGS -O1 -DBOOST_DISABLE_ASSERTS +## %PROD_CFLAGS -Gfast -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -em -m 4 -e0 -eZ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -G2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -D__NONE__ + +%CPP cpp +%FPP cpp -P -CC +%MAKE gmake diff --git a/xios_2311_src/arch/arch-XC30_Cray.path b/xios_2311_src/arch/arch-XC30_Cray.path new file mode 100644 index 0000000000000000000000000000000000000000..633c7bf5ac51c4ee644a43968cc36af9e4acd7b2 --- /dev/null +++ b/xios_2311_src/arch/arch-XC30_Cray.path @@ -0,0 +1,26 @@ +NETCDF_INCDIR="" +NETCDF_LIBDIR="" +NETCDF_LIB="" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" + +BOOST_INCDIR="-I$BOOST_INCDIR" +BOOST_LIBDIR="-L$BOOST_LIBDIR" +BOOST_LIB="" + +BLITZ_INCDIR="-I$BLITZ_INCDIR" +BLITZ_LIBDIR="-L$BLITZ_LIBDIR" +BLITZ_LIB="" + +OASIS_INCDIR="" +OASIS_LIBDIR="" +OASIS_LIB="" +#OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +#OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +#OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-XE6_LYNX.env b/xios_2311_src/arch/arch-XE6_LYNX.env new file mode 100644 index 0000000000000000000000000000000000000000..8790aeb80bff6911d98e937eb3d6e8697135ad81 --- /dev/null +++ b/xios_2311_src/arch/arch-XE6_LYNX.env @@ -0,0 +1,4 @@ +export HDF5_INC_DIR=$WORKDIR/hdf5/include +export HDF5_LIB_DIR=${CRAY_HDF5_DIR}/hdf5-parallel-cce/lib +export NETCDF_INC_DIR=${CRAY_NETCDF_DIR}/netcdf-hdf5parallel-cce/include +export NETCDF_LIB_DIR=${CRAY_NETCDF_DIR}/netcdf-hdf5parallel-cce/lib diff --git a/xios_2311_src/arch/arch-XE6_LYNX.fcm b/xios_2311_src/arch/arch-XE6_LYNX.fcm new file mode 100644 index 0000000000000000000000000000000000000000..f444215b198f7936f1b75cd38f5a09e74cc11aec --- /dev/null +++ b/xios_2311_src/arch/arch-XE6_LYNX.fcm @@ -0,0 +1,24 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER CC +%FCOMPILER ftn +%LINKER CC + +%BASE_CFLAGS -DMPICH_SKIP_MPICXX -h msglevel_4 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -em -m 4 +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -D__NONE__ + +%CPP cpp +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-XE6_LYNX.path b/xios_2311_src/arch/arch-XE6_LYNX.path new file mode 100644 index 0000000000000000000000000000000000000000..fa5642cc7a24f04dd740b310a814b17cb217b6cb --- /dev/null +++ b/xios_2311_src/arch/arch-XE6_LYNX.path @@ -0,0 +1,15 @@ +NETCDF_INCDIR="-I $NETCDF_INC_DIR" +NETCDF_LIBDIR="-L $NETCDF_LIB_DIR" +NETCDF_LIB="-lnetcdf" + +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" + +#HDF5_INCDIR="-I $HDF5_INC_DIR" +HDF5_LIBDIR="-L $HDF5_LIB_DIR" +HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl" + +OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1" +OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib" +OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu" diff --git a/xios_2311_src/arch/arch-ifort_CICLAD.fcm b/xios_2311_src/arch/arch-ifort_CICLAD.fcm new file mode 100644 index 0000000000000000000000000000000000000000..cf2b8abaeb098244f11b2866672e7c4641500dcb --- /dev/null +++ b/xios_2311_src/arch/arch-ifort_CICLAD.fcm @@ -0,0 +1,20 @@ +%CCOMPILER /usr/lib64/openmpi/1.4.5-ifort/bin/mpicc +%FCOMPILER /usr/lib64/openmpi/1.4.5-ifort/bin/mpif90 +%LINKER /usr/lib64/openmpi/1.4.5-ifort/bin/mpif90 -nofor-main + +%BASE_CFLAGS +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -traceback +%DEBUG_CFLAGS -DBZ_DEBUG -g -traceback -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP /usr/lib64/openmpi/1.4.5-ifort/bin/mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-ifort_CICLAD.path b/xios_2311_src/arch/arch-ifort_CICLAD.path new file mode 100644 index 0000000000000000000000000000000000000000..1d370c15050f45ccbd9c55054ca9669ed547b48f --- /dev/null +++ b/xios_2311_src/arch/arch-ifort_CICLAD.path @@ -0,0 +1,9 @@ +NETCDF_INCDIR="-I /opt/netcdf42/ifort/include" +NETCDF_LIBDIR="-L/opt/netcdf42/ifort/lib" +NETCDF_LIB="-lnetcdf" +MPI_INCDIR="" +MPI_LIBDIR="" +MPI_LIB="" +HDF5_INCDIR="" +HDF5_LIBDIR="" +HDF5_LIB="" diff --git a/xios_2311_src/arch/arch-ifort_LSCE.fcm b/xios_2311_src/arch/arch-ifort_LSCE.fcm new file mode 100644 index 0000000000000000000000000000000000000000..8cfbe64c9efcb3ee48cc17cbeb4f2ff4c4014230 --- /dev/null +++ b/xios_2311_src/arch/arch-ifort_LSCE.fcm @@ -0,0 +1,20 @@ +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS +%PROD_CFLAGS -O3 -D BOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 -traceback +%DEBUG_FFLAGS -g -traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake diff --git a/xios_2311_src/arch/arch-ifort_LSCE.path b/xios_2311_src/arch/arch-ifort_LSCE.path new file mode 100644 index 0000000000000000000000000000000000000000..2c14b21698128b89eee62b52c5746c6283d2e205 --- /dev/null +++ b/xios_2311_src/arch/arch-ifort_LSCE.path @@ -0,0 +1,6 @@ +NETCDF_INCDIR="-I /usr/local/install/netcdf-4.3.2p/include" +NETCDF_LIBDIR="-L/usr/local/install/netcdf-4.3.2p/lib" +NETCDF_LIB="-lnetcdf -lnetcdff" +HDF5_INCDIR="-I /usr/local/install/hdf5-1.8.9p/include" +HDF5_LIBDIR="-L/usr/local/install/hdf5-1.8.9p/lib" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl" diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env new file mode 100644 index 0000000000000000000000000000000000000000..94c09c99db55f4b7e49cd304f7c886e61b26fda8 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.env @@ -0,0 +1,4 @@ +module --force purge +module load oneapi/2023.2 +module load hdf5/1.14.1-2 pnetcdf/1.12.3 #dependencies for netcdf +module load netcdf/2023-06-14 diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm new file mode 100644 index 0000000000000000000000000000000000000000..4eeaea50954f45e70f738d47c4ba25a2d838b289 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.fcm @@ -0,0 +1,25 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpifort +%LINKER mpifort + +%BASE_CFLAGS -fPIC -std=c++11 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g -O2 +%DEBUG_CFLAGS -g + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 +%DEBUG_FFLAGS -g + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake + diff --git a/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path new file mode 100644 index 0000000000000000000000000000000000000000..586ab58641b0860a27a052291815887c68175054 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5-gpp-intel-openmpi.path @@ -0,0 +1,8 @@ + +NETCDF_INCDIR="-I/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/include" +NETCDF_LIBDIR="-L/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/lib" +NETCDF_LIB="-lnetcdf -lnetcdff" +HDF5_INCDIR="-I/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/include" +HDF5_LIBDIR="-L/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/lib" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel.env b/xios_2311_src/arch/arch-mn5_gpp_intel.env new file mode 100644 index 0000000000000000000000000000000000000000..83e84d18c4671cae260db8213c80c6404d09ee4f --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel.env @@ -0,0 +1,5 @@ +module --force purge +module load intel/2023.2.0 impi/2021.10.0 mkl/2023.2.0 hdf5/1.14.1-2 +module load pnetcdf/1.12.3 netcdf/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3 +module load boost/1.75.0 +module load ucx diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel.fcm b/xios_2311_src/arch/arch-mn5_gpp_intel.fcm new file mode 100644 index 0000000000000000000000000000000000000000..a356d28c97811e25cde31ef18f800cc3c910a26c --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel.fcm @@ -0,0 +1,25 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpif90 +%LINKER mpif90 -nofor-main + +%BASE_CFLAGS -ansi -w -std=c++11 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 --traceback +%DEBUG_FFLAGS -g --traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP mpicc -EP +%FPP cpp -P +%MAKE gmake + diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel.path b/xios_2311_src/arch/arch-mn5_gpp_intel.path new file mode 100644 index 0000000000000000000000000000000000000000..586ab58641b0860a27a052291815887c68175054 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel.path @@ -0,0 +1,8 @@ + +NETCDF_INCDIR="-I/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/include" +NETCDF_LIBDIR="-L/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/IMPI/lib" +NETCDF_LIB="-lnetcdf -lnetcdff" +HDF5_INCDIR="-I/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/include" +HDF5_LIBDIR="-L/apps/GPP/HDF5/1.14.1-2/INTEL/IMPI/lib" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.env b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.env new file mode 100644 index 0000000000000000000000000000000000000000..6f58885ae1001b71644d599ad28f14323e22cde8 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.env @@ -0,0 +1,4 @@ +module --force purge +module load intel/2023.2.0 openmpi/4.1.5 ucx +module load hdf5/1.14.1-2-openmpi pnetcdf/1.12.3-openmpi +module load netcdf/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3-openmpi diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.fcm b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.fcm new file mode 100644 index 0000000000000000000000000000000000000000..995d145e49ad5cb14ed16f2947d7559927431e11 --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.fcm @@ -0,0 +1,25 @@ +################################################################################ +################### Projet XIOS ################### +################################################################################ + +%CCOMPILER mpicc +%FCOMPILER mpifort +%LINKER mpifort + +%BASE_CFLAGS -ansi -w -std=c++11 +%PROD_CFLAGS -O3 -DBOOST_DISABLE_ASSERTS +%DEV_CFLAGS -g +%DEBUG_CFLAGS -DBZ_DEBUG -g -fno-inline + +%BASE_FFLAGS -D__NONE__ +%PROD_FFLAGS -O3 +%DEV_FFLAGS -g -O2 --traceback +%DEBUG_FFLAGS -g --traceback + +%BASE_INC -D__NONE__ +%BASE_LD -lstdc++ + +%CPP cpp +%FPP fpp +%MAKE gmake + diff --git a/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.path b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.path new file mode 100644 index 0000000000000000000000000000000000000000..87bca8240c8e58082bdb0f7b61407a75e924546c --- /dev/null +++ b/xios_2311_src/arch/arch-mn5_gpp_intel_openmpi.path @@ -0,0 +1,8 @@ + +NETCDF_INCDIR="-I/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/OPENMPI/include" +NETCDF_LIBDIR="-L/apps/GPP/NETCDF/c-4.9.2_fortran-4.6.1_cxx4-4.3.1_hdf5-1.14.1-2_pnetcdf-1.12.3/INTEL/OPENMPI/lib" +NETCDF_LIB="-lnetcdf -lnetcdff" +HDF5_INCDIR="-I/apps/GPP/HDF5/1.14.1-2/INTEL/OPENMPI/include" +HDF5_LIBDIR="-L/apps/GPP/HDF5/1.14.1-2/INTEL/OPENMPI/lib" +HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz" + diff --git a/xios_2311_src/bld.cfg b/xios_2311_src/bld.cfg new file mode 100644 index 0000000000000000000000000000000000000000..a361cda92a80106f0c94a33426f9e0166121f750 --- /dev/null +++ b/xios_2311_src/bld.cfg @@ -0,0 +1,87 @@ +# ----------------------- FCM extract configuration file ----------------------- +cfg::type bld +cfg::version 1.0 + + +# ------------------------------------------------------------------------------ +# Build information +# ------------------------------------------------------------------------------ + +# Specifying the build directory and src::blitz if necessary. +inc bld_dir.cfg + +%CFLAGS %BASE_CFLAGS %COMPIL_CFLAGS +%FFLAGS %BASE_FFLAGS %COMPIL_FFLAGS +%LD_FLAGS %ARCH_LD %BASE_LD + +bld::infile_ext::cpp C::SOURCE +bld::infile_ext::conf CPP::INCLUDE +bld::infile_ext::hpp CPP::INCLUDE + +# IMPORTANT: as the build directory may not necessarily coincide with the source directory, +# each source subfolder should be declared individually +search_src false +src::xios $PWD/src +src::xios::config $PWD/src/config +src::xios::date $PWD/src/date +src::xios::filter $PWD/src/filter +src::xios::functor $PWD/src/functor +src::xios::interface::c $PWD/src/interface/c +src::xios::interface::c_attr $PWD/src/interface/c_attr +src::xios::interface::fortran $PWD/src/interface/fortran +src::xios::interface::fortran_attr $PWD/src/interface/fortran_attr +src::xios::io $PWD/src/io +src::xios::node $PWD/src/node +src::xios::parse_expr $PWD/src/parse_expr +src::xios::test $PWD/src/test +src::xios::transformation $PWD/src/transformation +src::xios::transformation::Functions $PWD/src/transformation/Functions +src::xios::transformation::axis_algorithm $PWD/src/transformation/axis_algorithm +src::xios::transformation::domain_algorithm $PWD/src/transformation/domain_algorithm +src::xios::transformation::scalar_algorithm $PWD/src/transformation/scalar_algorithm +src::xios::type $PWD/src/type +src::xios::manager $PWD/src/manager +src::xios::distribution $PWD/src/distribution + +src::netcdf $PWD/extern/netcdf4 +src::remap $PWD/extern/remap/src +bld::lib xios +bld::target libxios.a +#bld::target generate_fortran_interface.exe +#bld::target test_remap.exe +bld::target xios_server.exe +bld::target generic_testcase.exe +#bld::target test_regular.exe +#bld::target test_xios2_cmip6.exe +#bld::target test_new_features.exe test_unstruct_complete.exe +#bld::target test_remap.exe +#bld::target test_complete.exe +#bld::target test_client.exe +#bld::target test_unstruct_complete.exe +#bld::target test_unstructured.exe +bld::exe_dep + +bld::tool::cc %CCOMPILER +bld::tool::fc %FCOMPILER +bld::tool::fpp %FPP +bld::tool::cpp %CPP +bld::tool::cppflags %CBASE_INC -I${PWD}/extern/src_netcdf -I${PWD}/extern/boost/include -I${PWD}/extern/rapidxml/include -I${PWD}/extern/blitz/include +bld::tool::fppflags %BASE_INC -I${PWD}/extern/boost/include -I${PWD}/extern/rapidxml/include +bld::tool::ld %LINKER +bld::tool::ldflags %LD_FLAGS +bld::tool::cflags %CFLAGS %CBASE_INC -I${PWD}/extern/src_netcdf -I${PWD}/extern/boost/include -I${PWD}/extern/rapidxml/include -I${PWD}/extern/blitz/include +bld::tool::fflags %FFLAGS %FBASE_INC +bld::tool::cppkeys %CPP_KEY +bld::tool::fppkeys %CPP_KEY +bld::tool::make %MAKE + +# Pre-process code before analysing dependencies +bld::pp false +bld::pp::xios::interface::fortran true +bld::pp::xios::interface::fortran_attr true +bld::excl_dep use::mod_prism_get_comm +bld::excl_dep use::mod_prism_get_localcomm_proto +bld::excl_dep use::mod_prism_proto +bld::excl_dep use::mod_prism +bld::excl_dep use::netcdf +bld::excl_dep inc::mpif.h diff --git a/xios_2311_src/bld_dir.cfg b/xios_2311_src/bld_dir.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d491b4634d3fe2e9ff7803eaba4de14fda2d6582 --- /dev/null +++ b/xios_2311_src/bld_dir.cfg @@ -0,0 +1,3 @@ +inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/.//arch.fcm +inc /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/.//config.fcm +dir::root /gpfs/scratch/bsc32/bsc032756/APPS/NEMO5_2024/xios_2311_src/./ diff --git a/xios_2311_src/doc/XIOS_reference_guide.lyx b/xios_2311_src/doc/XIOS_reference_guide.lyx new file mode 100644 index 0000000000000000000000000000000000000000..45a5a2f3b2cf85ca5692ba5d96ca2a433d4e6749 --- /dev/null +++ b/xios_2311_src/doc/XIOS_reference_guide.lyx @@ -0,0 +1,10613 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass book +\use_default_options true +\begin_modules +logicalmkup +\end_modules +\maintain_unincluded_children false +\language english +\language_package auto +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Title +XIOS Fortran Reference Guide +\end_layout + +\begin_layout Author +Yann Meurdesoif +\end_layout + +\begin_layout Chapter +Attribute reference +\end_layout + +\begin_layout Section +Context attribute reference +\end_layout + +\begin_layout Section +Calendar attribute reference +\end_layout + +\begin_layout Subsection* +type: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {Gregorian, Julian, D360, AllLeap, NoLeap, user_defined} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Define the calendar used for the current context. + This attribute is mandatory and cannot be modified once it has been set. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined using the + following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +start_date: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_date) :: start_date +\end_layout + +\begin_layout Standard +Define the start date of the simulation for the current context. + This attribute is optional, the default value is +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +0000-01-01 00:00:00 +\end_layout + +\end_inset + +. + The +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + + attribute must always be set at the same time or before this attribute + is defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +A partial date is allowed in the configuration file as long as the omitted + parts are at the end, in which case they are initialized as in the default + value. + Optionally an offset can be added to the date using the notation " +\emph on ++ duration +\emph default +". + +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or later using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_start_date(start_date) +\end_layout + +\begin_layout Subsection* +time_origin: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_date) :: time_origin +\end_layout + +\begin_layout Standard +Define the time origin of a time axis. + It will appear as metadata attached to the time axis in an output file. + This attribute is optional, the default value is +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +0000-01-01 00:00:00 +\end_layout + +\end_inset + +. + The +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + + attribute must always be set at the same time or before this attribute + is defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +A partial date is allowed in the configuration file as long as the omitted + parts are at the end, in which case they are initialized as in the default + value. + Optionally an offset can be added to the date using the notation " +\emph on ++ duration +\emph default +". + +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or later using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_time_origin(time_origin) +\end_layout + +\begin_layout Subsection* +timestep: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: timestep +\end_layout + +\begin_layout Standard +Define the time step of the simulation for the current context. + This attribute is mandatory. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute can be defined at the same + time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Standard +or using the following subroutine: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_timestep(timestep) +\end_layout + +\begin_layout Subsection* +day_length: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: day_length +\end_layout + +\begin_layout Standard +Define the duration of a day in seconds when using a custom calendar. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to " +\emph on +user_defined +\emph default +", otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +month_lengths: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: month_lengths(:) +\end_layout + +\begin_layout Standard +Define the duration of each month, in days, when using a custom calendar. + The number of elements in the array defines the number of months in a year + and the sum of all elements is the total number of days in a year. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +year_length +\series default + attribute is not used, otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +year_length: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: year_length +\end_layout + +\begin_layout Standard +Define the duration of a year, in seconds, when using a custom calendar. + This attribute is mandatory if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is not used, otherwise it must not be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Note that the date format is modified when using this attribute: the month + must be always be omitted and the day must also be omitted if +\begin_inset Formula $year\_length\leq day\_length$ +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_month: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: leap_year_month +\end_layout + +\begin_layout Standard +Define the month to which the extra day will be added in case of leap year, + when using a custom calendar. + This attribute is optional if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is used, otherwise it must not be defined. + The default behavior is not to have any leap year. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $1\leq leap\_year\_month\leq size(month\_lengths)$ +\end_inset + + and the +\series bold +leap_year_drift +\series default + attribute must also be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_drift: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: leap_year_drift +\end_layout + +\begin_layout Standard +Define the yearly drift, expressed as a fraction of a day, between the calendar + year and the astronomical year, when using a custom calendar. + This attribute is optional if the calendar +\series bold +type +\series default + is set to +\series bold +\emph on +user_defined +\series default +\emph default + and the +\series bold +month_lengths +\series default + attribute is used, otherwise it must not be defined. + The default behavior is not to have any leap year, i.e. + the default value is +\begin_inset Formula $\mathbf{0}$ +\end_inset + +. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $0\leq leap\_year\_drift<1$ +\end_inset + + and the +\series bold +leap_year_month +\series default + attribute must also be defined. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Subsection* +leap_year_drift_offset: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: leap_year_drift_offset +\end_layout + +\begin_layout Standard +Define the initial drift between the calendar year and the astronomical + year, expressed as a fraction of a day, at the beginning of the time origin's + year, when using a custom calendar. + This attribute is optional if the +\series bold +leap_year_month +\series default + and +\series bold +leap_year_drift +\series default + attributes are used, otherwise it must not be defined. + The default value is +\begin_inset Formula $\mathbf{0}$ +\end_inset + +. + If defined, this attribute must comply with the following constraint: +\begin_inset Formula $0\leq leap\_year\_drift\_offset<1$ +\end_inset + +. + If +\begin_inset Formula $leap\_yeap\_drift\_offset+leap\_yeap\_drift$ +\end_inset + + is greater or equal to 1, then the first year will be a leap year. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the Fortran interface, this attribute must be defined at the + same time as the calendar +\series bold +type +\series default +: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\end_layout + +\begin_layout Section +Scalar attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a scalar as it will appear in a file. + If not defined, the name will be generated automatically based on the id. + If multiple scalars are defined in the same file, each scalar must have + a unique name. + +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a scalar as it will appear in the scalar's + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a scalar as it will appear in the scalar's metadata + in an output file. + +\end_layout + +\begin_layout Subsection* +unit (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the scalar unit as it will appear in the scalar's metadata in an + output file. +\end_layout + +\begin_layout Subsection* +value (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: value +\end_layout + +\begin_layout Standard +Defines the value of a scalar. + If both, the label and the value, are set then only the label will be written + into a file. +\end_layout + +\begin_layout Subsection* +bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds(:) +\end_layout + +\begin_layout Standard +Defines (two) scalar boundaries. + The array size must should be equal to 2. +\end_layout + +\begin_layout Subsection* +bounds_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: bounds_name +\end_layout + +\begin_layout Standard +Defines the name of scalar bounds as it will appear in a file. + If not defined, the name will be generated automatically based on the scalar + id. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of scalar value and boundaries as it will + be written into an output file. + Available values are: 2 (integer), 4 (float single precision) and 8 (float + double precision). + The default value is 8. +\end_layout + +\begin_layout Subsection* +label (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: label +\end_layout + +\begin_layout Standard +Defines the label of a scalar. + If both, the label and the value, are set then only the label will be output + into a file. +\end_layout + +\begin_layout Subsection* +scalar_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: scalar_ref +\end_layout + +\begin_layout Standard +Defines the reference to a scalar. + All attributes will be inherited from the referenced scalar via the classical + inheritance mechanism. + The value assigned to the referenced scalar will be transmitted to the + current scalar. +\end_layout + +\begin_layout Subsection* +positive (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {up, down} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: positive +\end_layout + +\begin_layout Standard +Defines the positive direction for fields representing height or depth. +\end_layout + +\begin_layout Subsection* +axis_type (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {X, Y, Z, T} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_type +\end_layout + +\begin_layout Standard +Defines the type of a (scalar) axis. + The values correspond to the following axis types: +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +X: +\series default +\shape default + longitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Y +\emph default +: +\series default +\shape default + latitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Z +\emph default +: +\series default +\shape default + vertical axis +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +T: +\series default +\shape default +time axis. +\end_layout + +\begin_layout Subsection* +comment: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + +\end_layout + +\begin_layout Section +Axis attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a vertical axis as it will appear in an output file. + If not defined, the name will be generated automatically based on the axis + id. + If multiple vertical axes are defined in the same file, each axis must + have a unique name. + +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a vertical axis as it will appear in the axis' + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a vertical axis as it will appear in the axis' + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +unit (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the unit of an axis as it will appear in the axis' metadata in an + output file. +\end_layout + +\begin_layout Subsection* +dim_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_name +\end_layout + +\begin_layout Standard +Defines the name of axis dimension as it will appear in the file's metadata. +\end_layout + +\begin_layout Subsection* +formula (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula +\end_layout + +\begin_layout Standard +Adds the formula attribute to a parametric vertical axis. +\end_layout + +\begin_layout Subsection* +formula_term (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_term +\end_layout + +\begin_layout Standard +Adds the formula terms attribute to a parametric vertical axis. +\end_layout + +\begin_layout Subsection* +formula_bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_bounds +\end_layout + +\begin_layout Standard +Adds the formula attribute to the bounds of a parametric vertical axis. + The attribute is mandatory if the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +formula +\end_layout + +\end_inset + + attribute is defined for the axis. +\end_layout + +\begin_layout Subsection* +formula_term_bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: formula_term_bounds +\end_layout + +\begin_layout Standard +Adds the formula terms attribute to the bounds of a parametric vertical + axis. + The attribute is mandatory if the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +formula +\end_layout + +\end_inset + + attribute is defined for the axis. +\end_layout + +\begin_layout Subsection* +n_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_glo +\end_layout + +\begin_layout Standard +Defines the global size of an axis. +\end_layout + +\begin_layout Subsection* +begin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: begin +\end_layout + +\begin_layout Standard +Defines the beginning index of the local domain. + It can take value between 0 and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is 0. +\end_layout + +\begin_layout Subsection* +n (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: zoom_size +\end_layout + +\begin_layout Standard +Defines the local size of an axis. + It can take value between 0 and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n_glo +\end_layout + +\end_inset + +. + Local axis decomposition can be declared either with attributes +\series bold +\shape italic +{n, begin} +\series default +\shape default + or with +\series bold +\shape italic +index +\series default +\shape default +. +\end_layout + +\begin_layout Subsection* +index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: index(:) +\end_layout + +\begin_layout Standard +Defines the global indexes of a local axis held by each process. + If the attribute is specified, its array size must be equal to +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + Local axis decomposition can be declared either with attributes +\series bold +\shape italic +{n, begin} +\series default +\shape default + or with +\series bold +\shape italic +index +\series default +\shape default +. +\end_layout + +\begin_layout Subsection* +value (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: value(:) +\end_layout + +\begin_layout Standard +Defines the value of each level of a vertical axis. + The array size must be equal to the value of the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + If the label is provided then only the label will be written into a file + and not the axis value and the axis boundaries. +\end_layout + +\begin_layout Subsection* +bounds (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +2D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds(:,:) +\end_layout + +\begin_layout Standard +Defines the boundaries of each level of a vertical axis. + The dimensions of the array must be +\begin_inset Formula $2\times n$ +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: bounds_name +\end_layout + +\begin_layout Standard +Defines the name of axis boundaries as it will appear in a file. + If not defined, the name will be generated automatically based on the axis + id. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of axis value and boundaries as it will be + written into an output file. + Available values are: 2 (integer), 4 (float single precision) and 8 (float + double precision). + The default value is 8. +\end_layout + +\begin_layout Subsection* +label (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER, ALLOCATABLE :: label(:) +\end_layout + +\begin_layout Standard +Defines the label of an axis. + The size of the array must be equal to the value of the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + If the label is provided then only the label will be written into a file + and not the axis value and the axis boundaries. +\end_layout + +\begin_layout Subsection* +data_begin (optional): +\emph on + integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_begin +\end_layout + +\begin_layout Standard +Defines the beginning index of local field data owned by each process. + The attribute is an offset relative to the local axis, so the value can + be negative. + A negative value indicates that only some valid part of the data will extracted +, for example in the case of a ghost cell. + A positive value indicates that the local domain is greater than the data + stored in memory. + The 0-value means that the local domain matches the data in memory. + The default value is 0. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_begin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_n (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_n +\end_layout + +\begin_layout Standard +Defines the size of local field data. + The attribute can take value starting from 0 (no data on a process). + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_begin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_index (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_index +\end_layout + +\begin_layout Standard +In case of a compressed vertical axis, the attribute defines the position + of data points stored in the memory. + The array size has to be equal to +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + +. + For example, for a local axis of size +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +n=3 +\end_layout + +\end_inset + + and local data size of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n=5 +\end_layout + +\end_inset + +, if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_index=(/ -1, 2, 1, 0, -1 /) +\end_layout + +\end_inset + + then the first and the last data points are ghosts and only the three middle + values will be written in the reversed order. +\end_layout + +\begin_layout Subsection* +mask (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:) +\end_layout + +\begin_layout Standard +Defines the mask of the local axis. + The masked value will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. +\end_layout + +\begin_layout Subsection* +n_distributed_partition (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_distributed_partition +\end_layout + +\begin_layout Standard +Defines the number of local axes in case if the axis is generated automatically + by XIOS. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +axis_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_ref +\end_layout + +\begin_layout Standard +Defines the reference of an axis. + All attributes will be inherited from the referenced axis with the classical + inheritance mechanism. + The value assigned to the referenced axis will be transmitted to the current + axis. +\end_layout + +\begin_layout Subsection* +positive (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {up, down} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: positive +\end_layout + +\begin_layout Standard +Defines the positive direction for fields representing height or depth. +\end_layout + +\begin_layout Subsection* +axis_type (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {X, Y, Z, T} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_type +\end_layout + +\begin_layout Standard +Defines the type of an axis. + The values correspond to the following axis types: +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +X: +\series default +\shape default + longitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Y +\emph default +: +\series default +\shape default + latitude +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +Z +\emph default +: +\series default +\shape default + vertical axis +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +T: +\series default +\shape default +time axis. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. + +\end_layout + +\begin_layout Section +Domain attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a horizontal domain. + This attribute may be used in case of multiple domains defined in the same + file. + In this case, the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +name +\end_layout + +\end_inset + + attribute will be suffixed to the longitude and latitude dimensions and + axis name. + If the domain name is not provided, it will be generated automatically. +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the standard name of a domain as it will appear in the domain's + metadata in an output file. + +\end_layout + +\begin_layout Subsection* +long_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name of a domain as it will appear in the domain's metadata + in an output file. + +\end_layout + +\begin_layout Subsection* +type (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +enumeration {rectilinear, curvilinear, unstructured, gaussian} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a grid. +\end_layout + +\begin_layout Subsection* +dim_i_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_i_name +\end_layout + +\begin_layout Standard +Defines the name of the first domain dimension as it will appear in the + file's metadata. +\end_layout + +\begin_layout Subsection* +dim_j_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: dim_j_name +\end_layout + +\begin_layout Standard +Defines the name of the second domain dimension as it will appear in file's + metadata. +\end_layout + +\begin_layout Subsection* +ni_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni_glo +\end_layout + +\begin_layout Standard +Defines the size of the first dimension of the global domain. +\end_layout + +\begin_layout Subsection* +nj_glo (mandatory): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj_glo +\end_layout + +\begin_layout Standard +Defines the size of the second dimension of the global domain. +\end_layout + +\begin_layout Subsection* +ibegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the first dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +ni (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni +\end_layout + +\begin_layout Standard +Defines the size of the first dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +jbegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: jbegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the second dimension of a local domain. + The attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo-1 +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +nj (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj +\end_layout + +\begin_layout Standard +Defines the size of the second dimension of a local domain. + he attribute takes value between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + +. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +lonvalue_1d (optional): +\emph on +1D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lonvalue(:) +\end_layout + +\begin_layout Standard +Defines the longitude values of a local domain. + For a cartesian grid, the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + +. + For a curvilinear grid, the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +lonvalue_2d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lonvalue(:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of a local domain. + For cartesian and curvilinear grids the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. + Only lonvalue_1d or lonvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +latvalue_1d (optional): +\emph on +1D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: latvalue(:) +\end_layout + +\begin_layout Standard +Defines the latitude values of a local domain. + For a cartesian grid, the size of the array will be nj. + For a curvilinear grid, the size of the array will be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. + +\end_layout + +\begin_layout Subsection* +latvalue_2d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: latvalue(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of a local domain. + For cartesian and curvilinear grids the array size should be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. + Only latvalue_1d or latvalue_2d can be defined. + Also the layout of latitude and longitude should be in conformance with + each other: either 1D or 2D. +\end_layout + +\begin_layout Subsection* +lon_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lon_name +\end_layout + +\begin_layout Standard +Defines the longitude name as it will appear in an output file. +\end_layout + +\begin_layout Subsection* +lat_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lat_name +\end_layout + +\begin_layout Standard +Defines the latitude name as it will appear in an output file. +\end_layout + +\begin_layout Subsection* +nvertex (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nvertex +\end_layout + +\begin_layout Standard +Defines the maximum number of vertices for a grid. + The attribute is required for specifying the cell boundaries of unstructured + meshes. +\end_layout + +\begin_layout Subsection* +bounds_lon_1d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon(:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of domain vertexes. + The attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined. + The array dimensions must be +\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}$ +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_lon_2d (optional): +\emph on +3D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon(:,:,:) +\end_layout + +\begin_layout Standard +Defines the longitude values of domain vertexes. + The attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined. + This attribute is useful when lonvalue_2d is defined. + The array dimensions must be +\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}\times\textbf{nj}$ +\end_inset + +. + Either bounds_lon_1d or bounds_lon_2d can be defined. +\end_layout + +\begin_layout Subsection* +bounds_lat_1d (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of domain vertexes. + The attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined. + The array dimensions must be +\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}$ +\end_inset + +. +\end_layout + +\begin_layout Subsection* +bounds_lat_2d (optional): +\emph on +3D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat(:,:) +\end_layout + +\begin_layout Standard +Defines the latitude values of domain vertexes. + The attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nvertex +\end_layout + +\end_inset + + must be also defined. + The attribute is useful when lonvalue_2d is defined. + The array dimensions must be +\begin_inset Formula $\textbf{nvertex}\times\textbf{ni}\times\textbf{nj}$ +\end_inset + +. + Either bounds_lon_1d or bounds_lon_2d can be defined. +\end_layout + +\begin_layout Subsection* +bounds_lon_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lon_name +\end_layout + +\begin_layout Standard +Defines the longitude name of domain vertexes as it will appear in an output + file. +\end_layout + +\begin_layout Subsection* +bounds_lat_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: lat_name +\end_layout + +\begin_layout Standard +Defines the latitude name of domain vertexes as it will appear in an output + file. +\end_layout + +\begin_layout Subsection* +area (optional): +\emph on +2D-array of double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: area(:,:) +\end_layout + +\begin_layout Standard +The area of cells. + The size of the array must be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\begin_inset Formula $\times$ +\end_inset + +nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of domain attributes. + Available values are: 2 (integer), 4 (float single precision) and 8 (float + double precision). + The default value of 8. +\end_layout + +\begin_layout Subsection* +data_dim (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: datadim +\end_layout + +\begin_layout Standard +Defines how a field is stored on memory for the client code. + The value can be either +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + or +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + +. + The value of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + indicates that the horizontal layer of the field is stored as a 1D array. + The value of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + + indicates that the horizontal layer is stored as a 2D array. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +data_ibegin (optional): +\emph on + integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of field data for the first dimension. + This attribute is an offset relative to the local domain, so the value + can be negative. + A negative value indicates that only some valid part of the data will extracted +, for example in the case of a ghost cell. + A positive value indicates that the local domain is greater than the data + stored in memory. + A 0-value means that the local domain matches the data in memory. + The default value is 0. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ibegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ni +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_ni (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_ni +\end_layout + +\begin_layout Standard +Defines the size of field data for the first dimension. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ibegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_ni +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_jbegin (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_jbegin +\end_layout + +\begin_layout Standard +Defines the beginning index of field data for the second dimension. + The attribute is taken into account only if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + data_dim=2 +\end_layout + +\end_inset + +. + The attribute is an offset relative to the local domain, so the value can + be negative. + A negative value indicate that only some valid part of the data will extracted, + for example in case of ghost cell. + A positive value indicate that the local domain is greater than the data + stored in memory. + The 0-value means that the local domain matches the data in memory. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_jbegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_nj +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_nj (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_nj +\end_layout + +\begin_layout Standard +Defines the size of field data for the second dimension. + The attribute is taken account only if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_dim=2 +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj +\end_layout + +\end_inset + +. + The attributes +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_jbegin +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_nj +\end_layout + +\end_inset + + must be defined together. +\end_layout + +\begin_layout Subsection* +data_i_index (optional): +\emph on +1D-array of integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_i_index(:) +\end_layout + +\begin_layout Standard +In case of a compressed horizontal domain, define the data indexation for + the first dimension. + The array size must be +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_n +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +data_j_index (optional): +\emph on +1D-array of integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: data_j_index(:) +\end_layout + +\begin_layout Standard +In case of a compressed horizontal domain, defines the data indexation for + the second dimension. + The attribute is meaningful only if +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +data_dim=2 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +mask_1d (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:) +\end_layout + +\begin_layout Standard +Defines the 1D mask of a local domain. + The masked value will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + This value is useful in case a field is stored linearly in memory. + By default none of the values are masked. +\end_layout + +\begin_layout Subsection* +mask_2d (optional): +\emph on +2D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask(:,:) +\end_layout + +\begin_layout Standard +Defines the 2D mask of a local domain. + The masked values will be replaced by the value of the field attribute + +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default, none of the values are masked. + Only mask_2d or mask_1d can be defined. +\end_layout + +\begin_layout Subsection* +domain_ref (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: domain_ref +\end_layout + +\begin_layout Standard +Defines the reference to a domain. + All attributes are inherited from the referenced domain with the classic + inheritance mechanism. + The value assigned to the referenced domain is transmitted to to current + domain. +\end_layout + +\begin_layout Subsection* +i_index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: i_index(:) +\end_layout + +\begin_layout Standard +Defines the global index of the first dimension of a local domain held by + a process. + By default the size of the array is equal to +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni*nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +j_index (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: j_index(:) +\end_layout + +\begin_layout Standard +Defines the global index of the second dimension of a local domain held + by a process. + By default the size of the array is equal to +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni*nj +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Grid attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a grid. +\end_layout + +\begin_layout Subsection* +description (optional): string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: description +\end_layout + +\begin_layout Standard +Defines the descriptions of a grid. +\end_layout + +\begin_layout Subsection* +mask_1d (optional): +\emph on +1D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_1d(:) +\end_layout + +\begin_layout Standard +Defines the mask of a local 1D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_2d (optional): +\emph on +2D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_2d(:,:) +\end_layout + +\begin_layout Standard +Defines the mask of a local 2D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_3d (optional): +\emph on +3D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_3d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 3D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_4d (optional): +\emph on +4D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_4d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 4D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_5d (optional): +\emph on +5D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_5d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 5D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_6d (optional): +\emph on +6D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_6d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 6D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +mask_7d (optional): +\emph on +7D-array of bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: mask_7d(:,:,:) +\end_layout + +\begin_layout Standard +Define the mask of a local 7D grid. + Masked values will be replaced by the value of the field attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +default_value +\end_layout + +\end_inset + + in an output file. + By default none of the value are masked. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Field attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a field as it will appear in an output file. + If not present, the identifier +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + + will be substituted. +\end_layout + +\begin_layout Subsection* +standard_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: standard_name +\end_layout + +\begin_layout Standard +Defines the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +standard_name +\end_layout + +\end_inset + + attribute as it will appear in the metadata of an output file. +\end_layout + +\begin_layout Subsection* +long_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: long_name +\end_layout + +\begin_layout Standard +Defines the long name as it will appear in the metadata of an output file. +\end_layout + +\begin_layout Subsection* +expr (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: expr +\end_layout + +\begin_layout Standard +Defines the expression for arithmetic or time-integration operations performed + on a field. + For example if +\series bold +expr= +\begin_inset Quotes erd +\end_inset + +sqrt(@temp2 - pow(@temp, 2)) +\begin_inset Quotes erd +\end_inset + + +\series default + then the variance will be calculated on the incoming flux of the field + +\series bold +temp +\series default + (given that field temp2 that holds the square of temp was correctly defined). + +\end_layout + +\begin_layout Subsection* +unit (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: unit +\end_layout + +\begin_layout Standard +Defines the unit of a field. +\end_layout + +\begin_layout Subsection* +operation (mandatory): enumeration +\emph on + {once, instant, average, maximum, minimum, accumulate} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines the temporal operation applied to a field. +\end_layout + +\begin_layout Subsection* +freq_op (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: freq_op +\end_layout + +\begin_layout Standard +Defines the sampling frequency of a temporal operation, so that field values + will be used for temporal sampling at frequency +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op +\end_layout + +\end_inset + +. + It is useful for sub-processes called at different frequency in a model. + The default value is equal to the file attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +output_freq +\end_layout + +\end_inset + + for +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +instant +\end_layout + +\end_inset + + operations and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1ts +\end_layout + +\end_inset + + (1 time step) otherwise. +\end_layout + +\begin_layout Subsection* +freq_offset (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: freq_offset +\end_layout + +\begin_layout Standard +Defines the offset when +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op +\end_layout + +\end_inset + + is defined. + Accepted values lie between +\series bold +0 +\series default + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +freq_op - 1ts +\end_layout + +\end_inset + + for fields in the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +write +\end_layout + +\end_inset + + mode and +\series bold +0 +\series default + for fields in the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +read +\end_layout + +\end_inset + + mode. +\end_layout + +\begin_layout Subsection* +level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: level +\end_layout + +\begin_layout Standard +Defines the output level of a field. + The field will be output only if the file attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + output_level +\begin_inset Formula $\geq$ +\end_inset + +level +\end_layout + +\end_inset + +. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +prec (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: prec +\end_layout + +\begin_layout Standard +Defines the precision in bytes of a field in an output file. + Available values are: 2 (integer), 4 (float single precision) and 8 (float + double precision). + The default value of 8. +\end_layout + +\begin_layout Subsection* +enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: enabled +\end_layout + +\begin_layout Standard +Defines if a field must be output or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +true +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +check_if_active (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: check_if_active +\end_layout + +\begin_layout Standard +Sets a check if a field will be used at a given time step. + Activating the check may improve performance for fields which are not used + frequently, while it can detoriate performance for fields used at each + time step. + The default value is false. +\end_layout + +\begin_layout Subsection* +read_access (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: read_access +\end_layout + +\begin_layout Standard +Defines whether a field can be read from the model or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +false +\end_layout + +\end_inset + +. + Note that for fields belonging to a file in +\series bold +\emph on +read +\series default +\emph default + +\series bold +mode +\series default +, this attribute is always +\series bold +true +\series default +. +\end_layout + +\begin_layout Subsection* +field_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: field_ref +\end_layout + +\begin_layout Standard +Defines the field reference. + All attributes will be inherited from the referenced field via the classical + inheritance mechanism. + The values assigned to the referenced field will be transmitted to the + current field to perform temporal operation. +\end_layout + +\begin_layout Subsection* +grid_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: grid_ref +\end_layout + +\begin_layout Standard +Defines the field grid. + Note that only either +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + or a combination of +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +domain_ref +\end_layout + +\end_inset + +, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scalar_ref +\end_layout + +\end_inset + + or +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +axis_ref +\end_layout + +\end_inset + + can be specified. +\end_layout + +\begin_layout Subsection* +domain_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: domain_ref +\end_layout + +\begin_layout Standard +Defines the field domain. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +axis_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: axis_ref +\end_layout + +\begin_layout Standard +Defines an axis for the current field. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +scalar_ref (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: scalar_ref +\end_layout + +\begin_layout Standard +Defines a scalar domain for the current field. + If the attribute is defined, the attribute +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +grid_ref +\end_layout + +\end_inset + + must not be specified. +\end_layout + +\begin_layout Subsection* +grid_path (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: grid_path +\end_layout + +\begin_layout Standard +Defines the way operations pass from a grid to other grids. +\end_layout + +\begin_layout Subsection* +default_value (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: default_value +\end_layout + +\begin_layout Standard +Defines the value which will be used instead of missing field data. + If no value is provided, the missing data will be replaced by uninitialized + values what can lead to undefined behavior. +\end_layout + +\begin_layout Subsection* +valid_min (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: valid_min +\end_layout + +\begin_layout Standard +All field values below +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +valid_min +\end_layout + +\end_inset + + attribute value will be set to missing value. +\end_layout + +\begin_layout Subsection* +valid_max (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: valid_max +\end_layout + +\begin_layout Standard +All field values above +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +valid_max +\end_layout + +\end_inset + + attribute value will be set to missing value. +\end_layout + +\begin_layout Subsection* +detect_missing_value (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL: detect_missing_value +\end_layout + +\begin_layout Standard +When XIOS detects a default value in a field, it does not take into account + the value during arithmetic operations such as averaging, minimum, maximum, + etc. +\end_layout + +\begin_layout Subsection* +add_offset (optional): +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION: add_offset +\end_layout + +\begin_layout Standard +Sets the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +add_offset +\end_layout + +\end_inset + + metadata CF attribute in an output file. + In output, the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +add_offset +\end_layout + +\end_inset + + value will be subtracted from the field values. +\end_layout + +\begin_layout Subsection* +scale_factor: +\emph on +double +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION: scale_factor +\end_layout + +\begin_layout Standard +Sets the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scale_factor +\end_layout + +\end_inset + + metadata CF attribute in an output file. + In output, the field values will be divided by the +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +scale_factor +\end_layout + +\end_inset + + value. +\end_layout + +\begin_layout Subsection* +compression_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: compression_level +\end_layout + +\begin_layout Standard +Defines whether a field should be compressed using NetCDF-4 built-in compression. + The compression level must range from 0 to 9. + A higher compression level means a better compression at the cost of using + more processing power. + The default value is inherited from the file attribute +\series bold +compression_level +\series default +. +\end_layout + +\begin_layout Subsection* +indexed_output (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: indexed_output +\end_layout + +\begin_layout Standard +Defines whether field data must be output as an indexed grid instead of + a full grid whenever possible. + The default value is +\series bold +\emph on +false +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: ts_enabled +\end_layout + +\begin_layout Standard +Defines whether a field can be output as a timeseries. + The default value is +\series bold +\emph on +false +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_split_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: ts_split_freq +\end_layout + +\begin_layout Standard +Defines the splitting frequency that should be used for a timeseries if + it has been requested. + By default the attribute value is inherited from the file attribute +\series bold +split_freq +\series default +. +\end_layout + +\begin_layout Subsection* +cell_methods (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: cell_methods +\end_layout + +\begin_layout Standard +Defines the cell methods field attribute. +\end_layout + +\begin_layout Subsection* +cell_methods_mode (optional): enumeration +\emph on + {overwrite, prefix, suffix, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: cell_methods_mode +\end_layout + +\begin_layout Standard +Defines the cell methods mode of a field. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Variable attribute reference +\end_layout + +\begin_layout Subsection* +name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a variable as it will appear in an output file. + If not present, the variable +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + + will be used. +\end_layout + +\begin_layout Subsection* +type (mandatory): enumeration {bool, int, int32, int16, int64, float, double, + string} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a variable. + Note that the +\series bold +\emph on +int +\series default +\emph default + type is a synonym for +\series bold +\emph on +int32 +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_target (optional): enumeration {file, field, both, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: ts_target +\end_layout + +\begin_layout Section +File attribute reference +\end_layout + +\begin_layout Subsection* +name (mandatory): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name +\end_layout + +\begin_layout Standard +Defines the name of a file. +\end_layout + +\begin_layout Subsection* +description (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: description +\end_layout + +\begin_layout Standard +Defines the description of a file. +\end_layout + +\begin_layout Subsection* +name_suffix (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: name_suffix +\end_layout + +\begin_layout Standard +Defines a suffix added to the file name. +\end_layout + +\begin_layout Subsection* +min_digits (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: min_digits +\end_layout + +\begin_layout Standard +For the +\series bold +multiple_file +\series default + mode defines the minimum number of digits of the suffix describing the + server rank which will be appended to the file name. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + (no server rank suffix is added). +\end_layout + +\begin_layout Subsection* +output_freq (mandatory): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: output_freq +\end_layout + +\begin_layout Standard +Defines the output frequency for the current file. +\end_layout + +\begin_layout Subsection* +output_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: output_level +\end_layout + +\begin_layout Standard +Defines the output level for all fields of the current file. + The field is output only if the field attribute +\series bold +level +\series default + is less or equal to the file attribute +\series bold +output_level +\series default +. +\end_layout + +\begin_layout Subsection* +sync_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: sync_freq +\end_layout + +\begin_layout Standard +Defines the frequency for flushing the current file onto a disk. + It may result in poor performances but data will be written even if a file + is not yet closed. +\end_layout + +\begin_layout Subsection* +split_freq (optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_freq +\end_layout + +\begin_layout Standard +Defines the frequency for splitting the current file. + The start and end dates will be added to the file name (see +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout + +\series bold +\emph on +split_freq_format +\end_layout + +\end_inset + + attribute). + By default no splitting is done. +\end_layout + +\begin_layout Subsection* +split_freq_format (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: split_freq_format +\end_layout + +\begin_layout Standard +Defines the format of the split date suffixed to a file. + It can contain any character, +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%y +\end_layout + +\end_inset + + +\emph default + will be replaced by the year (4 characters), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%mo +\end_layout + +\end_inset + + by the month (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%d +\end_layout + +\end_inset + + by the day (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%h +\end_layout + +\end_inset + + by the hour (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%mi +\end_layout + +\end_inset + + by the minute (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%s +\end_layout + +\end_inset + + by the second (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%S +\end_layout + +\end_inset + + by the number of seconds since the time origin and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%D +\end_layout + +\end_inset + + by the number of full days since the time origin. + The default behavior is to create a suffix with the date until the smaller + non zero unit. + For example, in one day split frequency, the hour, minute and second will + not appear in the suffix, only year, month and day. +\end_layout + +\begin_layout Subsection* +split_start_offset(optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_start_offset +\end_layout + +\begin_layout Standard +Defines the offset of file splitting. + +\end_layout + +\begin_layout Subsection* +split_end_offset(optional): +\emph on +duration +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +TYPE(xios_duration) :: split_end_offset +\end_layout + +\begin_layout Subsection* +split_last_date (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: split_last_date +\end_layout + +\begin_layout Subsection* +enabled (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: enabled +\end_layout + +\begin_layout Standard +Defines if a file must be written/read or not. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +true +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +mode (optional): +\emph on +enumeration {read, write} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: mode +\end_layout + +\begin_layout Standard +Defines whether a file will be read or written. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +write +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +type (mandatory): +\emph on +enumeration {one_file, multiple_file} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the type of a file: +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +multiple_file +\end_layout + +\end_inset + +: one file by server using sequential netcdf writing, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +one_file +\end_layout + +\end_inset + +: one single global file is wrote using netcdf4 parallel access. +\end_layout + +\begin_layout Subsection* +format (optional): +\emph on +enumeration {netcdf4, netcdf4_classic} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: format +\end_layout + +\begin_layout Standard +Define the format of a file: +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +netcdf4 +\end_layout + +\end_inset + +: the HDF5 format will be used, +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +netcdf4 +\emph default +_ +\emph on +classic +\end_layout + +\end_inset + +: the classic NetCDF format will be used. + The default value is +\series bold +\emph on +netcdf4 +\series default +\emph default +. + Note that the +\series bold +\emph on +netcdf4 +\emph default +_ +\emph on +classic +\series default +\emph default + format can be used with the attribute +\series bold +type +\series default + set to +\series bold +\emph on +one_file +\series default +\emph default + only if the NetCDF4 library was compiled with Parallel NetCDF support (--enable +-pnetcdf). +\end_layout + +\begin_layout Subsection* +par_access (optional): +\emph on +enumeration {collective, independent} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: par_access +\end_layout + +\begin_layout Standard +For parallel writing, defines which type of MPI calls will be used. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +collective +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +read_metadata_par (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: read_metadata_par +\end_layout + +\begin_layout Standard +For files in the read mode, defines if parallel or serial I/O will be used + by model processes for reading file metadata. + The default value is false implying serial I/O for reading metadata. +\end_layout + +\begin_layout Subsection* +convention (optional): +\emph on +enumeration {CF, UGRID} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: convention +\end_layout + +\begin_layout Standard +Defines the file conventions. + By default the CF conventions are followed. +\end_layout + +\begin_layout Subsection* +convention_str (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: convention_str +\end_layout + +\begin_layout Standard +Defines the +\series bold +Conventions +\series default +attribute to be added to file global attributes. +\end_layout + +\begin_layout Subsection* +append (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: append +\end_layout + +\begin_layout Standard +Defines whether data is to be appended at the end of a file if it already + exists or if the existing file is to be overwritten. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +false +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +compression_level (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: compression_level +\end_layout + +\begin_layout Standard +Defines whether the fields should be compressed using NetCDF-4 built-in + compression by default. + The compression level must range from 0 to 9. + A higher compression level means a better compression at the cost of using + more processing power. + The default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout + +\emph on +0 +\end_layout + +\end_inset + + (no compression). +\end_layout + +\begin_layout Subsection* +time_counter (optional): +\emph on +enumeration {centered, instant, record, exclusive, centered_exclusive, instant_e +xclusive, none} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_counter +\end_layout + +\begin_layout Standard +Defines how the +\begin_inset Quotes eld +\end_inset + +time_counter +\begin_inset Quotes erd +\end_inset + + variable will be output: +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +centered +\series default +\emph default +: use centered times (default option for all field operations except for + instant) +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +instant +\series default +\emph default +: use instant times (default option for field operation +\series bold +instant +\series default +) +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +record +\series default +\emph default +: use record indexes +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +centered_exclusive: +\series default +\shape default +do not include centered times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +\emph on +instant_ +\emph default +exclusive: +\series default +\shape default +do not include instant times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\shape italic +exclusive: +\series default +\shape default +include neither instant times nor centered times into an output file +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +none +\series default +\emph default +: do not output the variable. +\end_layout + +\begin_layout Standard +The default value is +\series bold +\emph on +centered +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +time_counter_name (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_counter_name +\end_layout + +\begin_layout Standard +Define the name of a time counter. +\end_layout + +\begin_layout Subsection* +timeseries (optional): +\emph on +enumeration {none, only, both, exclusive} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_series +\end_layout + +\begin_layout Standard +Defines whether the timeseries must be output: +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +none +\series default +\emph default +: no timeseries is outputted, only the regular file +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +only +\series default +\emph default +: only the timeseries is outputted, the regular file is not created +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +both +\series default +\emph default +: both the timeseries and the regular file are outputted. +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +exclusive +\series default +\emph default +: the timeseries is outputted and a regular file is created with only the + fields which were not marked for output as a timeseries (if any). +\end_layout + +\begin_layout Standard +The default value is +\series bold +\emph on +none +\series default +\emph default +. +\end_layout + +\begin_layout Subsection* +ts_prefix (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: ts_prefix +\end_layout + +\begin_layout Standard +Defines the prefix to use for the name of the timeseries files. + By default the file name will be used. +\end_layout + +\begin_layout Subsection* +time_units (optional): +\emph on +enumeration {seconds, days} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_units +\end_layout + +\begin_layout Subsection* +record_offset (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: record_offset +\end_layout + +\begin_layout Standard +Defines the offset of a record from the beginning record. + The default value is 0. +\end_layout + +\begin_layout Subsection* +cyclic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: cyclic +\end_layout + +\begin_layout Standard +If the option is activated for fields to be read, then upon reaching the + last time record, reading will continue +\begin_inset Quotes eld +\end_inset + +cycle +\begin_inset Quotes erd +\end_inset + + at the first time record. + The default value is false. +\end_layout + +\begin_layout Subsection* +time_stamp_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_stamp_name +\end_layout + +\begin_layout Standard +Defines the timestamp name of the date and time when the program was executed + which will be written into an output file. + The default value is +\begin_inset Quotes eld +\end_inset + +timeStamp +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsection* +time_stamp_format (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: time_stamp_format +\end_layout + +\begin_layout Standard +Defines the timestamp format of the date and time when the program was executed + to be written into an output file. + It can contain any character. + +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%Y +\end_layout + +\end_inset + + +\emph default + will be replaced by the 4-digit year (4 digits), while +\emph on + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%y +\end_layout + +\end_inset + + +\emph default + will be replaced by the 2-digit year. + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%m +\end_layout + +\end_inset + + will be by the 2-digit month, while %b will be replaced by the 3-character + month. + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%d +\end_layout + +\end_inset + + will be replaced by the day (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%H +\end_layout + +\end_inset + + by the hour (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%M +\end_layout + +\end_inset + + by the minute (2 char), +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%S +\end_layout + +\end_inset + + by the number of seconds, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +%D +\end_layout + +\end_inset + + by the date in the MM/DD/YY format. +\end_layout + +\begin_layout Subsection* +uuid_name (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: uuid_name +\end_layout + +\begin_layout Standard +Defines the name of file's UUID. +\end_layout + +\begin_layout Subsection* +uuid_format (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: uuid_format +\end_layout + +\begin_layout Standard +Defines the format of file's UUID. +\end_layout + +\begin_layout Subsection* +comment (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +string +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: comment +\end_layout + +\begin_layout Standard +Allows a user to set a comment. +\end_layout + +\begin_layout Section +Transformation attribute reference +\end_layout + +\begin_layout Subsection +reduce_scalar_to_scalar +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines a reduction operation performed on a scalar across model processes. + (It is analogous to MPI_Allreduce.) +\end_layout + +\begin_layout Subsection +extract_axis_to_scalar +\end_layout + +\begin_layout Subsection* +position: +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: position +\end_layout + +\begin_layout Standard +Global index of a point on an axis to be extracted into a scalar. +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Subsection +interpolate_axis +\end_layout + +\begin_layout Subsection* +type (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines the interpolation type on an axis. + For now only polynomial interpolation is available. +\end_layout + +\begin_layout Subsection* +order (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Standard +Defines the order of interpolation. + The default value is 2. +\end_layout + +\begin_layout Subsection* +coordinate (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: coordinate +\end_layout + +\begin_layout Standard +Defines the coordinate associated with an axis on which interpolation will + be performed. +\end_layout + +\begin_layout Subsection +reduce_axis_to_axis +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Standard +Defines a reduction operation performed on an axis across model processes. + (It is analogous to MPI_Allreduce.) +\end_layout + +\begin_layout Subsection +reduce_axis_to_scalar +\end_layout + +\begin_layout Standard +Reduces data defined on an axis into a scalar value. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Subsection +zoom_axis +\end_layout + +\begin_layout Subsection* +begin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: begin +\end_layout + +\begin_layout Standard +Defines the beginning index of a zoomed region on a global axis. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + + of the associated axis. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Subsection* +n (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n +\end_layout + +\begin_layout Standard +Defines the size of a zoomed region on a global axis. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated axis. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated axis. +\end_layout + +\begin_layout Subsection +compute_connectivity_domain +\end_layout + +\begin_layout Subsection* +n_neighbor: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +1D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_neighbor(:) +\end_layout + +\begin_layout Subsection* +local_neighbor: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +2D-array of integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: local_neighbor(:,:) +\end_layout + +\begin_layout Subsection* +n_neighbor_max: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: n_neighbor_max +\end_layout + +\begin_layout Subsection +extract_domain_to_axis +\end_layout + +\begin_layout Subsection* +position (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: position +\end_layout + +\begin_layout Standard +Defines the index on a domain starting which an axis will be extracted along + the direction specified with the +\series bold +direction +\series default + attribute. +\end_layout + +\begin_layout Subsection* +direction (mandatory): +\emph on +enumeration {iDir, jDir} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: direction +\end_layout + +\begin_layout Standard +Defines the domain dimension along which an axis will be extracted. +\end_layout + +\begin_layout Subsection +interpolate_domain +\end_layout + +\begin_layout Subsection* +file (optional): +\emph on +string +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Define a file which contains the weight values for interpolation from domain + source to domain destination. + If not specified, the internal interpolation module will be used. +\end_layout + +\begin_layout Subsection* +order (optional): +\emph on +integer +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Standard +Defines the order of interpolation. + This attribute is only for internal interpolation module. + The default value is 2. +\end_layout + +\begin_layout Subsection +reduce_domain_to_axis +\end_layout + +\begin_layout Subsection* +direction: +\emph on +enumeration {iDir, jDir} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: direction +\end_layout + +\begin_layout Standard +Defines the domain dimension along which a reduction of the domain into + an axis will be performed. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Subsection* +local: +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: local +\end_layout + +\begin_layout Standard +Defines whether the reduction should be performed locally on data owned + by each process. +\end_layout + +\begin_layout Subsection +reduce_domain_to_scalar +\end_layout + +\begin_layout Standard +Reduces data defined on a domain into a scalar value. +\end_layout + +\begin_layout Subsection* +operation (mandatory): +\emph on +enumeration {min, max, sum, average} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: operation +\end_layout + +\begin_layout Subsection* +local: +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: local +\end_layout + +\begin_layout Standard +Defines whether the reduction should be performed locally on data owned + by each process. +\end_layout + +\begin_layout Subsection +reorder_domain +\end_layout + +\begin_layout Subsection* +invert_lat (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: invert_lat +\end_layout + +\begin_layout Standard +Defines whether the latitude should be inverted. + The default value is false. +\end_layout + +\begin_layout Subsection* +shift_lon_fraction (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: shift_lon_fraction +\end_layout + +\begin_layout Standard +Defines the longitude offset. + The value of the parameter represents a fraction of +\series bold +ni_glo +\series default +. +\end_layout + +\begin_layout Subsection* +min_lon (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: min_lon +\end_layout + +\begin_layout Standard +If both, +\series bold +min_lon +\series default + and +\series bold +max_lon +\series default +, are defined, a domain will be reordered with latitude values starting + from +\series bold +min_lon +\series default + and ending at +\series bold +max_lon +\series default +. +\end_layout + +\begin_layout Subsection* +max_lon (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: max_lon +\end_layout + +\begin_layout Standard +If both, +\series bold +min_lon +\series default + and +\series bold +max_lon +\series default +, are defined, a domain will be reordered with latitude values starting + from +\series bold +min_lon +\series default + and ending at +\series bold +max_lon +\series default +. +\end_layout + +\begin_layout Subsection +expand_domain +\end_layout + +\begin_layout Subsection* +order: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: order +\end_layout + +\begin_layout Subsection* +type (optional): +\emph on +enumeration {node, edge} +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*) :: type +\end_layout + +\begin_layout Standard +Defines whether the node or edge connectivity should be calculated for the + expanded domain. +\end_layout + +\begin_layout Subsection* +i_periodic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: i_periodic +\end_layout + +\begin_layout Standard +If the attribute value is true, values of fields defined on the expanded + domain will be duplicated from those of the original domain periodically + along the first dimension. + The default value is false (masked values on the expanded domain). +\end_layout + +\begin_layout Subsection* +j_periodic (optional): +\emph on +bool +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +LOGICAL :: j_periodic +\end_layout + +\begin_layout Standard +If the attribute value is true, values of fields defined on the expanded + domain will be duplicated from those of the original domain periodically + along the second dimension. + The default value is false (masked values on the expanded domain). +\end_layout + +\begin_layout Subsection +zoom_domain +\end_layout + +\begin_layout Subsection* +ibegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ibegin +\end_layout + +\begin_layout Standard +Defines the beginning index of the zoomed region on the first dimension + of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo-1 +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +ni (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: ni +\end_layout + +\begin_layout Standard +Define the size of zoomed region on the first dimension of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +ni_glo +\end_layout + +\end_inset + + of the dimension of domain. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +jbegin (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: jbegin +\end_layout + +\begin_layout Standard +Define the beginning index of the zoomed region on the second dimension + of the global domain. + This must be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + + and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo-1 +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset + +. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection* +nj (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +integer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +INTEGER :: nj +\end_layout + +\begin_layout Standard +Define the size of zoomed region on the second dimension of the global domain. + The attribute value should be an integer between +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + +and +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the associated dimension of domain. + If not specified the default value is +\begin_inset Flex Strong +status collapsed + +\begin_layout Plain Layout +nj_glo +\end_layout + +\end_inset + + of the dimension of domain. + Note that if one of the zoom attributes (ibegin, ni, jbegin or nj) is defined + then all the rest should be specified by a user as well. +\end_layout + +\begin_layout Subsection +generate_rectilinear_domain +\end_layout + +\begin_layout Subsection* +lon_start (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lon_start +\end_layout + +\begin_layout Standard +Along with +\series bold +lon_end +\series default +, the attribute defines the longitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lon_end (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lon_end +\end_layout + +\begin_layout Standard +Along with +\series bold +lon_start +\series default +, the attribute defines the longitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lat_start (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lat_start +\end_layout + +\begin_layout Standard +Along with +\series bold +lat_end +\series default +, the attribute defines the latitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +lat_end (optional): +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: lat_end +\end_layout + +\begin_layout Standard +Along with +\series bold +lat_start +\series default +, the attribute defines the latitude range of a generated domain. +\end_layout + +\begin_layout Subsection* +bounds_lon_start: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon_start +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lon_start +\series default + and +\series bold +bounds_lon_start +\series default + set the longitude range of a generated domain. + If both sets, +\series bold +(lon_start, lon_end) +\series default + and +\series bold +(bounds_lon_start, bounds_lon_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lon_end: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lon_end +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lon_start +\series default + and +\series bold +bounds_lon_start +\series default + set the longitude range of a generated domain. + If both sets, +\series bold +(lon_start, lon_end) +\series default + and +\series bold +(bounds_lon_start, bounds_lon_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lat_start: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat_start +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lat_start +\series default + and +\series bold +bounds_lat_start +\series default + set the latitude range of a generated domain. + If both sets, +\series bold +(lat_start, lat_end) +\series default + and +\series bold +(bounds_lat_start, bounds_lat_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Subsection* +bounds_lat_end: +\begin_inset Flex Emph +status collapsed + +\begin_layout Plain Layout +double +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Fortran: +\end_layout + +\begin_layout LyX-Code +DOUBLE PRECISION :: bounds_lat_end +\end_layout + +\begin_layout Standard +Attributes +\series bold +bounds_lat_start +\series default + and +\series bold +bounds_lat_start +\series default + set the latitude range of a generated domain. + If both sets, +\series bold +(lat_start, lat_end) +\series default + and +\series bold +(bounds_lat_start, bounds_lat_end) +\series default +, are specified then the bound attributes will be ignored. +\end_layout + +\begin_layout Chapter +Fortran interface reference +\end_layout + +\begin_layout Section* +Initialization +\end_layout + +\begin_layout Subsection* +XIOS initialization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_initialize(client_id, local_comm, return_comm) +\end_layout + +\begin_layout LyX-Code + CHARACTER(LEN=*),INTENT(IN) :: client_id +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(IN),OPTIONAL :: local_comm +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(OUT),OPTIONAL :: return_comm +\end_layout + +\begin_layout Subsubsection* +Argument: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +client_id +\end_layout + +\end_inset + +: client identifier +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + +: MPI communicator of the client +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + +: split return MPI communicator +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called before any other call of MPI client library. + It may be able to initialize MPI library (calling +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_Init +\end_layout + +\end_inset + +) if not already initialized. + Since XIOS is able to work in client/server mode (parameter +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +), the global communicator must be split and a local split communicator + is returned to be used by the client model for it own purpose. + If more than one model is present, XIOS could be interfaced with the OASIS + coupler (compiled with +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +-using_oasis +\end_layout + +\end_inset + + option and parameter +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_oasis=true +\end_layout + +\end_inset + +), so in this case, the splitting would be done globally by OASIS. +\end_layout + +\begin_layout Itemize +If MPI is not initialized, XIOS would initialize it calling MPI_Init function. + In this case, the MPI finalization would be done by XIOS in the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + subroutine, and must not be done by the model. +\end_layout + +\begin_layout Itemize +If OASIS coupler is not used (using_oasis=false) +\end_layout + +\begin_deeper +\begin_layout Itemize +If server mode is not activated ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=false +\end_layout + +\end_inset + +): if local_comm MPI communicator is specified then it would be used for + internal MPI communication otherwise +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + communicator would be used by default. + A copy of the communicator (of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + +) would be returned in return_comm argument. + If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + is not specified, then +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + can be used by the model for it own communication. +\end_layout + +\begin_layout Itemize +If server mode is activated ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +): +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + must not be specified since the global +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +MPI_COMM_WORLD +\end_layout + +\end_inset + + communicator would be split by XIOS. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument. +\end_layout + +\end_deeper +\begin_layout Itemize +If OASIS coupler is used ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_oasis=true +\end_layout + +\end_inset + +) +\end_layout + +\begin_deeper +\begin_layout Itemize +If server mode is not enabled ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=false +\end_layout + +\end_inset + +) +\end_layout + +\begin_deeper +\begin_layout Itemize +If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + is specified, it means that OASIS has been initialized by the model and + global communicator has been already split previously by OASIS, and passed + as +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + argument. + The returned communicator would be a duplicate copy of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Itemize +Otherwise: if MPI was not initialized, OASIS will be initialized calling + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_init_comp_proto +\end_layout + +\end_inset + + subroutine. + In this case, XIOS will call +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + when +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalized +\end_layout + +\end_inset + + is called. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument using +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_get_localcomm_proto +\end_layout + +\end_inset + + return argument. +\end_layout + +\end_deeper +\begin_layout Itemize +If server mode is enabled ( +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +using_server=true +\end_layout + +\end_inset + +) +\end_layout + +\begin_deeper +\begin_layout Itemize +If +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +local_comm +\end_layout + +\end_inset + + is specified, it means that OASIS has been initialized by the model and + global communicator has been already split previously by OASIS, and passed + as local_comm argument. + The returned communicator return_comm would be a split communicator given + by OASIS. +\end_layout + +\begin_layout Itemize +Otherwise: if MPI was not initialized, OASIS will be initialized calling + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_init_comp_proto +\end_layout + +\end_inset + + subroutine. + In this case, XIOS will call +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + when +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalized +\end_layout + +\end_inset + + is called. + The split communicator is returned in +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +return_comm +\end_layout + +\end_inset + + argument using +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_get_localcomm_proto +\end_layout + +\end_inset + + return argument. +\end_layout + +\end_deeper +\end_deeper +\begin_layout Section* +Finalization +\end_layout + +\begin_layout Subsection* +XIOS finalization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_finalize() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This call must be done at the end of the simulation for a successful execution. + It gives the end signal to the xios server pools to finish it execution. + If MPI has been initialize by XIOS the MPI_Finalize will be called. + If OASIS coupler has been initialized by XIOS, then finalization will be + done calling +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +prism_terminate_proto +\end_layout + +\end_inset + + subroutine. +\end_layout + +\begin_layout Section* +Tree elements management subroutines +\end_layout + +\begin_layout Standard +This set of subroutines enables the models to interact, complete or query + the XML tree data base. + New elements or group of elements can be added as child in the tree, attributes + of the elements can be set or query. + The type of elements currently available are: context, axis, domain, grid, + field, variable and file. + An element can be identified by a string or by an handle associated to + the type of the element. + Root element (ex: +\begin_inset Quotes eld +\end_inset + +axis_definition +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field_definition +\begin_inset Quotes erd +\end_inset + +,....) are considered like a group of element and are identified by a specific + string +\begin_inset Quotes eld +\end_inset + +element_definition +\begin_inset Quotes erd +\end_inset + + where element can be any one of the existing elements. +\end_layout + +\begin_layout Subsection* +Fortran type of the handles element +\end_layout + +\begin_layout Quotation +TYPE(xios_element) +\end_layout + +\begin_layout Standard +where +\begin_inset Quotes eld +\end_inset + +element +\begin_inset Quotes erd +\end_inset + + can be any one among +\begin_inset Quotes eld +\end_inset + +context +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +axis +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +domain +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +grid +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +variable +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +file +\begin_inset Quotes erd +\end_inset + +, or the associated group (excepted for context): +\begin_inset Quotes eld +\end_inset + +axis_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +domain_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +grid_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +field_group +\begin_inset Quotes erd +\end_inset + +, +\begin_inset Quotes eld +\end_inset + +variable_group +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +file_group +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsection* +Getting handles +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_element_handle(id,handle) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element), INTENT(OUT):: handle +\end_layout + +\begin_layout Standard +where element is one of the existing elements or group of elements. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine returns the handle of the specified element identified by + its string. + The element must be existing otherwise an error is raised. +\end_layout + +\begin_layout Subsection* +Query for a valid element +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +LOGICAL FUNCTION xios_is_valid_element(id) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout Standard +where element is one of the existing elements or group of elements. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns .TRUE. + if the element defined by the string identifier +\begin_inset Quotes eld +\end_inset + +id +\begin_inset Quotes erd +\end_inset + + exists in the data base, otherwise it returns .FALSE. + . +\end_layout + +\begin_layout Subsection* +Adding child +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_add_element(parent_handle, child_handle, child_id) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: parent_handle +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(OUT):: child_handle +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +parent_handle +\end_layout + +\end_inset + +: handle of the parent element. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +child_handle +\end_layout + +\end_inset + +: handle of the child element. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +child_id +\end_layout + +\end_inset + +: string identifier of the child. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine adds a child to an existing parent element. + The identifier of the child, if existing, can be specified optionally. + All group elements can contain child of the same type, provided generic + inheritance. + Some elements can contain children of another type for a specific behavior. + File element may contain field_group, field, variable and variable_group + child elements. + Field elements may contain variable_group of variable child element. +\end_layout + +\begin_layout Subsection* +Query if the value of an element attribute is defined (by handle) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_is_defined_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: return true if the attribute as a defined value. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to query if one or more attributes of an element + have a defined value. + The list of attributes and their type are described in a specific chapter + of the documentation. + +\end_layout + +\begin_layout Subsection* +Query if a value of an element attributes is defined (by identifier) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_is_defined_element_attr(id, attr_1=attribute_1, attr_2=attribute +_2, ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *) , INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +LOGICAL, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: element identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: return true if the attribute as a defined value. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to query if one or more attributes of an element + have a defined value. + The list of available attributes and their type are described in a specific + chapter of the documentation. + +\end_layout + +\begin_layout Subsection* +Setting element attributes value by handle +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x and attribute_type_x are describing in the chapter dedicated + to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be set. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to set one or more attributes of an element + defined by its handle. + The list of available attributes and their types are described in corresponding + chapters of the documentation. + +\end_layout + +\begin_layout Subsection* +Setting element attributes value by id +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(IN) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(IN) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + The attributes attribute_x and attribute_type_x are described in corresponding + chapters. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be set. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to set one or more attributes of an element + defined by its string id. + The list of available attributes and their type are described in corresponding + chapters of the documentation. +\end_layout + +\begin_layout Subsection* +Getting element attributes value (by handle) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_attr(handle, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_element) , INTENT(IN) :: handle +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x and attribute_type_x are describing in the chapter dedicated + to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +handle +\end_layout + +\end_inset + +: element handle. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be get. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to get one or more attribute value of an element + defined by its handle. + All attributes in the arguments list must be defined. + The list of available attributes and their type are described in a specific + chapter of the documentation. + +\end_layout + +\begin_layout Subsection* +Getting element attributes value (by identifier) +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_element_attr(id, attr_1=attribute_1, attr_2=attribute_2, + ...) +\end_layout + +\begin_layout LyX-Code +CHARACTER(len = *), INTENT(IN) :: id +\end_layout + +\begin_layout LyX-Code +attribute_type_1, OPTIONAL , INTENT(OUT) :: attr_1 +\end_layout + +\begin_layout LyX-Code +attribute_type_2, OPTIONAL , INTENT(OUT) :: attr_2 +\end_layout + +\begin_layout LyX-Code +.... +\end_layout + +\begin_layout Standard +where element is one of the existing elements or element groups. + attribute_x is describing in the chapter dedicated to the attribute description. +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +id +\end_layout + +\end_inset + +: element string identifier. +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +attr_x +\end_layout + +\end_inset + +: value of the attribute to be get. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine can be used to get one or more attribute value of an element + defined by its handle. + All attributes in the arguments list must have a defined value. + The list of available attributes and their type are described in a specific + chapter of the documentation. +\end_layout + +\begin_layout Section* +Context management interface +\end_layout + +\begin_layout Subsection* +XIOS context initialization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_context_initialize(context_id, context_comm) +\end_layout + +\begin_layout LyX-Code + CHARACTER(LEN=*),INTENT(IN) :: context_id +\end_layout + +\begin_layout LyX-Code + INTEGER,INTENT(IN) :: context_comm +\end_layout + +\begin_layout Subsubsection* +Argument: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + +: context identifier +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_comm +\end_layout + +\end_inset + +: MPI communicator of the context +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine initializes a context identified by +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + + string and must be called before any call related to this context. + A context must be associated to a communicator, which can be the returned + communicator of the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_initialize +\end_layout + +\end_inset + + subroutine or a sub-communicator of this. + The context initialization is dynamic and can be done at any time before + the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + call. +\end_layout + +\begin_layout Subsection* +XIOS context finalization +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_context_finalize() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called to close a context before the +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_finalize +\end_layout + +\end_inset + + call. + It waits until that all pending requests sent to the servers will be processed + and all opened files will be closed. +\end_layout + +\begin_layout Subsection* +Setting current active context +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_current_context(context_handle) +\end_layout + +\begin_layout LyX-Code +TYPE(xios_context),INTENT(IN) :: context_handle +\end_layout + +\begin_layout Standard +or +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_current_context(context_id) +\end_layout + +\begin_layout LyX-Code +CHARACTER(LEN=*),INTENT(IN) :: context_id +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_handle +\end_layout + +\end_inset + +: handle of the context +\end_layout + +\begin_layout Standard +or +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +context_id +\end_layout + +\end_inset + +: string context identifier +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +These subroutines set the current active context. + All following XIOS calls will refer to this active context. + If only one context is defined, it will be set automatically as the active + context. + +\end_layout + +\begin_layout Subsection* +Closing definition +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_close_context_definition() +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Standard +None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine must be called when all definitions of a context are finished + at the end of the initialization and before entering to the time loop. + A lot of operations are performed internally (inheritance, grid definition, + contacting servers,...) so this call is mandatory. + Any call related to the tree management definition done after will have + an undefined effect. +\end_layout + +\begin_layout Section* +Calendar management interface +\end_layout + +\begin_layout Subsection* +Creating the calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_define_calendar(type, timestep, start_date, time_origin, + & +\begin_inset Newline newline +\end_inset + + day_length, month_lengths, year_length, + & +\begin_inset Newline newline +\end_inset + + leap_year_month, leap_year_drift, & +\begin_inset Newline newline +\end_inset + + leap_year_drift_offset) +\begin_inset Newline newline +\end_inset + +CHARACTER(len = *), INTENT(IN) :: type +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), OPTIONAL, INTENT(IN) :: timestep +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), OPTIONAL, INTENT(IN) :: start_date +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), OPTIONAL, INTENT(IN) :: time_origin +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: day_length +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: month_lengths(:) +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: year_length +\begin_inset Newline newline +\end_inset + +DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift +\begin_inset Newline newline +\end_inset + +DOUBLE PRECISION, OPTIONAL, INTENT(IN) :: leap_year_drift_offset +\begin_inset Newline newline +\end_inset + +INTEGER, OPTIONAL, INTENT(IN) :: leap_year_month +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +type +\end_layout + +\end_inset + +: the calendar type, one of +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"Gregorian" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"Julian" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"D360" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"AllLeap" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"NoLeap" +\end_layout + +\end_inset + +, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +"user_defined" +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +timestep +\end_layout + +\end_inset + +: the time step of the simulation (optional, can be set later) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: the start date of the simulation (optional, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date(0000, 01, 01, 00, 00, 00) +\end_layout + +\end_inset + + is used by default) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +time_origin +\end_layout + +\end_inset + +: the origin of the time axis (optional, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date(0000, 01, 01, 00, 00, 00) +\end_layout + +\end_inset + + is used by default) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +day_length +\end_layout + +\end_inset + +: the length of a day in seconds (mandatory when creating an user defined + calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + +: the length of each month of the year in days (either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + + must be set when creating an user defined calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + +: the length of a year in seconds (either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + + must be set when creating an user defined calendar, must not be set otherwise) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + +: the yearly drift between the user defined calendar and the astronomical + calendar, expressed as a fraction of day (can optionally be set when creating + an user defined calendar in which case +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + must be set too) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift_offset +\end_layout + +\end_inset + +: the initial drift between the user defined calendar and the astronomical + calendar at the time origin, expressed as a fraction of day (can optionally + be set if +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + are set) +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + +: the month to which an extra day must be added in case of leap year (can + optionally be set when creating an user defined calendar in which case + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + must be set too) +\end_layout + +\begin_layout Standard +For a more detailed description of those arguments, see the description + of the corresponding attributes in section 1.2 +\begin_inset Quotes eld +\end_inset + +Calendar attribute reference +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine creates the calendar for the current context. + Note that the calendar is created once and for all, either from the XML + configuration file or the Fortran interface. + If it was not created from the configuration file, then this subroutine + must be called once and only once before the context definition is closed. + The calendar features can be used immediately after the calendar was created. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If an user defined calendar is created, the following arguments must also + be provided: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +day_length +\end_layout + +\end_inset + + and either +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +month_lengths +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year_length +\end_layout + +\end_inset + +. + Optionally it is possible to configure the user defined calendar to have + leap years. + In this case, +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_month +\end_layout + +\end_inset + + must also be provided and +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +leap_year_drift_offset +\end_layout + +\end_inset + + might be used. +\end_layout + +\begin_layout Subsection* +Accessing the calendar type of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_calendar_type(calendar_type) +\begin_inset Newline newline +\end_inset + +CHARACTER(len=*), INTENT(OUT) :: calendar_type +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +calendar_type +\end_layout + +\end_inset + +: on output, the type of the calendar attached to the current context +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine gets the calendar type associated to the current context. + It will raise an error if used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing and defining the time step of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_timestep(timestep) +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), INTENT(OUT) :: timestep +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_timestep(timestep) +\begin_inset Newline newline +\end_inset + +TYPE(xios_duration), INTENT(IN) :: timestep +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +timestep +\end_layout + +\end_inset + +: a duration corresponding to the time step of the simulation +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the time step associated to + the calendar of the current context. + Note that the time step must always be set before the context definition + is closed and that an error will be raised if the getter subroutine is + used before the time step is defined. +\end_layout + +\begin_layout Subsection* +Accessing and defining the start date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_start_date(start_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: start_date +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_start_date(start_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: start_date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: a date corresponding to the beginning of the simulation +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the start date associated to + the calendar of the current context. + They must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing and defining the time origin of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_time_origin(time_origin) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: time_origin +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_set_time_date(time_origin) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: time_origin +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +start_date +\end_layout + +\end_inset + +: a date corresponding to the origin of the time axis +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +Those subroutines respectively gets and sets the origin of time associated + to the calendar of the current context. + They must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Updating the current date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_update_calendar(step) +\begin_inset Newline newline +\end_inset + +INTEGER, INTENT(IN) :: step +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +step +\end_layout + +\end_inset + +: the current iteration number +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine sets the current date associated to the calendar of the + current context based on the current iteration number: +\begin_inset Formula $current\_date=start\_date+step\times timestep$ +\end_inset + +. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the current date of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +SUBROUTINE xios_get_current_date(current_date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(OUT) :: current_date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +current_date +\end_layout + +\end_inset + +: on output, the current date +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This subroutine gets the current date associated to the calendar of the + current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the year length of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +INTEGER FUNCTION xios_get_year_length_in_seconds(year) +\begin_inset Newline newline +\end_inset + +INTEGER, INTENT(IN) :: year +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +year +\end_layout + +\end_inset + +: the year whose length is requested +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the duration in seconds of the specified year, taking + leap years into account based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Accessing the day length of the current calendar +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +INTEGER FUNCTION xios_get_day_length_in_seconds() +\end_layout + +\begin_layout Subsubsection* +Arguments: None +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the duration in seconds of a day, based on the calendar + of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Section* +Duration handling interface +\end_layout + +\begin_layout Subsection* +Duration constants +\end_layout + +\begin_layout Standard +Some duration constants are available to ease duration handling: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_year +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_month +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_day +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_hour +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_minute +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_second +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_timestep +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Arithmetic operations on durations +\end_layout + +\begin_layout Standard +The following arithmetic operations on durations are available: +\end_layout + +\begin_layout Itemize +Addition: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration + xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration - xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Multiplication by a scalar value: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = scalar * xios_duration +\end_layout + +\end_inset + + or +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_duration * scalar +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Negation: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = -xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Comparison operations on durations +\end_layout + +\begin_layout Standard +The following comparison operations on durations are available: +\end_layout + +\begin_layout Itemize +Equality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_duration == xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Inequality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_duration /= xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section* +Interface relative to date handling +\end_layout + +\begin_layout Subsection* +Arithmetic operations on dates +\end_layout + +\begin_layout Standard +The following arithmetic operations on dates are available: +\end_layout + +\begin_layout Itemize +Addition of a duration: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date = xios_date + xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction of a duration: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_date = xios_date - xios_duration +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Subtraction of two dates: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +xios_duration = xios_date - xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Comparison operations on dates +\end_layout + +\begin_layout Standard +The following comparison operations on dates are available: +\end_layout + +\begin_layout Itemize +Equality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date == xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Inequality: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date /= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Less than: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date < xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Less or equal: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date <= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Greater than: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date > xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +Greater or equal: +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +LOGICAL = xios_date >= xios_date +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the time origin +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER(kind = 8) xios_date_convert_to_seconds(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the time origin for the + specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the beginning of the year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER xios(date_get_second_of_year)(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the beginning of the year + for the specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of days since the beginning of the year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_day_of_year(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of days since the beginning of the year + for the specified date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a fraction of the current year +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_year(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the fraction of year corresponding to the specified + date, based on the calendar of the current context. + It must not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a number of seconds since the beginning of the day +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION INTEGER xios(date_get_second_of_day)(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the number of seconds since the beginning of the day + for the specified date, based on the calendar of the current context. + It should not be used before the calendar was created. +\end_layout + +\begin_layout Subsection* +Converting a date to a fraction of the current day +\end_layout + +\begin_layout Subsubsection* +Synopsis: +\end_layout + +\begin_layout LyX-Code +FUNCTION DOUBLE_PRECISION xios_date_get_fraction_of_day(date) +\begin_inset Newline newline +\end_inset + +TYPE(xios_date), INTENT(IN) :: date +\end_layout + +\begin_layout Subsubsection* +Arguments: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + +: the date to convert +\end_layout + +\begin_layout Subsubsection* +Description: +\end_layout + +\begin_layout Standard +This function returns the fraction of day corresponding to the specified + date based on the calendar of the current context. + It should not be used before the calendar was created. +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/XIOS_reference_guide.pdf b/xios_2311_src/doc/XIOS_reference_guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f9d62670c5986fdbd9c87d92bfa44fd7f754750b Binary files /dev/null and b/xios_2311_src/doc/XIOS_reference_guide.pdf differ diff --git a/xios_2311_src/doc/XIOS_user_guide.lyx b/xios_2311_src/doc/XIOS_user_guide.lyx new file mode 100644 index 0000000000000000000000000000000000000000..da1cd38e0ab5c5d478fb3ff17ff9845062acec80 --- /dev/null +++ b/xios_2311_src/doc/XIOS_user_guide.lyx @@ -0,0 +1,5583 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass book +\begin_preamble +\usepackage{MnSymbol} +\end_preamble +\use_default_options true +\begin_modules +logicalmkup +\end_modules +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Title +XIOS User Guide +\end_layout + +\begin_layout Author +Draft +\end_layout + +\begin_layout Chapter +Calendar +\end_layout + +\begin_layout Section +How to define a calendar +\end_layout + +\begin_layout Standard +XIOS has an embedded calendar module which needs to be configured before + you can run your simulation. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Only the calendar type and the time step used by your simulation are mandatory + to have a well defined calendar. + For example, a minimal calendar definition could be: +\end_layout + +\begin_layout Itemize +from the XML configuration file: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +from the Fortran interface: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context initialization ommited, see the corresponding section of this + user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test",ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_define_calendar(type="Gregorian", timestep=1.5*xios_hour) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The calendar type definition is done once and for all, either from the XML + configuration file or the Fortran interface, and cannot be modified. + However there is no such restriction regarding the time step which can + be defined at a different time than the calendar type and even redefined + multiple times. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +For example, it is possible to the achieve the same minimal configuration + as above by using both the XML configuration file: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +and the Fortran interface: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context initialization ommited, see the corresponding section of this + user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test",ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +! xios_define_calendar cannot be used here because the type was already + defined in the configuration file. +\end_layout + +\begin_layout Plain Layout + +! Ommiting the following line would lead to an error because the timestep + would be undefined. +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_timestep(timestep=1.5*xios_hour) +\end_layout + +\end_inset + +The calendar also has two optional date parameters: +\end_layout + +\begin_layout Itemize +the start date which corresponds to the beginning of the simulation +\end_layout + +\begin_layout Itemize +the time origin which corresponds to the origin of the time axis. +\end_layout + +\begin_layout Standard +If they are undefined, those parameters are set by default to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +0000-01-01 00:00:00 +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + If you are not interested in specific dates, you can ignore those parameters + completely. + However if you wish to set them, please note that they must not be set + before the calendar is defined. + Thus the following XML configuration file would be for example invalid: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +while the following configuration file would be valid: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +Of course, it is always possible to define or redefine those parameters + from the Fortran interface, directly when defining the calendar: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context initialization ommited, see the corresponding section of this + user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test",ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_define_calendar(type="Gregorian", time_origin=xios_date(1977, + 10, 19, 00, 00, 00), start_date=xios_date(2011, 11, 11, 13, 37, 42)) +\end_layout + +\end_inset + +or at a later time: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context initialization ommited, see the corresponding section of this + user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test",ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_define_calendar(type="Gregorian") +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_time_origin(time_origin=xios_date(1977, 10, 19, 00, 00, 00)) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_start_date(start_date=xios_date(2011, 11, 11, 13, 37, 42)) +\end_layout + +\end_inset + +To simplify the use of dates in the XML configuration files, it is possible + to partially define a date as long as the omitted parts are the rightmost. + In this case the remainder of the date is initialized as in the default + date. + For example, it would be valid to write: +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +start_date="1977-10-19" +\end_layout + +\end_inset + + instead of +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +start_date="1977-10-19 00:00:00" +\end_layout + +\end_inset + + or even +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +time_origin="1789" +\end_layout + +\end_inset + + instead of +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +time_origin="1789-01-01 00:00:00" +\end_layout + +\end_inset + +. + Similarly, it is possible to express a date with an optional duration offset + in the configuration file by using the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +date + duration +\end_layout + +\end_inset + + notation, with +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +date +\end_layout + +\end_inset + + potentially partially defined or even completely omitted. + Consequently the following examples are all valid in the XML configuration + file: +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +time_origin="2011-11-11 13:37:00 + 42s" +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +time_origin="2014 + 1y 2d" +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +start_date="+ 36h" +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Section +How to define a user defined calendar +\end_layout + +\begin_layout Standard +Predefined calendars might not be enough for your needs if you simulate + phenomenons on another planet than the Earth. + For this reason, XIOS can let you configure a completely user defined calendar + by setting the +\series bold +type +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +user_defined +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + In that case, the calendar type alone is not sufficient to define the calendar + and other parameters should be provided since the duration of a day or + a year are not known in advance. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Two approaches are possible depending on whether you want that your custom + calendar to have months or not: either use the +\series bold +month_lengths +\series default + attribute to define the duration of each months in days or use the +\series bold +year_length +\series default + attribute to define the duration of the year in seconds. + In both cases, you have to define +\series bold +day_length +\series default +, the duration of a day in seconds. + Those attributes have to be defined at the same time than the calendar + type, either from the XML configuration file or the Fortran interface, + for example: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +or +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context initialization ommited, see the corresponding section of this + user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test",ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_define_calendar(type="Gregorian", day_length=86400, year_length=315576 +00) +\end_layout + +\end_inset + +Note that if no months are defined, the format of the dates is modified + in the XML configuration file since the month must be omitted. + For example, +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +"2015-71 13:37:42" +\end_layout + +\end_inset + + would be the correct way to refer to the 71st day of the year 2015 at 13:37:42. + If you use the Fortran interface, the month cannot be omitted but you have + to make sure to always set it to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + in that case. + For example, use +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_date(2015, 01, 71, 13, 37, 42) +\end_layout + +\end_inset + +for +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +"2015-71 13:37:42" +\end_layout + +\end_inset + +. + Moreover, it is possible that the duration of the day is greater than the + duration of the year on some planets. + In this case, it obviously not possible to define months so you have to + use the +\series bold +year_length +\series default + attribute. + Additionally the day must also be omitted from the dates in the configuration + file (for example +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +"2015 13:37:42" +\end_layout + +\end_inset + +) and must always be set to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset + + when using the Fortran interface (for example +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_date(2015, 01, 01, 13, 37, 42) +\end_layout + +\end_inset + +). +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If months have been defined, you might want to have leap years to correct + the drift between the calendar year and the astronomical year. + This can be achieved by using the +\series bold +leap_year_drift +\series default + and +\series bold +leap_year_month +\series default + attributes and optionally the +\series bold +leap_year_drift_offset +\series default + attribute. + The idea is to define +\series bold +leap_year_drift +\series default +, the yearly drift between the calendar year and the astronomical year as + a fraction of a day. + This yearly drift is summed each year to know the current drift and each + time the current drift is greater or equal to one day, the year is considered + a leap year. + In that case, an extra day is added to the month defined by +\series bold +leap_year_month +\series default + and one day is subtracted to the current drift. + The initial drift is null by default but it can be fixed by the +\series bold +leap_year_drift_offset +\series default + attribute. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The following configuration file defines a simplified Gregorian calendar + using the user calendar feature: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +As you know, the astronomical year on Earth is approximately a quarter of + day longer than the Gregorian calendar year so we have to define the yearly + drift as 0.25 day. + In case of a leap year, an extra day is added at the end of February which + is the second month of the year so +\series bold +leap_year_month +\series default + should be set to 2. + We start our time axis in 2012 which was a leap year in the Gregorian calendar. + This means there was previously three non-leap years in a row so the current + drift was (approximately) +\begin_inset Formula $3\times0.25$ +\end_inset + + days, hence +\series bold +leap_year_drift_offset +\series default + should be set to 0.75. + At the beginning of 2013, the drift would have been +\begin_inset Formula $0.75+0.25=1$ +\end_inset + + day so 2012 will be a leap year as expected. +\end_layout + +\begin_layout Section +How to use the calendar +\end_layout + +\begin_layout Standard +The calendar is created immediately after the calendar type has been defined + and thus can be used even before the context definition has been closed. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Once the calendar is created, you have to keep it updated so that it is + in sync with your simulation. + To do that, you have to call the +\series bold +xios_update_calendar +\series default + subroutine for each iteration of your code: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +INTEGER :: ts +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +DO ts=1,end +\end_layout + +\begin_layout Plain Layout + + CALL xios_update_calendar(ts) +\end_layout + +\begin_layout Plain Layout + + ! Do useful stuff +\end_layout + +\begin_layout Plain Layout + +ENDDO +\end_layout + +\end_inset + +The current date is updated to +\begin_inset Formula $start\_date+ts\times timestep$ +\end_inset + + after each call. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Many other calendar operations are available, including: +\end_layout + +\begin_layout Itemize +accessing various calendar related information like the time step, the time + origin, the start date, the duration of a day or a year, the current date, + etc. + +\end_layout + +\begin_layout Itemize +doing arithmetic and comparison operations on date: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +TYPE(xios_date) :: date1, date2 +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_duration) :: duration +\end_layout + +\begin_layout Plain Layout + +LOGICAL :: res +\end_layout + +\begin_layout Plain Layout + +! we suppose a calendar is defined +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_current_date(date1) +\end_layout + +\begin_layout Plain Layout + +duration = xios_duration(0, 0, 1, 0, 0, 0, 0, 0) + 12 * xios_hour +\end_layout + +\begin_layout Plain Layout + +date2 = date1 + duration + 0.5 * xios_hour +\end_layout + +\begin_layout Plain Layout + +res = date2 > date1 +\end_layout + +\begin_layout Plain Layout + +duration = date2 - date1 +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Itemize +converting dates to +\end_layout + +\begin_deeper +\begin_layout Itemize +the number of seconds since the time origin, the beginning of the year or + the beginning of the day, +\end_layout + +\begin_layout Itemize +the number of days since the beginning of the year, +\end_layout + +\begin_layout Itemize +the fraction of the day or the year. +\end_layout + +\end_deeper +\begin_layout Standard +For more detailed about the calendar attributes and operations, see the + XIOS reference guide. +\end_layout + +\begin_layout Chapter +Files +\end_layout + +\begin_layout Standard +Since files are central to an I/O server, the configuration of XIOS is built + around file objects. + Those objects correspond directly to files on the computer file system + which are either to be written or to be read. + Although, XIOS currently only supports the NetCDF format, XIOS files are + a generic abstraction. + Each file can contain one or more fields (each field being defined on a + grid) and optionally variables. + In the NetCDF nomenclature, fields defined in XIOS correspond to NetCDF + variables and XIOS variables are NetCDF attributes. + As fields, variables and grids are complex objects, they have their own + chapters and we will focus only on files in this section. +\end_layout + +\begin_layout Section +How to define your first file +\end_layout + +\begin_layout Standard +If you wish to input or to output data using XIOS, you will need to define + at least one file. + This can be done from both the XML configuration file and the Fortran interface. + Files are usually defined in the configuration file, although their definitions + are sometimes amended using the API. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +File objects are defined with the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + tag and should always be inside the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + section. + Only the output frequency is mandatory to have a well defined file but + it is generally a good idea to give it a name. + The following example shows a minimal configuration file which defines + one file. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +Note that the file extension could depend of the format so it is automatically + added to the chosen name by XIOS. + Since XIOS only support NetCDF formats for now, the extension is always + +\begin_inset Quotes eld +\end_inset + +.nc +\begin_inset Quotes erd +\end_inset + +. + If the name is not set, XIOS will use the id of the file object instead. + This id is generated automatically by XIOS if it was not set by the user. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The output frequency is particularly important since it defines the interval + of time between two consecutive outputs, that is in NetCDF nomenclature + the interval between two records. + In the example, the data would be written for every timestep (independently + of the timestep duration). + It is possible to use any duration as the output frequency but be careful + if you are not using a duration which is a multiple of the timestep duration + since XIOS might not be doing what you want. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The same configuration could be obtained from the Fortran interface as well: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_file) :: file_hdl +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_filegroup) :: filegroup_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context and calendar initializations ommited, see the corresponding section + of this user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test", ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_filegroup_handle("file_definition", filegroup_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_add_file(filegroup_hdl, file_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_attr(file_hdl, name="output", output_freq=xios_timestep) +\end_layout + +\end_inset + +Another important parameter for file is the +\series bold +mode +\series default + attribute which is set by default to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +write +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + You need to set it to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +read +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + if you want to use XIOS to handle inputs. + Note that in this case the +\series bold +output_freq +\series default + attribute must correspond to the output frequency used to create the input + file. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +When using the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +write +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode, it is possible to append the data to an existing file instead of + overwriting it by setting the +\series bold +append +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +true +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + In this case, you must be careful not to modify the structure of the file, + in particular no fields should be added, modified nor removed, or XIOS + will throw an error. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If you wish to disable a file without having to remove its definition from + the configuration file, you can set the +\series bold +enabled +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +false +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Section +How to use parallel I/O +\end_layout + +\begin_layout Standard +By default XIOS will create one file by server, each file being suffixed + with the rank of the server. + For example, if the sample configuration used in the previous section was + used with two servers, two files named +\begin_inset Quotes eld +\end_inset + +output_0.nc +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +output_1.nc +\begin_inset Quotes erd +\end_inset + + would be created. + Each file would contain only the portion of the fields affected to the + corresponding server. + This default mode can also be explicitly configured by setting the +\series bold +type +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +multiple_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Using the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +multiple_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode is often a reliable way to achieve good performances, particularly + if you only have a few servers. + However having multiple files also increases the complexity of the post-process +ing chains and it is often much easier to always get one file regardless + of how many servers are used. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +It is possible to achieve such behavior in XIOS by setting the +\series bold +type +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +one_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + This feature depends directly on the NetCDF library capabilities so you + need to make sure that XIOS was properly linked with a parallel version + of NetCDF. + If the library was not compiled with parallel input/output support, XIOS + will issue a warning and revert to the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +multiple_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode. +\end_layout + +\begin_layout Section +Supported NetCDF formats +\end_layout + +\begin_layout Standard +XIOS supports only the version 4 or later of NetCDF library. + It uses by default the new NetCDF-4 format which relies on HDF5 format + as a back-end. + This format can also be selected explicitly by setting the +\series bold +format +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +netcdf4 +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Alternatively, it also possible to force NetCDF-4 to use the classic NetCDF-3 + binary format by setting the +\series bold +format +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +netcdf4_classic +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + When using this older format, some features might be unavailable but current + version of XIOS should not be affected much. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Depending on the format, there are some specific requirements on how the + NetCDF library should have been compiled: +\end_layout + +\begin_layout Itemize +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +netcdf4 +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + format requires that HDF5 support has been enabled in NetCDF using the + configuration option +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +-\SpecialChar \nobreakdash- +-enable-netcdf4 +\end_layout + +\end_inset + + and that the HDF5 library has been properly linked. +\end_layout + +\begin_layout Itemize +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +netcdf4 +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + format used in +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +one_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode requires that the HDF5 library has been compiled with parallel support + using the configuration option +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +-\SpecialChar \nobreakdash- +-enable-parallel +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Itemize +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +netcdf4_classic +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + format used in +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +one_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode requires that Parallel NetCDF support has been enabled in NetCDF using + the configuration option +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +-\SpecialChar \nobreakdash- +-enable-pnetcdf +\end_layout + +\end_inset + + and that the Parallel NetCDF library has been properly linked. +\end_layout + +\begin_layout Section +UGRID +\end_layout + +\begin_layout Standard +In addition to the CF conventions, it is also possible to output data using + +\begin_inset CommandInset href +LatexCommand href +name "UGRID" +target "https://ugrid-conventions.github.io/ugrid-conventions/" + +\end_inset + + metadata conventions developed for unstructured meshes. + It allows users to store the topology of an underlying unstructured mesh. + Currently XIOS supports 2D unstructured meshes of any shape (triangular, + quadrilateral, etc) and their mixture. + +\end_layout + +\begin_layout Standard +A 2D mesh can be described by a set of nodes, edges and/or faces. + XIOS allows one to define data on any of these three types of elements. + XIOS will generate a full list of connectivity attributes proposed by the + UGRID conventions. + For example in case of a mesh comprised of faces the following connectivity + parameters will be the calculated: +\end_layout + +\begin_layout Standard + +\family typewriter +edge_node_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +face_node_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +edge_nodes_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +face_nodes_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +face_edges_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +edge_face_connectivity +\end_layout + +\begin_layout Standard + +\family typewriter +face_face_connectivity +\end_layout + +\begin_layout Standard +In order to select UGRID output format, one has to set file attribute +\series bold +convention +\series default + to +\series bold +\shape italic +"UGRID" +\series default +\shape default + (its default value is +\series bold +\shape italic + +\begin_inset Quotes eld +\end_inset + +CF +\begin_inset Quotes erd +\end_inset + + +\series default +\shape default +). + Domain attribute +\series bold +nvertex +\series default + is mandatory for UGRID. + It servers for identifying one of three types of mesh elements on which + data can be defined: nodes (nvertex=1), edges (nvertex=2), and faces (nvertex +\begin_inset Formula $\geq$ +\end_inset + +3). + In order to write fields on the same mesh but on its different elements, + one has to assign the same domain name to each of the domains. + Example given below illustrates this point for three fields defined on + the same mesh but on its different elements: nodes, edges, and faces. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +How to use file splitting +\end_layout + +\begin_layout Standard +Output files can often be quite huge, particularly if the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +one_file +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + mode is used. + In this case, it can be interesting to periodically split the file in order + to have a few smaller files containing contiguous temporal portions of + the output data. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +This behavior can be achieved in XIOS by setting the +\series bold +split_freq +\series default + attribute to the duration you want, as illustrated in the following example: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +With this configuration, some data will be outputted every day and a new + file will be created every year. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Note that the split frequency is the duration after which a new file will + be created, it does not mean that a new file will be created at the beginning + of each period. + For example, if you start your simulation the first of June 2014 and run + it for two years with a split frequency of one year: +\end_layout + +\begin_layout Itemize +you will get two files containing respectively the period from June 1st, + 2014 to May 31th, 2015 and from June 1st, 2015 to May 31th, 2016. +\end_layout + +\begin_layout Itemize +you will NOT get three files containing respectively the last six months + of 2014, the full year of 2015 and the first six months of 2016. +\end_layout + +\begin_layout Standard +XIOS automatically suffixes the file names with the start and end dates + when using file splitting. + By default, it will try to use the shortest date that still enables to + distinguish the files. + Thus in the above example, the files would be named +\begin_inset Quotes eld +\end_inset + +output_2014-2015.nc +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +output_2015-2016.nc +\begin_inset Quotes erd +\end_inset + +. + If you wish to force the date format used to prefix the files, you can + define the +\series bold +split_freq_format +\series default + attribute to override the default behavior. +\end_layout + +\begin_layout Section +A word about file synchronization +\end_layout + +\begin_layout Standard +File synchronization is usually not something you should worry about. + However, it is important to understand that data written by XIOS might + not be immediately written on the disk in practice. + Input/output libraries like NetCDF and HDF5 and parallel file systems generally + use complex caching policies for performance reasons. + This means that your data might still be stored in memory after it was + supposedly written. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +It might become critical to control this behavior for two main reasons: +\end_layout + +\begin_layout Itemize +if you want to mitigate the impact of a crash, as all buffered data would + be lost ; +\end_layout + +\begin_layout Itemize +if you want to be able to access the data from the output file immediately + after writing it. +\end_layout + +\begin_layout Standard +By default, XIOS will never force file synchronization but you can require + it to do so by setting the +\series bold +sync_freq +\series default + attribute to the wanted duration. + In this case, XIOS will regularly instruct NetCDF to synchronize the file + on disk by flushing its internal buffers. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Note file synchronization must be used sparingly as it can have a disastrous + impact on performance. + Make sure to use a reasonably high synchronization frequency to avoid any + issue. +\end_layout + +\begin_layout Chapter +Fields and variables +\end_layout + +\begin_layout Standard +XIOS outsources the input/output definitions in its XML configuration file. + In the last chapter we presented some general points about file objects. + This chapter focuses on how to use fields and variables (that is variables + and attributes in NetCDF nomenclature) to populate files. +\begin_inset Newline newline +\end_inset + + +\end_layout + +\begin_layout Section +How to define your first field +\end_layout + +\begin_layout Standard +If you wish to input or to output data using XIOS, you will need to define + at least one file with one field. + This can be done from both the XML configuration file and the Fortran interface. + Fields are often defined in the configuration file, although their definitions + are sometimes amended using the API. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Field objects are defined with the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + tag and should always be inside a +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + or a +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + section. + Only the grid and the operation attached to the field are mandatory to + have a well defined field but it is generally a good idea to give it an + identifier. + The following example shows a minimal configuration file which defines + one file with one field. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +It defines one file named +\begin_inset Quotes eld +\end_inset + + +\emph on +output +\emph default + +\begin_inset Quotes erd +\end_inset + + which contains one field +\begin_inset Quotes eld +\end_inset + + +\emph on +field_A +\emph default + +\begin_inset Quotes erd +\end_inset + + defined on a grid +\begin_inset Quotes eld +\end_inset + + +\emph on +grid_A +\emph default + +\begin_inset Quotes erd +\end_inset + +. + The file and the field are configured so that the data is written in the + file at every timestep (using the +\series bold +output_freq +\series default + file attribute) without any transformation (using the +\series bold +operation +\series default + field attribute set to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +instant +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +). +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The corresponding Fortran simulation loop could be: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +DO ts=1,numberOfTimestep +\end_layout + +\begin_layout Plain Layout + + ! Inform XIOS of the current timestep +\end_layout + +\begin_layout Plain Layout + + CALL xios_update_calendar(ts) +\end_layout + +\begin_layout Plain Layout + + ! Compute field_A for current timestep +\end_layout + +\begin_layout Plain Layout + + ! ... +\end_layout + +\begin_layout Plain Layout + + ! Output the data +\end_layout + +\begin_layout Plain Layout + + CALL xios_send_field("field_A", field_A) +\end_layout + +\begin_layout Plain Layout + +ENDDO +\end_layout + +\end_inset + +As you can see, the +\series bold +id +\series default + of the field is used in the model to select the field for which data is + being provided which makes this attribute extremely important. + Note that it must be unique for all fields even if they are defined in + different files. + By default, the +\series bold +id +\series default + of a field is also used as the name of the corresponding NetCDF variable. + It is however possible to override this default name using the field attribute + +\series bold +name +\series default +. + Two fields can share the same +\series bold +name +\series default + as long as they are not used in the same file. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The second argument of the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field +\end_layout + +\end_inset + + function is an array containing the data. + Its shape and content are not described here as they depend directly on + the grid. + For more information on the data layout, refer to the chapters focusing + on grids, domains and axis. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The same configuration could also be obtained using the Fortran interface: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_context) :: ctx_hdl +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_file) :: file_hdl +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_filegroup) :: filegroup_hdl +\end_layout + +\begin_layout Plain Layout + +TYPE(xios_field) :: field_hdl +\end_layout + +\begin_layout Plain Layout + +! ... +\end_layout + +\begin_layout Plain Layout + +! Context, calendar and grid initializations ommited, see the corresponding + section of this user manual and of the reference manual +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_handle("test", ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_current_context(ctx_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_get_filegroup_handle("file_definition", filegroup_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_add_file(filegroup_hdl, file_hdl) +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_attr(file_hdl, name="output", output_freq=xios_timestep) +\end_layout + +\begin_layout Plain Layout + +CALL xios_add_field(file_hdl, field_hdl, "field_A") +\end_layout + +\begin_layout Plain Layout + +CALL xios_set_attr(field_hdl, grid_ref="grid_A", operation="instant") +\end_layout + +\end_inset + +Note that if you want to define a field on a grid with only one domain and/or + one axis, it is possible to use the +\series bold +domain_ref +\series default + and +\series bold +axis_ref +\series default + attributes instead of the +\series bold +grid_ref +\series default + attribute. + A temporary grid will be created based on the domain and/or axis defined + this way. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If you are using a grid with some masked points (see the relevant sections + of this manual), you must set the +\series bold +default_value +\series default + attribute to define the default value that will replace the missing values + in the output file. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +If you wish to disable a field without having to remove its definition from + the configuration file, you can set the +\series bold +enabled +\series default + attribute to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +false +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. +\end_layout + +\begin_layout Section +How to use temporal operations +\end_layout + +\begin_layout Standard +The last section showed a very basic example where the data was outputted + at every timestep using the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +instant +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + +\series bold +operation +\series default +. + However in many use cases, it might be more interesting to output only + the mean value on a certain period of time for example. + This section describes the use of temporal operations available in XIOS. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The field attribute +\series bold +operation +\series default + currently supports six modes: +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +instant +\series default +\emph default +: no temporal operation is applied which means the new data always overrides + the previous one even if it was not outputted, +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +average +\series default +\emph default +: compute and output the mean value, +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +accumulate +\series default +\emph default +: compute and output the sum, +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +minimum +\series default +\emph default +: compute and output the minimum value, +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +maximum +\series default +\emph default +: compute and output the maximum value, +\end_layout + +\begin_layout Itemize + +\series bold +\emph on +once +\series default +\emph default + : the data is written to the file only the first time it is received from + the model, any subsequent data is ignored. + The corresponding NetCDF variable does not have a time dimension. +\end_layout + +\begin_layout Standard +The output frequency of the file defined by the +\series bold +output_freq +\series default + attribute is used as the temporal operation period (except for the +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +once +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + + +\series bold +operation +\series default + for which there is no period). + This means it is for example not possible to output a daily average and + a weekly average in the same file. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +This updated example shows how to output the daily average instead of the + instant data for all timesteps: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +Compared to the previous example, only the file attribute +\series bold +output_freq +\series default + and the field attribute +\series bold +operation +\series default + have been modified. + Computing the weekly minimum instead of the daily average would be as simple + as using +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +output_freq="7d" +\end_layout + +\end_inset + +and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +operation="minimum" +\end_layout + +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Note that if you use a temporal operation and have +\series bold +default_value +\series default + defined, it might be useful to set the attribute +\series bold + detect_missing_value +\series default + to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +true +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +. + This way temporal operations will not be applied when a default value is + detected. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +For example, we consider the values of a 2x2 domain for three timesteps: +\begin_inset Formula +\[ +\begin{bmatrix}3 & -1\\ +7 & 1 +\end{bmatrix},\qquad\begin{bmatrix}5 & 6\\ +-1 & 2 +\end{bmatrix},\qquad\begin{bmatrix}-1 & 8\\ +3 & 4 +\end{bmatrix}. +\] + +\end_inset + +If we suppose that the field is configured to compute the average on three + timesteps, the resulting field would be: +\begin_inset Formula +\[ +\begin{bmatrix}\nicefrac{7}{3} & \nicefrac{13}{3}\\ +3 & \nicefrac{7}{3} +\end{bmatrix}. +\] + +\end_inset + +If +\series bold +default_value +\series default + is set to +\emph on + +\begin_inset Quotes eld +\end_inset + +-1 +\begin_inset Quotes erd +\end_inset + + +\emph default + and +\series bold +detect_missing_value +\series default + is set to +\begin_inset Quotes eld +\end_inset + + +\series bold +\emph on +true +\series default +\emph default + +\begin_inset Quotes erd +\end_inset + +, the resulting field would be: +\begin_inset Formula +\[ +\begin{bmatrix}4 & 7\\ +5 & \nicefrac{7}{3} +\end{bmatrix}. +\] + +\end_inset + + +\end_layout + +\begin_layout Section +How to use a specific data sampling +\end_layout + +\begin_layout Standard +It is sometimes useful to have more control on the data sampling. + By default, the input data is used at every timestep but sometimes it is + not what you want. + The following examples illustrate such cases: +\end_layout + +\begin_layout Enumerate +the model is not computing updated values at the same frequency for all + fields (for example, a field is updated every two timesteps). +\end_layout + +\begin_layout Enumerate +you want to output a specific instant value in the interval between two + outputs. +\end_layout + +\begin_layout Enumerate +you want to compute an average without taking into account all instant values + in the interval between two outputs. +\end_layout + +\begin_layout Standard +Data sampling can be controlled in XIOS using the +\series bold +freq_op +\series default + (one timestep by default) and +\series bold +freq_offset +\series default + (null by default) attributes. + Those attributes define respectively how often data from the model must + be used and the amount of time before starting to use it. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +For following excerpts of configuration files show you to use those attributes + to handle the motivating examples. +\end_layout + +\begin_layout Enumerate +In this example, we suppose that we get two fields from the model: +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + + which is computed for each timestep and +\begin_inset Quotes eld +\end_inset + +field_B +\begin_inset Quotes erd +\end_inset + + which is only computed every two timesteps. + For both fields, we show how to compute and output the sum of all values + received during 6 timesteps: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +In this example, we show how to output the 11th instant value every 12 timesteps +: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +In this example, we suppose that the timestep is equal to one hour and that + the simulation starts at midnight. + We show how to compute the weekly average of the field value at midday: +\begin_inset Newline newline +\end_inset + + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +How to use field references +\end_layout + +\begin_layout Standard +It is quite common that different temporal operations must be applied to + the same instant data provided by the model. + In theory, the only solution to handle this scenario would be to define + a field for each operation, give them different +\series bold +id +\series default + and and call +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field +\end_layout + +\end_inset + + with the same array of data for each of those fields. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The following example illustrates this solution for a field for which we + want to compute the average, minimal and maximal values: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +To simplify the handling of such scenarios, XIOS has a +\begin_inset Quotes eld +\end_inset + +reference +\begin_inset Quotes erd +\end_inset + + feature which allows one field to inherit the attributes (except the +\series bold +id +\series default +) and the instant data of another field. + The above example can then be rewritten: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +With this configuration, only one call to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field( +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + +, field_A) +\end_layout + +\end_inset + + is needed. + Note how inherited attributes (like +\series bold +name +\series default + or +\series bold +operation +\series default + for example) are overwritten to obtain the desired configuration. + Additionally, be aware that it is the instant values which are inherited, + not the result of the operation on the field. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Similarly, it is sometimes useful to output the result of a temporal operation + on a field for different periods. + In this case, it does not really make sense to define the field that will + be then inherited in one file rather than another. + A solution is to make use of the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +field_definition +\end_layout + +\end_inset + + section so that it is clear that the field can be reused in any file. + This is illustrated in the following sample configuration file: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +How to use arithmetic operations +\end_layout + +\begin_layout Standard +Since XIOS aims to reduce as much as possible the need for post-processing, + it can apply some arithmetic operations on the data it handles (regardless + of its provenance). +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +All usual operators (+, -, *, /, ^, that is addition, subtraction, multiplicatio +n, division and exponentiation) and some common functions (like cos, sin, + tan, exp, log, log10, sqrt) are supported. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The following example shows how to use arithmetic operations: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + field_A + 273.15 +\end_layout + +\begin_layout Plain Layout + + log10(field_B) +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +With this configuration, only one call to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field( +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + +, field_A) +\end_layout + +\end_inset + + is needed. + In this example +\series bold +field_ref +\series default + is used only to inherit the attributes from +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + +, the instant values are not inherited since an expression has been given + for +\begin_inset Quotes eld +\end_inset + +field_B +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +field_C +\begin_inset Quotes erd +\end_inset + +. + Note that it is possible to use fields obtained from an expression in another + expression, thus the expression of +\begin_inset Quotes eld +\end_inset + +field_C +\begin_inset Quotes erd +\end_inset + + is equivalent to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +log10(field_A + 273.15) +\end_layout + +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The special keyword +\series bold +this +\series default + can be used in an expression to refer to the instant data received from + the model by the current field. + For example, the previous configuration file could be rewritten as follow: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + this + + 273.15 +\end_layout + +\begin_layout Plain Layout + + log10(field_B) +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +and the Fortran call would be replaced by +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field( +\begin_inset Quotes eld +\end_inset + +field_B +\begin_inset Quotes erd +\end_inset + +, field_B) +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Standard +XIOS also provides the means to define an expression in a Fortran code via + the field attribute +\begin_inset Quotes eld +\end_inset + +expr +\begin_inset Quotes erd +\end_inset + +. + The example above can rewritten as +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +while the two expressions can be specified with the following calls: +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_set_field_attr( +\begin_inset Quotes eld +\end_inset + +field_B +\begin_inset Quotes erd +\end_inset + +, expr= +\begin_inset Quotes erd +\end_inset + +@this + 273.15 +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_set_field_attr( +\begin_inset Quotes eld +\end_inset + +field_C +\begin_inset Quotes erd +\end_inset + +, expr= +\begin_inset Quotes erd +\end_inset + +log10(field_B) +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\end_inset + +. + +\end_layout + +\begin_layout Section +How to chain multiple temporal operations +\end_layout + +\begin_layout Standard +By default, all field names appearing in an expression refer to the instant + data of those fields. + To refer to the result of a temporal operation, the field name must be + prefixed with +\begin_inset Quotes eld +\end_inset + +@ +\begin_inset Quotes erd +\end_inset + +. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +This feature allows to chain multiple temporal operations as illustrated + bellow: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + @field_A +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +This example shows how to compute the minimum on 7 days of the daily average + of +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + +. + In this context, the +\series bold +freq_op +\series default + attribute defines the period of the temporal operation for all fields pointed + with the +\begin_inset Quotes eld +\end_inset + +@ +\begin_inset Quotes erd +\end_inset + + operator in the expression. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Another use of this feature is to do arithmetic operations on the result + of temporal operations. + The following configuration file for example shows how to output the standard + deviation for a field on a one day period: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + field_A * field_A +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + sqrt(@field_A_square - @field_A^2) +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +Note that since an +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +instant +\begin_inset Quotes erd +\end_inset + + +\series default + +\emph default +operation is used, +\series bold +freq_op +\series default + and +\series bold +output_freq +\series default + are identical in this scenario. +\end_layout + +\begin_layout Section +How to access the data of a field +\end_layout + +\begin_layout Standard +In order not to waste memory, the instant data of a field can be read from + the model only if: +\end_layout + +\begin_layout Itemize +it is part of a file whose attribute +\series bold +mode +\series default + is +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +read +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\begin_layout Itemize +or its attribute +\series bold +read_access +\series default + is set to +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +true +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default +. +\end_layout + +\begin_layout Standard +In any other case, trying to access the field data would cause an error. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The following configuration file: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +can be used with this Fortran code: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Fortran,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +DO ts=1,numberOfTimestep +\end_layout + +\begin_layout Plain Layout + + ! Get field_A for current timestep +\end_layout + +\begin_layout Plain Layout + + CALL xios_recv_field("field_A", field_A) ! field_A must be an allocated + array with the right size +\end_layout + +\begin_layout Plain Layout + + ! Do useful things... +\end_layout + +\begin_layout Plain Layout + + ! Inform XIOS of the current timestep +\end_layout + +\begin_layout Plain Layout + + CALL xios_update_calendar(ts) +\end_layout + +\begin_layout Plain Layout + +ENDDO +\end_layout + +\end_inset + +The call to +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_recv_field +\end_layout + +\end_inset + + might block for a while if the data was not yet received from the server(s) + but it should not happen too often thanks to the prefetching done by XIOS. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +Since the +\series bold +read_access +\series default + attribute allows to the access fields which depend directly on data from + the model, you must be very careful with the order of the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field +\end_layout + +\end_inset + + and +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_recv_field +\end_layout + +\end_inset + + calls. + For example, consider the following configuration file (just a simple example + as in practice it does not make much sense to use it): +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + field_A / 42 +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +If you call +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_recv_field( +\begin_inset Quotes eld +\end_inset + +field_B +\begin_inset Quotes erd +\end_inset + +, field_B) +\end_layout + +\end_inset + + before +\begin_inset Flex Code +status open + +\begin_layout Plain Layout +xios_send_field( +\begin_inset Quotes eld +\end_inset + +field_A +\begin_inset Quotes erd +\end_inset + +, field_A) +\end_layout + +\end_inset + +, the requested data will never be available and a deadlock could occur. + In practice, XIOS will detect the problem and throw an error. +\end_layout + +\begin_layout Section +How to reduce the size of an output file +\end_layout + +\begin_layout Standard +The size of the output files can sometimes become a problem. + XIOS provides some features which may help to reduce the size of the output + files losslessly. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The first solution is to use the compression feature provided by HDF5 which + allows a field to be compressed using gzip. + Since it depends directly on HDF5, this feature works only when the NetCDF-4 + format is used. + Since HDF5 does not (yet) support compression for parallel output, one + has to use two server-level functionality (see Sec. + +\begin_inset CommandInset ref +LatexCommand ref +reference "sec:Launching-secondary-server" + +\end_inset + +) or to engage the +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +multiple_file +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default + mode. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +To enable the gzip compression of a field, you need to set the +\series bold +compression_level +\series default + attribute to any integer between 1 and 9 (by default this attribute is + set to 0 which means that compression is disabled). + Using an higher compression level should improve the compression ratio + at the cost of using more processing power. + Generally using a compression level of 2 should be a good trade-off. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The following example illustrates the use of the gzip compression: +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + +Note that the +\series bold +compression_level +\series default + attribute can also be set at a file level, in this case it is inherited + by all fields of the file unless they explicitly override the attribute. +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + +The second solution is available only if you are using a grid with masked + values. + In this case, you can choose to output the indexed grid instead of the + full grid by setting the +\series bold +indexed_output +\series default + attribute to +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +true +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default +. + Missing values are then omitted and extra arrays are outputted so that + the translation from the +\begin_inset Quotes eld +\end_inset + +compressed +\begin_inset Quotes erd +\end_inset + + indexes to the true indexes can be done. + Due to those arrays of indexes, indexed output should be considered only + if there is enough masked values. + For more details about this feature, please refer to section 8.2 +\begin_inset Quotes eld +\end_inset + +Compression by Gathering +\begin_inset Quotes erd +\end_inset + + of the Climate and Forecast (CF) Convention. +\end_layout + +\begin_layout Standard +\begin_inset CommandInset include +LatexCommand include +filename "inputs/user/Grid.lyx" + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset CommandInset include +LatexCommand include +filename "inputs/user/Domain.lyx" + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset CommandInset include +LatexCommand include +filename "inputs/user/Axis.lyx" + +\end_inset + + +\end_layout + +\begin_layout Chapter +XIOS parameterization +\end_layout + +\begin_layout Standard +Some of XIOS behaviors can be configured using options. + Those options must be exprhessed as variables in a specific context whose + +\series bold +id +\series default + must be +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +xios +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default + as shown below. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "breaklines=true,frame=tb,language=XML,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}},tabsize=2" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + option_value +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Launching secondary server +\begin_inset CommandInset label +LatexCommand label +name "sec:Launching-secondary-server" + +\end_inset + + +\end_layout + +\begin_layout Standard +To improve I/O performance, it is possible to separate servers into two + levels: intermediaries (level one) and writers (level two). + Level-one servers will receive data from clients and will redistribute + and send the data to subsets of level-two servers (called “poolsâ€), whilst + level-two servers will do the I/O. + Each file is written by only one pool. + If one process is assigned per pool (which is the default option), the + I/O is sequential and HDF5 compression can be used even in the “multiple_file†+ mode. + Level-two servers can be launched and controlled by means of three parameters: +\end_layout + +\begin_layout Itemize + +\series bold +using_server2 +\series default + (type: +\series bold +bool +\series default +) activates the secondary server +\end_layout + +\begin_layout Itemize + +\series bold +ratio_server2 +\series default + (type: +\series bold +int +\series default +) defines the percentage of servers that will be dedicated to level two. + The parameter can take value from 0 to 100 with the default value of 50%. + In case if the requested number of level-two servers is not valid (for + example, zero or equal to the total number of servers), XIOS will run in + its classical server mode with one server level. +\end_layout + +\begin_layout Itemize + +\series bold +number_pools_server2 +\series default +(type: +\series bold +int +\series default +) sets the number of server-two pools (i.e. + MPI communicators on level two). + By default the number of pools is equal to the number of level-two servers, + thus permitting one process per communicator. +\end_layout + +\begin_layout Standard +Shown in Fig. + +\begin_inset CommandInset ref +LatexCommand ref +reference "Fig:server2" + +\end_inset + + is the two-level server structure for the following definitions: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "breaklines=true,frame=tb,language=XML,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}},tabsize=2" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +... + +\end_layout + +\begin_layout Plain Layout + + true +\end_layout + +\begin_layout Plain Layout + + 75 +\end_layout + +\begin_layout Plain Layout + + 3 +\end_layout + +\begin_layout Plain Layout + +... +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +placement H +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset Graphics + filename inputs/images/Server2.pdf + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset Caption Standard + +\begin_layout Plain Layout +Two levels of servers for the total number of servers of 8 and ratio_server2=75%. + The number of level-two servers is +\begin_inset Formula $8\times\text{ratio\_server2}=6$ +\end_inset + + and, thus, the remaining 2 servers are of level one. + +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "Fig:server2" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +By default file distribution among server-two pools is optimized for bandwidth. + An alternative way of distributing files is possible in order to minimize + memory consumption by level-two servers. + For this, two additional parameters should be specified: +\end_layout + +\begin_layout Itemize + +\series bold +server2_dist_file_memory +\series default + (type: +\series bold +bool +\series default +) activates memory optimization. +\end_layout + +\begin_layout Itemize + +\series bold +server2_dist_file_memory_ratio +\series default + (type: +\series bold +double +\series default +) (optional) takes value from 0 (memory optimization) to 1 (bandwidth optimizati +on). + The default value is 0.5. +\end_layout + +\begin_layout Section +Buffer related options +\end_layout + +\begin_layout Standard +By default, XIOS tries to guess the required buffers sizes to ensure efficient + client-server communications. + However it might sometimes be useful to tweak the buffers sizes so XIOS + provides the following options: +\end_layout + +\begin_layout Itemize + +\series bold +optimal_buffer_size +\series default + (type: +\series bold +string +\series default +) can be either +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +memory +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default + or +\series bold +\emph on + +\begin_inset Quotes erd +\end_inset + +performance +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default +. + When using the +\series bold +\emph on + +\begin_inset Quotes eld +\end_inset + +memory +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default + mode, XIOS will try to use buffers as small as possible while still ensuring + that the bigger message will fit. + When using the +\series bold +\emph on + +\begin_inset Quotes erd +\end_inset + +performance +\begin_inset Quotes erd +\end_inset + + +\series default +\emph default + mode, XIOS will ensure that all active fields can be buffered without having + to flush the buffers. + This mode is used by default since it allows more asynchronism and thus + better performance at the cost of being quite memory hungry. +\end_layout + +\begin_layout Itemize + +\series bold +minimum_buffer_size +\series default + (type: +\series bold +int +\series default +) defines the minimum buffer size in bytes (8192 by default). + This value will be used by XIOS only for buffers whose detected size is + smaller than the user defined minimum size. +\end_layout + +\begin_layout Itemize + +\series bold +buffer_size_factor +\series default +(type: +\series bold +int +\series default +) allows to modify the buffers sizes by multiplying the detected sizes by + an user defined factor ( +\begin_inset Formula $1.0$ +\end_inset + + by default). + For each allocated buffers, the used size is defined as +\begin_inset Formula +\[ +{\scriptstyle used\_size\;=\;\min\left(minimum\_buffer\_size,\;detected\_size\;\times\;buffer\_size\_factor\right)} +\] + +\end_inset + + +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/XIOS_user_guide.pdf b/xios_2311_src/doc/XIOS_user_guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..485593e294d7e2228c4b4ef20fa22244b5887225 Binary files /dev/null and b/xios_2311_src/doc/XIOS_user_guide.pdf differ diff --git a/xios_2311_src/doc/inputs/images/Distributed_Axis.pdf b/xios_2311_src/doc/inputs/images/Distributed_Axis.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de2b96f80a9af9ada7927f544d7c3d9f8fed43f5 Binary files /dev/null and b/xios_2311_src/doc/inputs/images/Distributed_Axis.pdf differ diff --git a/xios_2311_src/doc/inputs/images/Distributed_Domain.pdf b/xios_2311_src/doc/inputs/images/Distributed_Domain.pdf new file mode 100644 index 0000000000000000000000000000000000000000..774e2f5cb7c534ffaf269b92fcc39ad526b2775b Binary files /dev/null and b/xios_2311_src/doc/inputs/images/Distributed_Domain.pdf differ diff --git a/xios_2311_src/doc/inputs/images/Domain.pdf b/xios_2311_src/doc/inputs/images/Domain.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88011c914a1f3a284974a289f9943b60e168ebb5 Binary files /dev/null and b/xios_2311_src/doc/inputs/images/Domain.pdf differ diff --git a/xios_2311_src/doc/inputs/images/Server2.pdf b/xios_2311_src/doc/inputs/images/Server2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..228a2377cd7ed1dc9ee25c8bdc03c664d5ce1002 Binary files /dev/null and b/xios_2311_src/doc/inputs/images/Server2.pdf differ diff --git a/xios_2311_src/doc/inputs/user/Axis.lyx b/xios_2311_src/doc/inputs/user/Axis.lyx new file mode 100644 index 0000000000000000000000000000000000000000..9b6328a5b208d7a5d711c0f4f26b0168723fcc63 --- /dev/null +++ b/xios_2311_src/doc/inputs/user/Axis.lyx @@ -0,0 +1,715 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass book +\use_default_options true +\master ../../XIOS_user_guide.lyx +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\float_placement !tph +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Chapter +Axis +\end_layout + +\begin_layout Standard +Like Domain, Axis is a sub-component of Grid but is one dimension. + In meteorological applications, axis represents a vertical line with different + levels. +\end_layout + +\begin_layout Section +Working with configuration file +\end_layout + +\begin_layout Standard +The way to define an axis with configuration file is similar to define a + domain. +\end_layout + +\begin_layout Subsection +Basic configuration +\end_layout + +\begin_layout Standard +Similar to domain, an axis is defined inside its definition part with the + tag +\series bold +\color black +axis_definition +\series default +\color inherit +. + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The first one is to specify explicitly identification of an axis with an + id. + +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +In this way, with id, the axis can be processed, e.x modified its attributes, + with Fortran interface; besides, it is only possible to reference to a + axis whose id is explicitly defined. +\end_layout + +\begin_layout Standard +To make a reference to an axis, we use axis_ref +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +An axis defined by axis_ref will inherit all attributes of the referenced + one, except its id attribute. + If there is no id specified, an implicit one is assigned to this new axis. + The axis with implicit id can only be used inside the scope where it is + defined, it can not be referenced, nor be processed. + It is rare to define an axis without id inside axis_definition. + +\end_layout + +\begin_layout Standard +To define a new axis inside a grid, we use the tag +\series bold +\color black +axis. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The xml lines above can be translated as: the grid_A composed of an axis_A + that is defined somewhere else before. + More precisely, the grid grid_A is constituted of a +\begin_inset Quotes eld +\end_inset + +unknown id +\begin_inset Quotes erd +\end_inset + + axis which has inherited all attributes (and their values) from axis A + (name, long name, i_index, j_index, ... + etc). +\end_layout + +\begin_layout Subsection +Advanced configuration +\end_layout + +\begin_layout Standard +Like domain, there are several transformation which can be defined with + configuration file. + All transformations on an axis have form *_axis. + +\end_layout + +\begin_layout Standard +Till now, XIOS supports the following transformation on axis: +\end_layout + +\begin_layout Itemize +zoom_axis: Like zoom functionality in XIOS 1.0, the destination grid is the + zoomed region of the source grid. +\end_layout + +\begin_layout Itemize +interpolation_axis: Implement interpolation from an axis to one another. + For now, only polynominal interpolation is available. +\end_layout + +\begin_layout Itemize +inverse_axis: Inverse an axis +\end_layout + +\begin_layout Standard +It is not difficult to define a transformation: Include type of transformation + inside axis definition, as the following +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The concrete example is translated as: the axis named axis_A_zoom is transformed + from axis name axis_A with a zoom activity. + The detailed attributes of zoom_axis can be found in reference document, + but simply it contains the begining and size of zoomed region. +\end_layout + +\begin_layout Standard +One remark is the transformed axis SHOULD have an id, in this case, it's + axis_A_zoom. + As mentioned before, a no-id axis or any no-id component of XIOS can only + be used inside its definition scope. +\end_layout + +\begin_layout Standard +To make use of transformation, the grid must contain axis which references + to transformed ones. + +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +On defining this way, we tell XIOS to establish a connection between two + grids by a transformation (zoom) with: grid source - grid_A, grid destination + - grid_A_zoom. +\end_layout + +\begin_layout Standard +As mentioned in Grid Chapter, in order to use transformed grid, just reference + to it in field_definition +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Although xml is helpful to define several configurations, it can not be + used to customize attributes of axis. + So it's the turn of Fortran interface. +\end_layout + +\begin_layout Section +Working with FORTRAN code +\end_layout + +\begin_layout Standard +Although axis is not as complexe as domain, there are some mandatory attributes + to define. + Different from precedent version, XIOS 2.0 supports distribution of data + on a axis. + The followings describe the essential parts of axis. + Details of its attributes and operations can be found in XIOS reference + guide. +\end_layout + +\begin_layout Subsection +Local axis index +\end_layout + +\begin_layout Standard +Axis is often used with domain, which is broken into several distributed + pieces, to make a 3 dimension grid. + However, there are cases in which data on axis are distributed among processes. + Following we consider a simple case: a axis with global size 9 and its + data are distributed evenly among 3 client processes, each of which has + size 3. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +placement !tbph +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset Graphics + filename ../images/Distributed_Axis.pdf + lyxscale 50 + scale 60 + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset Caption Standard + +\begin_layout Plain Layout +Global axis data +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "globalAxis" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The local axis can be described by the following way. +\end_layout + +\begin_layout Standard +Specify the the beginning and size of local axis with: +\end_layout + +\begin_layout Itemize +n_glo: global size of axis. + +\end_layout + +\begin_layout Itemize +begin: global position where a local axis begin +\end_layout + +\begin_layout Itemize +n: local size of axis on each process +\end_layout + +\begin_layout Standard +For example, the local axis in the middle (the yellow one) can be specified + with: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_axis_attr("axis_A",n_glo=9, begin=3, n=3) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Local axis data +\end_layout + +\begin_layout Standard +Simpler than local domain data, data on axis is always on-dimension. + Like local domain data, local axis data represent the data offset from + local axis, and it can be defined in two ways. +\end_layout + +\begin_layout Standard +Specify the begining and size of data on the local axis: +\end_layout + +\begin_layout Itemize +data_begin: the local position of data on axis where data begins +\end_layout + +\begin_layout Itemize +data_n: size of data on each local axis +\end_layout + +\begin_layout Standard +Or specify data with its position in the local axis: +\end_layout + +\begin_layout Itemize +data_index: array of local position of data in the local axis. +\end_layout + +\begin_layout Standard +Although the valid data must be inside a local axis, it is not neccessary + for data to have same size. + In fact, data can have larger size than local axis. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_axis_attr("axis_A", data_begin=-1, data_n=n+2) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +For local axis_A, the negative value of data_begin indicates that data is + larger than local axis, the valid part of data needs extracted from the + real data. + If data_begin has a positive value, that means data size is smaller than + local axis. + The default value of data_begin is 0, which implies that local data fit + into local axis properly. + +\end_layout + +\begin_layout Standard +Loal data can be defined with: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_axis_attr("axis_A",data_index=data) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +with +\end_layout + +\begin_layout Itemize +data = {-1,0,1,2,3} +\end_layout + +\begin_layout Subsection +Value +\end_layout + +\begin_layout Standard +Value of axis plays a same role as longitude and latitude of domain. + As local data, it can be distributed among processes. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_axis_attr("axis_A", value=valueAxis) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +with +\end_layout + +\begin_layout Itemize +valueAxis = {30, 40, 50} +\end_layout + +\begin_layout Standard +Because there is a need of direction of an axis, then comes the attribute + positive +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_axis_attr("axis_A", positive='up') +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +All attributes of axis can be found in Reference Guide. +\end_layout + +\begin_layout Standard + +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/inputs/user/Domain.lyx b/xios_2311_src/doc/inputs/user/Domain.lyx new file mode 100644 index 0000000000000000000000000000000000000000..7c72e90919c7e9813e4f5af4fabbc0e88c4a456e --- /dev/null +++ b/xios_2311_src/doc/inputs/user/Domain.lyx @@ -0,0 +1,1048 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass book +\use_default_options true +\master ../../XIOS_user_guide.lyx +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\float_placement !tph +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Chapter +Domain +\end_layout + +\begin_layout Standard +Domain is a two dimensional coordinates, which can be considered to be composed + of two axis: y-axis and x-axis. + However, different from two axis composed mechanically, a domain contains + more typical information which play an important role in specific cases. + Very often, in meteorological applications, domain represents a surface + with latitude and longitude. +\end_layout + +\begin_layout Section +Working with configuration file +\end_layout + +\begin_layout Subsection +Basic configuration +\end_layout + +\begin_layout Standard +Similar to Grid as well as other components in XIOS, a domain is defined + inside its definition part with the tag +\series bold +\color black +domain_definition +\series default +\color inherit +. + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The first one is to specify explicitly identification of a domain with an + id. + One repetition, id of any component in XIOS are +\shape italic +\color black +unique +\shape default +\color inherit + among this kind of components. + It is not allowed to have two domains with a same id, but it is permitted + a domain and a grid, for example, to share a same one. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +In this way, with id, the domain can be processed, e.x modified its attributes, + with Fortran interface; besides, it is only possible to reference to a + domain whose id is explicitly defined. +\end_layout + +\begin_layout Standard +Very often, after a domain is defined, it may be referenced many times. + To make a reference to a domain, we use domain_ref +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +A domain defined by domain_ref will inherit all attributes of the referenced + one, except its id attribute. + If there is no id specified, an implicit one is assigned to this new domain. + The domain with implicit id can only be used inside the scope where it + is defined, it can not be referenced, nor be processed. + It is rare to define a domain without id inside domain_definition. + However, the domain_ref is utilized widely outside the scope of domain_definiti +on. +\end_layout + +\begin_layout Standard +Because a domain is a sub component of grid, it is possible to define a + new domain inside a grid with the tag +\series bold +\color black +domain. + +\series default +\color inherit +Moreover it is the only region where we can define a new domain outside + domain_definition. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The xml lines above can be translated as: the grid_A composed of a domain_A + that is defined somewhere else before. + More precisely, the grid grid_A is constituted of a +\begin_inset Quotes eld +\end_inset + +unknown id +\begin_inset Quotes erd +\end_inset + + domain which has inherited all attributes (and their values) from domain + A (name, long name, i_index, j_index, ... + etc). +\end_layout + +\begin_layout Standard +With this approach, we only define a domain once but reuse it as many time + as we like in different configurations. +\end_layout + +\begin_layout Subsection +Advanced configuration +\end_layout + +\begin_layout Standard +One of a new concept which differenciates XIOS 2.0 from its precedent is + transformation. + In a simple case, zoom feature is now considered to be a transformation. + It can be more complicated for other geometric transformation such as inversion + or interpolation. + All transformation are taken place on grid level. + It means that it is neccessary to define a grid source and a grid destination + as well as a transformation or list of transformation which we'd like to + have. + In order to transform a grid to one another, we need to specify a transformatio +n on its sub-component: domain or axis. +\end_layout + +\begin_layout Standard +Because transformation on a domain is different from one on an axis, we + differenciate two categories of transformation: transformation_domain and + transformation_axis. +\end_layout + +\begin_layout Standard +Till now, XIOS supports the following transformation on domain: +\end_layout + +\begin_layout Itemize +zoom_domain: Like zoom functionality in XIOS 1.0, the destination grid is + the zoomed region of the source grid. +\end_layout + +\begin_layout Itemize +interpolation_domain: Implement interpolation from a domain to one another, + for now XIOS can only do interpolation by reading calculated weight values + from a file or calculate the weights on the fly. +\end_layout + +\begin_layout Itemize +generate_rectilinear_domain: auto generating, distributing a rectilinear + domain then filling all mandatory attributes. +\end_layout + +\begin_layout Standard +It is not difficult to define a transformation: Include type of transformation + inside domain definition, as the following +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The concrete example above tells many things: a domain named domain_A_zoom + is transformed from domain name domain_A with a zoom activity. + The domain_A_zoom is the zoomed region of domain_A. + The detailed attributes of zoom_domain can be found in reference document, + but simply it contains the begining and size of zoomed region. +\end_layout + +\begin_layout Standard +One remark is the transformed domain SHOULD have an id, in this case, it's + domain_A_zoom. + As mentioned before, a no-id domain or any no-id component of XIOS can + only be used inside its definition scope. + It exists but is useless. + So care about that. +\end_layout + +\begin_layout Standard +To make use of transformation, the grid must contain domains which reference + to transformed ones. + +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +On defining this way, we tell XIOS to establish a connection between two + grids by a transformation (zoom) with: grid source - grid_A, grid destination + - grid_A_zoom. +\end_layout + +\begin_layout Standard +As mentioned in Grid Chapter, in order to use transformed grid, just reference + to it in field_definition +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Although xml is helpful to define several configurations, it is not convenient + to customize attributes of domain. + So it's the turn of Fortran interface. +\end_layout + +\begin_layout Section +Working with FORTRAN code +\end_layout + +\begin_layout Standard +One of the important concepts to grasp in mind in using FORTRAN interface + is the data distribution. + With a distributed-memory XIOS, data are broken into disjoint blocks, one + per client process. + In the next sections, local describes everything related to a client process, + whereas global means global data. + The followings describe the essential parts of domain. + Details of its attributes and operations can be found in XIOS reference + guide +\end_layout + +\begin_layout Subsection +Domain type +\end_layout + +\begin_layout Standard +Domain is a two dimensional coordinates, which can be considered to be composed + of two axis: y-axis and x-axis. + However, different from two axis composed mechanically, a domain contains + more typical information which play an important role in specific cases. + Very often, in meteorological applications, domain represents a surface + with latitude and longitude. + Because these properties change from one domain type to another, it is + recommended to use domain in case of representing a surface. +\end_layout + +\begin_layout Standard +In XIOS, a domain can be represented by one of three different types of + coordinate system which also differentiate the way to represent latitude + and longitude correspondingly. + +\end_layout + +\begin_layout Itemize +rectilinear: a simple 2-dimensional Cartesian coordinates with two perpendicular + axes. + Latitude represents the y-axe while longitude represents the x-axe. +\end_layout + +\begin_layout Itemize +curvilinear: a 2-dimensional coordinates allows the generality of two axes + not perpendicular to each other. + Latitude and longitude have the size equivalent to size of local domain. + +\end_layout + +\begin_layout Itemize +unstructured: not any of two above, the latitutude and longitude, as curvilinear +, are reprensented with the help of boundaries. + +\end_layout + +\begin_layout Standard +Different from XIOS 1.0, in this new version, users must explicitly specify + the type of domain which they would like to use +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",type='rectilinear') +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Althoug there are different domain types, they share the similar patterns + to settle local data on a client process: There are some essential attributes + to define. + The next sections describe their meanings and how to specify correctly + data for a local domain. +\end_layout + +\begin_layout Subsection +Local domain index +\end_layout + +\begin_layout Standard +It is not uncommon that a global domain is broken into several pieces, each + of which is distributed to one process. + Following we consider a simple case: a domain of rectilinear type with + global size 9 x 9 and its data is distributed evenly among 9 client processes, + each of which has 3x3. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +placement !tbph +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset Graphics + filename ../images/Distributed_Domain.pdf + lyxscale 50 + scale 60 + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset Caption Standard + +\begin_layout Plain Layout +Global domain data +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "globalDomain" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The region of local domain can be described by one of the following way. +\end_layout + +\begin_layout Standard +Specify the the beginning and size of local domain with: +\end_layout + +\begin_layout Itemize +ni_glo, nj_glo: global size of x-axis and y-axis correspondingly. + +\end_layout + +\begin_layout Itemize +ibegin, jbegin: global position on x-axis and y-axis where a local domain + begin +\end_layout + +\begin_layout Itemize +ni, nj: local size of domain of each process on x-axis and y-axis +\end_layout + +\begin_layout Standard +Or tell XIOS exactly the global position of each point in the local domain, + from left to right, top to bottom with: +\end_layout + +\begin_layout Itemize +i_index, j_index: array of global position of every point in the local domain. + It is very useful when local domains do not align with each other. +\end_layout + +\begin_layout Standard +For example, with the first method, the local domain in the middle (the + blue one) can be specified with: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",ni_glo=9, nj_glo=9, ibegin=3, ni=3, + jbegin=3, nj=3) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The second method demands only two arrays: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",ni_glo=9, nj_glo=9, i_index=iIndex, + j_index=jIndex) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout Itemize +iIndex={3,4,5,3,4,5,3,4,5}, jIndex = {3,3,3,4,4,4,5,5,5} +\end_layout + +\begin_layout Subsection +Local domain data +\end_layout + +\begin_layout Standard +Similar to define local index, local data can be done in two ways. +\end_layout + +\begin_layout Standard +Specify the begining and size of data on the local domain: +\end_layout + +\begin_layout Itemize +data_ibegin, data_jbegin: the local position of data on x-axis and y-axis + where data begins +\end_layout + +\begin_layout Itemize +data_ni, data_nj: size of data on each axis +\end_layout + +\begin_layout Standard +Or specify data with its position in the local domain, from left to right, + top to bottom with +\end_layout + +\begin_layout Itemize +data_i_index, data_j_index: array of local position of data in the local + domain. +\end_layout + +\begin_layout Standard +Beside the attributes above, one of the essential attributes to define is + dimensional size of data - data_dim. + Although domain has two dimensions, data are not required to be 2-dimensional. + In particular, for case of data_dim == 1, XIOS uses an +\shape italic +1-dimensional block distribution +\shape default + of data, distributed along the first dimension, the x-axis. +\end_layout + +\begin_layout Standard +With the first way to define data on a local domain, we can use: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",data_dim=2, data_ibegin=-1, data_ni=ni+2, + data_jbegin=-1, data_nj=nj+2) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +In order to be processed correctly, data must be specified with the begining + and size of its block . + For two-dimensional data, it can be done with data_ibegin, data_ni for + the first dimension and data_jbegin, data_nj for the second dimension. + In case of one-dimensional data, it is only necessary to determine data_ibegin + and data_ni. + Although the valid data must be inside a local domain, it is not neccessary + for data to have same size as local domain. + In fact, data can have larger size than domain on each dimension, this + is often the case of +\begin_inset Quotes eld +\end_inset + +ghost cell +\begin_inset Quotes erd +\end_inset + +. + The attributes data_ibegin and data_jbegin specify the offset of data from + local domain. + For local domain_A, the negative value indicates that data is larger than + local domain, the valid part of data needs extracted from the real data. + A positive value indicates data is smaller than local domain. + The default value of data_ibegin/data_jbegin is 0, which implies that data + fit into local domain properly. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +placement !tbph +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset Graphics + filename ../images/Domain.pdf + lyxscale 50 + scale 60 + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset Caption Standard + +\begin_layout Plain Layout +Local domain with data +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "localDomain" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +On Figure +\begin_inset CommandInset ref +LatexCommand ref +reference "localDomain" + +\end_inset + +, local domain occupies the center of the global domain, where real data + fill up a larger region. + Only data inside the local domain, represented by blue cells, are valid. + +\end_layout + +\begin_layout Standard +With the secon way, data can be represented with: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",data_dim=2, data_i_index=dataI, data_j_inde +x=dataJ) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +with +\end_layout + +\begin_layout Itemize +dataJ = {-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,3,3,3,3,3} +\end_layout + +\begin_layout Itemize +dataI = {-1,0,1,2,3,-1,0,1,2,3,-1,0,1,2,3,-1,0,1,2,3,-1,0,1,2,3} +\end_layout + +\begin_layout Standard +As mentioned, data on a domain are two-dimensional but in some cases, there + is a need to write data continously, there comes one-dimensional data. + With the precedent example, we can define one dimensional data with: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",data_dim=1, data_i_index=dataI) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout Itemize +dataI = {-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18} +\end_layout + +\begin_layout Standard +Above are the mandatory attributes to define local domain. + There are some auxilliary attributes which make data meaningful, especially + for meteorological one. + The next section disscuses these attributes. +\end_layout + +\begin_layout Subsection +Longitude and latitude +\end_layout + +\begin_layout Standard +Different from the previous version, in XIOS 2.0, lonngitude and latitude + are optional. + Moreover, to be coherent to the data_dim concept, there are more ways to + input longitude and latitude values. +\end_layout + +\begin_layout Standard +Like data, longitude and latitude values can be one or two dimension. + The first ones are represented with lonvalue_1d, latvalue_1d; the second + ones are specified with lonvalue_2d and latvalue_2d. +\end_layout + +\begin_layout Standard +With the same domain_A, we can set longitude and latitude values by calling: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",lonvalue_1d=lon1D, latvalue_1d=lat1D) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +with +\end_layout + +\begin_layout Itemize +lon1D = {30, 40, 50, 30, 40, 50, 30, 40, 50} +\end_layout + +\begin_layout Itemize +lat1D = {30, 30, 30, 40, 40, 40, 50, 50, 50} +\end_layout + +\begin_layout Standard +Or by using two-dimension longitude and latitude +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + +CALL xios_set_domain_attr("domain_A",lonvalue_2d=lon2D, latvalue_1d=lat2D) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +with +\end_layout + +\begin_layout Itemize +lon2D = { +\begin_inset Formula $\begin{array}{ccc} +30 & 40 & 50\\ +30 & 40 & 50\\ +30 & 40 & 50 +\end{array}$ +\end_inset + +} +\end_layout + +\begin_layout Itemize +lat1D = { +\begin_inset Formula $\begin{array}{ccc} +30 & 30 & 30\\ +40 & 40 & 40\\ +50 & 50 & 50 +\end{array}$ +\end_inset + +} +\end_layout + +\begin_layout Standard +For unstructured mesh, a cell can have different number of vertices than + rectinlinear, in this case, longitude and latitude value of the vertex + of cell are specified with bounds_lon_1d and bounds_lat_1d. +\end_layout + +\begin_layout Standard +For curvilinear mesh, bounds_lon_2d and bounds_lat_2d provide a convenient + way to define longitude and latitude value for the vertex of the cell. + However, it is possible to use bounds_lon_1d and bounds_lat_1d to describe + these values. +\end_layout + +\begin_layout Standard +One thing to remind, only *_1d or *_2d attributes are used, if *_1d and + *_2d of a same attribute are provides, there will be runtime error. +\end_layout + +\begin_layout Standard +All attributes of domain can be found in Reference Guide. +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/inputs/user/Grid.lyx b/xios_2311_src/doc/inputs/user/Grid.lyx new file mode 100644 index 0000000000000000000000000000000000000000..8ecebb61e6ccf425373b60917acc47b3b17db817 --- /dev/null +++ b/xios_2311_src/doc/inputs/user/Grid.lyx @@ -0,0 +1,511 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass book +\use_default_options true +\master ../../XIOS_user_guide.lyx +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\float_placement !tph +\paperfontsize default +\spacing single +\use_hyperref false +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Chapter +Grid +\end_layout + +\begin_layout Section +Overview +\end_layout + +\begin_layout Standard +Grid plays an important role in XIOS. + Same as Field, Grid is one of the basic elements in XIOS, which should + be well defined, not only in the configuration file but also in the FORTRAN + code. + Because, until now, XIOS has mainly served for writing NetCDF data format, + most of its components are inspired from NetCDF Data Model, and Grid is + not an exception. + Grid is a concept describing dimensions that contain the axes of the data + arrays. + Moreover, Grid always consists of an unlimited dimension whose length can + be expanded at any time. + Other dimensions can be described with Domain and Axis. + The followings describe how to make use of Grid in XIOS. + Details of its attributes and operations can be found in XIOS reference + guide. +\end_layout + +\begin_layout Section +Working with configuration file +\end_layout + +\begin_layout Standard +As mentioned above, a grid contains the axes of the data arrays, which are + characterized by Domain and/or Axis. + A domain is composed of a 2-dimension array, meanwhile an axis is, as its + name, an 1-dimension array. + +\end_layout + +\begin_layout Standard +Like other components of XIOS, a grid is defined inside its definition part + with the tag +\series bold +\color black +grid_definition +\series default +\color inherit + +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status collapsed + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +As XIOS supports netCDF-4/HDF5, it allows user to gather several grids into + groups to better organize data. + Very often, grids are grouped, basing on the dimensions that they describe. + However, there is not a limit for user to group out the grids. + The more important thing than grid_group is grid. + A grid is defined with the tag +\series bold +\color black +grid. + +\end_layout + +\begin_layout Standard +While it is not crucial for a grid group not to have an identification specified + by attribute id, a grid must be assigned an id to become useful. + Unlike grid group is a way of hierarchically organizing related grid only, + a grid itself is referenced by fields with its id. + Without the id, a grid can not be made used of by a field. + Id is a string of anything but there is one thing to remember: id of a + grid as well as id of any component in XIOS are +\shape italic +\color black +unique +\shape default +\color inherit + among this kind of components. + It is not allowed to have two grids with a same id, but it is permitted + a grid and, for example, a domain to share a same one. + +\end_layout + +\begin_layout Standard +A grid is defined by domain(s) and axis. + A domain represents two-dimension data while an axis serves as one-dimension + data. + They are defined inside the grid definition. + One of the convenient and effective way to reuse the definitions in XIOS + is to take advantage of attribute *_ref. + On using *_ref, the referencing component has all attributes from its reference +d one. + As the example below, grid with id +\begin_inset Quotes eld +\end_inset + +grid_A +\begin_inset Quotes erd +\end_inset + + (from now one, called grid_A), is composed of one domain whose attributes + derived directly from another one-domain_A, and one axis whose attributes + are taken from axis axis_C, which are defined previously. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The *_ref can only used to reference to a already defined element (e.g domain, + axis, grid, etc). + If these *_ref have not been defined yet, there will be a runtime error. +\end_layout + +\begin_layout Standard +Details about domain and axis can be found in other sections but there is + one thing to bear in mind: A domain represents two-dimension data and it + also contains several special information: longitude, latitude, bound, + etc. + For the meteorological mind, domain indicates a surface with latitude and + longitude, whereas axis represents a vertical level. + +\end_layout + +\begin_layout Standard +In general cases, there is only a need of writing some multidimensional + data to a netCDF without any specific information, then comes the following + definition of grid. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The grid_All_Axis is similar to grid_A, but with three dimensions defined + by 3 axis that can be described in any way on demand of user. + For example, the axis_A and the axis_B can have corresponding name latitude + and longitude to characterize a two-dimension surface with latitude and + longitude. +\end_layout + +\begin_layout Standard +Very often, one dimensional data needs writing to netCDF, it can be easily + done with the following XML code +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +As it is discussed more details in the next section, but remember that even + the non-distributed one dimensional data can be well processed by XIOS. + +\end_layout + +\begin_layout Standard +As mentioned above, grid includes by default one unlimited dimension which + is often used as time step axis. + In order to write only time step to netCDF, XIOS provides a special way + to do: empty grid - a grid without any domain or axis. +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + +\end_layout + +\begin_layout Plain Layout + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +∆The order of domain and/or in grid definition decides order of data written + to netCDF: data on domain or axis appearing firstly in grid definition + will vary the most. + For example, on using ncdump command on netCDF which contains data written + on the grid_A . +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=XML,breaklines=true,tabsize=2,frame=tb,postbreak={\raisebox{0ex}[0ex][0ex]{\ensuremath{\rcurvearrowse\space}}}" +inline false +status open + +\begin_layout Plain Layout + + float field_A(time_counter, axis_A, y, x) ; +\end_layout + +\begin_layout Plain Layout + + field_A:online_operation = "average" ; +\end_layout + +\begin_layout Plain Layout + + field_A:interval_operation = "3600s" ; +\end_layout + +\begin_layout Plain Layout + + field_A:interval_write = "6h" ; +\end_layout + +\begin_layout Plain Layout + + field_A:coordinates = "time_centered axis_A nav_lat nav_lon" ; +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The data vary most quickly on dimension y, x which are two axes of domain_A. + These are the default name of these dimension of a domain. + The data on axis_C vary slower than on the domain and all the data are + written one time step defined by time_counter at a time. +\end_layout + +\begin_layout Standard +Although a grid can be easily configured in XML file, it also needs defining + in the FORTRAN via the definition of domain and axis for a model to work + fully and correctly. + All these instruction will be detailed in the next section. +\end_layout + +\begin_layout Section +Working with FORTRAN code +\end_layout + +\begin_layout Standard +Because grid is composed of domain and axis, all processing are taken grid + via Domain and Axis. + The next chapters supply the detail of these two sub components. + +\end_layout + +\end_body +\end_document diff --git a/xios_2311_src/doc/reference_xml.pdf b/xios_2311_src/doc/reference_xml.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1f5bee63f8a58b4fcba43a33249f03db9190971c Binary files /dev/null and b/xios_2311_src/doc/reference_xml.pdf differ diff --git a/xios_2311_src/extern/blitz/blitz/.cvsignore b/xios_2311_src/extern/blitz/blitz/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..0d014235efec2f0a80bfb80e3735833f21567a4c --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/.cvsignore @@ -0,0 +1,30 @@ +Makefile +Makefile.in +*.lo +*.la +.deps +.libs +config.h +matbops.h +mathfunc.h +promote-old.h +matuops.h +vecbfn.cc +vecbops.cc +vecuops.cc +vecwhere.cc +new-config.h +new-config.h.in +stamp-h1 +config.h.in +apple +intel +ibm +compaq +hp +sgi +gnu +pgi +pathscale +kai +fujitsu diff --git a/xios_2311_src/extern/blitz/blitz/Makefile b/xios_2311_src/extern/blitz/blitz/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..081dbbf453a7829815b9d5904e14d171567bb2d7 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/Makefile @@ -0,0 +1,860 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# blitz/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Written by Patrick Guio +# + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/blitz +pkgincludedir = $(includedir)/blitz +pkglibdir = $(libdir)/blitz +pkglibexecdir = $(libexecdir)/blitz +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = blitz +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_cxx_features.m4 \ + $(top_srcdir)/m4/ac_compiler_specific_header.m4 \ + $(top_srcdir)/m4/ac_compilers_64bits.m4 \ + $(top_srcdir)/m4/ac_cxx_alignment_directive.m4 \ + $(top_srcdir)/m4/ac_cxx_bool.m4 \ + $(top_srcdir)/m4/ac_cxx_complex_math_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_const_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_default_template_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_dynamic_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_debug.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_optimize.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations_with_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_exceptions.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit_template_function_qualification.m4 \ + $(top_srcdir)/m4/ac_cxx_flags_preset.m4 \ + $(top_srcdir)/m4/ac_cxx_full_specialization_syntax.m4 \ + $(top_srcdir)/m4/ac_cxx_function_nontype_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_general.m4 \ + $(top_srcdir)/m4/ac_cxx_have_climits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_fcns.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math1.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math2.m4 \ + $(top_srcdir)/m4/ac_cxx_have_cstring.m4 \ + $(top_srcdir)/m4/ac_cxx_have_ieee_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_numeric_limits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_rusage.m4 \ + $(top_srcdir)/m4/ac_cxx_have_std.m4 \ + $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ + $(top_srcdir)/m4/ac_cxx_have_system_v_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_valarray.m4 \ + $(top_srcdir)/m4/ac_cxx_isnan_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_keywords.m4 \ + $(top_srcdir)/m4/ac_cxx_math_absint_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_math_fn_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_member_constants.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates_outside_class.m4 \ + $(top_srcdir)/m4/ac_cxx_mutable.m4 \ + $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict_egcs.m4 \ + $(top_srcdir)/m4/ac_cxx_old_for_scoping.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_ordering.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_specialization.m4 \ + $(top_srcdir)/m4/ac_cxx_reinterpret_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_rtti.m4 \ + $(top_srcdir)/m4/ac_cxx_standard_library.m4 \ + $(top_srcdir)/m4/ac_cxx_static_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_template_keyword_qualifier.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_base_class.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_return_type.m4 \ + $(top_srcdir)/m4/ac_cxx_template_scoped_argument_matching.m4 \ + $(top_srcdir)/m4/ac_cxx_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_as_template_arguments.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_features.m4 \ + $(top_srcdir)/m4/ac_cxx_type_casts.m4 \ + $(top_srcdir)/m4/ac_cxx_type_promotion.m4 \ + $(top_srcdir)/m4/ac_cxx_typename.m4 \ + $(top_srcdir)/m4/ac_cxx_use_numtrait.m4 \ + $(top_srcdir)/m4/ac_env.m4 \ + $(top_srcdir)/m4/ac_fortran_flags_preset.m4 \ + $(top_srcdir)/m4/ac_info.m4 $(top_srcdir)/m4/ac_lib_blas.m4 \ + $(top_srcdir)/m4/ac_prog_doxygen.m4 \ + $(top_srcdir)/m4/ax_boost_base.m4 \ + $(top_srcdir)/m4/ax_boost_serialization.m4 \ + $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ + $(top_srcdir)/m4/ax_dirname.m4 \ + $(top_srcdir)/m4/ax_prefix_config_h.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(blitz_HEADERS) \ + $(nobase_blitz_HEADERS) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(blitzdir)" "$(DESTDIR)$(blitzdir)" +HEADERS = $(blitz_HEADERS) $(nobase_blitz_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in README +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing aclocal-1.15 +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +AR = ar +AR_FLAGS = -cru +AUTOCONF = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing autoconf +AUTOHEADER = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing autoheader +AUTOMAKE = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing automake-1.15 +AWK = gawk +BLASLIB = +BOOST_CPPFLAGS = +BOOST_LDFLAGS = +BOOST_SERIALIZATION_LIB = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +COMPILER_SPECIFIC_HEADER = intel/bzconfig.h +CPP = gcc -E +CPPFLAGS = +CXX = icc +CXXCPP = icc -E +CXXDEPMODE = depmode=gcc3 +CXXFCFLAG = -DFORTRAN_90 -DBZ_FORTRAN_SYMBOLS_WITH_TRAILING_UNDERSCORES +CXXFFLAGS = -DBZ_FORTRAN_SYMBOLS_WITH_TRAILING_UNDERSCORES +CXXFLAGS = -ansi +CXX_DEBUG_FLAGS = -g -O0 -C -DBZ_DEBUG +CXX_LIBS = +CXX_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -ansi_alias +CXX_PROFIL_FLAGS = -pg +CYGPATH_W = echo +DATE = Fri Sep 7 15:06:08 CEST 2018 +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DOT = +DOXYGEN = +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = ifort +F77_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -pad -unroll -fno-alias -safe_cray_ptr +FC = ifort +FCFLAGS = -FR +FCFLAGS_f90 = +FCLIBS = -L/opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/ -L/lib/../lib64 -L/lib/../lib64/ -L/usr/lib/../lib64 -L/usr/lib/../lib64/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl +FC_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -pad -unroll -fno-alias -safe_cray_ptr +FFLAGS = +FGREP = /bin/grep -F +FLIBS = -L/opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/ -L/lib/../lib64 -L/lib/../lib64/ -L/usr/lib/../lib64 -L/usr/lib/../lib64/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS = Linux curie90 2.6.32-696.30.1.el6.Bull.140.x86_64 #1 SMP Thu May 31 01:41:35 CEST 2018 x86_64 x86_64 x86_64 GNU/Linux +OTOOL = +OTOOL64 = +PACKAGE = blitz +PACKAGE_BUGREPORT = blitz-support@lists.sourceforge.net +PACKAGE_NAME = blitz +PACKAGE_STRING = blitz 0.10 +PACKAGE_TARNAME = blitz +PACKAGE_URL = +PACKAGE_VERSION = 0.10 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TEXI2HTML = +VERSION = 0.10 +abs_builddir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/blitz +abs_srcdir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/blitz +abs_top_builddir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1 +abs_top_srcdir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = +ac_ct_DUMPBIN = +ac_ct_F77 = ifort +ac_ct_FC = ifort +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +enable_dot = no +enable_html_docs = no +enable_latex_docs = no +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +pkgconfig_libdir = ${libdir}/pkgconfig +pkgconfig_libfile = blitz.pc +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +valgrind = yes +SUBDIRS = generate meta array +blitzdir = $(includedir)/blitz +generatedir = ./generate +genheaders = +#matbops.h mathfunc.h matuops.h promote-old.h vecbops.cc vecuops.cc vecwhere.cc +blitz_HEADERS = array-impl.h array.cc array.h bench.cc bench.h \ +benchext.cc benchext.h blitz.h bounds.h bzconfig.h bzdebug.h \ +compiler.h constpointerstack.h etbase.h et-forward.h funcs.h \ +globeval.cc indexexpr.h indexmap-forward.h levicivita.h limits-hack.h \ +listinit.h memblock.cc memblock.h minmax.h numinquire.h numtrait.h \ +ops.h prettyprint.h promote.h range.h range.cc ranks.h reduce.h \ +shapecheck.h simdtypes.h tau.h timer.h tinymat2.h tinymat2.cc \ +tinymat2io.cc tinyvec2.cc tinyvec2.h tinyvec2io.cc tm2fastiter.h \ +tmevaluate.h tv2fastiter.h tvevaluate.h traversal.cc traversal.h \ +tuning.h tvcross.h tvecglobs.h update.h wrap-climits.h $(genheaders) + +EXTRA_HEADERS = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +nobase_blitz_HEADERS = $(COMPILER_SPECIFIC_HEADER) +DISTCLEANFILES = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign blitz/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign blitz/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status blitz/config.h +$(srcdir)/config.h.in: # $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-blitzHEADERS: $(blitz_HEADERS) + @$(NORMAL_INSTALL) + @list='$(blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(blitzdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(blitzdir)" || exit $$?; \ + done + +uninstall-blitzHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(blitzdir)'; $(am__uninstall_files_from_dir) +install-nobase_blitzHEADERS: $(nobase_blitz_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nobase_blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)" || exit 1; \ + fi; \ + $(am__nobase_list) | while read dir files; do \ + xfiles=; for file in $$files; do \ + if test -f "$$file"; then xfiles="$$xfiles $$file"; \ + else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ + test -z "$$xfiles" || { \ + test "x$$dir" = x. || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)/$$dir'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)/$$dir"; }; \ + echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(blitzdir)/$$dir'"; \ + $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(blitzdir)/$$dir" || exit $$?; }; \ + done + +uninstall-nobase_blitzHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nobase_blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ + dir='$(DESTDIR)$(blitzdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(blitzdir)" "$(DESTDIR)$(blitzdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-blitzHEADERS install-nobase_blitzHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-blitzHEADERS uninstall-nobase_blitzHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool clean-local \ + cscopelist-am ctags ctags-am distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-blitzHEADERS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-nobase_blitzHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-blitzHEADERS \ + uninstall-nobase_blitzHEADERS + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf config.h $(genheaders) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/xios_2311_src/extern/blitz/blitz/Makefile.am b/xios_2311_src/extern/blitz/blitz/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..f2dfd8793c62be51c5630d77ea8b502912441f19 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/Makefile.am @@ -0,0 +1,35 @@ +# +# Written by Patrick Guio +# + +SUBDIRS = generate meta array + +blitzdir = $(includedir)/blitz +generatedir = ./generate + +genheaders = +#matbops.h mathfunc.h matuops.h promote-old.h vecbops.cc vecuops.cc vecwhere.cc + +blitz_HEADERS = array-impl.h array.cc array.h bench.cc bench.h \ +benchext.cc benchext.h blitz.h bounds.h bzconfig.h bzdebug.h \ +compiler.h constpointerstack.h etbase.h et-forward.h funcs.h \ +globeval.cc indexexpr.h indexmap-forward.h levicivita.h limits-hack.h \ +listinit.h memblock.cc memblock.h minmax.h numinquire.h numtrait.h \ +ops.h prettyprint.h promote.h range.h range.cc ranks.h reduce.h \ +shapecheck.h simdtypes.h tau.h timer.h tinymat2.h tinymat2.cc \ +tinymat2io.cc tinyvec2.cc tinyvec2.h tinyvec2io.cc tm2fastiter.h \ +tmevaluate.h tv2fastiter.h tvevaluate.h traversal.cc traversal.h \ +tuning.h tvcross.h tvecglobs.h update.h wrap-climits.h $(genheaders) + +EXTRA_HEADERS = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +nobase_blitz_HEADERS = $(COMPILER_SPECIFIC_HEADER) + +DISTCLEANFILES = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +clean-local: + -rm -rf config.h $(genheaders) diff --git a/xios_2311_src/extern/blitz/blitz/Makefile.in b/xios_2311_src/extern/blitz/blitz/Makefile.in new file mode 100644 index 0000000000000000000000000000000000000000..df34bfdf4d60fd86d30ba6d2846916e0052e72b3 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/Makefile.in @@ -0,0 +1,860 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Written by Patrick Guio +# + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = blitz +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_cxx_features.m4 \ + $(top_srcdir)/m4/ac_compiler_specific_header.m4 \ + $(top_srcdir)/m4/ac_compilers_64bits.m4 \ + $(top_srcdir)/m4/ac_cxx_alignment_directive.m4 \ + $(top_srcdir)/m4/ac_cxx_bool.m4 \ + $(top_srcdir)/m4/ac_cxx_complex_math_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_const_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_default_template_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_dynamic_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_debug.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_optimize.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations_with_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_exceptions.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit_template_function_qualification.m4 \ + $(top_srcdir)/m4/ac_cxx_flags_preset.m4 \ + $(top_srcdir)/m4/ac_cxx_full_specialization_syntax.m4 \ + $(top_srcdir)/m4/ac_cxx_function_nontype_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_general.m4 \ + $(top_srcdir)/m4/ac_cxx_have_climits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_fcns.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math1.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math2.m4 \ + $(top_srcdir)/m4/ac_cxx_have_cstring.m4 \ + $(top_srcdir)/m4/ac_cxx_have_ieee_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_numeric_limits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_rusage.m4 \ + $(top_srcdir)/m4/ac_cxx_have_std.m4 \ + $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ + $(top_srcdir)/m4/ac_cxx_have_system_v_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_valarray.m4 \ + $(top_srcdir)/m4/ac_cxx_isnan_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_keywords.m4 \ + $(top_srcdir)/m4/ac_cxx_math_absint_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_math_fn_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_member_constants.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates_outside_class.m4 \ + $(top_srcdir)/m4/ac_cxx_mutable.m4 \ + $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict_egcs.m4 \ + $(top_srcdir)/m4/ac_cxx_old_for_scoping.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_ordering.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_specialization.m4 \ + $(top_srcdir)/m4/ac_cxx_reinterpret_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_rtti.m4 \ + $(top_srcdir)/m4/ac_cxx_standard_library.m4 \ + $(top_srcdir)/m4/ac_cxx_static_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_template_keyword_qualifier.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_base_class.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_return_type.m4 \ + $(top_srcdir)/m4/ac_cxx_template_scoped_argument_matching.m4 \ + $(top_srcdir)/m4/ac_cxx_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_as_template_arguments.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_features.m4 \ + $(top_srcdir)/m4/ac_cxx_type_casts.m4 \ + $(top_srcdir)/m4/ac_cxx_type_promotion.m4 \ + $(top_srcdir)/m4/ac_cxx_typename.m4 \ + $(top_srcdir)/m4/ac_cxx_use_numtrait.m4 \ + $(top_srcdir)/m4/ac_env.m4 \ + $(top_srcdir)/m4/ac_fortran_flags_preset.m4 \ + $(top_srcdir)/m4/ac_info.m4 $(top_srcdir)/m4/ac_lib_blas.m4 \ + $(top_srcdir)/m4/ac_prog_doxygen.m4 \ + $(top_srcdir)/m4/ax_boost_base.m4 \ + $(top_srcdir)/m4/ax_boost_serialization.m4 \ + $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ + $(top_srcdir)/m4/ax_dirname.m4 \ + $(top_srcdir)/m4/ax_prefix_config_h.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(blitz_HEADERS) \ + $(nobase_blitz_HEADERS) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(blitzdir)" "$(DESTDIR)$(blitzdir)" +HEADERS = $(blitz_HEADERS) $(nobase_blitz_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in README +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AR_FLAGS = @AR_FLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLASLIB = @BLASLIB@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_SERIALIZATION_LIB = @BOOST_SERIALIZATION_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COMPILER_SPECIFIC_HEADER = @COMPILER_SPECIFIC_HEADER@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFCFLAG = @CXXFCFLAG@ +CXXFFLAGS = @CXXFFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ +CXX_LIBS = @CXX_LIBS@ +CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ +CXX_PROFIL_FLAGS = @CXX_PROFIL_FLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +F77_OPTIMIZE_FLAGS = @F77_OPTIMIZE_FLAGS@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FC_OPTIMIZE_FLAGS = @FC_OPTIMIZE_FLAGS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS = @OS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TEXI2HTML = @TEXI2HTML@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_libdir = @pkgconfig_libdir@ +pkgconfig_libfile = @pkgconfig_libfile@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +valgrind = @valgrind@ +SUBDIRS = generate meta array +blitzdir = $(includedir)/blitz +generatedir = ./generate +genheaders = +#matbops.h mathfunc.h matuops.h promote-old.h vecbops.cc vecuops.cc vecwhere.cc +blitz_HEADERS = array-impl.h array.cc array.h bench.cc bench.h \ +benchext.cc benchext.h blitz.h bounds.h bzconfig.h bzdebug.h \ +compiler.h constpointerstack.h etbase.h et-forward.h funcs.h \ +globeval.cc indexexpr.h indexmap-forward.h levicivita.h limits-hack.h \ +listinit.h memblock.cc memblock.h minmax.h numinquire.h numtrait.h \ +ops.h prettyprint.h promote.h range.h range.cc ranks.h reduce.h \ +shapecheck.h simdtypes.h tau.h timer.h tinymat2.h tinymat2.cc \ +tinymat2io.cc tinyvec2.cc tinyvec2.h tinyvec2io.cc tm2fastiter.h \ +tmevaluate.h tv2fastiter.h tvevaluate.h traversal.cc traversal.h \ +tuning.h tvcross.h tvecglobs.h update.h wrap-climits.h $(genheaders) + +EXTRA_HEADERS = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +nobase_blitz_HEADERS = $(COMPILER_SPECIFIC_HEADER) +DISTCLEANFILES = apple/bzconfig.h intel/bzconfig.h ibm/bzconfig.h \ +compaq/bzconfig.h hp/bzconfig.h sgi/bzconfig.h gnu/bzconfig.h \ +pgi/bzconfig.h pathscale/bzconfig.h kai/bzconfig.h fujitsu/bzconfig.h + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign blitz/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign blitz/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status blitz/config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-blitzHEADERS: $(blitz_HEADERS) + @$(NORMAL_INSTALL) + @list='$(blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(blitzdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(blitzdir)" || exit $$?; \ + done + +uninstall-blitzHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(blitzdir)'; $(am__uninstall_files_from_dir) +install-nobase_blitzHEADERS: $(nobase_blitz_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nobase_blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)" || exit 1; \ + fi; \ + $(am__nobase_list) | while read dir files; do \ + xfiles=; for file in $$files; do \ + if test -f "$$file"; then xfiles="$$xfiles $$file"; \ + else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ + test -z "$$xfiles" || { \ + test "x$$dir" = x. || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(blitzdir)/$$dir'"; \ + $(MKDIR_P) "$(DESTDIR)$(blitzdir)/$$dir"; }; \ + echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(blitzdir)/$$dir'"; \ + $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(blitzdir)/$$dir" || exit $$?; }; \ + done + +uninstall-nobase_blitzHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nobase_blitz_HEADERS)'; test -n "$(blitzdir)" || list=; \ + $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ + dir='$(DESTDIR)$(blitzdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(blitzdir)" "$(DESTDIR)$(blitzdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-blitzHEADERS install-nobase_blitzHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-blitzHEADERS uninstall-nobase_blitzHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool clean-local \ + cscopelist-am ctags ctags-am distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-blitzHEADERS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-nobase_blitzHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-blitzHEADERS \ + uninstall-nobase_blitzHEADERS + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf config.h $(genheaders) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/xios_2311_src/extern/blitz/blitz/README b/xios_2311_src/extern/blitz/blitz/README new file mode 100644 index 0000000000000000000000000000000000000000..4bac82651b349f113d33a36b5b377288587fc2d2 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/README @@ -0,0 +1,16 @@ +Blitz header file notes + +1) Some matrix headers are included in this release, but only because +the Benchmark class needs them. Their design is not yet stable, +and they are untested, so use them at your own peril. + +2) A compiler-specific header file with configuration settings is included +from the master header file . The compiler-specific +header file is selected on the basis of preprocessor symbols. Since some +C++ compilers (notably the IBM XL compiler for Darwin and for AIX systems) +do not define a unique preprocessor symbol, we have added a -D option in +the autoconf macro AC_CXX_FLAGS_PRESET (see file m4/ac_cxx_flags_preset.m4). +Thus, we use the option -D__APPLE with xlc++ and -D__IBM with xlC. +Please note that any user code must also be compiled with the same -D option +in order to be compiled successfully with one of these compilers. + diff --git a/xios_2311_src/extern/blitz/blitz/array-impl.h b/xios_2311_src/extern/blitz/blitz/array-impl.h new file mode 100644 index 0000000000000000000000000000000000000000..4bff205aa754621feff336ba9c18101053316d69 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array-impl.h @@ -0,0 +1,2563 @@ +// -*- C++ -*- +/*************************************************************************** + * blitz/array-impl.h Definition of the Array class + * + * $Id$ + * + * Copyright (C) 1997-2011 Todd Veldhuizen + * + * This file is a part of Blitz. + * + * Blitz is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Blitz is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Blitz. If not, see . + * + * Suggestions: blitz-devel@lists.sourceforge.net + * Bugs: blitz-support@lists.sourceforge.net + * + * For more information, please see the Blitz++ Home Page: + * https://sourceforge.net/projects/blitz/ + * + ***************************************************************************/ + +/* + * Wish list for array classes. + * - Arrays whose dimensions are unknown at compile time. + * - where()/elsewhere()/elsewhere() as in Dan Quinlan's implementation + * - block reduction operations + * - conversion to/from matrix & vector + * - apply(T func(T)) + * - apply(T func(const T&)) + * - apply + */ + +#ifndef BZ_ARRAY_H +#define BZ_ARRAY_H + +#include +#include +#include +#include +#include + +#include + +#include // Subarrays and slicing +#include // Tensor index notation +#include // Multicomponent arrays +#include // RectDomain class +#include // GeneralArrayStorage + +#ifdef BZ_HAVE_BOOST_SERIALIZATION +#include +#include +#endif + + +BZ_NAMESPACE(blitz) + +/* + * Forward declarations + */ + +template +class ArrayIterator; + +template +class ConstArrayIterator; + +template +class FastArrayIterator; + +template +class _bz_ArrayExpr; + +template +class IndirectArray; + +template +void swap(Array&,Array&); + +template +void find(Array,1>&,const Array&); + + +/** Declaration of class Array, the "Swiss army knife" of Blitz + expression template classes. This is an arbitrary (at compile + time) rank, arbitrary size container. + + \todo Array should inherit protected from MemoryBlockReference. + To make this work, need to expose + MemoryBlockReference::numReferences() and make Array a + friend of Array for slicing. (Is this still relevant? Array + DOES inherit from MemoryBlockReference.) + */ + +template +class Array : public MemoryBlockReference +#ifdef BZ_NEW_EXPRESSION_TEMPLATES + , public ETBase > +#endif +{ + +private: + typedef MemoryBlockReference T_base; + using T_base::data_; + +public: + ////////////////////////////////////////////// + // Public Types + ////////////////////////////////////////////// + + /* + * T_numtype is the numeric type stored in the array. + * T_index is a vector type which can be used to access elements + * of many-dimensional arrays. + * T_array is the array type itself -- Array + * T_iterator is a a fast iterator for the array, used for expression + * templates + * iterator is a STL-style iterator + * const_iterator is an STL-style const iterator + * T_default_storage is the default storage class type for the array + */ + + typedef P_numtype T_numtype; + typedef TinyVector T_index; + typedef Array T_array; + typedef FastArrayIterator T_iterator; + + typedef ArrayIterator iterator; + typedef ConstArrayIterator const_iterator; + + /** + * Set default storage order. This is configurable + * via #defines as it is can be beneficial to set a + * specific storage for an entire project/file. + * + * First check for the Fortan flag and then the column + * major flag, since Fortran arrays are column major. + */ +#if defined(BZ_FORTRAN_ARRAY) + typedef FortranArray T_default_storage; +#elif defined(BZ_COLUMN_MAJOR_ARRAY) + typedef ColumnMajorArray T_default_storage; +#else + typedef GeneralArrayStorage T_default_storage; +#endif + + static const int rank_ = N_rank; + + ////////////////////////////////////////////// + // Constructors // + ////////////////////////////////////////////// + + + /** Construct an array from an expression. Because this entails a + memory allocation, it is explicit so this fact is obvious to + the user. (There may also be ambiguities in making it + implicit?) */ + template + explicit Array(_bz_ArrayExpr expr); + + /* + * Any missing length arguments will have their value taken from the + * last argument. For example, + * Array A(32,64); + * will create a 32x64x64 array. This is handled by setupStorage(). + */ + + Array(GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + length_ = 0; + stride_ = 0; + zeroOffset_ = 0; + } + + explicit Array(int length0, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + length_[0] = length0; + setupStorage(0); + } + + Array(int length0, int length1, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 2); + TAU_TYPE_STRING(p1, "Array::Array() [T=" + + CT(T_numtype) + ",N=" + CT(N_rank) + "]"); + TAU_PROFILE(p1, "void (int,int)", TAU_BLITZ); + + length_[0] = length0; + length_[1] = length1; + setupStorage(1); + } + + Array(int length0, int length1, int length2, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 3); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + setupStorage(2); + } + + Array(int length0, int length1, int length2, int length3, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 4); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + setupStorage(3); + } + + Array(int length0, int length1, int length2, int length3, int length4, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 5); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + setupStorage(4); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 6); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + setupStorage(5); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, int length6, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 7); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + length_[6] = length6; + setupStorage(6); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, int length6, int length7, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 8); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + length_[6] = length6; + length_[7] = length7; + setupStorage(7); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, int length6, int length7, int length8, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 9); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + length_[6] = length6; + length_[7] = length7; + length_[8] = length8; + setupStorage(8); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, int length6, int length7, int length8, int length9, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 10); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + length_[6] = length6; + length_[7] = length7; + length_[8] = length8; + length_[9] = length9; + setupStorage(9); + } + + Array(int length0, int length1, int length2, int length3, int length4, + int length5, int length6, int length7, int length8, int length9, + int length10, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(N_rank >= 11); + length_[0] = length0; + length_[1] = length1; + length_[2] = length2; + length_[3] = length3; + length_[4] = length4; + length_[5] = length5; + length_[6] = length6; + length_[7] = length7; + length_[8] = length8; + length_[9] = length9; + length_[10] = length10; + setupStorage(10); + } + + /* + * Construct an array from an existing block of memory. Ownership + * is not acquired (this is provided for backwards compatibility). + */ + Array(T_numtype* restrict dataFirst, TinyVector shape, + GeneralArrayStorage storage = + T_default_storage(contiguousData)) + : MemoryBlockReference(_bz_returntype::product(shape), dataFirst, + neverDeleteData), + storage_(storage) + { + BZPRECONDITION(dataFirst != 0); + + length_ = shape; + computeStrides(); + data_ += zeroOffset_; + + } + + /** + Construct an array from an existing block of memory, with a + given set of strides. Ownership is not acquired (i.e. the + memory block will not be freed by Blitz++). This constructor is + used by extractComponent to make a component view of a + multicomponent array, which is by design noncontiguous. This + creates an incorrect length in the MemoryBlockReference (though + that may be of no consequence since we're not freeing the + memory). + */ + Array(T_numtype* restrict dataFirst, TinyVector shape, + TinyVector stride, + GeneralArrayStorage storage = + T_default_storage(contiguousData)) + : MemoryBlockReference(_bz_returntype::product(shape), dataFirst, + neverDeleteData), + storage_(storage) + { + BZPRECONDITION(dataFirst != 0); + + length_ = shape; + stride_ = stride; + calculateZeroOffset(); + data_ += zeroOffset_; + } + + /** + Construct an array from an existing block of memory. If the + storage represents a padded array, the length of the memory block + will be incorrect, which would lead to a crash if + "deleteDataWhenDone" is used. For this reason, we check that the + resulting array is contiguous. + */ + Array(T_numtype* restrict dataFirst, TinyVector shape, + preexistingMemoryPolicy deletionPolicy, + GeneralArrayStorage storage = + T_default_storage(contiguousData)) + : MemoryBlockReference(_bz_returntype::product(shape), dataFirst, + deletionPolicy), + storage_(storage) + { + BZPRECONDITION(dataFirst != 0); + + length_ = shape; + computeStrides(); + data_ += zeroOffset_; + + BZPRECHECK(deletionPolicy!=deleteDataWhenDone || isStorageContiguous(), "Non-contiguous storage used with owned pre-existing memory"); + + if (deletionPolicy == duplicateData) + reference(copy()); + } + + /** + Construct an array from an existing block of memory, with a given + set of strides. If the strides represent a noncontiguous array, + the calculated length of the memory block will be wrong, which + will lead to a crash if "deleteDataWhenDone" is specified. For + this reason, we check that the resulting array is contiguous. + */ + Array(T_numtype* restrict dataFirst, TinyVector shape, + TinyVector stride, + preexistingMemoryPolicy deletionPolicy, + GeneralArrayStorage storage = + T_default_storage(contiguousData)) + : MemoryBlockReference(_bz_returntype::product(shape), dataFirst, + deletionPolicy), + storage_(storage) + { + BZPRECONDITION(dataFirst != 0); + + length_ = shape; + stride_ = stride; + calculateZeroOffset(); + data_ += zeroOffset_; + + BZPRECHECK(deletionPolicy!=deleteDataWhenDone || isStorageContiguous(), "Non-contiguous storage used with owned pre-existing memory"); + + if (deletionPolicy == duplicateData) + reference(copy()); + } + + /* + * This constructor takes an extent (length) vector and storage format. + */ + + Array(const TinyVector& extent, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + length_ = extent; + setupStorage(N_rank - 1); + } + + /* + * This construct takes a vector of bases (lbounds) and a vector of + * extents. + */ + + Array(const TinyVector& lbounds, + const TinyVector& extent, + const GeneralArrayStorage& storage + = T_default_storage()); + + /* + * These constructors allow arbitrary bases (starting indices) to be set. + * e.g. Array A(Range(10,20), Range(20,30)) + * will create an 11x11 array whose indices are 10..20 and 20..30 + */ + Array(Range r0, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + setupStorage(0); + } + + Array(Range r0, Range r1, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + + setupStorage(1); + } + + Array(Range r0, Range r1, Range r2, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + + setupStorage(2); + } + + Array(Range r0, Range r1, Range r2, Range r3, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + + setupStorage(3); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + + setupStorage(4); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + + setupStorage(5); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + Range r6, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous() && r6.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + length_[6] = r6.length(); + storage_.setBase(6, r6.first()); + + setupStorage(6); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + Range r6, Range r7, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous() && r6.isAscendingContiguous() + && r7.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + length_[6] = r6.length(); + storage_.setBase(6, r6.first()); + length_[7] = r7.length(); + storage_.setBase(7, r7.first()); + + setupStorage(7); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + Range r6, Range r7, Range r8, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous() && r6.isAscendingContiguous() + && r7.isAscendingContiguous() && r8.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + length_[6] = r6.length(); + storage_.setBase(6, r6.first()); + length_[7] = r7.length(); + storage_.setBase(7, r7.first()); + length_[8] = r8.length(); + storage_.setBase(8, r8.first()); + + setupStorage(8); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + Range r6, Range r7, Range r8, Range r9, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous() && r6.isAscendingContiguous() + && r7.isAscendingContiguous() && r8.isAscendingContiguous() + && r9.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + length_[6] = r6.length(); + storage_.setBase(6, r6.first()); + length_[7] = r7.length(); + storage_.setBase(7, r7.first()); + length_[8] = r8.length(); + storage_.setBase(8, r8.first()); + length_[9] = r9.length(); + storage_.setBase(9, r9.first()); + + setupStorage(9); + } + + Array(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, + Range r6, Range r7, Range r8, Range r9, Range r10, + GeneralArrayStorage storage = T_default_storage()) + : storage_(storage) + { + BZPRECONDITION(r0.isAscendingContiguous() && + r1.isAscendingContiguous() && r2.isAscendingContiguous() + && r3.isAscendingContiguous() && r4.isAscendingContiguous() + && r5.isAscendingContiguous() && r6.isAscendingContiguous() + && r7.isAscendingContiguous() && r8.isAscendingContiguous() + && r9.isAscendingContiguous() && r10.isAscendingContiguous()); + + length_[0] = r0.length(); + storage_.setBase(0, r0.first()); + length_[1] = r1.length(); + storage_.setBase(1, r1.first()); + length_[2] = r2.length(); + storage_.setBase(2, r2.first()); + length_[3] = r3.length(); + storage_.setBase(3, r3.first()); + length_[4] = r4.length(); + storage_.setBase(4, r4.first()); + length_[5] = r5.length(); + storage_.setBase(5, r5.first()); + length_[6] = r6.length(); + storage_.setBase(6, r6.first()); + length_[7] = r7.length(); + storage_.setBase(7, r7.first()); + length_[8] = r8.length(); + storage_.setBase(8, r8.first()); + length_[9] = r9.length(); + storage_.setBase(9, r9.first()); + length_[10] = r10.length(); + storage_.setBase(10, r10.first()); + + setupStorage(10); + } + + /* + * Create a reference of another array + */ + Array(const Array& array) +#ifdef BZ_NEW_EXPRESSION_TEMPLATES + : MemoryBlockReference(), + ETBase< Array >(array) +#else + : MemoryBlockReference() +#endif + { + // NEEDS_WORK: this const_cast is a tad ugly. + reference(const_cast(array)); + } + + /* + * These constructors are used for creating interlaced arrays (see + * + */ + Array(const TinyVector& shape, + int lastExtent, const GeneralArrayStorage& storage); + //Array(const TinyVector& shape, + // int lastExtent, const GeneralArrayStorage& storage); + + /* + * These constructors make the array a view of a subportion of another + * array. If there fewer than N_rank Range arguments provided, no + * slicing is performed in the unspecified ranks. + * e.g. Array A(20,20,20); + * Array B(A, Range(5,15)); + * is equivalent to: + * Array B(A, Range(5,15), Range::all(), Range::all()); + */ + Array(Array& array, Range r0) + { + constructSubarray(array, r0); + } + + Array(Array& array, Range r0, Range r1) + { + constructSubarray(array, r0, r1); + } + + Array(Array& array, Range r0, Range r1, Range r2) + { + constructSubarray(array, r0, r1, r2); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3) + { + constructSubarray(array, r0, r1, r2, r3); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4) + { + constructSubarray(array, r0, r1, r2, r3, r4); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5, Range r6) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5, r6); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5, Range r6, Range r7) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5, r6, r7); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5, Range r6, Range r7, Range r8) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5, r6, r7, r8); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9); + } + + Array(Array& array, Range r0, Range r1, Range r2, + Range r3, Range r4, Range r5, Range r6, Range r7, Range r8, Range r9, + Range r10) + { + constructSubarray(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10); + } + + Array(Array& array, + const RectDomain& subdomain) + { + constructSubarray(array, subdomain); + } + + /* Constructor added by Julian Cummings */ + Array(Array& array, + const StridedDomain& subdomain) + { + constructSubarray(array, subdomain); + } + + /* + * This constructor is invoked by the operator()'s which take + * a combination of integer and Range arguments. It's not intended + * for end-user use. + */ + template + Array(Array& array, R0 r0, R1 r1, R2 r2, + R3 r3, R4 r4, R5 r5, R6 r6, R7 r7, R8 r8, R9 r9, R10 r10) + { + constructSlice(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10); + } + + ////////////////////////////////////////////// + // Member functions + ////////////////////////////////////////////// + + const TinyVector& base() const + { return storage_.base(); } + + int base(int rank) const + { return storage_.base(rank); } + + iterator begin() + { return iterator(*this); } + + const_iterator begin() const + { return const_iterator(*this); } + + T_iterator beginFast() const + { return T_iterator(*this); } + + // Deprecated: now extractComponent(...) + template + Array chopComponent(P_numtype2 a, int compNum, + int numComponents) const + { return extractComponent(a, compNum, numComponents); } + + int cols() const + { return length_[1]; } + + int columns() const + { return length_[1]; } + + T_array copy() const; + + // data_ always refers to the point (0,0,...,0) which may + // not be in the array if the base is not zero in each rank. + // These data() routines return a pointer to the first + // element in the array (but note that it may not be + // stored first in memory if some ranks are stored descending). + + diffType dataOffset() const + { return dot(storage_.base(), stride_); } + + const T_numtype* restrict data() const + { return data_ + dataOffset(); } + + T_numtype* restrict data() + { return data_ + dataOffset(); } + + // These dataZero() routines refer to the point (0,0,...,0) + // which may not be in the array if the bases are nonzero. + + const T_numtype* restrict dataZero() const + { return data_; } + + T_numtype* restrict dataZero() + { return data_; } + + // These dataFirst() routines refer to the element in the + // array which falls first in memory. + + diffType dataFirstOffset() const + { + diffType pos = 0; + + // Used to use tinyvector expressions: + // return data_ + dot(storage_.base() + // + (1 - storage_.ascendingFlag()) * (length_ - 1), stride_); + + for (int i=0; i < N_rank; ++i) + pos += (storage_.base(i) + (1-storage_.isRankStoredAscending(i)) * + (length_(i)-1)) * stride_(i); + + return pos; + } + + const T_numtype* restrict dataFirst() const + { return data_ + dataFirstOffset(); } + + T_numtype* restrict dataFirst() + { return data_ + dataFirstOffset(); } + + int depth() const + { return length_[2]; } + + int dimensions() const + { return N_rank; } + + RectDomain domain() const + { return RectDomain(lbound(), ubound()); } + + void dumpStructureInformation(ostream& os = cout) const; + + iterator end() + { return iterator(*this,0); } + + const_iterator end() const + { return const_iterator(*this,0); } + + int extent(int rank) const + { return length_[rank]; } + + const TinyVector& extent() const + { return length_; } + + template + Array extractComponent(P_numtype2, int compNum, + int numComponents) const; + + void free() + { + T_base::changeToNullBlock(); + length_ = 0; + } + + bool isMajorRank(int rank) const + { return storage_.ordering(rank) == N_rank-1; } + bool isMinorRank(int rank) const + { return storage_.ordering(rank) != N_rank-1; } + bool isRankStoredAscending(int rank) const + { return storage_.isRankStoredAscending(rank); } + + bool isStorageContiguous() const; + + int lbound(int rank) const + { return base(rank); } + TinyVector lbound() const + { return base(); } + + int length(int rank) const + { return length_[rank]; } + const TinyVector& length() const + { return length_; } + + void makeUnique(); + + sizeType numElements() const + { return _bz_returntype::product(length_); } + + // NEEDS_WORK -- Expose the numReferences() method + // MemoryBlockReference::numReferences; + + // The storage_.ordering_ array is a list of dimensions from + // the most minor (stride 1) to major dimension. Generally, + // ordering(0) will return the dimension which has the smallest + // stride, and ordering(N_rank-1) will return the dimension with + // the largest stride. + int ordering(int storageRankIndex) const + { return storage_.ordering(storageRankIndex); } + + const TinyVector& ordering() const + { return storage_.ordering(); } + + void transposeSelf(int r0, int r1, int r2=0, + int r3=0, int r4=0, int r5=0, int r6=0, int r7=0, int r8=0, int + r9=0, int r10=0); + T_array transpose(int r0, int r1, int r2=0, + int r3=0, int r4=0, int r5=0, int r6=0, int r7=0, int r8=0, int + r9=0, int r10=0) const; + + static int rank() + { return rank_; } + + void reference(const T_array&); + void weakReference(const T_array&); + + // Added by Derrick Bass + T_array reindex(const TinyVector&); + void reindexSelf( + const TinyVector&); + + void resize(int extent); + void resize(int extent1, int extent2); + void resize(int extent1, int extent2, + int extent3); + void resize(int extent1, int extent2, + int extent3, int extent4); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6, int extent7); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6, int extent7, int extent8); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6, int extent7, int extent8, + int extent9); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6, int extent7, int extent8, + int extent9, int extent10); + void resize(int extent1, int extent2, + int extent3, int extent4, int extent5, + int extent6, int extent7, int extent8, + int extent9, int extent10, + int extent11); + + + void resize(Range r1); + void resize(Range r1, Range r2); + void resize(Range r1, Range r2, Range r3); + void resize(Range r1, Range r2, Range r3, + Range r4); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6, + Range r7); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6, + Range r7, Range r8); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6, + Range r7, Range r8, Range r9); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6, + Range r7, Range r8, Range r9, + Range r10); + void resize(Range r1, Range r2, Range r3, + Range r4, Range r5, Range r6, + Range r7, Range r8, Range r9, + Range r10, Range r11); + + void resize(const TinyVector&); + + + void resizeAndPreserve(const TinyVector&); + void resizeAndPreserve(int extent); + void resizeAndPreserve(int extent1, + int extent2); + void resizeAndPreserve(int extent1, + int extent2, int extent3); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6, int extent7); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6, int extent7, + int extent8); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6, int extent7, + int extent8, int extent9); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6, int extent7, + int extent8, int extent9, + int extent10); + void resizeAndPreserve(int extent1, + int extent2, int extent3, int extent4, + int extent5, int extent6, int extent7, + int extent8, int extent9, int extent10, + int extent11); + + // NEEDS_WORK -- resizeAndPreserve(Range,...) + // NEEDS_WORK -- resizeAndPreserve(const Domain&); + + T_array reverse(int rank); + void reverseSelf(int rank); + + int rows() const + { return length_[0]; } + + void setStorage(GeneralArrayStorage); + + void slice(int rank, Range r); + + const TinyVector& shape() const + { return length_; } + + sizeType size() const + { return numElements(); } + + /** Returns the length of the array storage. This can be larger than + the number of elements due to padding to meet alignment + requirements. If you want to extract the array data to, for + example, write it to disk, this is the size of the block + needed. \todo Is this safe if there is no block? */ + sizeType storageSize() const + { return T_base::blockLength(); } + + const TinyVector& stride() const + { return stride_; } + + diffType stride(int rank) const + { return stride_[rank]; } + + bool threadLocal(bool disableLock = true) const + { return T_base::lockReferenceCount(!disableLock); } + + int ubound(int rank) const + { return base(rank) + length_(rank) - 1; } + + TinyVector ubound() const + { + TinyVector ub; + for (int i=0; i < N_rank; ++i) + ub(i) = base(i) + extent(i) - 1; + // WAS: ub = base() + extent() - 1; + return ub; + } + + int zeroOffset() const + { return zeroOffset_; } + + /** Returns true if the array is aligned on a simd vector width. */ + bool isVectorAligned(diffType offset) const + { return simdTypes::isVectorAligned(dataFirst()+offset); }; + + ////////////////////////////////////////////// + // Debugging routines + ////////////////////////////////////////////// + + bool isInRangeForDim(int i, int d) const { + return i >= base(d) && (i - base(d)) < length_[d]; + } + + bool isInRange(int i0) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0]; + } + + bool isInRange(int i0, int i1) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1]; + } + + bool isInRange(int i0, int i1, int i2) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2]; + } + + bool isInRange(int i0, int i1, int i2, int i3) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, int i5) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, int i5, int i6) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5] + && i6 >= base(6) && (i6 - base(6)) < length_[6]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, + int i5, int i6, int i7) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5] + && i6 >= base(6) && (i6 - base(6)) < length_[6] + && i7 >= base(7) && (i7 - base(7)) < length_[7]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, + int i5, int i6, int i7, int i8) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5] + && i6 >= base(6) && (i6 - base(6)) < length_[6] + && i7 >= base(7) && (i7 - base(7)) < length_[7] + && i8 >= base(8) && (i8 - base(8)) < length_[8]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, + int i5, int i6, int i7, int i8, int i9) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5] + && i6 >= base(6) && (i6 - base(6)) < length_[6] + && i7 >= base(7) && (i7 - base(7)) < length_[7] + && i8 >= base(8) && (i8 - base(8)) < length_[8] + && i9 >= base(9) && (i9 - base(9)) < length_[9]; + } + + bool isInRange(int i0, int i1, int i2, int i3, int i4, + int i5, int i6, int i7, int i8, int i9, int i10) const { + return i0 >= base(0) && (i0 - base(0)) < length_[0] + && i1 >= base(1) && (i1 - base(1)) < length_[1] + && i2 >= base(2) && (i2 - base(2)) < length_[2] + && i3 >= base(3) && (i3 - base(3)) < length_[3] + && i4 >= base(4) && (i4 - base(4)) < length_[4] + && i5 >= base(5) && (i5 - base(5)) < length_[5] + && i6 >= base(6) && (i6 - base(6)) < length_[6] + && i7 >= base(7) && (i7 - base(7)) < length_[7] + && i8 >= base(8) && (i8 - base(8)) < length_[8] + && i9 >= base(9) && (i9 - base(9)) < length_[9] + && i10 >= base(10) && (i10 - base(10)) < length_[10]; + } + + bool isInRange(const T_index& index) const { + for (int i=0; i < N_rank; ++i) + if (index[i] < base(i) || (index[i] - base(i)) >= length_[i]) + return false; + + return true; + } + + bool assertInRange(const T_index& BZ_DEBUG_PARAM(index)) const { + BZPRECHECK(isInRange(index), "Array index out of range: " << index + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0)) const { + BZPRECHECK(isInRange(i0), "Array index out of range: " << i0 + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1)) const { + BZPRECHECK(isInRange(i0,i1), "Array index out of range: (" + << i0 << ", " << i1 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2)) const + { + BZPRECHECK(isInRange(i0,i1,i2), "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3), "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), + int BZ_DEBUG_PARAM(i4)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4), "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5), "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5), int BZ_DEBUG_PARAM(i6)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5,i6), + "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ", " << i6 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5), int BZ_DEBUG_PARAM(i6), + int BZ_DEBUG_PARAM(i7)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5,i6,i7), + "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ", " << i6 << ", " << i7 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5), int BZ_DEBUG_PARAM(i6), int BZ_DEBUG_PARAM(i7), + int BZ_DEBUG_PARAM(i8)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5,i6,i7,i8), + "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ", " << i6 << ", " << i7 + << ", " << i8 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5), int BZ_DEBUG_PARAM(i6), int BZ_DEBUG_PARAM(i7), + int BZ_DEBUG_PARAM(i8), int BZ_DEBUG_PARAM(i9)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9), + "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ", " << i6 << ", " << i7 + << ", " << i8 << ", " << i9 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1), + int BZ_DEBUG_PARAM(i2), int BZ_DEBUG_PARAM(i3), int BZ_DEBUG_PARAM(i4), + int BZ_DEBUG_PARAM(i5), int BZ_DEBUG_PARAM(i6), int BZ_DEBUG_PARAM(i7), + int BZ_DEBUG_PARAM(i8), int BZ_DEBUG_PARAM(i9), + int BZ_DEBUG_PARAM(i10)) const + { + BZPRECHECK(isInRange(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), + "Array index out of range: (" + << i0 << ", " << i1 << ", " << i2 << ", " << i3 + << ", " << i4 << ", " << i5 << ", " << i6 << ", " << i7 + << ", " << i8 << ", " << i9 << ", " << i10 << ")" + << endl << "Lower bounds: " << storage_.base() << endl + << "Length: " << length_ << endl); + return true; + } + + ////////////////////////////////////////////// + // Subscripting operators + ////////////////////////////////////////////// + + template + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index); + return data_[dot(index, stride_)]; + } + + template + T_numtype& restrict operator()(const TinyVector& index) + { + assertInRange(index); + return data_[dot(index, stride_)]; + } + + const T_numtype& restrict operator()(TinyVector index) const + { + assertInRange(index[0]); + return data_[index[0] * stride_[0]]; + } + + T_numtype& operator()(TinyVector index) + { + assertInRange(index[0]); + return data_[index[0] * stride_[0]]; + } + + const T_numtype& restrict operator()(TinyVector index) const + { + assertInRange(index[0], index[1]); + return data_[index[0] * stride_[0] + + index[1] * stride_[1]]; + } + + T_numtype& operator()(TinyVector index) + { + assertInRange(index[0], index[1]); + return data_[index[0] * stride_[0] + + index[1] * stride_[1]]; + } + + const T_numtype& restrict operator()(TinyVector index) const + { + assertInRange(index[0], index[1], index[2]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2]]; + } + + T_numtype& operator()(TinyVector index) + { + assertInRange(index[0], index[1], index[2]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8], index[9]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8] + index[9] * stride_[9]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8], index[9]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8] + index[9] * stride_[9]]; + } + + const T_numtype& restrict operator()(const TinyVector& index) const + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8], index[9], + index[10]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8] + index[9] * stride_[9] + + index[10] * stride_[10]]; + } + + T_numtype& operator()(const TinyVector& index) + { + assertInRange(index[0], index[1], index[2], index[3], + index[4], index[5], index[6], index[7], index[8], index[9], + index[10]); + return data_[(index[0]) * stride_[0] + + index[1] * stride_[1] + + index[2] * stride_[2] + index[3] * stride_[3] + + index[4] * stride_[4] + index[5] * stride_[5] + + index[6] * stride_[6] + index[7] * stride_[7] + + index[8] * stride_[8] + index[9] * stride_[9] + + index[10] * stride_[10]]; + } + + const T_numtype& restrict operator()(int i0) const + { + assertInRange(i0); + return data_[(i0) * stride_[0]]; + } + + T_numtype& restrict operator()(int i0) + { + assertInRange(i0); + return data_[(i0) * stride_[0]]; + } + + const T_numtype& restrict operator()(int i0, int i1) const + { + assertInRange(i0, i1); + return data_[(i0) * stride_[0] + i1 * stride_[1]]; + } + + T_numtype& restrict operator()(int i0, int i1) + { + assertInRange(i0, i1); + return data_[(i0) * stride_[0] + i1 * stride_[1]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2) const + { + assertInRange(i0, i1, i2); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2) + { + assertInRange(i0, i1, i2); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3) const + { + assertInRange(i0, i1, i2, i3); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3) + { + assertInRange(i0, i1, i2, i3); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4) const + { + assertInRange(i0, i1, i2, i3, i4); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4) + { + assertInRange(i0, i1, i2, i3, i4); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5) const + { + assertInRange(i0, i1, i2, i3, i4, i5); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5) + { + assertInRange(i0, i1, i2, i3, i4, i5); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6) const + { + assertInRange(i0, i1, i2, i3, i4, i5, i6); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6) + { + assertInRange(i0, i1, i2, i3, i4, i5, i6); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7) const + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7) + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8) const + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8) + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8, int i9) const + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8] + i9 * stride_[9]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8, int i9) + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8] + i9 * stride_[9]]; + } + + const T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8, int i9, int i10) const + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8, + i9, i10); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8] + i9 * stride_[9] + i10 * stride_[10]]; + } + + T_numtype& restrict operator()(int i0, int i1, int i2, int i3, + int i4, int i5, int i6, int i7, int i8, int i9, int i10) + { + assertInRange(i0, i1, i2, i3, i4, i5, i6, i7, i8, + i9, i10); + return data_[(i0) * stride_[0] + i1 * stride_[1] + + i2 * stride_[2] + i3 * stride_[3] + i4 * stride_[4] + + i5 * stride_[5] + i6 * stride_[6] + i7 * stride_[7] + + i8 * stride_[8] + i9 * stride_[9] + i10 * stride_[10]]; + } + + /* + * Slicing to produce subarrays. If the number of Range arguments is + * fewer than N_rank, then missing arguments are treated like Range::all(). + */ + + T_array& noConst() const + { return const_cast(*this); } + + T_array operator()(const RectDomain& subdomain) const + { + return T_array(noConst(), subdomain); + } + + /* Operator added by Julian Cummings */ + T_array operator()(const StridedDomain& subdomain) const + { + return T_array(noConst(), subdomain); + } + + T_array operator()(Range r0) const + { + return T_array(noConst(), r0); + } + + T_array operator()(Range r0, Range r1) const + { + return T_array(noConst(), r0, r1); + } + + T_array operator()(Range r0, Range r1, Range r2) const + { + return T_array(noConst(), r0, r1, r2); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3) const + { + return T_array(noConst(), r0, r1, r2, r3); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4) const + { + return T_array(noConst(), r0, r1, r2, r3, r4); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5, Range r6) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5, r6); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5, Range r6, Range r7) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5, r6, r7); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5, Range r6, Range r7, Range r8) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5, r6, r7, r8); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5, Range r6, Range r7, Range r8, Range r9) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5, r6, r7, r8, r9); + } + + T_array operator()(Range r0, Range r1, Range r2, Range r3, Range r4, + Range r5, Range r6, Range r7, Range r8, Range r9, Range r10) const + { + return T_array(noConst(), r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10); + } + + // Allow any mixture of Range, int and Vector objects as + // operands for operator(): A(Range(3,7), 5, Range(2,4)) + + /* + * These versions of operator() allow any combination of int + * and Range operands to be used. Each int operand reduces + * the rank of the resulting array by one. + * + * e.g. Array A(20,20,20,20); + * Array B = A(Range(5,15), 3, 5, Range(8,9)); + * + * SliceInfo is a helper class defined in . + * It counts the number of Range vs. int arguments and does some + * other helpful things. + * + * Once partial specialization becomes widely implemented, these + * operators may be expanded to accept Vector arguments + * and produce ArrayPick objects. + * + * This operator() is not provided with a single argument because + * the appropriate cases exist above. + */ + +#ifdef BZ_HAVE_PARTIAL_ORDERING + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, nilArraySection(), + nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, nilArraySection(), nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, r7, nilArraySection(), nilArraySection(), + nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, r7, r8, + nilArraySection(), nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, r7, r8, r9, nilArraySection(), nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, nilArraySection()); + } + + template + typename SliceInfo::T_slice + operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10, T11 r11) const + { + typedef typename SliceInfo::T_slice slice; + return slice(noConst(), r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11); + } + +#endif // BZ_HAVE_PARTIAL_ORDERING + + /* + * These versions of operator() are provided to support tensor-style + * array notation, e.g. + * + * Array A, B; + * firstIndex i; + * secondIndex j; + * thirdIndex k; + * Array C = A(i,j) * B(j,k); + */ + + template + _bz_ArrayExpr::T_expr, N0> > + operator()(IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0> > + (noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1> > + operator()(IndexPlaceholder, IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, N4> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5, N6> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5, N6> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5, N6, N7> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5, N6, N7> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5, N6, N7, N8> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5, N6, N7, N8> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5, N6, N7, N8, N9> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5, N6, N7, N8, N9> >(noConst()); + } + + template + _bz_ArrayExpr::T_expr, N0, N1, N2, N3, + N4, N5, N6, N7, N8, N9, N10> > + operator()(IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder, IndexPlaceholder, + IndexPlaceholder) const + { + return _bz_ArrayExpr::T_expr, N0, + N1, N2, N3, N4, N5, N6, N7, N8, N9, N10> >(noConst()); + } + + ////////////////////////////////////////////// + // Support for multicomponent arrays + ////////////////////////////////////////////// + + /* + * See for an explanation of the traits class + * multicomponent_traits. + */ + + Array::T_element,N_rank> + operator[](const unsigned component) { + typedef typename multicomponent_traits::T_element T_compType; + + return extractComponent(T_compType(),component, + multicomponent_traits::numComponents); + } + + const Array::T_element,N_rank> + operator[](const unsigned component) const { + typedef typename multicomponent_traits::T_element T_compType; + + return extractComponent(T_compType(),component, + multicomponent_traits::numComponents); + } + + Array::T_element,N_rank> + operator[](const int component) { + return operator[](static_cast(component)); + } + + const Array::T_element,N_rank> + operator[](const int component) const { + return operator[](static_cast(component)); + } + + ////////////////////////////////////////////// + // Indirection + ////////////////////////////////////////////// + + template + IndirectArray + operator[](const T_indexContainer& index) + { + return IndirectArray(*this, + const_cast(index)); + } + + ////////////////////////////////////////////// + // Assignment Operators + ////////////////////////////////////////////// + + /** \name Assignment operators. \todo Index placeholder + operand. \todo Random operand. @{ */ + + /** + Scalar operand assignment. \todo Need a precondition check on + isStorageContiguous when operator, is used. \todo We should do + bounds checking, right now we will buffer overrun if the number + of initializers in the list is larger than numElements. */ + ListInitializationSwitch operator=(T_numtype x) + { + return ListInitializationSwitch(*this, x); + } + + T_array& initialize(T_numtype); + + // Was: + // T_array& operator=(T_numtype); + +#ifdef BZ_NEW_EXPRESSION_TEMPLATES + + // we need this because we can't use default assignment op so it + // must be overridden + T_array& operator=(const Array&); + + // we can't define a generic template for the assignment operator + // because it will cause the list initialization assignment above to + // not work when implict conversions to T_numtype are necessary. + + //template T_array& operator=(const T&); + template T_array& operator=(const ETBase&); + + T_array& operator+=(const T_array&); + T_array& operator-=(const T_array&); + T_array& operator*=(const T_array&); + T_array& operator/=(const T_array&); + T_array& operator%=(const T_array&); + T_array& operator^=(const T_array&); + T_array& operator&=(const T_array&); + T_array& operator|=(const T_array&); + T_array& operator>>=(const T_array&); + T_array& operator<<=(const T_array&); + + T_array& operator+=(const T_numtype&); + T_array& operator-=(const T_numtype&); + T_array& operator*=(const T_numtype&); + T_array& operator/=(const T_numtype&); + T_array& operator%=(const T_numtype&); + T_array& operator^=(const T_numtype&); + T_array& operator&=(const T_numtype&); + T_array& operator|=(const T_numtype&); + T_array& operator>>=(const T_numtype&); + T_array& operator<<=(const T_numtype&); + + template T_array& operator+=(const ETBase&); + template T_array& operator-=(const ETBase&); + template T_array& operator*=(const ETBase&); + template T_array& operator/=(const ETBase&); + template T_array& operator%=(const ETBase&); + template T_array& operator^=(const ETBase&); + template T_array& operator&=(const ETBase&); + template T_array& operator|=(const ETBase&); + template T_array& operator>>=(const ETBase&); + template T_array& operator<<=(const ETBase&); + +#else + T_array& operator+=(T_numtype); + T_array& operator-=(T_numtype); + T_array& operator*=(T_numtype); + T_array& operator/=(T_numtype); + T_array& operator%=(T_numtype); + T_array& operator^=(T_numtype); + T_array& operator&=(T_numtype); + T_array& operator|=(T_numtype); + T_array& operator>>=(T_numtype); + T_array& operator<<=(T_numtype); + + // Array operands + T_array& operator=(const Array&); + + template + T_array& operator=(const Array&); + template + T_array& operator+=(const Array&); + template + T_array& operator-=(const Array&); + template + T_array& operator*=(const Array&); + template + T_array& operator/=(const Array&); + template + T_array& operator%=(const Array&); + template + T_array& operator^=(const Array&); + template + T_array& operator&=(const Array&); + template + T_array& operator|=(const Array&); + template + T_array& operator>>=(const Array&); + template + T_array& operator<<=(const Array&); + + // Array expression operands + template + inline T_array& operator=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator+=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator-=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator*=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator/=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator%=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator^=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator&=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator|=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator>>=(BZ_ETPARM(_bz_ArrayExpr) expr); + template + inline T_array& operator<<=(BZ_ETPARM(_bz_ArrayExpr) expr); + + /// @} + +#endif + +public: + + T_numtype* restrict getInitializationIterator() { return dataFirst(); } +//iterator getInitializationIterator() { return begin(); } + + bool canCollapse(int outerRank, int innerRank) const { +#ifdef BZ_DEBUG_TRAVERSE + BZ_DEBUG_MESSAGE("stride(" << innerRank << ")=" << stride(innerRank) + << ", extent()=" << extent(innerRank) << ", stride(outerRank)=" + << stride(outerRank)); +#endif + return (stride(innerRank) * extent(innerRank) == stride(outerRank)); + } + +protected: + ////////////////////////////////////////////// + // Implementation routines + ////////////////////////////////////////////// + + _bz_inline2 void computeStrides(); + _bz_inline2 void setupStorage(int rank); + void constructSubarray(Array& array, + const RectDomain&); + void constructSubarray(Array& array, + const StridedDomain&); + void constructSubarray(Array& array, Range r0); + void constructSubarray(Array& array, Range r0, Range r1); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5, Range r6); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, + Range r7); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, + Range r7, Range r8); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, + Range r7, Range r8, Range r9); + void constructSubarray(Array& array, Range r0, + Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, + Range r7, Range r8, Range r9, Range r10); + + void calculateZeroOffset(); + + template + void constructSlice(Array& array, R0 r0, R1 r1, R2 r2, + R3 r3, R4 r4, R5 r5, R6 r6, R7 r7, R8 r8, R9 r9, R10 r10); + + template + void slice(int& setRank, Range r, Array& array, + TinyVector& rankMap, int sourceRank); + + template + void slice(int& setRank, int i, Array& array, + TinyVector& rankMap, int sourceRank); + + template + void slice(int&, nilArraySection, Array&, + TinyVector&, int) + { } + + void doTranspose(int destRank, int sourceRank, T_array& array); + +private: + // serialization support +#ifdef BZ_HAVE_BOOST_SERIALIZATION + friend class boost::serialization::access; + + template + void serialize(T_arch& ar, const unsigned int version) { + ar & boost::serialization::base_object >(*this); + ar & length_; + ar & storage_; + ar & stride_; + ar & zeroOffset_; + }; +#endif + +protected: + ////////////////////////////////////////////// + // Data members + ////////////////////////////////////////////// + + // NB: adding new data members may require changes to ctors, reference() + + /* + * For a description of the storage_ members, see the comments for class + * GeneralArrayStorage above. + * + * length_[] contains the extent of each rank. E.g. a 10x20x30 array + * would have length_ = { 10, 20, 30}. + * stride_[] contains the stride to move to the next element along each + * rank. + * zeroOffset_ is the distance from the first element in the array + * to the point (0,0,...,0). If base_ is zero and all ranks are + * stored ascending, then zeroOffset_ is zero. This value + * is needed because to speed up indexing, the data_ member + * (inherited from MemoryBlockReference) always refers to + * (0,0,...,0). + */ + GeneralArrayStorage storage_; + TinyVector length_; + TinyVector stride_; + diffType zeroOffset_; +}; + + +/* + * Global Functions + */ + +template +ostream& operator<<(ostream&, const Array&); + +template +ostream& operator<<(ostream&, const Array&); + +template +istream& operator>>(istream& is, Array& x); + +template +void swap(Array& a,Array& b) { + Array c(a); + a.reference(b); + b.reference(c); +} + +template +void find(Array,1>& indices, + const _bz_ArrayExpr& expr) { + find(indices, + static_cast< Array >(expr)); +} + +template +void find(Array,1>& indices, + const Array& exprVals) { + indices.resize(exprVals.size()); + typename Array::const_iterator it, end = exprVals.end(); + int j=0; + for (it = exprVals.begin(); it != end; ++it) + if (*it) + indices(j++) = it.position(); + if (j) + indices.resizeAndPreserve(j); + else + indices.free(); + return; +} + + +BZ_NAMESPACE_END + +/* + * Removed the "kitchen-sink inclusion" here because it made + * dependencies very difficult to figure out. + */ +#include +#include + + +#endif // BZ_ARRAY_H diff --git a/xios_2311_src/extern/blitz/blitz/array.cc b/xios_2311_src/extern/blitz/blitz/array.cc new file mode 100644 index 0000000000000000000000000000000000000000..2826a959bf6f934372901019c6f2850131eba26b --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array.cc @@ -0,0 +1,27 @@ + +#ifndef BZ_ARRAY_CC +#define BZ_ARRAY_CC + +// not-quite-declarations-of-array files + +#include // Array iterators +#include // Fast Array iterators (for et) +#include // ET type functions +#include // Array expression objects +#include // range objects +#include // Member functions +#include // Assignment operators +#include // Output formatting +#include // Allocation of interlaced arrays +#include // Array resize, resizeAndPreserve +#include // Slicing and subarrays +#include // Cycling arrays +#include // Special support for complex arrays +#include // Expression templates +#include // Array reduction expression templates +#include // Zipping multicomponent types +#include // where(X,Y,Z) +#include // Indirection +#include // Stencil objects +#include // TinyMatrix implementations +#endif diff --git a/xios_2311_src/extern/blitz/blitz/array.h b/xios_2311_src/extern/blitz/blitz/array.h new file mode 100644 index 0000000000000000000000000000000000000000..7be3e651570138a6619154d8a29374471ca277ba --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * blitz/array.h Minimal include version of Array + * + * $Id$ + * + * Copyright (C) 1997-2011 Todd Veldhuizen + * + * This file is a part of Blitz. + * + * Blitz is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Blitz is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Blitz. If not, see . + * + * Suggestions: blitz-devel@lists.sourceforge.net + * Bugs: blitz-support@lists.sourceforge.net + * + * For more information, please see the Blitz++ Home Page: + * https://sourceforge.net/projects/blitz/ + * + ***************************************************************************/ + +#ifndef BZ_ARRAY_ONLY_H +#define BZ_ARRAY_ONLY_H + +// See comments in for an explanation of the new +// headers arrangement. + +#include + +#endif // BZ_ARRAY_ONLY_H + diff --git a/xios_2311_src/extern/blitz/blitz/array/.cvsignore b/xios_2311_src/extern/blitz/blitz/array/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..7e1f9898b9ee51c74f74963cda0cd2cfc43a1b87 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/.cvsignore @@ -0,0 +1,4 @@ +Makefile +Makefile.in +bops.cc +uops.cc diff --git a/xios_2311_src/extern/blitz/blitz/array/Makefile b/xios_2311_src/extern/blitz/blitz/array/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..41263a055e1ba4f41595d496f345b5ac40f50fbd --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/Makefile @@ -0,0 +1,688 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# blitz/array/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# +# Written by Patrick Guio +# + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/blitz +pkgincludedir = $(includedir)/blitz +pkglibdir = $(libdir)/blitz +pkglibexecdir = $(libexecdir)/blitz +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = blitz/array +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_cxx_features.m4 \ + $(top_srcdir)/m4/ac_compiler_specific_header.m4 \ + $(top_srcdir)/m4/ac_compilers_64bits.m4 \ + $(top_srcdir)/m4/ac_cxx_alignment_directive.m4 \ + $(top_srcdir)/m4/ac_cxx_bool.m4 \ + $(top_srcdir)/m4/ac_cxx_complex_math_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_const_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_default_template_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_dynamic_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_debug.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_optimize.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations_with_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_exceptions.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit_template_function_qualification.m4 \ + $(top_srcdir)/m4/ac_cxx_flags_preset.m4 \ + $(top_srcdir)/m4/ac_cxx_full_specialization_syntax.m4 \ + $(top_srcdir)/m4/ac_cxx_function_nontype_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_general.m4 \ + $(top_srcdir)/m4/ac_cxx_have_climits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_fcns.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math1.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math2.m4 \ + $(top_srcdir)/m4/ac_cxx_have_cstring.m4 \ + $(top_srcdir)/m4/ac_cxx_have_ieee_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_numeric_limits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_rusage.m4 \ + $(top_srcdir)/m4/ac_cxx_have_std.m4 \ + $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ + $(top_srcdir)/m4/ac_cxx_have_system_v_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_valarray.m4 \ + $(top_srcdir)/m4/ac_cxx_isnan_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_keywords.m4 \ + $(top_srcdir)/m4/ac_cxx_math_absint_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_math_fn_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_member_constants.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates_outside_class.m4 \ + $(top_srcdir)/m4/ac_cxx_mutable.m4 \ + $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict_egcs.m4 \ + $(top_srcdir)/m4/ac_cxx_old_for_scoping.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_ordering.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_specialization.m4 \ + $(top_srcdir)/m4/ac_cxx_reinterpret_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_rtti.m4 \ + $(top_srcdir)/m4/ac_cxx_standard_library.m4 \ + $(top_srcdir)/m4/ac_cxx_static_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_template_keyword_qualifier.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_base_class.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_return_type.m4 \ + $(top_srcdir)/m4/ac_cxx_template_scoped_argument_matching.m4 \ + $(top_srcdir)/m4/ac_cxx_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_as_template_arguments.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_features.m4 \ + $(top_srcdir)/m4/ac_cxx_type_casts.m4 \ + $(top_srcdir)/m4/ac_cxx_type_promotion.m4 \ + $(top_srcdir)/m4/ac_cxx_typename.m4 \ + $(top_srcdir)/m4/ac_cxx_use_numtrait.m4 \ + $(top_srcdir)/m4/ac_env.m4 \ + $(top_srcdir)/m4/ac_fortran_flags_preset.m4 \ + $(top_srcdir)/m4/ac_info.m4 $(top_srcdir)/m4/ac_lib_blas.m4 \ + $(top_srcdir)/m4/ac_prog_doxygen.m4 \ + $(top_srcdir)/m4/ax_boost_base.m4 \ + $(top_srcdir)/m4/ax_boost_serialization.m4 \ + $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ + $(top_srcdir)/m4/ax_dirname.m4 \ + $(top_srcdir)/m4/ax_prefix_config_h.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(array_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/blitz/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(arraydir)" +HEADERS = $(array_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing aclocal-1.15 +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +AR = ar +AR_FLAGS = -cru +AUTOCONF = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing autoconf +AUTOHEADER = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing autoheader +AUTOMAKE = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing automake-1.15 +AWK = gawk +BLASLIB = +BOOST_CPPFLAGS = +BOOST_LDFLAGS = +BOOST_SERIALIZATION_LIB = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +COMPILER_SPECIFIC_HEADER = intel/bzconfig.h +CPP = gcc -E +CPPFLAGS = +CXX = icc +CXXCPP = icc -E +CXXDEPMODE = depmode=gcc3 +CXXFCFLAG = -DFORTRAN_90 -DBZ_FORTRAN_SYMBOLS_WITH_TRAILING_UNDERSCORES +CXXFFLAGS = -DBZ_FORTRAN_SYMBOLS_WITH_TRAILING_UNDERSCORES +CXXFLAGS = -ansi +CXX_DEBUG_FLAGS = -g -O0 -C -DBZ_DEBUG +CXX_LIBS = +CXX_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -ansi_alias +CXX_PROFIL_FLAGS = -pg +CYGPATH_W = echo +DATE = Fri Sep 7 15:06:08 CEST 2018 +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DOT = +DOXYGEN = +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = ifort +F77_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -pad -unroll -fno-alias -safe_cray_ptr +FC = ifort +FCFLAGS = -FR +FCFLAGS_f90 = +FCLIBS = -L/opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/ -L/lib/../lib64 -L/lib/../lib64/ -L/usr/lib/../lib64 -L/usr/lib/../lib64/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl +FC_OPTIMIZE_FLAGS = -O3 -Zp16 -ip -pad -unroll -fno-alias -safe_cray_ptr +FFLAGS = +FGREP = /bin/grep -F +FLIBS = -L/opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/ -L/lib/../lib64 -L/lib/../lib64/ -L/usr/lib/../lib64 -L/usr/lib/../lib64/ -L/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/missing makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS = Linux curie90 2.6.32-696.30.1.el6.Bull.140.x86_64 #1 SMP Thu May 31 01:41:35 CEST 2018 x86_64 x86_64 x86_64 GNU/Linux +OTOOL = +OTOOL64 = +PACKAGE = blitz +PACKAGE_BUGREPORT = blitz-support@lists.sourceforge.net +PACKAGE_NAME = blitz +PACKAGE_STRING = blitz 0.10 +PACKAGE_TARNAME = blitz +PACKAGE_URL = +PACKAGE_VERSION = 0.10 +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +TEXI2HTML = +VERSION = 0.10 +abs_builddir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/blitz/array +abs_srcdir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/blitz/array +abs_top_builddir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1 +abs_top_srcdir = /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = +ac_ct_DUMPBIN = +ac_ct_F77 = ifort +ac_ct_FC = ifort +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +enable_dot = no +enable_html_docs = no +enable_latex_docs = no +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /ccc/cont003/home/gencmip6/abramkiv/blitz-1.0.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +pkgconfig_libdir = ${libdir}/pkgconfig +pkgconfig_libfile = blitz.pc +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +valgrind = yes +arraydir = $(includedir)/blitz/array +generatedir = ../generate +genheaders = stencil-classes.cc +#bops.cc uops.cc +array_HEADERS = asexpr.h asexpr.cc cartesian.h cgsolve.h complex.cc \ +convolve.cc convolve.h cycle.cc domain.h et.h expr.h expr.cc \ +fastiter.h funcs.h functorExpr.h geometry.h indirect.h interlace.cc \ +io.cc iter.h map.h methods.cc misc.cc multi.h newet-macros.h newet.h \ +ops.cc ops.h reduce.cc reduce.h resize.cc shape.h slice.h slicing.cc \ +stencil-et.h stencil-et-macros.h stencilops.h stencils.cc stencils.h \ +storage.h where.h zip.h $(genheaders) + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign blitz/array/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign blitz/array/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-arrayHEADERS: $(array_HEADERS) + @$(NORMAL_INSTALL) + @list='$(array_HEADERS)'; test -n "$(arraydir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(arraydir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(arraydir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(arraydir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(arraydir)" || exit $$?; \ + done + +uninstall-arrayHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(array_HEADERS)'; test -n "$(arraydir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(arraydir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(arraydir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-arrayHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-arrayHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-local cscopelist-am ctags ctags-am \ + distclean distclean-generic distclean-libtool distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-arrayHEADERS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-arrayHEADERS + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf $(genheaders) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/xios_2311_src/extern/blitz/blitz/array/Makefile.am b/xios_2311_src/extern/blitz/blitz/array/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..84d9910afe148205298293ce8fe45eef8f34c0c6 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/Makefile.am @@ -0,0 +1,21 @@ +# +# Written by Patrick Guio +# + +arraydir = $(includedir)/blitz/array +generatedir = ../generate + +genheaders = stencil-classes.cc +#bops.cc uops.cc + +array_HEADERS = asexpr.h asexpr.cc cartesian.h cgsolve.h complex.cc \ +convolve.cc convolve.h cycle.cc domain.h et.h expr.h expr.cc \ +fastiter.h funcs.h functorExpr.h geometry.h indirect.h interlace.cc \ +io.cc iter.h map.h methods.cc misc.cc multi.h newet-macros.h newet.h \ +ops.cc ops.h reduce.cc reduce.h resize.cc shape.h slice.h slicing.cc \ +stencil-et.h stencil-et-macros.h stencilops.h stencils.cc stencils.h \ +storage.h where.h zip.h $(genheaders) + + +clean-local: + -rm -rf $(genheaders) diff --git a/xios_2311_src/extern/blitz/blitz/array/Makefile.in b/xios_2311_src/extern/blitz/blitz/array/Makefile.in new file mode 100644 index 0000000000000000000000000000000000000000..53b820ca17437f0a927f9b3c881b5e91a7eaa940 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/Makefile.in @@ -0,0 +1,688 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Written by Patrick Guio +# + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = blitz/array +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_cxx_features.m4 \ + $(top_srcdir)/m4/ac_compiler_specific_header.m4 \ + $(top_srcdir)/m4/ac_compilers_64bits.m4 \ + $(top_srcdir)/m4/ac_cxx_alignment_directive.m4 \ + $(top_srcdir)/m4/ac_cxx_bool.m4 \ + $(top_srcdir)/m4/ac_cxx_complex_math_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_const_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_default_template_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_dynamic_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_debug.m4 \ + $(top_srcdir)/m4/ac_cxx_enable_optimize.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations.m4 \ + $(top_srcdir)/m4/ac_cxx_enum_computations_with_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_exceptions.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit.m4 \ + $(top_srcdir)/m4/ac_cxx_explicit_template_function_qualification.m4 \ + $(top_srcdir)/m4/ac_cxx_flags_preset.m4 \ + $(top_srcdir)/m4/ac_cxx_full_specialization_syntax.m4 \ + $(top_srcdir)/m4/ac_cxx_function_nontype_parameters.m4 \ + $(top_srcdir)/m4/ac_cxx_general.m4 \ + $(top_srcdir)/m4/ac_cxx_have_climits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_fcns.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math1.m4 \ + $(top_srcdir)/m4/ac_cxx_have_complex_math2.m4 \ + $(top_srcdir)/m4/ac_cxx_have_cstring.m4 \ + $(top_srcdir)/m4/ac_cxx_have_ieee_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_numeric_limits.m4 \ + $(top_srcdir)/m4/ac_cxx_have_rusage.m4 \ + $(top_srcdir)/m4/ac_cxx_have_std.m4 \ + $(top_srcdir)/m4/ac_cxx_have_stl.m4 \ + $(top_srcdir)/m4/ac_cxx_have_system_v_math.m4 \ + $(top_srcdir)/m4/ac_cxx_have_valarray.m4 \ + $(top_srcdir)/m4/ac_cxx_isnan_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_keywords.m4 \ + $(top_srcdir)/m4/ac_cxx_math_absint_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_math_fn_in_namespace_std.m4 \ + $(top_srcdir)/m4/ac_cxx_member_constants.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_member_templates_outside_class.m4 \ + $(top_srcdir)/m4/ac_cxx_mutable.m4 \ + $(top_srcdir)/m4/ac_cxx_namespaces.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict.m4 \ + $(top_srcdir)/m4/ac_cxx_nceg_restrict_egcs.m4 \ + $(top_srcdir)/m4/ac_cxx_old_for_scoping.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_ordering.m4 \ + $(top_srcdir)/m4/ac_cxx_partial_specialization.m4 \ + $(top_srcdir)/m4/ac_cxx_reinterpret_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_rtti.m4 \ + $(top_srcdir)/m4/ac_cxx_standard_library.m4 \ + $(top_srcdir)/m4/ac_cxx_static_cast.m4 \ + $(top_srcdir)/m4/ac_cxx_template_keyword_qualifier.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_base_class.m4 \ + $(top_srcdir)/m4/ac_cxx_template_qualified_return_type.m4 \ + $(top_srcdir)/m4/ac_cxx_template_scoped_argument_matching.m4 \ + $(top_srcdir)/m4/ac_cxx_templates.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_as_template_arguments.m4 \ + $(top_srcdir)/m4/ac_cxx_templates_features.m4 \ + $(top_srcdir)/m4/ac_cxx_type_casts.m4 \ + $(top_srcdir)/m4/ac_cxx_type_promotion.m4 \ + $(top_srcdir)/m4/ac_cxx_typename.m4 \ + $(top_srcdir)/m4/ac_cxx_use_numtrait.m4 \ + $(top_srcdir)/m4/ac_env.m4 \ + $(top_srcdir)/m4/ac_fortran_flags_preset.m4 \ + $(top_srcdir)/m4/ac_info.m4 $(top_srcdir)/m4/ac_lib_blas.m4 \ + $(top_srcdir)/m4/ac_prog_doxygen.m4 \ + $(top_srcdir)/m4/ax_boost_base.m4 \ + $(top_srcdir)/m4/ax_boost_serialization.m4 \ + $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ + $(top_srcdir)/m4/ax_dirname.m4 \ + $(top_srcdir)/m4/ax_prefix_config_h.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(array_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/blitz/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(arraydir)" +HEADERS = $(array_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AR_FLAGS = @AR_FLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLASLIB = @BLASLIB@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_SERIALIZATION_LIB = @BOOST_SERIALIZATION_LIB@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COMPILER_SPECIFIC_HEADER = @COMPILER_SPECIFIC_HEADER@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFCFLAG = @CXXFCFLAG@ +CXXFFLAGS = @CXXFFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ +CXX_LIBS = @CXX_LIBS@ +CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ +CXX_PROFIL_FLAGS = @CXX_PROFIL_FLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +F77_OPTIMIZE_FLAGS = @F77_OPTIMIZE_FLAGS@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FC_OPTIMIZE_FLAGS = @FC_OPTIMIZE_FLAGS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS = @OS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TEXI2HTML = @TEXI2HTML@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_libdir = @pkgconfig_libdir@ +pkgconfig_libfile = @pkgconfig_libfile@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +valgrind = @valgrind@ +arraydir = $(includedir)/blitz/array +generatedir = ../generate +genheaders = stencil-classes.cc +#bops.cc uops.cc +array_HEADERS = asexpr.h asexpr.cc cartesian.h cgsolve.h complex.cc \ +convolve.cc convolve.h cycle.cc domain.h et.h expr.h expr.cc \ +fastiter.h funcs.h functorExpr.h geometry.h indirect.h interlace.cc \ +io.cc iter.h map.h methods.cc misc.cc multi.h newet-macros.h newet.h \ +ops.cc ops.h reduce.cc reduce.h resize.cc shape.h slice.h slicing.cc \ +stencil-et.h stencil-et-macros.h stencilops.h stencils.cc stencils.h \ +storage.h where.h zip.h $(genheaders) + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign blitz/array/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign blitz/array/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-arrayHEADERS: $(array_HEADERS) + @$(NORMAL_INSTALL) + @list='$(array_HEADERS)'; test -n "$(arraydir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(arraydir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(arraydir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(arraydir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(arraydir)" || exit $$?; \ + done + +uninstall-arrayHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(array_HEADERS)'; test -n "$(arraydir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(arraydir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(arraydir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-arrayHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-arrayHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-local cscopelist-am ctags ctags-am \ + distclean distclean-generic distclean-libtool distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-arrayHEADERS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-arrayHEADERS + +.PRECIOUS: Makefile + + +clean-local: + -rm -rf $(genheaders) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/xios_2311_src/extern/blitz/blitz/array/asexpr.cc b/xios_2311_src/extern/blitz/blitz/array/asexpr.cc new file mode 100644 index 0000000000000000000000000000000000000000..be267ca18a92eb6b387e9532cb53a5178d6e9de8 --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/asexpr.cc @@ -0,0 +1,91 @@ +// -*- C++ -*- +/*************************************************************************** + * blitz/array/asexpr.h Declaration of the asExpr helper functions + * + * $Id$ + * + * Copyright (C) 1997-2011 Todd Veldhuizen + * + * This file is a part of Blitz. + * + * Blitz is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Blitz is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Blitz. If not, see . + * + * Suggestions: blitz-devel@lists.sourceforge.net + * Bugs: blitz-support@lists.sourceforge.net + * + * For more information, please see the Blitz++ Home Page: + * https://sourceforge.net/projects/blitz/ + * + ***************************************************************************/ +#ifndef BZ_ASEXPR_CC +#define BZ_ASEXPR_CC + +#include +#include +#include +#include +#include + +// implementations of asexpr functions. + +BZ_NAMESPACE(blitz) + +// default to scalar +template +_bz_typename asExpr::T_expr asExpr::getExpr(const T& x) +{ return T_expr(x); } + +// expression template term just returns itself +template +const _bz_typename asExpr<_bz_ArrayExpr >::T_expr& +asExpr<_bz_ArrayExpr >::getExpr(const T_expr& x) +{ return x; } + +// array operand returns iterator +template +_bz_typename asExpr >::T_expr +asExpr >::getExpr(const Array& x) +{ return x.beginFast(); } + +// tinyvector operand returns iterator +template +_bz_typename asExpr >::T_expr +asExpr >::getExpr(const TinyVector& x) +{ return x.beginFast(); } + +// tinymatrix operands returns iterator +template +_bz_typename asExpr >::T_expr +asExpr >::getExpr(const TinyMatrix& x) +{ return x.beginFast(); } + +// Index placeholder returns itself +template +_bz_typename asExpr >::T_expr +asExpr >::getExpr(const T_expr& x) + { return x; } + +// the levi-civita symbol +inline asExpr::T_expr +asExpr::getExpr(T_expr x) +{ return T_expr(x); } + +// Range +inline asExpr::T_expr +asExpr::getExpr(T_expr x) +{ return T_expr(x); } + +BZ_NAMESPACE_END + +#endif diff --git a/xios_2311_src/extern/blitz/blitz/array/asexpr.h b/xios_2311_src/extern/blitz/blitz/array/asexpr.h new file mode 100644 index 0000000000000000000000000000000000000000..b0c3c049f7fd975dc20eacf431f67c0346bfc17e --- /dev/null +++ b/xios_2311_src/extern/blitz/blitz/array/asexpr.h @@ -0,0 +1,304 @@ +// -*- C++ -*- +/*************************************************************************** + * blitz/array/asexpr.h Declaration of the asExpr helper functions + * + * $Id$ + * + * Copyright (C) 1997-2011 Todd Veldhuizen + * + * This file is a part of Blitz. + * + * Blitz is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Blitz is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Blitz. If not, see . + * + * Suggestions: blitz-devel@lists.sourceforge.net + * Bugs: blitz-support@lists.sourceforge.net + * + * For more information, please see the Blitz++ Home Page: + * https://sourceforge.net/projects/blitz/ + * + ***************************************************************************/ +#ifndef BZ_ASEXPR_H +#define BZ_ASEXPR_H + +#include +#include + +BZ_NAMESPACE(blitz) + +// The traits class asExpr converts arbitrary things to +// expression templatable operands. + +// Default to scalar. +template +struct asExpr { + typedef _bz_ArrayExpr<_bz_ArrayExprConstant > T_expr; + static T_expr getExpr(const T& x); +}; + +// Already an expression template term +template +struct asExpr<_bz_ArrayExpr > { + typedef _bz_ArrayExpr T_expr; + static const T_expr& getExpr(const T_expr& x); +}; + +// Specialization of asExpr for array operands +// why doesn't it wrap iterators in an ArrayExpr? +template +struct asExpr > { + //typedef FastArrayIterator T_expr; + typedef _bz_ArrayExpr > T_expr; + static T_expr getExpr(const Array& x); +}; + +// Specialization of asExpr for tinyvector operands +template +struct asExpr > { + typedef _bz_ArrayExpr > T_expr; + static T_expr getExpr(const TinyVector& x); +}; + +// Specialization of asExpr for tinymatrix operands +template +struct asExpr > { + typedef _bz_ArrayExpr > T_expr; + static T_expr getExpr(const TinyMatrix& x); +}; + +// Index placeholder +template +struct asExpr > { + // typedef _bz_ArrayExpr > T_expr; + typedef _bz_ArrayExpr > T_expr; + static T_expr getExpr(const T_expr& x); +}; + +// the levi-civita symbol +template <> +struct asExpr { + typedef _bz_ArrayExpr T_expr; + static T_expr getExpr(T_expr x); +}; + +// Range +template <> +struct asExpr { + typedef _bz_ArrayExpr T_expr; + static T_expr getExpr(T_expr x); +}; + + +// traits class that transforms ETBase subclasses into the +// ET<>-wrapped superclass and corresponding expression, but unlike +// the asExpr class it leaves POD types alone. This is necessary so +// operators on multicomponent arrays can resolve properly. +template +struct asET { + typedef T T_wrapped; + typedef T T_expr; +}; +template +struct asET > { + typedef ETBase::T_expr> T_wrapped; + typedef typename asExpr::T_expr T_expr; +}; +template +struct asET > { + typedef ETBase >::T_expr> T_wrapped; + typedef typename asExpr >::T_expr T_expr; +}; +template +struct asET > { + typedef ETBase >::T_expr> T_wrapped; + typedef typename asExpr >::T_expr T_expr; +}; +template +struct asET > { + typedef ETBase >::T_expr> T_wrapped; + typedef typename asExpr >::T_expr T_expr; +}; + +// traits class that unwraps an ETBase type, otherwise leaves it untouched. +template +struct unwrapET { + typedef T T_unwrapped; +}; +template +struct unwrapET > { + typedef T T_unwrapped; +}; + +// traits classes that are used to switch between an ET type or an +// unknown type. If the supplied type T is an ET type, T_selected will +// be T_ifET, otherwise T. +template +struct selectET { + typedef T_ifnotET T_selected; +}; +template +struct selectET, T_ifnotET, T_ifET> { + typedef ETBase T_selected; +}; + +// for binary exprs, it is more complicated. if T1 or T2 are an ET, +// T_ifET is selected, otherwise T_ifnotET. +template +struct selectET2 { + typedef T_ifnotET T_selected; +}; +template +struct selectET2, T2, T_ifnotET, T_ifET> { + typedef ETBase T_selected; +}; +template +struct selectET2, T_ifnotET, T_ifET> { + typedef ETBase T_selected; +}; +template +struct selectET2, ETBase, T_ifnotET, T_ifET> { + typedef ETBase T_selected; +}; + + +// traits class that resolves to the ultimate numeric datatype used +// for operations on the container. This is necessary because for +// multicomponent containers we need to determine what the ultimate +// POD data type is. +template +struct opType { + typedef T T_optype; +}; +template +struct opType > { + typedef typename opType::T_optype T_optype; +}; +template +struct opType > { + typedef typename opType::T_optype T_optype; +}; +template +struct opType > { + typedef typename opType::T_optype T_optype; +}; +template +struct opType > { + typedef typename opType::T_optype T_optype; +}; + + +#ifdef BZ_HAVE_TEMPLATES_AS_TEMPLATE_ARGUMENTS + +// traits classes that provide the return type of operations + +template