[[PageOutline]] == How to extract and compile XIOS == * svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS ; cd XIOS [[BR]] * '''./make_xios --help''' (or ./make_xios -h) {{{ make_xios - installs XIOS on your architecture make_xios [options] options : [--prod] : compilation in production mode (default) [--dev] : compilation in development mode [--debug] : compilation in debug mode --arch arch : to choose target architecture [--avail] : to know available target architectures [--full] : to generate dependencies and recompile from scratch [--use_oasis] : to use Oasis coupler [--doc] : to generate Doxygen documentation (not available yet) [--job ntasks] : to use parallel compilation with ntasks [--netcdf_lib 'netcdf4_par'/'netcdf4_seq' : default netcdf4_par] : choice of netcdf library }}} * Known architectures : '''./make_xios --avail''' {{{ GCC_LINUX GCC_MACOSX IA64_PLATINE PW6_VARGAS X64_CURIE X64_HORUS X64_TITANE X64_TITANE_GCC X64_TITANE_VAMPIR X86_LOCGNU_FEDORA X86_LOCINTEL_FEDORA XT6_LYNX }}} * Compilation * On an known architecture. For example : '''./make_xios --arch X64_CURIE''' * On an new architecture. You have to create your "arch_NEW_ARCH.fcm" and "arch_NEW_ARCH.path" files[[BR]] * Choice of compilation mode. As explained in the "help", there are three compilation modes : * [--prod] : compilation in production mode (default) * [--dev] : compilation in development mode * [--debug] : compilation in debug mode For example : '''./make_xios --dev --arch PW6_VARGAS''' * Use of "arch*.env" file. "arch*.env" file is an optionnal file (used only if it exists) which allows to define a compilation evironment in order to compile XIOS server. For example : cat arch-X64_TITANE_GCC.env {{{ module unload bullxmpi module load openmpi/1.4.2_gnu module unload intel module load gcc export HDF5_INC_DIR=$WORKDIR/hdf5/include export HDF5_LIB_DIR=$WORKDIR/hdf5_gnu/lib export NETCDF_INC_DIR=$WORKDIR/netcdf4/include export NETCDF_LIB_DIR=$WORKDIR/netcdf4_gnu/lib }}} * Use of netcdf library. It is possible to use netcdf in parallel mode or sequential mode : * --netcdf_lib netcdf4_seq : only the multiple_file writing mode is available. * --netcdf_lib netcdf4_par : both one_file mode and mutliple_file mode are available. == How to run XIOS test == The compilation is ok. You have now two executables files in XIOS/bin directory : * test_client.exe : a test client executable * xios_server.exe : server executable '''test_client''' allows to test XIOS server functionalities : http://forge.ipsl.jussieu.fr/ioserver/browser/XIOS/trunk/src/test/test_client.f90 You can play with XIOS using test_client.exe (and xios_server.exe) to run on attached mode (or server mode i.e MPMD mode) using '''XIOS/inputs/iodef.xml''' configuration file. * Attached mode : {{{ false }}} The xios library is linked to client test. The server executable is not used. The asynchroneous writing mode is not activated. The parallel writing mode (i.e one_file ) is available. For example on curie machine : ccc_msub Job with Job : {{{ #!/usr/bin/ksh #MSUB -r XIOS # nom de la requete #MSUB -o Script_Output_XIOS.000001 # nom du fichier de sortie #MSUB -e Script_Output_XIOS.000001 # nom du fichier de sortie #MSUB -eo #MSUB -n 10 # reservation des processeurs pour le job #MSUB -T 1800 # Limite temps (en secondes) #MSUB -q standard #MSUB -Q test #MSUB -p gen2211 cd /ccc/scratch/cont003/dsm/p86caub/XIOS/bin /usr/bin/time ccc_mprun ./test_client.exe }}} * Server mode {{{ true }}} The server executable is used. The asynchroneous writing mode is activated. The parallel writing mode (i.e one_file ) is available. For example on vargas machine : llsubmit Job with Job : {{{ # Nom de la requete # @ job_name = Jobname # @ job_type = parallel # Fichier de sortie standard # @ output = Script_Output_000001 # Fichier de sortie erreur (le meme) # @ error = Script_Output_000001 # Nombre de processus demandes # @ total_tasks = 10 # Temps CPU max. par processus MPI hh:mm:ss # @ wall_clock_limit = 0:10:00 # Memoire max. utilisee par processus # @ data_limit = 3.2gb # Memoire stack a etendre si besoin ## @ stack_limit = 0.5gb,0.5gb # Pas d OpenMP # @ resources = ConsumableCpus(1) # Fin de l entete # @ queue # @ class = debug cd /workgpfs/rech/ces/rces061/XIOS/bin poe -pgmmodel MPMD -cmdfile ./run_file }}} with run_file ( this configuration will launch test_client on 8 processes and xios server on 2 processes ): {{{ ./test_client.exe ./test_client.exe ./test_client.exe ./test_client.exe ./test_client.exe ./test_client.exe ./test_client.exe ./test_client.exe ./xios_server.exe ./xios_server.exe }}} * Multiple_file mode {{{ }}} Each client process (or server process) in attached mode (or server mode) writes its output file. Mode available with both "netcdf4_par" and "netcdf4_seq" as compilation options. * One_file mode {{{ }}} Parallel writing from each client process (or server process) in attached mode (or server mode) to one file. Mode available only with "netcdf4_par" as complation option. == Documentation policy == The documentation is compliant with DOXYGEN syntax and all html documentations are automatically generated in directory doc There are some general points which we should follow: * The language of documentation is English * Function declarations are documented with brief (one-line, one-sentence) comments and only brief comments. * Function definitions (inline or not) are documented with detailed comments. Below are instructions to document codes in details 1. File Here is the structure of the comment one developer should write to document a file (header or source). This part of comment must be at the beginning of a file, before anything else. {{{ /*! \file context.hpp \author Yann Meurdesoif \date 25 jan 2011 \since 3 mar 2007 \brief comment. next part of detailed comment */ }}} * The macro \date indicates file creation date * The macro \since specifies the latest modification * The macro \brief provides overview information of file In case of multiple authors, the macro \authors should be used {{{ /*! \file context.hpp \authors Yann Meurdesoif, Arnaud Caubel \date 25 jan 2011 \since 3 mar 2007 \brief comment. next part of detailed comment */ }}} 2. Class, typedef, enum and struct A class documentation is written just before the class declaration/definition in theā€© header file with the following structure: {{{ /*! \class A \brief comment associated to A next part of detailed comment associated to A */ class A { ... }; }}} For typedef, enum and struct, instead of the macro \class, the corresponding macros \typedef, \enum and \struct should be used. 3. Attributes Simply, attributes should be commented with one of these syntaxes {{{ class A { public : //! comment associated to i int i; double j; //!< comment associated to j /*! comment associated to k */ B k; ... }}} 4. Functions and constructors Function declaration is documented with a brief comment, and only a brief comment. All of the following syntaxes, shown here for in-class function but also valid for external ones, can be used {{{ class A { public : ... //! brief comment associated to declaration of f void f(); /*! brief comment associated to declaration of g */ void g(); void h(); //!< comment associated to declaration of h }; }}} Functions definitions (inline or not) are documented with detailed comments. If the declaration has not been commented first, the first line of the comment will be the brief comment. The below syntaxes are for inline operations but valid for the other types {{{ class A { public : B b; ... //! comment associated to definition of f void f() { ... } void g() //! comment associated to definition of g { ... } A() //! comment associated to definition of composite constructor : B() { ... } /*! comment associated to definition of h */ void h() { ... } }; }}} 5. Arguments Only in the case of a function definition, arguments and return value might be documented with following convention {{{ /*! comment of function f */ int f (double d, //!< comment of d int i //!< comment of i ) { ... } /*! comment of function g \param [in] d comment of d \param [in/out] i comment of i \return comment of return value */ int g (double d, int i) { ... } }}}